《单片机课程设计论文模拟路灯控制系统报告.doc》由会员分享,可在线阅读,更多相关《单片机课程设计论文模拟路灯控制系统报告.doc(31页珍藏版)》请在三一办公上搜索。
1、模拟路灯控制系统摘要:本文设计了一个以AT89C51为控制核心通过多级通信控制的模拟路灯控制系统,本路灯由光电开关实现对定位点处经过物体的精确定位,并将检测的信号经单片机分析处理后控制LED灯的亮灭;LED的电源采用自制的恒流源驱动;由光敏电阻根据环境光线的变化实现路灯的自动开关;通过调节PWM脉冲占空比实现功率的调节,以此达到调光效果。由DS1302完成控制器的时钟功能,并通过键盘设定和调整时间。本作品有五总工作模式,其中四种模式可以群控和独立分控甲乙两灯。经检测本路灯可以正常工作。关键词:AT89C51;光电开关;DS1302;光敏电阻;恒流源;PWM脉宽调制脉冲;工作模式Abstract
2、: this paper designs a USES AT89C51 as the core to control the simulation street light control system, the street lamp photoelectric switch to achieve by locating points after the precise orientation in objects, and the detection signal analysis and processing of SCM control LED lights after the lig
3、ht put out, The power of the LED self-made constant current source drive; According to the environment by photoconductive resistance changes of light realize the automatic switch street; By adjusting the PWM pulse of empty the adjustment of the power than implement, to move light effect. By DS1302 c
4、omplete controller clock function, and through the keyboard and the adjustment of the set time. This work has five total working mode, including four models to group control and independent control points and party b two lights. Via detecting the street lamp can work normally.Keywords: AT89C51; Phot
5、oelectric switch; DS1302; Photoconductive resistance; Constant current source; PWM pulse width modulation pulse; Work mode1 系统设计1.1 设计要求设计并制作一套模拟路灯控制系统。控制系统结构如图1.1所示:图1.1 模拟路灯控制系统路灯布置如图1.2所示:图1.2 路灯布置示意图(单位:cm) 1.2 基本要求(1)支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。(2)支路控制器应能根据环境明暗变化,自动开灯和关灯。(3)支路控制器应能根据交
6、通情况自动调节亮灯状态:当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图2),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右至左移动时,则亮灯次序与上相反。(4)支路控制器能分别独立控制每只路灯的开灯和关灯时间。(5)当路灯出现故障时(灯不亮),支路控制器应发出声光报警信号,并显示有故障路灯的地址编号。发挥部分(1)自制单元控制器中的LED灯恒流驱动电源。(2)单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在20%100%范围内设定并调节,调节误差2%。(3)性价比高,工作稳定,符合电磁兼容(EMC)方面的要
7、求,无对外干扰或干扰小。1.3 总体设计方案 功能分解及设计思路本模拟路灯控制系统的设计方案要实现的主要功能主要分解为以下五个方面:(1)是时钟功能及定时开关灯。(2)是根据环境明暗变化,自动开灯和关灯。(3)是根据交通情况自动调节亮灯状态:当汽车靠近路灯时,路灯能自动点亮;当汽车远离时,路灯自动熄灭。(4)声光报警功能,当路灯出现故障时而不亮时,控制器发出信号,并显示有故障路灯的地址编号。(5)是根据绿色节能照明要求,采用恒流源驱动LED路灯发亮且能调光,路灯驱动电源输出功率能在20%100%范围内设定并调节,调节误差2%。以上功能的实现,都是以单片机为核心,在单片机系统实现的输入输出和显示
8、功能的基础上,由单片机的内置逻辑和运算功能,加上一定的外围电路得以实现。针对以上的五个功能,采用模块化的设计思想,以下分别叙述之。2 方案的比较与论证 2.1 各2.1稳压电源模块恒流源驱动LED及20到100范围内可调亮度。方案一:采用恒流源驱动芯片,目前市场上成品的恒流源驱动芯片比较多,一般采用使用取样电阻调节输出电流的方式。这些芯片使用方便,性能较好,但价格较贵。方案二:采用PWM方式驱动功率场效应管输出驱动电流,用电流取样电阻串入LED供电回路,用AD口读取当前的电流值,实现闭环控制。方案二利用了单片机的AD变换资源,同时采用PWM方式,可以使LED工作在断断续续的状态,可以延长LED
9、的使用寿命。本系统采用方案二。22显示模块方案一:用LED数码显示,控制起来比较简单,编程也不是很难,可以明了的显示数字,但在实际电路当中,焊接比较烦琐,占用空间大,性价比不高,对人眼有一定的损害,还要有相应的蕊片(如74HC573N蕊片等)组合,占用资源。若要同时显示多个字符,所用的LED数量大,占用面广,却接口也多。方案二:采用5110液晶显示,其显示是采用背光照亮,对人眼损害很弱,再次LCD又是一种节能灯,功耗小,使用寿命长等优点,不需要外加蕊片组合,可以直接与单片机连接。单片机可以通过软件编程,来实现对液晶的显示的控制与设定。使用起来十分方便,有长远的价值。所以我们采用此方案 。23根
10、据环境明暗变化,自动开灯和关灯功能。方案一:采用比较器的解决方案。光敏电阻与固定电阻串联,加一级电压跟随器后输入比较器,与比较器负输入端的电压值进行比较,得到一个高电平或低电平输出,进入单片机的IO口。优点是电路比较直观,操作比较方便,可直接通过电位器调节路灯的开启亮度。对维护人员的要求不高。缺点是不方便进行数码控制。方案二:采用AD变换。光敏电阻与固定电阻串联,由单片机内置的AD变换接口读入当前的电压值,然后根据读取的电压值判断当前的环境亮度。路灯的开启电平由内部的变量控制。方案二的优点在于可以方便以实现对路灯开启电平的数码控制和远程控制。本系统采用方案二。2.4红外发射模块方案:可见光发光
11、二极管与光敏三极管组成的发射接收电路。这种方案的缺点在于其他环境光源会对光敏三极管的工作产生很大干扰,一旦外界光亮条件改变,很可能造成误判和漏判;虽然采取超高亮发光管可以降低一定的干扰,但这又将增加额外的功率损耗。方案二:采用工业级的光电开关。这种光电传感器普遍运用于电梯、生产线等工业场所。优点是使用方便,型号很多,输出量是开关量,不需调理电路。本系统采用方案二。2.5核心控制模块:方案1:我们采用STC单片机作为主控器,其算术功能强,软件编程简洁灵活、自由度大 ,可用软件编程实现各种逻辑控制功能,且其功耗低、技术成熟,成本低廉。但我们对于STC的技术不成熟。方案2:我们采用51单片机作为主控
12、器,软件编程简洁灵活、自由度大 ,可用软件编程实现各种逻辑控制功能,且其功耗低、技术成熟,成本低廉。而且我们已经学习了一年,有了一定的基础,故我们采用方案二。2.6声光报警功能方案:采用光敏电阻检测路灯的亮度,同时排除环境光的干扰。利用单片机的AD口,读入光敏电阻上检测到的路灯亮度值。但此方案不稳定因素太多。方案二:利用光敏电阻检测路灯的亮度,然后送入比较器进行比较,此方案简单易行,故我们采用方案二。种方案比较与选择2.2 方案论证2.2.1系统各模块的最终方案 单元控制器甲AT89C51单元控制器乙光敏传感器继电器继电器恒流源从S到S到方向从到S到S方向LED1LED2屏幕显示恒流源光电对管
13、光电对管声音报警光电报警2.2.2 系统功能介绍 路灯的工作模式本模拟路灯控制系统具备5种工作模式,分别是自动群控模式、自动分控模式、根据照度自动控制模式、根据交通情况自动控制模式、手动控制模式,下面对每种工作模式简单介绍如下:(1)自动群控模式在该模式下,支路控制器根据设定好的定时信息,自动地同时打开或者关闭两盏路灯。(2)自动分控模式在该模式下,支路控制器根据设定好的定时信息,分别控制两盏路灯的开关,例如,当系统的时间和路灯甲开灯的时间相等时,开启路灯甲;当系统的时间和路灯乙关灯的时间相等时开启路灯乙。(3)根据照度自动控制模式在该模式下,当环境照度低于一定的值时开启两盏路灯,当环境照度高
14、于一定的值时关闭两盏路灯。系统启动后默认进入此模式。(4)根据交通情况自动控制模式在该模式下,当可移动物体M由左到右到达S点时(见图),灯甲亮;当物体M到达B点时,灯甲灭,灯乙亮。(5)手动控制模式在手动模式时,两盏路灯只能由支路控制器用增加和减少键手动的调整亮度,路灯的亮度可以在0100自由的上下调整,步进为20。另外,该路灯控制系统还具备故障检测功能,当路灯出现无法正常工作的状况时,该控制系统能够判定是哪一环节出现问题,并将故障通过声光警报显示告知用户。按键操作说明本作品共需八个按键,其中五种工作模式共需六个按键,分别为模式选择键、灯的选择键、调时键、调分键、调节亮度键、开/关键模式选择键
15、:按模式选择键可以切换路灯工作模式。灯的选择键:此键有三种选择即甲灯、乙灯、甲乙,在当前工作模式下,如选甲或乙,则此时为独立控制甲或乙,若选择甲乙,则在当前模式下群控甲乙。调时、调分键:在不同的屏幕下来调节当前的时间包括时钟DS1302的调时,开关灯的调时。调节亮度键:可以在手动控制模式下通过此键调节LED的亮度。开/关键:如为开则在当前页面下调的是开灯时间,否则为关灯时间。3系统硬件设计3.1系统总体设计本作品是以AT89C51为控制核心,用DS1302时钟芯片实现时钟功能,显示开灯和关灯时间,控制各支路按时开灯和关灯,并能根据环境明暗变化,自动开灯和关灯。支路控制器分别能控制每只路灯的开灯
16、和关灯时间。支路控制器可以根据交通情况自动开灯和关灯。并能在路灯出现故障时发出声光报警。其主流程见图3-1。 S2S1S1S2S2S1S1开始按键设置模式1LED2模式2模式3模式4LED1定时开灯定时关灯开启关闭开启关闭手动控制光敏电阻控制交通控制灯的模式5S13.2单元电路键盘电路系统使用了8个键盘,控制液晶显示菜单的时间模式,及工作模式的切换。光敏控制电路用一个精密可调电阻和一个光敏电阻串联,光敏电阻通过向光、遮光的电压与1/2Vcc经过比较器比较,再加个电压跟随器输出稳定电压。向光输出低电平,遮光输出高电平,使其输出信号输入单片机。电路图如下:最小系统版电路单片机ATT89C51组成一
17、个最小系统,其中有三个按键,一个复位键,两个中断键。通过I/O口与外围电路衔接。功能实现4 系统实现的功能1基本要求序号功能是否实现1支路控制器有时钟功能,能设定、显示开关灯时间,并控制整条支路按时开灯和关灯。是2支路控制器应能根据环境明暗变化,自动开灯和关灯。是3支路控制器应能根据交通情况自动调节亮灯状态:当可移动物体M(在物体前端标出定位点,由定位点确定物体位置)由左至右到达S点时(见图2),灯1亮;当物体M到达B点时,灯1灭,灯2亮;若物体M由右至左移动时,则亮灯次序与上相反。实现50%4支路控制器能分别独立控制每只路灯的开灯和关灯时间。是5当路灯出现故障时(灯不亮),支路控制器应发出声
18、光报警信号,并显示有故障路灯的地址编号。是2发挥部分序号功能是否实现1自制单元控制器中的LED灯恒流驱动电源是2单元控制器具有调光功能,路灯驱动电源输出功率能在规定时间按设定要求自动减小,该功率应能在20%100%范围内设定并调节,调节误差2%。实现50%5采用PWM与电压取样方式,实现闭环的恒流源控制是5心得体会电子方面: 通过本次设计,深深感到理论与实践之间的差距。在学习单片课程时,很多知识点在理论完全理解了,但到具体的电路设计与实现中,会出现很多一时无法理解的现象,要通过不断的通过强化自身的实践动手能力的培养,才能用理论来指导实践,通过实践来进一步深入理解理论。此次试验我最大的感受就是我
19、对于很多知识停留在知与不知之间,了解的只是表面含义,并没有深入了解,而且我感觉自己的动手能力有待提高,不能眼高手低,不能满足现状,也不能灰心泄气,停歇不前。这次实验我也学到了很多,明白了很多,以后我会更加努力,去学习,去探索。机械方面:此次路灯作品,我和闫伟负责了灯架的部分。在这次作品中我对车工的学习又加深了许多。首先,我们自己做出的东西可以使用了(这是比较有成就感的)。以前先是车了一些东西但却没有实用过,之后给其他同学做过一个类似联轴器的东西,但是因为打的孔两端不同心而不能使用。做出的东西不能用使我很有受挫感。这次能够做出并且还可以使用又增添我对学习机械的信心。其次,在做灯架时学到了许多车工
20、方面的知识:1,加工零件前需对零件有整体的把握,清楚加工的先后顺序。2,切断、螺纹用低速。3,车长轴要先用中心钻打孔(打孔时要夹短),并且需用中心钻定心。4,铝料质软加工时要加入冷却液,并在打孔时及时排屑。5,磨出的刀是没有具体很细的规定的,它是依据所要加工物体的形状去磨刀。6,锥度也不见得全是调小刀件也可用45、60度的刀直接去加工。7,软料加工、钻孔用高速。8,零件如何在车床上保持平衡。9,如何在不损坏零件表面的前提下完成零件。10,车刀的锋利度。以上8点是在这次做灯架时所总结。但在作品的整体把握上不是太好,使得灯架与作品整体配合不是那么的如意。6 软件设计#include#include
21、发送.c#include接受.c#include按键.c#includeds1302.c#includezifu.c #include #include18b20.cvoid keyscan();#define uint unsigned int#define uchar unsigned charsbit f=P17;sbit g1=P12;sbit g2=P14;sbit g3=P16;sbit xinh=P13;uchar aa=0,bb=0,dd=0,qq,kg,xz=0,r=30,e=15,guzhang;/*/端口定义 /*uint k;sbit res = P00; /复位,0复
22、位 sbit sce = P01; /片选 sbit dc = P02; /1写数据,0写指令 sbit sdin = P03; /数据 sbit sclk = P04; /时钟 void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*-write_byte: 使用SPI接口写数据到LCD输入参数:dt:写入的数据;command :写数据/命令选择;-*/write_byte(uchar dt, uchar command)uchar i; sce=0;dc=command;for(i=0;i8;i+) if(dt&0x80)s
23、din=1;elsesdin=0;dt=dt1;sclk=0; sclk=1; dc=1;sce=1;sdin=1;/*-init: 5110LCD初始化 - */void init(void)res=0; delay(1); res=1; write_byte(0x21,0); /初始化Lcd,功能设定使用扩充指令write_byte(0xd0,0); /设定液晶偏置电压write_byte(0x20,0); /使用基本指令write_byte(0x0c,0); /设定显示模式,正常显示/*-LCD_set_XY: 设置LCD坐标函数输入参数:X:083 Y:05-*/void set_XY
24、(uchar X, uchar Y)write_byte(0x40 | Y, 0);/ columnwrite_byte(0x80 | X, 0);/ row /*-LCD_clear: LCD清屏函数 -*/void clear(void)uchar t;uchar k;set_XY(0,0);for(t=0;t6;t+) for(k=0;k84;k+) write_byte(0x00,1); /*-LCD_write_shu: 显示8(宽)*16(高)点阵列数字字母符号等半角类输入参数:c:显示的字符;-*/void write_shuzi(uchar row, uchar page,uc
25、har c) /row:列 page:页 dd:字符uchar i; set_XY(row*5, page); / 列,页 for(i=0; i6;i+) write_byte(shuzic*12+i,1); set_XY(row*5, page+1); / 列,页 for(i=6; i12;i+) write_byte(shuzic*12+i,1); /*-LCD_write_shu: 显示8(宽)*16(高)-*/void write_shuzi1(uchar row, uchar page,uchar c) /row:列 page:页 dd:字符uchar i; set_XY(row*3
26、, page); / 列,页 for(i=0; i6;i+) write_byte(shuzic*12+i,1); set_XY(row*3, page+1); / 列,页 for(i=6; i12;i+) write_byte(shuzic*12+i,1); /*-write_hanzi: 显示12(宽)*12(高)点阵列汉字等半角类输入参数:c:显示的字符; -*/void write_hanzi(uchar row, uchar page,uchar c) /row:列 page:页 dd:字符uchar i; set_XY(row*8, page); / 列,页 for(i=0; i1
27、2;i+) write_byte(hanzic*24+i,1); set_XY(row*8, page+1); / 列,页 for(i=12; i24;i+) write_byte(hanzic*24+i,1);/*-write_hanzi: 显示12(宽)*12(高)点阵列汉字等半角类输入参数:c:显示的字符; -*/void write_zifu(uchar row, uchar page,uchar c) /row:列 page:页 dd:字符uchar i; set_XY(row*2, page); / 列,页 for(i=0; i4;i+) write_byte(zifuc*8+i,
28、1); set_XY(row*2, page+1); / 列,页 for(i=4; i8;i+) write_byte(zifuc*8+i,1);/*-write_hanzi: 显示12(宽)*12(高)点阵列汉字等半角类输入参数:c:显示的字符; -*/void write_hanzi1(uchar row, uchar page,uchar c) /row:列 page:页 dd:字符uchar i; set_XY(row*6, page); / 列,页 for(i=0; i12;i+) write_byte(hanzic*24+i,1); set_XY(row*6, page+1); /
29、 列,页 for(i=12; i24;i+) write_byte(hanzic*24+i,1);/*模拟路灯控制系统显示*/void show0()write_hanzi(0,0,12); /模write_hanzi(2,0,13); /拟write_hanzi(4,0,14); /路write_hanzi(6,0,15); /灯write_hanzi(0,2,16); /控write_hanzi(2,2,17); /制write_hanzi(4,2,18); /系write_hanzi(6,2,19); /统write_hanzi1(4,4,20); /无write_hanzi1(6,4,
30、21); /线write_hanzi1(8,4,22); /电write_hanzi1(10,4,23); /协write_hanzi1(12,4,24); /会/*-ds1302时钟显示-*/void show1() write_shuzi(0,0,year/16); /年份 十位 write_shuzi(1,0,year%16); / 年份个位 write_hanzi(2,0,8); / 年 write_shuzi(6,0,month/16); /月十位 write_shuzi(7,0,month%16); /月个位 write_hanzi(5,0,7); / 月write_shuzi(1
31、1,0,day/16); / 日十位 write_shuzi(12,0,day%16); / 日个位 write_hanzi(9,0,9); / 日 write_hanzi(0,2,10); / 星 write_hanzi(2,2,11); /期 write_hanzi(4,2,week); /week=3,周三 write_shuzi1(19,2,zhen/10);/温度十位write_shuzi1(21,2,zhen%10);/温度个位write_zifu(35,2,0);/句号write_shuzi(15,2,11);/Cwrite_shuzi(1,4,hour/16); /小时十位 w
32、rite_shuzi(3,4,hour%16); /小时个位 write_shuzi(5,4,10); /冒号 write_shuzi(7,4,minute/16); /分钟十位 write_shuzi(9,4,minute%16); /分钟个位 write_shuzi(11,4,10); /冒号 write_shuzi(13,4,second/16); /秒十位 write_shuzi(15,4,second%16); /秒个位 /*设定时间界面*/void show2()write_hanzi(2,0,25); /设write_hanzi(4,0,26); /定write_hanzi(6,
33、0,27); /时write_hanzi(8,0,28); /间write_hanzi1(0,2,29); /开write_hanzi1(2,2,31); /灯write_shuzi(5,2,10); /:write_shuzi1(11,2,ks/10);/0write_shuzi1(13,2,ks%10);/0write_shuzi(9,2,10); /:write_shuzi1(17,2,kf/10);/0write_shuzi1(19,2,kf%10);/0write_shuzi1(21,2,10); /:write_shuzi1(23,2,km/10);/0write_shuzi1(2
34、5,2,km%10);/0write_hanzi1(0,4,30); /关write_hanzi1(2,4,31); /灯write_shuzi(5,4,10); /:write_shuzi1(11,4,gs/10);/0write_shuzi1(13,4,gs%10);/0write_shuzi(9,4,10); /:write_shuzi1(17,4,gf/10);/0write_shuzi1(19,4,gf%10);/0write_shuzi1(21,4,10); /:write_shuzi1(23,4,gm/10);/0write_shuzi1(25,4,gm%10);/0/*工作模式
35、*/void show3()write_hanzi(2,0,32); /工write_hanzi(4,0,33); /作write_hanzi(6,0,34); /模write_hanzi(8,0,35); /式/*灯的开标志*/void show4()write_hanzi(0,0,29);/开/*灯的关标志*/void show5()write_hanzi(0,0,30);/关/*亮度自动控制*/void show6()write_hanzi(2,3,42);/亮write_hanzi(4,3,43);/度write_hanzi(6,3,46);/自write_hanzi(8,3,38);
36、/控/*自动分控*/void show7()write_hanzi(2,3,46);/自write_hanzi(4,3,36);/动write_hanzi(6,3,39);/分write_hanzi(8,3,38);/控/write_shuzi1(1,)/*手动控制*/void show8()write_hanzi(2,3,44);/手write_hanzi(4,3,36);/动write_hanzi(6,3,38);/控write_hanzi(8,3,45);/制/*自动群控*/void show9()write_hanzi(2,3,46);/自write_hanzi(4,3,36);/动w
37、rite_hanzi(6,3,37);/群write_hanzi(8,3,38);/控/*交通自控*/void show16()write_hanzi(2,3,58);/交write_hanzi(4,3,59);/通write_hanzi(6,3,46);/自write_hanzi(8,3,38);/控/*灯的选择*/void show10()write_hanzi(1,0,49);/灯write_hanzi(3,0,50);/的write_hanzi(5,0,51);/选write_hanzi(7,0,52);/择/*甲灯*/void show11()write_hanzi(4,3,47);/甲write_hanzi(6,3,49);/灯/*