毕业设计论文基于单片机的led路灯模拟控制系统的设计与实现Word文档下载推荐.docx
《毕业设计论文基于单片机的led路灯模拟控制系统的设计与实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《毕业设计论文基于单片机的led路灯模拟控制系统的设计与实现Word文档下载推荐.docx(51页珍藏版)》请在冰点文库上搜索。
当系统中某一支路出现故障(如灯不亮),正常状况是LED路灯应该点亮的时候,此时判断为路灯出现故障,系统中采用以光敏检测的方法来检测LED路灯是否点亮或者灭,从而判别是否有故障。
当有故障时在支路控制器中,单片机控制蜂鸣器和发光二极管发出声光报警信号,并通过LCD显示器显示当前故障路灯的地址编号,实现故障报警显示功能。
1.3输入及显示装置
图4所示为键盘输入和液晶显示电路。
K1为菜单功能键,相对应的菜单有时间校正、设定LED灯整条支路开关,独立控制每只路灯开关时间和功率调节的调光功能;
K2为移位键;
K3为加减键;
K4为确认键。
LCD数据线与单片机P1口相连;
RS寄存器选择信号端与P2.0相连;
RW读写端与P2.1相连;
E使能端与P2.2相连。
1.4单元控制器
单元控制电路的工作是由单片机控制D/A转换器输出电压,从而控制可调恒流源驱动电路。
可调恒流源驱动电路由运放LM358、继电器、大功率管TIP41和开关管9013等组成,如图5所示。
单片机P3.0控制口输出高低电平信号控制继电器开关,给恒流源电路提供+12V电压,恒流源电路驱动LED发光。
当输出高电平,继电器导通,给恒流源电路提供+12V电压,否则相反。
单片机通过控制TLC5615D/A输出电压信号来调整恒流源的大小。
LED灯选用独立1W蓝光发光二极管,正向电压为3.0~4.0V,正向电流为350mA,D/A输出电压为0.5~2.4V,调节流过LED的电流,从而可调整1W的LED灯,输出功率在20%~100%。
经过实测,恒流源输入Vi与LED输出功率(P=UI)的关系如表1所示。
2系统软件设计
程序总流程图如图6所示。
系统启动后在没有任何按键按下的情况下显示当前日期和时间,选择路灯的工作模式。
系统默认的工作模式为检测亮暗开关模式,根据环境光线判断是否打开路灯。
当通过按键进行设定的时候,进入设定的模式,包括:
LED路灯输出功率的设定,设定范围在20%~100%;
当前日期和时间的修改和设定;
路灯工作模式的设定;
路灯故障的检测及对应单元故障的显示。
3测试结果
(1)在液晶屏幕上能够显示时钟、显示菜单。
设定、显示开关灯时间,控制整条支路(测试用早上6:
00关灯,晚上7:
OO开灯)或独立控制LED1及LED2的开灯和关灯。
(2)环境明暗变化自动开关灯的模拟测试。
当环境的光照度小于0.1lx(用手遮挡光敏电阻),自动点亮LED灯,手松开自动关闭LED灯。
(3)路灯故障报警测试。
设置LED1灯故障,系统红色发光二极管闪烁,蜂鸣器发出响声,液晶显示屏显示相应故障地址RD1;
设置LED2灯故障,声光报警相同,液晶显示屏显示相应故障地址RD2。
(4)测试出LED1,LED2灯的功率能在20%~100%范围内调节,从而实现调光和调节输出功率功能;
通过整机调试,液晶显示功率数值与实际测量LED1,LED2灯的功率(P=UI)数值误差小于等于1.8%。
4结语
详细讲述了系统设计方案,并给出了相关程序流程。
本设计模拟实际大功率LED路灯控制系统,有较强的应用价值。
可以将其设计思路和方法应用在公路LED路灯、小区LED路灯和景区亮化工程等。
应用本设计可以大幅节约能源消耗,降低成本,实现路灯亮化的智能控制。
另外,如果把本设计方案扩展加上上位机,则可以实现远程中央路灯监控系统,将具有更大的应用价值。
本设计的创新点在于详细设计了基于单片机AT89252模拟路灯控制的系统,通过对功率参数的实际测量,达到精确控制LED路灯的输出功率;
能够根据光线强弱自动开关路灯;
还能够根据控制设定定时开关路灯;
能自动检测故障路灯并显示故障位置。
多种控制方式起到节能和智能控制作用。
所设计程序已经在模拟LED路灯控制系统硬件平台上成功运行。
模拟路灯控制系统的设计
摘要
本系统以AVR低功耗单片机系列ATMEGA16L为核心组成支路控制系统,采用专用时钟芯片实现精确的时钟功能,设定并显示开关灯时间。
该控制系统能根据环境明暗变化自动开灯和关灯,以达到节能要求。
ATMEGA16L是一款高性能、低功耗的8位AVR微处理器,使系统在低功耗的状态下稳定工作。
系统采用线路简单、体积小的专用时钟芯片DS1302,DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。
使用DS1302不但使电路功耗降低,而且节省IO口资源。
采用低功耗的字符型液晶作为显示器件,显示更为直观。
使用光敏电阻来检测环境明暗的变化,光敏电阻在不同光强下电阻值会发生明显变化,单片机内部AD采集电阻值的变化量达到检测目的。
采用对射式收发一体光电传感器检测物体的运动,使用灵敏光电传感器更有效地实现在物体运动过程中路灯的自动控制,达到节能的要求。
当路灯电路出现故障时,单片机采集路灯电路采样点的电压后处理采集到的数据,实现自动报警功能。
该系统基于可靠的硬件设计和稳定的软件算法实现题目基本要求。
关键词:
ATMEGA16L功耗节能光电传感器
一、设计任务
1.1任务
设计并制作一套模拟路灯控制系统。
控制系统结构如图1所示,路灯布置如图2所示。
图1路灯控制系统示意图
图2路灯布置示意图(单位:
cm)
1.2要求
1.基本要求
(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。
(2)支路控制器应能根据环境明暗变化,自动开灯和关灯。
(3)支路控制器应能根据交通情况自动调节亮灯状态:
当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图2),灯1亮;
当物体M到达B点时,灯1灭,灯2亮;
若物体M由右至左移动时,则亮灯次序与上相反。
(4)支路控制器能分别独立控制每只路灯的开灯和关灯时间。
(5)当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。
2.发挥部分
(1)自制单元控制器中的LED灯恒流驱动电源。
(2)单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在20%~100%范围内设定并调节,调节误差≤2%。
(3)其它(性价比等)。
二、方案论证与比较
方案一:
题目要求设计一个模拟路灯控制系统,实现支路控制器对单元控制器的有效控制。
本系统采用ATMEGA16L单片机为主控芯片,采用对射式收发一体的光电传感器采集由于物体运动所产生的信号,再由支路控制器系统对信号进行处理实现对路灯的合理控制,以达到题目要求。
支路控制器的时钟采用精确的时钟芯片并由字符型液晶作为显示,利用按键设定、修改开关灯时间。
系统采用光敏电阻分压的方式感应周围环境明暗的变化,支路控制系统采集分压值经单片机处理后来控制路灯的变化。
当路灯出现故障后路灯电路中采样点的电压值会发生变化,单片机根据变化量进行相应的处理。
基于设计思路在设计过程中选择合适的元器件,使用合适的单元电路模块,更有效的达到设计要求。
方案二:
与方案一不同的是方案二选用AT89S52芯片,采用红外对管对物体的移动进行检测,时钟由单片机定时器实现。
方案比较:
与AT89S52相比,ATMEGA16L在性能上具有明显的优势,若采用红外对管则给元件的安装带来不便,且不易调试;
由单片机定时器实现的时钟不准确,故采用方案一。
三、总体设计方案
本系统以ATMEGA16L为控制核心。
整个系统硬件框图如图1所示:
图3系统框图
1.支路控制系统设计
图4最小系统
支路控制系统是模拟路灯控制系统的核心,该系统采用ATMEL公司的ATMEGA16L单片机作为主控制芯片来实现对受控对象的控制。
与AT89S52相比,ATMEGA16L是一款高性能、低功耗的8位AVR微处理器,具有速度快、输出电流大、工作电压范围宽、成本低等优点,是一款性价比很高的单片机。
(1)时钟模块
图5时钟电路
为实现精确的时钟功能并节省单片机IO口资源,该设计使用专用的接口方式为串行的时钟芯片DS1302,该芯片线路简单、体积小,易于操作,且价格低廉。
DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。
采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
DS1302内部有一个31×
8的用于临时性存放数据的RAM寄存器。
DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。
另外该芯片有备份电源引脚,可以在断电后仍能工作,以保证时钟的准确性。
DS1302与单片机之间能简单的采用同步串行方式进行通信,仅需用到三个口线:
(1)RES(复位),
(2)I/O(数据线),(3)SCLK(串行时钟)。
X1和X2是振荡源,外接32.768kHz晶振。
RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。
RST输入有两种功能:
首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,RST提供终止单字节或多字节数据的传送手段。
当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
上电运行时,在Vcc>
2.0V之前,RST必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
DS1302存在时钟精度不高,易受环境影响,出现时钟混乱等缺点。
DS1302可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。
这种记录对长时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。
传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;
若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。
但是,如果在系统中采用时钟芯片DS1302,则能很好地解决这个问题。
DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。
(2)信号采集模块的设计
图6采样电路
信号采集模块包括物体检测模块和环境明暗检测模块,两者功能如下:
物体检测模块:
该模块需要检测小车的移动,并根据小车的移动进行路灯开关的自动控制。
基于此目的采用探测距离远、灵敏度高的反射式光电传感器进行检测,当传感器检测到小车时,传感器给单片机一个信号,然后单片机对路灯进行合理控制,达到题目要求。
环境明暗检测模块:
该模块需要检测环境光的变化,根据环境光的明暗进行路灯开关的自动控制。
基于此要求采用由光敏电阻组成的分压电路进行检测。
光敏电阻器又称光导管,特性是在特定光的照射下,其阻值迅速减小,可用于检测可见光。
在不同的光强下,光敏电阻的电阻值会发生明显变化,光敏电阻器是利用半导体的光电效应制成的一种电阻值随入射光的强弱而改变的电阻器;
入射光强,电阻减小,入射光通过检测不同光强下电阻值的变化量来控制路灯的开和关。
(3)显示、按键模块
图71602显示及按键电路
通过按键可以调节和设定路灯的开关时间,控制整条支路按时开灯和关灯,并在字符液晶上显示出来。
字符型液晶因具有体积小、功耗低、寿命长、价格低、接口控制方便及显示操作简单等优点而被广泛应用。
我们这里用到的是1602液晶,1602液晶为5V电压驱动,带背光,可显示2行,每行16个字符,不能显示汉字,内置128个字符的ASCII字符集库,只有并口接口,无串口接口。
(4)路灯控制模块
图8路灯控制电路
该模块采用节能的1WLED灯,当电路出现故障时,单片机通过内部AD采集电路采样点的电压变化量后对数据进行处理。
(5)声光报警模块
图9声光报警电路
当系统出现故障时,蜂鸣器会发出警报声,同时报警指示灯也会点亮。
(6)电源模块
图105V稳压电路
电源是系统中最重要的模块之一,输入电源经稳压块后输出稳定的+5V电源,用以驱动整个系统。
(7)恒流源模块
1.原理介绍:
恒流源是输出电流保持不变的电流源,而理想的恒流源为:
a)不因负载(输出电压)变化而改变。
b)不因环境温度变化而改变。
c)内阻为无限大。
(3-1)
恒流源之电路符号:
理想的恒流源
实际的流源
图11恒流源
理想的恒流源,其内阻为无限大,使其电流可以全部流出外面。
实际的恒流源皆有内阻R。
2.三极管的恒流特性:
图12三极管恒流特性
从三极管特性曲线可见,工作区内的IC受IB影响,而VCE对IC的影响很微。
因此,只要IB值固定,IC亦都可以固定。
输出电流IO即是流经负载的IC。
(3-2)
电流镜电路Current
Mirror:
电流镜是一个输入电流IS与输出电流IO相等的电路:
图13电流镜电路
Q1和Q2的特性相同,即VBE1
=
VBE2,β1
β2。
(3-3)
三极管之β受温度的影响,但利用电流镜像恒流源,不受β影响,主要依靠外接电阻R经
Q2去决定输出电流IO(IC2
IO)。
方案1:
图14恒流源电路
从左边看起:
基极偏压
(3-4)
所以VE=VB
-
0.6=1.0V(3-5)
又因为射极电阻是1K,流经射极电阻的电流是
(3-6)
所以流经负载的电流就就是稳定的1mA
方案2.
图15恒流源电路
这是个利用稳压二极管提供基极偏压5.6V,VE=VB
0.6=0.5V,流经负载的电流
(3-7)
方案3.
图16恒流源电路
这个有一点不同:
利用PNP三极管供应电流给负载电路.首先,利用二极管0.6
V的压降,提供8.2
V基极偏压(10
–
3
x
0.6
8.2).
4.7
K电阻只是用来形成通路,而且不希望(也不会)有很多电流流经这个电阻。
VE=VB
+
0.6=8.8V,PNP晶体的560欧姆电阻两端电位差是1.2V,
所以电流是2mA。
如果只用一个三极管不能满足需求,可以用两个三极管架成:
图17恒流源
或是
图18恒流源
方案4.
电路图如下所示:
图19恒流源电路
图中的第一组运放电路是跟随器,对输入的电压取样电路进行阻抗变换。
最前面的双向开关负责将正负12V电压接入,这个电压是运放的供电电压,并提供给其他线路作为电源输入,C24和C25电容是运放正负电源端的滤波电容,紧靠运放电源引脚。
R11和电位器RW4组成了一个电压取样电路,通过改变电位器RW4滑动端的位置取出不同的电压值,同时这个取出的电压值也是输出电流的正比例控制值,电位器滑动头的电压就按照串联分压的方式计算得出,后端的R15和电容C20作为取出电压信号的阻容滤波电路,因为后端接的是运放的正端,电位器的滑动头不输出电流。
运放的1脚输出的电压等于3脚的电压,既是电位器滑动端的电压值。
运放上面的R12和D9是供电电源12V的指示电路,12V通过开关供给后D9发光指示电压正常。
后面的一组运放是实现电压到恒流的转换,电路中有正反馈也有负反馈,但线路是稳定的状态,计算的时候运放也是按照虚短和虚断的分析方式,C21是电压信号的滤波电容,假设第一组运放1脚输出的电压是V,第二组运放5脚正端的电压是V1,那么电阻RS1左端的电压值为2V1,因为电阻R16和R18是相同的数值。
电阻RS1右端的电压按照R13和R14分压电路计算的话数值是V1-(V-V1)=2V1-V,这样我们就可以计算出RS1两端的电压是V,所以流过RS1电阻的电流是恒定的,另外考虑到RX1和R13相对RS1和负载的阻值不在同一个数量级,比他们大好多倍,因此流过RS1的电流基本都流向负载,很少量的电流流向R13和RX1,所以输出的电流基本是恒定的。
在以上的计算中V1的数值是不确定的,他是根据负载的大小变化的,但是不论V1的数值怎么变化,通过计算可以知道流过电阻RS1的电流是不变的,以为它两端的电压是V,而V这个电压值是第一组运放的输出,在电位器不调节的时候V的数值是固定的,流过RS1的电流不变,所以输出电流也不变,实现恒流控制。
后面一组运放电路中Q4三极管的作用时增大运放的电流输出能力,因为负载比较小,运放驱动能力可能不够,R19基本没有作用在电路中,RX1可能是负载或者假负载,比如输出不接任何负载,电流基本都流过RX1,如果不接RX1,在没有负载的情况下输出就是电压最大值接近12V,在这种电压输出下,运放的正负端会有较大的压差,有可能会损坏运放358。
同时在线路的设计上也要保证负载流过恒定电流产生的电压值不能超过12V,如果超过电源供电电压,不能实现恒流工作性能。
RX1不取吧,估计也没事,取小了对负载不好,要比负载大10倍以上啊,要忽略流过他的电流
本系统采用方案四的恒流源电路,以实现系统的功能。
2.软件设计
系统流程图如下:
图10流程图
C语言表达能力和运算能力比较强,且具有很好的可移植性和硬件控制能力。
采用ICCAVR编译器。
ICCAVR是众多AVR单片机应用开发软件中的优秀软件之一,界面友好,易学易用。
四、结果分析
该系统能完成基本功能部分,传感器检测物体运动的最大误差为正负1cm,光敏电阻在正常光照情况下电阻值为2K,在强光下电阻值为200欧姆,在黑暗情况下2M.。
路灯电路正常时采样点电压为3V左右,在开路故障时电压为0V。
五、结论
硬件设计和软件设计是电子设计中不可缺少的内容,为了满足设计的功能和指标的要求,我们必须在开始设计时就考虑到硬件与软件的协调;
不然会增加软件实现时困难和复杂程度,有时即使硬件和软件单独能用,却不能使他们组成的系统工作,故在设计的过程中必须考虑软硬件的处理能力以及它们的接口是否兼容,实现软硬件的信号过渡。
六、参考文献
【1】高吉祥.全国大学生电子设计竞赛系列教程【M】.北京:
电子工业出版社.2007
【2】张志良.模拟电子技术【M】.北京:
机械工业出版社.2006
【3】何小艇.电子系统设计【M】.杭州:
浙江大学出版社.2004
【4】胡斌.元器件及实用电路解说【M】.北京:
【5】刁鸣.常用电路模块分析与设计指导【M】.北京:
清华大学出版社.2008
【6】唐竞新.数字电路基础【M】.北京:
清华大学出版社.2003
附录1系统原理图
附录2程序清单
/******************************************/
#include<
iom16v.h>
//包含型号头文件
macros.h>
//包含"
位"
操作头文件
#include"
b.c"
#defineucharunsignedchar
#defineuintunsignedint
/***************1602控制位的宏定义**************************/
#defineLCD_OUTDDRC=0XFF//数据端设为输出
#defineLCD_C_DDRDDRD|=0XE0//控制端设为输出
#defineLCD_DATAPORTC//发送数据端
#defineLCD_RS_HPORTD|=BIT(PD5);
//操作的是命令
#defineLCD_RS_LPORTD&
=~BIT(PD5);
//操作的是数据
#defineLCD_RW_HPORTD|=BIT(PD6);
//从1602读
#defineLCD_RW_LPORTD&
=~BIT(PD6);
//向1602写
#defineLCD_OE_HPORTD|=BIT(PD7);
//1602使能
#defineLCD_OE_LPORTD&
=~BIT(PD7);
//1602不使能
#defineLCDa_CURON0x0E//显示光标
#defineLCDa_CURFLA0x0F//打开光标闪烁
/**********