LED灯光系统设计方法

电源设计应用

439人已加入

描述

  LED作为显示器件,由于其发光效率高、使用寿命长、易于控制等优点已经日益被更多的领域所使用。尤其在2005年开始被大量用于城市/舞台灯光系统中。本文主要介绍LED灯光的种类、LED灯光控制专用芯片介绍,硬件设计思路以及软件设计思路。

  名词解释

  彩色像点:为了让LED灯光呈现彩色显示,需要由至少2个以上的不同颜色LED组成一个像素点。红绿蓝LED搭配根据亮度和灰度级别的需求可以有多种搭配方式,如:

  a) 1个红色LED+1个绿色LED+1个蓝色LED ,3个LED显示256级灰度彩色。

  b) 2个红色LED+1个绿色LED+1个蓝色LED,4个LED组成

  RGB:是指红色、绿色、蓝色3种LED。

  LPD6803:是“拓彩科技”专门为LED灯光系统设计的驱动芯片,内置SUPER-PWM,可以产生三路恒流驱动和灰度调制输出。

  LED灯光的种类

  点光源 

  技术特点:应用LED彩色屏的显示原理,将其像素放大降低整体造价成本。每个模块为一个彩色像点(RGB)。

  应用环境:酒吧、KTV、舞台、商场、展厅。作为音乐韵律显示,背景墙装饰等。

  LED彩虹管

  技术特点:每条灯管由多个彩色像点(RGB)组成,每个像素点可独立产生256级颜色的变化。应用环境:立交桥,河道护栏,建筑外墙等不同场所的装饰照明。

  LED地板砖

  技术特点:每个模块由多个彩色像素点(RGB)组成,可以独立控制每个像素点。应用环境:酒吧、KTV、舞台。作为地板或者墙壁的装饰照明。

  LED灯光控制专用芯片介绍

  LPD6803是专门用于LED灯光驱动芯片,控制简单。 

led

  功能描述:

  a. 内置振荡器,扫描不需要依靠控制板提供扫描时钟。

  b. 2根控制线,控制和布线简单。

  c. 数据时钟最高可达到25MHz,可以拥有更多的级联输出。

  LED灯光控制系统硬件设计思路

  LED灯光控制系统主要包含像素点驱动单元和控制板设计两部分。

  1. 显示点驱动单元设计

  如何实现让像素点呈现出不同颜色,主要依靠人的视觉间歇惰性原理,利用对于每个像素点产生不同占空比实现颜色的混合。本设计案例的LED颜色显示主要依靠LPD6803自动输出3路256级灰度颜色来实现彩色显示。控制器只需要传送每个像素点的扫描占空比数据就可以了。

  下图驱动单元设计,适合于LED彩色护栏管、LED地砖应用。其中红绿蓝3色LED的个数可以是多个。单路LED级联方式可以采用串联或者并联方式实现,在设计是你需要考虑电压/电流的外接驱动方式。数据输出级联到下一个模块的输入就实现了一个系统的级联。

 led

  

如下图驱动单元设计,适合于LED彩虹管应用。一个模块的级联个数按照设计需要调整。

led

  2. 控制板设计

  

led

  该硬件只是提供给各位一个控制系统设计的参考,基本说明满足一个普通的LED灯光系统所需要的一些基本条件。根据实际系统的需要,可以选择ARM,CPLD等加快显示数据传输的速度以及USB通讯,SD卡存储方面的要求。

  硬件设计目的说明:

  U1: 使用通用的MCU51单片机,如果系统拖动像素点级联数不多以及不需要做太复杂的图象动画显示情况下。该MCU甚至于可以选择2051这样管脚少、价格低的MCU。

  JP1: 为输出符合LPD6803串行时序的接口,只用DATA、CLOCK、GND即可满足显示数据传送要求。

  U4:为SPI FLASH,用于存储节目数据。根据系统需要可以利用片选方式设计多片FLASH存储。SPI FLASH现在比较高容量可以做到4M bits。

  U6: 为通讯接口,用于于系统主机通讯控制节目播放的内容和下传节目数据。以及用于程序升级。

  3. 软件驱动设计

  以下以驱动单个像素点来说明数据传送的方式。LPD6803是一个可以自动产生128级别

  LED_SendData(BYTE Rdt, BYTE Gdt, BYTE Bdt)

  {

  ......

  SCLK = 0;

  SDO = 0;

  for(i=0;i<32;i++) {SCLK=1;SCLK=0} //送起始32bits 0

  SDO=1;SCLK=1;SCLK=0; //送起始位'1'

  //输出5位红色

  mask = 0x10;

  for(j=0;j<5;j++)

  {

  if(mask&Rdt) SDO = 1;

  else SDO = 0;

  SCLK=1;SCLK=0;

  mask>>=1;

  }

  //输出5位绿色

  mask = 0x10;

  for(j=0;j<5;j++)

  {

  if(mask&Bdt) SDO = 1;

  else SDO = 0;

  SCLK=1;SCLK=0;

  mask>>=1;

  }

  //输出5位蓝色

  mask = 0x10;

  for(j=0;j<5;j++)

  {

  if(mask&Bdt) SDO = 1;

  else SDO = 0;

  SCLK=1;SCLK=0;

  mask>>=1;

  }

  SDO=0;

  SCLK=1;SCLK=0; //补1个CLOCK,如果一次送出了n个点的数据,则需要补n个Clock.

  ......

  }

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分