灯光移位控制程序(单片机程序)
发布网友
发布时间:2022-05-05 20:27
我来回答
共2个回答
热心网友
时间:2022-06-28 01:27
摘 要:介绍了单片机实现多路灯光自动控制系统的软、硬件设计。
关键词:单片机 自动控制 可控硅 抗干扰
利用单片机丰富的软硬件资源实现对各种广告牌多路灯光自动控制,与传统的电子线路控制器相比,具有可编程、体积小、控制灵活、操作方便、控制时间可变可调等优点。
我们为呼市邮政局设计并安装了上述单片机多路灯光自动控制系统。下面就该系统的软、硬件设计作介绍。
1 系统结构及工作原理
系统整体结构如图1。
图1 系统结构
8031单片机是该系统的核心部件,其主要功能:(1)灯光控制的软件编程;(2)干扰信号的处理及复位;(3)光强及时间定时的检测及控制。
单片机的控制程序通过对光强或时间的检测,自动开启(夜间)或关闭(白天)灯光系统,每1路灯光设备与8031内存控制位相对应,单片机通过P3.0(RXD)和P3.1(TXD)多功能口,利用串行通信方式0实现不同控制代码的输出,从而完成了多路灯光设备各种变化的自动循环显示。
2 8031单片机控制系统功能分析
2.1 光强或时间定时的检测及控制
如图2所示,当8031单片机P1.4的控制开关拨到+5V时,系统的开启或关闭由光强控制。这时,当光线较强时(白天),光耦二极管电阻变小,三极管Q1导通,P1.7为低电平;当光线暗时(夜间)光耦二极管变大,三极管Q1截止,P1.7为高电平。8031单片机控制程序每隔一定时间(约5ms)采样P1.7端的状态,然后根据其高低电平选择开启或关闭相应的灯光控制代码发送。图2中与光耦二极管并联的可调电位器可以调整三极管Q1的截止导通状态,从而实现对光控的微调。
图2 光耦电路
当P1.4拨至接地状态时,8031单片机程序进入时间控制子程序,8031单片机把内部定时器0设置成日历时钟计数(其初值可以用按钮设置),当程序查询到表格内的开启或关闭初值(表格的初值可通过按钮及数码管显示来输入或修改)与单片机时钟当前值相同时,则自动发送相应的开启或关闭输出控制代码。
2.2 双向可控硅控制电路
由于负载一般为大功率器件(电压从几百伏至上千伏,电流从几安培至几十安培),因此,8031单片机工作部分与可控硅触发部分采用MOC3021双向可控硅输出型光电耦合器,图3为1路可控硅触发控制电路。
图3 可控硅触发电路
可控硅TR的门极触发电流为50mA,触发电压为2V,则最小触发电压为:
VT=R1,IGT+VGT+VTM=300×0.05+2+3=20V
对应的最小控制角α为:
其中:IGT为可控硅TR的最小触发电流,VGT为可控硅TR的最小触发电压,VTM为MOC3021输出压降(3V),Vp为交流工作电压的峰值。
在使用中发现,当感性负载时,有时会引起可控硅误触发。经分析发现,当感性负载时,由于电压上升率dv/dt较大,在阻断状态下,可控硅的PN结相当于1个电容,当突然受到正向电压、充电电流过门极PN结时,起到了触发电流的作用,造成MOC3021的输出回路可控硅误导通。为此,我们对上述电路进行了修正,如图4所示。在输出回路中加入R2和C1组成RC回路,降低dv/dt。按照MOC3021的技术指标,允许最大的电压上升率dv/dt=10V/s,结温上升时dυ/dt下降,在极端的工作条件下,dv/dt=0.8V/s。
图4 修改后的触发电路
R2、R1之和与最小触发电压与可控硅门极电流的关系为:
C1取0.2μF。
同理,在TR输出端加上RC滤波网络,从而使TR输出电压上升率下降。
2.3 单片机工作回路的干扰及解决措施
由图1可知,光耦电路利用MOC4021将输入弱信号与输出强信号进行隔离,但在实际运行时,单片机系统仍有较强的干扰信号存在,常常出现死机或程序飞跑现象。分析认为,由于输出的大电流及电压均工作在开关状态,输出高次谐波通过电源回路对8031单片机产生了较大的影响,因此,我们设计了电源滤波电路及硬件复位电路,对电路的干扰进行了有效的控制。其中,硬件复位电路如图5所示。图5中74LS123为双路可再触发单稳态多谐振荡器,通过外接阻容参数,可产生不同宽度的正负脉冲,其真值表如表1。
图5 复位电路
表1 74LS123真值表
输 入 输 出
delete A B Q Q
L X X L H
X H X L H
X X L L H
H L ^
H I H
L H
由表1及图5电路可知:由于1脚A接地,2脚B接8031单片机P1.0,正常运行时,循环程序不断从P1.0发送代码信号,使2脚不断有上升沿出现,因此,13脚保持高电平,则5脚输出低电平,保持8031RESET脚低电平的需要。当程序飞跑或死机时,2脚电位不再变化,使5脚产生一高电平脉冲,促使8031复位,重新启动。
3 系统结构特点及应用范围
该系统软硬件均采用模块化结构,1块控制板能控制16路输出,输出信号通过8031串行口RXD及TXD端经74LS164串入并出移位寄存器输出,因此,软件输出代码高达上千路信号,硬件控制板根据需要可以任意扩充,只要电源变压功率相应增大即可。该系统可广泛应用于霓红灯,多路塑料管灯及多路色灯的控制。
另外,系统具有与微机串行口RS-232的通信接口,必要时可以与微机连接,这样,多路灯光控制参数及时间控制参数在微机上可随时修改,使控制变得更加灵活。
作者单位:呼和浩特内蒙古大学电子工程系(010021)
参考文献
1 余永权.单片机应用系统的功率接*术.北京:北京航空航天大学出版社,1992;104~108
2 李树华.IBM-PC微机与发光管显示屏的连网通讯.内蒙古大学学报(自然科学版),1993;(4):441~443
3 Xicor Inc.New Proct and Applications Information for Design engineers.EDN,1994;39(25):159~160
热心网友
时间:2022-06-28 01:27
逐个控制P1端口的每个位来实现的,因此程序显得有点复杂,利用循环移位指令,采用循环程序结构进行编程。我在程序一开始就给P1口送一个数,这个数本身就让P1.0先低,其他位为高,然后延时一段时间,再让这个数据向高位移动,然后再输出至P1口,这样就实现“流水”效果啦。由于8051系列单片机的指令中只有对累加器ACC中数据左移或右移的指令,因此实际编程中我们应把需移动的数据先放到ACC中,让其移动,然后将ACC移动后的数据再转送到P1口,这样同样可以实现“流水”效果。具体编程如下所示,程序结构确实简单了很多。
ORG 0000H ;单片机上电后从0000H地址执行
AJMP START ;跳转到主程序存放地址处
ORG 0030H ;设置主程序开始地址
START:MOV SP,#60H ;设置堆栈起始地址为60H
MOV A,#0FEH ;ACC中先装入LED1亮的数据(二进制的11111110)
MOV P1,A ;将ACC的数据送P1口
MOV R0,#7 ;将数据再移动7次就完成一个8位流水过程
LOOP: RL A ;将ACC中的数据左移一位
MOV P1,A ;把ACC移动过的数据送p1口显示
ACALL DELAY ;调用延时子程序
DJNZ R0,LOOP ;没有移动够7次继续移动
AJMP START ;移动完7次后跳到开始重来,以达到循环流动效果
DELAY: ;延时子程序
MOV R0,#255 ;延时一段时间
D1: MOV R1,#255
DJNZ R1,$
DJNZ R0,D1