基于PWM控制的LED灯光系统设计.docx

上传人:b****3 文档编号:3896505 上传时间:2022-11-26 格式:DOCX 页数:27 大小:613.70KB
下载 相关 举报
基于PWM控制的LED灯光系统设计.docx_第1页
第1页 / 共27页
基于PWM控制的LED灯光系统设计.docx_第2页
第2页 / 共27页
基于PWM控制的LED灯光系统设计.docx_第3页
第3页 / 共27页
基于PWM控制的LED灯光系统设计.docx_第4页
第4页 / 共27页
基于PWM控制的LED灯光系统设计.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

基于PWM控制的LED灯光系统设计.docx

《基于PWM控制的LED灯光系统设计.docx》由会员分享,可在线阅读,更多相关《基于PWM控制的LED灯光系统设计.docx(27页珍藏版)》请在冰豆网上搜索。

基于PWM控制的LED灯光系统设计.docx

基于PWM控制的LED灯光系统设计

基于PWM控制的LED灯光系统设计

 

【摘要】本设计介绍了一种以STC单片机为核心的LED灯光控制系统,主要采用PWM技术,及UART通讯技术。

PWM是一种非常成熟的技术,目前已经广泛应用于调速,调光系统,而UART通讯是单片机最为常用的一种通讯方式。

详细介绍单片机控制电路,通讯布线,PWM电路,及PWM控制设计,给出了系统软件设计方案。

【关键词】PWM;STC单片机;UART通讯

 一、引言

目前许多的灯光控制系统只是简单的实现控制灯的亮暗顺序及亮暗的时间,这类简单的控制方式广泛地应用在灯光广告中,电路板一般采用控制核心电路加上口线扩展电路及输出驱动电路组成,但是这类电路在组成大矩阵的LED显示时,存在布线复杂等问题,在出现故障时维护比较复杂,需要先查布线线路上是否存在故障,然后再查电路驱动板是否存在问题,一旦出现问题需更换布线线路或驱动电路板,维护费用较高。

本设计提出基于PWM控制的LED灯光系统设计,系统采用单片机STC12C2052为核心的PWM控制电路系统,采用UART通讯方式,布线简单,使用数据间隔检测方式接收UART数据包,适应不同波特率下的应用,采用数据间隔接收数据可以可靠地接收到一个完整的数据包,不管数据包是否有数据头,解决了协议不同的麻烦,定义的数据比较短,数据接受更为可靠。

二、电路原理及特点

(一)电路系统框图

本设计的灯光系统框图如下图2-1:

 

图2-1 PWM控制LED系统的系统框图

本设计的灯光系统主要由1个主控制和9个从控制板(1个主控制板最多可控制256个从控制板)及开关电源组成。

供电方式采用由开关直流电源+12V集中供电。

主控制板实现对各个从控制板的PWM输出值控制、控制灯的亮暗次序及时间控制,主控制板与从控制板的连线方式采用通用的UART通讯方式。

从控制板主要实现并执行主控制发送过来的PWM值,由自身所带的PWM输出管脚输出控制值来驱动LED,进行灯的亮度控制及亮暗控制。

(二)电路系统原理图

图2-2电路系统原理图

本设计通过开关电源把市电220V交流电转变为12V的直流电源集中供电,然后从接口端子(J1)输入。

因为考虑到大工程时LED显示矩阵越大,功耗固定情况下,电压越小,电流就越大,布线的线就要求越粗,不利于整体布线,而且+5V电压很小,抗干扰能力很差。

因此在每个控制板上加上独立的电源电路有利于开关电源输出线路的布线可选择细的线,而且经过二次稳压后的+5V电源更加稳定,所以每个控制板都由电源电路和主控制电路组成。

控制电路采用单片机STC12C2052作为控制核心。

主控制板与从控制板连线即主控制板的TXD发送脚接到从控制板的RXD脚。

(三)电路组成及其原理

图2-3电源电路原理图

1.电源电路

图2-3为灯光系统的电源电路原理图。

电源电路图主要由以下几个部分组成:

a.DC直流电源输入接口端子(J1),主要实现+12V直流电源的输入连接[1]。

b.二极管IN4148(D1)作用为直流防逆向。

c.电解电容E1和E2使用在电源低频干扰滤波。

瓷片电容C1和C2使用在电压较高频段的干扰滤波。

d.三端稳压集成芯片7805,提供+5V的电源。

电路工作过程如下:

从J1电源输入接口端输入+12V直流电压,在直流电源输入的正负端没有接错情况下,电源电压可以经过防逆二极管后电源电压降为8.3V~14.3V,通过输入滤波电容E1和C1滤除电源输入的干扰信号后,经三端稳压管7805稳压,E2和C2输出滤波,输出一个稳定的+5V直流电源。

图2-4主控制电路原理图

2.主控制电路

图2-4为主控制电路原理图,主要有以下几个部分构成:

a.STC12C2052单片机有以下特点:

指令与8051完全兼容,但是比一般的单片机体积更小、价格更便宜,速度更快。

宽电压工作范围(3.5V~5V),带两路的PWM管脚及RC震荡器,具有2K字节程序存储空间,同时芯片内部集成硬件看门狗电路可以极大的提高程序运行的稳定性。

具有硬件SPI接口方便与各种SPI器件的接口,程序调试可以通过ISP在线编程方式实现。

每一个I/O口都可以可设置四重模式口线的驱动能力均可达到20MA,同时又可以在超低功耗工作下工作。

b.晶振电路由Y1,C3,C4构成,Y1晶振采用11.0592MHZ,使软件波特率计算误差小,C3,C4起谐振的作用。

复位电路采用简单的RC复位电路,主要由E3和R2组成。

STC12C2052的复位管脚在高电平时单片机产生复位。

C5是去耦吸收电容,吸收单片机芯片工作时产生的尖峰电压[2]。

c.PWM输出LED电路由R2和D2构成,将STC12C2052的P3.7管脚设置为PWM工作方式,通过R2(1K)限流电阻后驱动D2(LED)(P3.7输出为低电平时候LED灯亮)。

d.地址设置电路主要由拨码开关S1组成,实现从机的地址设置。

单片机开机后程序自动从P1口读入设置值作为从机的通讯地址,地址采用二机制编码方式,P1口有八根口线,可以最多产生256个地址。

本设计只用到P1.4、P1.5、P1.6、P1.7管脚设置地址(最多产生16个从机地址)其中P1.4脚为最低位,P1.7脚为最高位。

设置2到10号从机地址分别为02H,03H,04H,05H,06H...0AH。

三、设计过程使用到主要技术

(一)UART技术

一般通讯中可以采用同步通讯和异步通讯两种方式[3],本设计UART通讯使用异步通讯方式。

为了进行异步通讯首先通讯双方的通讯速度(通讯波特率)要相同,这样接收到的数据才能正确,不同波特率接收到的数据将会产生偏移,致使数据接受错误。

1.波特率设置

由于本设计的LED硬件系统对速度的要求并不高,为了与51系列单片机的速度相兼容,便于波特率及其他速度计算,也将STC12C2052的工作频率也设置为12分频。

通信波特率的设置为4800BPS,4800BPS进行测试过这样的波特率在10m下可以比较可靠地进行数据接收.在更高的速度下,接收数据的错误率将会增加。

用定时器T1的模式2来产生波特率应通过下式来计算TH1的装入值:

波特率Bps=(2^SMOD/32)*(Fosc/12*(256-TH1))(3-1)

Bps表示波特率,Fosc表示外接晶振频率[4]。

2.初始化串口和T0中断流程

 

图3-1初始化串口和T0中断

a.STC12C2052的P1口中读出从机地址(ReadMy_ADDR)。

b.T0为最高优先级中断(IP=0X22)。

由于T0是作为数据包的间隔定时检测中使用,在程序中必须保证T0中断的准确性,所以设置为最高优先级。

c.设置T0为工作模式2,设置T0定时为50US(TH0=50US,TL0=50US)。

d.T1工作在模式2,这种方式可实现每隔预定时间发出控制信号,特别适合于串行口波特率发生器的使用[5]。

e.清除T0中断标志(TF0=0)。

f.开启T0中断(EF0=1)。

g.开启T0定时器(TR0=1)。

h.开启中断(EA=1)。

i.PCON=0,波特率不倍增,正常工作方式。

j.SCON设为50,工作在模式1下,10位UART。

数据位为8位,一个起始位,一个停止位[6]。

REN为1,允许接受数据。

k.允许接受中断。

l.开启串行口中断。

(二)数据间隔传输

 

图3-2数据间隔传输流程

在本设计的UART通讯中采用了数据间隔传输。

设计中要传输的数据包是4个字节,包括55H数据头(加了数据头增加了数据传输抗干扰能力),地址,PWM控制值,校验值。

主机发送的时候将55H数据头与地址,PWM控制值相异或产生校验值。

从机收到完整的数据包后,先判断地址是否是本机地址,然后把地址值和PWM控制值还有数据头异或再判断是否和接收到的校验值相等,如果与校验值相等正确则接收到的数据是正确,进行PWM灯控制输出.否则数据错误不进行PWM灯控制输出,在通讯中加入数据校验提高了数据通信的可靠性。

数据间隔检测,在异步通信中数据包里的字节之间间隔时间不超过一个字节传输时间,即t=1/波特率,我们用的是4800波特率,T=1/4800≈2MS,在数据传送过程中如果字节间的间隔小于2MS我们认为接收到的数据是在同一个数据包中的.当在2MS时间里没有收到下个字节的数据,我们就认为这个数据包传输完毕.这样按数据包分开数据,避免了从机在接收数据包错误导致功能出错,提高了功能实现的稳定性和可靠性.具体软件的实现办法是,将T0设置为模式2定时方式,定时的时间为50us,当接收到一个字节后,将T0的总中断次数设置为40次同时T0开启定时,每中断一次如果总中断次数大与零,则总中断次数减一直到接收到下一个字节的数据,我们取出总中断次数如果不为0(两个字节时间间隔小于2MS),我们就认为数据包还没有接收完成,需要继续检测本字节与下个字节的时间间隔.如果取出总中断次数如果为0,说明数据包接收完毕,可进行下一步的数据解析。

(三)PWM技术

1.PWM技术

脉宽调制(PWM)是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,它广泛应用在从测量、通信到功率控制与变换的许多领域中[7]。

PWM技术是一种对模拟信号电平进行数字编码的方法。

通过高分辨率计数器的使用,方波的占空比被调制用来对一个具体模拟信号的电平进行编码。

PWM信号仍然是数字的,因为在给定的任何时刻,满幅值的直流供电要么完全有(ON),要么完全无(OFF)。

电压或电流源是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

通的时候即是直流供电被加到负载上的时候,断的时候即是供电被断开的时候。

只要带宽足够,任何模拟值都可以使用PWM进行编码。

PWM技术的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。

让信号保持为数字形式可将噪声影响降到最小。

噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。

对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。

从模拟信号转向PWM可以极大地延长通信距离。

在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式[8]。

因此本设计利用PWM技术的特点进行对LED灯的电压大小控制,达到灯光亮度变化的效果。

本设计的STC12C2052中有两个PWM管脚(PWM0,PWM1),为了软件设计简单在硬件设计中只用到一个PWM0(P3.7口线),采用单片机硬件PWM输出的波形稳定,只需要改变PWM值就可以改变输出的脉冲宽度,控制幅度十分方便。

STC12C2052中PWM管脚可调脉冲宽度输出模式原理如下图3-3:

图3-3PWM可调制脉冲宽度输出模式

由于所有模块共用仅有的PCA定时器,所以他们的输出频率相同。

各个模块的输出占空比是独立变化的,与使用的捕获寄存器(EPCNL,CCAPNL)有关。

由图3-3可知,当CLSFR的值小于(EPCNL,CCAPNL)时,输出为低,当PCACLSFR的值等于或大于(EPCNL,CCPANL)时,输出为高。

当CL的值由FF变为00溢出时,(EPCNH,CCAPNH)的内容装载到(EPCNL,CCAPNL)中。

这样就可实现无干扰的更新PWM。

要使能PWM模式,模块CCAPMN寄存器的PWMN和ECOMN位必须置位[9]。

根据以上原理通过以下公式可以算出PWM电压值。

F=Fosc/12(3-2)

(VCC/256)*调制后脉宽=PWM电压值(3-3)

在公式3-2中,由于设置PCA定时器的频率为晶振的12分频,所以PWM输入的频率为Fosc/12。

在公式3-3中,由于PWM是八位的,在固定周期内可以认为把VCC分成256个等分,输出电压的幅度约为输出的PWM值乘以vcc/256。

2.LED灯控制系统中的PWM流程:

 

 

图3-4初始化PWM流程

a.设置时钟模式为Fosc/12,空闲下不计数。

COMD是PCA模式寄存器(PWM和PCA共用寄存器),当COMD的控制字CPS1、CPS0(第2、1位)同设为0时就是12分频,其中控制字CIDL(第7位)是计数器阵列空闲控制:

当CIDL=0时,空闲模式下PCA计数器继续工作,CIDL=1时,空闲模式下PCA计数器停止工作。

因此COMD=80。

b.清除中断标志和计数器溢出标志。

CCON是PCA控制寄存器,它的控制字CF(第7位)是PCA计数器阵列溢出标志,CR(第6位)是PCA计数器阵列运行控制位,该位通过软件置位,用来启动PCA计数器阵列计数。

CF,CR通过软件清零,因此CCON=0。

c.计数器值清零(CL=0,CH=0)。

d.设置PCA为PWM方式通道为PWM0,即P3.7输出。

CCAPMn代表用到PWMn管脚输出,本次设计只用到PWM0,因此我们就设置CCAPM0。

CCAPMn是PCA比较/捕获模块寄存器,其中控制字ECOMn(第6位)功能是使能比较器,当ECOMn=1时,使能比较器功能。

控制字PWMn(第1位)是脉宽调节模式,当PWMn=1时,使能CEXn脚用作脉宽调节输出,因此CCAPM0=42。

e.清除PWM输出。

f.开PCA中断(EPCA_LVD=1)[10]。

g.EA=1,开中断。

h.打开PCA计数器,CR=1(Fosc/12输入),结束。

四、实物制作调试和测试数据分析

实际制作实物时,理论上认为电源是近距离输入,干扰会小,省去了三端稳压管7805输入端的电容E1和C1。

输出端的电容E2改用容量20uF的电解电容,理论上一样能达到预期的效果。

在主电路中省去RC复位电路,直接采用ST12C2052内部集成自带的RC复位电路。

LED灯接的1K欧姆限流电阻改为470欧姆的电阻,目的是为了增加LED的亮度。

后来考虑到增加UART通信的稳定性,增加了驱动三极管,利用三极管共集电极的特性,降低输出阻抗,提高输入阻抗,使主机发送数据的电流增大,从机接受数据的电流减小,从而使主机能驱动更多的从机。

实物焊接好后,开始下载芯片程序。

用STC单片机ISP下载器,通过软件STC-ISP.EXE下载主机程序到主机芯片STC12C2052中,下载从机程序到从机芯片STC12C2052中,然后把芯片插入底座中。

插上电源后,发现各从机LED灯根本没有输出。

经过仔细分析最有可能产生的原因是由于通讯不正常各从机没有接收到主机发送的PWM控制命令,所以从机没有执行PWM控制输出。

使用示波器查看主控制板的TXD输出信号脚,发现通讯输出信号正常,但是通讯的波特率较慢。

于是经过一段时间的调试,发现问题是在设定STC-ISP.EXE软件时,时钟源必须设定为外部晶体或时钟。

起初是设为内部RC震荡器,由于内部RC震荡器的误差较大并不适合在通讯中使用,导致了芯片无法正常工作。

程序下载成功后,插上电源,LED灯开始了循环变化。

第一步从一号灯开始到十号灯逐个亮起,灯全部亮3秒后,接着灯全灭,如此循环5次。

第二步从一号灯开始直到十号灯,每个灯的亮度都以渐亮形式变化,每个灯设定了四种亮度,后一个灯比前一个灯快一个步长的亮度,整体给人灯光波浪型流动的感觉,循环几次后全部灯亮起,一会后灯全灭。

第三部从十号灯开始到一号灯逐个亮起,灯全部亮起3秒后,接着灯全灭,如此循环5次。

第四部从十号灯开始直到一号灯每个灯的亮度都以渐亮形式变化,每个灯设定了四种亮度,后一个灯比前一个灯快一个步长的亮度,循环几次后全部灯亮起,一会后灯全灭。

测试后第一部和第三步循环出现问题,不是每个灯都亮,有的时候循环开始,某些灯就亮了,或者某些灯被跳过没有亮起。

第二和第四步没有了渐暗的显示。

表4-1测试结果记录1测试

第几部循环

循环次数

第1步

第3步

1

循环开始前5号灯先亮

循环开始前4号灯先亮而循环开始后10号灯不亮

2

正常

循环开始前5号灯先亮而循环开始后6号灯不亮

3

循环开始前3号灯先亮而循环开始后9号灯不亮

正常

4

循环开始前9号灯先亮而循环开始后7号灯先亮

循环开始前9号灯和10号灯先亮

5

循环开始后6号灯不亮

正常

 

表4-2测试结果记录2

第几部循环

第2步

第4步

测试结果

每个灯以渐亮形式变化,后一号灯比前一号灯快一个步长,整体给人水流动的感觉。

没有预期的每个灯渐暗的显示。

每个灯以渐亮形式变化,前一号灯比后一号灯快一个步长,整体给人水流动的感觉。

没有预期的每个灯渐暗的显示。

经分析,出现表4-1和表4-2结果的可能原因有:

a.设计时认为电源是近距离输入,干扰会小很多,就省掉了三端稳压管7805输入端的滤波,使电源输出信号不够稳定,又由于采用UART通讯方式TTL电平抗干扰较差,所以造成从机接收数据时候受到干扰。

b.为了提高UART的稳定性,增加了驱动三极管后,出现了其他的问题。

在宏晶科技的网站里有建议在主控制板后加一个密彻斯特反向驱动器74HC14,在从机接收端再加一个密彻斯特反向驱动器74HC14。

c.软件部分的问题,当初设置波特率为9600BPS,出现从机很难接受到信号的现象,9600BPS以上的波特率就使数据传输更加不稳定。

理论上波特率设置为4800BPS比较稳定,但还是出现从机接受数据不稳定的问题。

应该设置比4800BPS更低的波特率。

虽然有问题还没得到解决,但从调试过程中已经成功实现PWM的LED灯的亮度控制。

五、结束语

本设计在程序上已经可以成功完成PWM的灯光亮度的控制,由STC12C2052控制的PWM的硬件调幅技术实现简单,调节灵活。

从硬件设计来看,硬件设计比较简单,主要是软件PWM控制和UART通讯。

同时硬件设计还存在一些不足之处,由于UART采用驱动发送,发送距离有所增加,但是不适于用超长距离的通讯控制。

与通用的灯光系统相比新的灯光系统控制上多了PWM调节灯的亮度输出,可以控制灯的渐明渐暗过程,布线与维护简单,只在某个灯损坏时候,只需要更换相应的从控制板将更换上去的从机地址设置为损坏的从机地址就可以正常工作,同时布线只需要几根线,更换较为简单。

但是相对于原来的灯光系统还存在一个主要的问题,由于每一个从机都需要有一个STC12C2052控制接受数据,造成在比较大的阵列LED中使用成本较高的问题,对于这个问题,可以重新更改软件和硬件,使得STC单片机的PWM管脚都全部使用上去,就STC12C2052单片机有两路的PWM输出如果将两路的PWM都使用上,那么一个从机板上就可以控制两个LED灯的亮度调节从而节约一半的硬件成本。

 

参考文献

[1]郝文化.ProtelDXP电路原理图与PCB设计[M].北京:

机械工业出版社,2004,127-301.

[2]谢嘉奎.电子线路(第五版)[M].北京:

高等教育出版社,2001,105-130.

[3]何立民.MCS-51单片机应用系统设计[M].北京:

北京航空航天大学出版社,1995,45-66.

[4]何立民.单片机中级教程:

原理与应用[M].北京:

北京航空航天大学出版社,2002,77-95.

[5]http:

//www.go-

[6]

[7]

[8]

[9]STC12C5410AD系列单片机器件手册[EB/OL].宏晶科技,2007,75-82.

[10]龚运新.单片机C语言开发技术[M].北京:

清华大学出版社,2006,100-123.

LEDLightingSystemDesignBasedontheControlofPWM

ElectronicandInformationEngineeringDepartmentMajorofElectronicInformationEngineering

118542004025XiaoyiWangInstructorYinghongLiu

【Abstract】ThisdesignintroducesonekindofLEDlightingcontrolsystemasthecoretoSTCsinglechipmicrocomputer.ItmainlyusesPWMtechnologyandUARTcommunicationtechnology.PWMisonekindofverymaturetechnology,whichnowiswidelyusedinSpeed,dimmingsystem.UARTcommunicationisonekindofcommunicationMeanswhichisusedthemostcommonly.Thedesignintroducesthesinglechipcontrolcircuits,communicationscabling,PWMcircuit,andPWMcontroldesignindetail,anditalsogivestheProgrammeofsystemsoftware.

【Keywords】PWM,STCsinglechipmicrocomputer,UARTcommunication.

 

附件一、主控制程序

#include"..\..\pwm\include\upwm.h"

#include"..\..\Public\include\public.h"

main()

{

PcaPwmInit();

SetMyBause();

InitUart();

while

(1)

{

#ifdefKONGCONTRLMAIN

Main_PullContrl();

#endif

#ifdefKONGCONTRLSLAVER

{

if(GetUartData()==0)

{

PwmOut(UartReceviceBuf[2]);

Delayms(20);

}

}

#endif

}

}

附件二、公共部分程序

#include

#include"../../UserDef.h"

#ifdefUSE_PUBLIC_8BITCRC//8位CRC计算程序

unsignedcharCrcCmp(unsignedchar*buf,unsignedcharlen)

{

unsignedcharcrcount=0,i;

for(i=0;i

crcount=crcount^buf[i];

returncrcount;

}

#endif

#ifdefUSE_PUBLIC_DELAY

voidDelayms(unsignedinttime)//延时函数

{

unsignedintdataj;

unsignedintdatai;

for(i=0;i

for

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 建筑土木

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1