《基于单片机模拟路灯控制系统毕业设计.doc》由会员分享,可在线阅读,更多相关《基于单片机模拟路灯控制系统毕业设计.doc(33页珍藏版)》请在金锄头文库上搜索。
1、基于51单片机的模拟路灯控制系统1. 系统设计1.1 设计要求一、任务(来自原题)设计并制作一套模拟路灯控制系统。控制系统结构如图1所示,路灯布置如图2所示。图1 路灯控制系统示意图图2 路灯布置示意图(单位:cm)二、设计要求+1基本要求(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。(2)支路控制器应能根据环境明暗变化,自动开灯和关灯。(3)支路控制器应能根据交通情况自动调节亮灯状态:当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图2),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右至左移动时,则亮灯次序与上相
2、反。(4)支路控制器能分别独立控制每只路灯的开灯和关灯时间。(5)当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。2发挥部分(1)自制单元控制器中的LED灯恒流驱动电源。(2)单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在20%100%范围内设定并调节,调节误差2%。(3)性价比高,工作稳定,符合电磁兼容(EMC)方面的要求,无对外干扰或干扰小。 1.2 总体设计方案1.2.1 功能分解及设计思路 本模拟路灯控制系统的设计方案要实现的 主要功能主要分解为以下五个方面:一是时钟功能及定时开关灯。二是根据环境明暗变化,
3、自动开灯和关灯。三是根据交通情况自动调节亮灯状态:当 汽车靠近路灯时,路灯能自动点亮;当汽车远离时,路灯自动熄灭。四声光报警功能,当路灯出现故障时而不 亮时,控制器发出信号,并显示有故障路灯的地址编号。五是根据绿色节能照明要求,采用恒流源 驱动LED路灯发亮且能调光,路灯驱动电源输出功率能在20%100%范围内设定并调节,调节误差2%。以上功能的实现,都是以单片机为核心, 在单片机系统实现的输入输出和显示功能的基础上,由单片机的内置逻辑和运算功能,加上一定的外围电路得以实现。针对以上的五个功能,采用模块 化的设计思想,以下分别叙述之。1.2.2 方案论证与比较 1.2.2.1 时钟功能及定时开
4、关机。方案一:采用专用时钟芯片。 现在流行的串行时钟电路 很多,如DS1302、 DS1307、PCF8485等。其优势是可以单独使用,直接连接到单片机外围,有自己独立的时钟晶振,精度较高。单片机通过串行接口 读取和写入当前的时钟值,时钟芯片的运行受单片机死机的影响少。其缺点一是消耗了单片机IO口资源。二是在编程时需要增加读写串行口的内容,消耗了单片机的运行时间。三是增加了成本。增加了时钟芯片及其外围电路的开支。DS1302的典型应用电路如图3 所示: 图3 DS1302的典型应用电路方案二:采用单片机内置时钟振荡电路及定时器构建时间平台。本方案直接利用单片机的内置定时器,通过定时器的中断和简
5、 单运算实现时钟功能。例如: ST C单片机,在4M时钟时,单个指令的运行时间是1微秒,设置定时器1每125个指令周期产生一个中断,即125微秒,8个中断后,时间平台是1毫秒 ,设置以下时间计数变量分别为:uchar To1mS = 0x00; /当该变量增加到某个数值时,表示经过了1毫秒uchar T o2mS = 0x00; /当该变量增加到某个数值时,表示经过了2毫秒uchar Is 2mS = 0; /到达2毫秒时刻uchar To 20mS = 0x00; /当该变量增加到某个数值时,表示经过了20毫秒uchar Is20mS = 0; /到达20毫秒时刻uchar To 1S =
6、0x00; /当该变量增加到某个数值时,表示经过了1秒uchar Is1 S = 0; /到达1秒时刻在秒时间 平台,用ToMIN变量,计数60秒后进入分钟平台,计数60分钟后,进入小时平台。方案二没有增加外置电路,充分利用了单片机的定时器功能,实施简洁方便,主要的缺点是当控制系统断电或死机以后,需要人工重新定时。本系统的 时钟功能实现采用方案二。1.2.2.2 根据环 境明暗变化,自动开灯和关灯功能。方案一:采用比较器的解决方案。光敏电阻与 固定电阻串联,加一级电压跟随器后输入比较器,与比较器负输入端的电压值进行比较,得到一个高电平或低电平输出,进入单片机的IO口。 优点 是电路比较直观,操
7、作比较方便,可直接通过电位器调节路灯的开启亮度。对维护人员的要求不高。缺点 是不方便进行数码控制。方案二:采用AD变换。光敏 电阻与固定电阻串联,由单片机内置的AD变换接口读入当前的电压值,然后根据读取的电压值判断当前的环境亮度。路灯的开启电平由内部的变量控 制。方案二的优点在于可以方便以实现对路灯开启电平的数码控制和远程控制。本系统 采用方案二。1.2.2.3 根据交通情况自动调节亮灯状态。当汽车 靠近路灯时,路灯能自动点亮;当汽车远离时,路灯自动熄灭。方案一 :采用工业级的光电传感器。这种光电传感器普遍运用于电梯、生产线等工业场所。优点是使用方便,型号很多,输出量是开关量,不需调理电路。缺
8、 点是价格较贵。方案二:采用廉价的红外对射传感器。红外对 射的特点是传输距离较远,能量集中。当没有物体遮挡时,红外光直射到红外探头上,红外接收管连续输出低电平到单片机,当有物体经过时,红外光 被遮住,此时红外探头输出高电平到单片机。由于红外光的发射有一定的偏角,本设计利用了黑色套管遮挡红外发射灯头,以减少红外光的散失。 本 系统采用方案二。1.2.2.4 故障报警功能采 用光敏电阻检测路灯的亮度,同时排除环境光的干扰。利 用单片机的AD口,读入光敏电阻上检测到的路灯亮度值。1.2.2.5 恒流源驱动LED及20到100范围内可调亮度。方案一:采用恒流源驱动芯片,目前市场上成品的恒流源驱动芯片比
9、较多,一般采用使用取样电阻调节输出电流的方式。这些芯片使用方便,性能较好,但 价格较贵。方案 二:采用PWM方式驱动功率三极管输出驱动电流,用电流取样电阻串入LED供电回路,用AD口读取当前的电流值,实现闭环控制。方案二利用了单片机的AD变换资源,同时采用PWM方式,可以使LED工作在断断续续的状态,可以延长LED的使用寿命。本系 统采用方案二。 1.2.3 系统各模块的最终方案 1.3 系统功能说明书(用户使用说明书) 1.3.1 路灯的工作模式本 模拟路灯控制系统具备5种工作模式,分别是自动群控模式、自动分控模式、根据照度自动控制模式、根据交通情况自动控制模式、 手动控制模式,下面对每种工
10、作模式简单介绍如下:(1) 自动群控模式在该 模式下,支路控制器根据设定好的定时信息,自动地同时打开或者关闭两盏路灯。系统启动后默认进入该模式。(2) 自动分控模式在该模式下,支路控制器根据设定好的定时信息,分别控制两盏路灯的开关,例如,当系统的时间和路灯1开灯的时间相等时,开启路灯1; 当系统的时间和路灯2关灯的时间相等时开启路灯2。(3) 根据照度自动控制模式在该模式 下,当环境照度低于一定的值时开启两盏路灯,当环境照度高于一定的值时关闭两盏路灯。(4) 根 据交通情况自动控制模式在该模式 下,当可移动物体M由左到右到达S点时(见图),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由
11、右到左移动时,则亮灯的次序与上相反。(5) 手 动控制模式在手动模 式时,两盏路灯只能由支路控制器用增加和减少键手动的调整亮度,路灯的亮度可以在0100自由的上下调整,步进为10。(1)( 4)等四种工作模式是互斥的,即在某一时刻只能具有其中的一种功能,不过各种模式可以手动的切换,手动调整路灯亮度的功能在这 四种模式中都是有效的。另外,该路灯 控制系统还具备故障检测功能,当路灯出现无法正常工作的状况时,该控制系统能够判定是哪一环节出现问题,并将故障通过声音警报及数码管显示告知用户。 1.3.2 按键操作说明n 支路控制器具备5个按键,分别为时间调整键、模式选择键、增加键、减少键、确认键。n 时
12、间调整键:按时间调整键时,可以循环地选择系统时间、路灯1和2共同的开关灯时间、路灯1的开关灯时间和路灯2的开关灯时间。n 模式选择键:按模式选择键可以进行系统工作模式的切换,顺序为自动群控模式自动分控模式根据照度自动控制模式 根据交通情况自动控制模式手动控制模式。nn 增加、减少键:按这两个键可以对时间或者亮度进行增减,长按时时间或者亮度可以连续变换。l 确认键:确认键只在时间调整时有效,分别确认小时、分钟、秒的输入。 2. 单元电路设计2.1 每部分模块的电路设计2.1.1 电源供电电路 采用变压器与三端稳压器相结合2.1.2 单片机最小系统其核心芯片是STC12C5404AD。2.1.3
13、输入与输出键盘: 采用AD变换输入口为键盘输入口,节省了IO口资源。LED显示: 2.1.4 电流源驱动 3. 软件设计软件采用C语言编写,可移植性和可读性强。 软件编写体现了模块化的任务驱动方式。代码尽 量符合变量定义规范。 3.1 -子程序本系统包含以下子程序 /键盘处理-void KeyboardScan(void); /键盘扫描函数void KeyboardOperate(uch ar KeyNum);/按键处理函数 / /定时器处理-void InitTimer(void);/定时器参数设定及启动 / /路灯控制-V 特调oid BrightnessSet(uchar LightNum, uchar Brightness);/亮度调整 /AD采样-void ADExchange(uchar Num);/AD采样/* 亮度调整函数 */void BrightnessSet(uchar LightNum, uchar Brightness);额头纹/* * 溢出中断处理程序 */ void interrupt 6 TimerInterrupt(void);