基于单片机80C51模拟路灯控制系统的课题设计.docx
《基于单片机80C51模拟路灯控制系统的课题设计.docx》由会员分享,可在线阅读,更多相关《基于单片机80C51模拟路灯控制系统的课题设计.docx(45页珍藏版)》请在冰豆网上搜索。
![基于单片机80C51模拟路灯控制系统的课题设计.docx](https://file1.bdocx.com/fileroot1/2023-2/21/2f5a4444-42d9-4b36-8c0f-d3b5d0973814/2f5a4444-42d9-4b36-8c0f-d3b5d09738141.gif)
基于单片机80C51模拟路灯控制系统的课题设计
模拟路灯控制系统地设计
摘要
本系统以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)声光报警模块
认同uyhes
图9声光报警电路
当系统出现故障时,蜂鸣器会发出警报声,同时报警指示灯也会点亮.
(6)电源模块
图105V稳压电路
电源是系统中最重要地模块之一,输入电源经稳压块后输出稳定地+5V电源,用以驱动整个系统.
(7)恒流源模块
1.原理介绍:
恒流源是输出电流保持不变地电流源,而理想地恒流源为:
a)不因负载(输出电压)变化而改变.
b)不因环境温度变化而改变.
c)内阻为无限大.
(3-1)
恒流源之电路符号:
理想地恒流源 实际地流源
图11恒流源
理想地恒流源,其内阻为无限大,使其电流可以全部流出外面.实际地恒流源皆有内阻R.
2.三极管地恒流特性:
图12三极管恒流特性咕~~(╯﹏╰)b一蛾
从三极管特性曲线可见,工作区内地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恒流源电路咕~~(╯﹏╰)b一
从左边看起:
基极偏压
(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这个电压值是第一组运放地输出,在电位器ser一不调节地时候V地数值是固定地,流过RS1地电流不变,所以输出电流也不变,实现恒流控制.
后面一组运放电路中Q4三极管地作用时增大运放地电流输出能力,因为负载比较小,运放驱动能力还是认同与蛾可能不够,R19基本没有作用在电路中,RX1可能是负载或者假负载,比如输出不接任何负载,电流基本都流过RX1,如果不接RX1,在没有负载地情况下输出就是电压最大值接近12V,在这种电压输出下,运放地正负端会有较大地压差,有可能会损坏运放358.同时在线路地设计上也要保证负载流过恒定电流产生地电压值不能超过12V,如果超过电源供电电压,不能实现恒流工作性能.
RX1不取吧,估计也没事,取小了对负载不好,要比负载大10倍以上啊,要忽略流过他地电流
本系统采用方案四地恒流源电路,以实现系统地功能.
2.软件设计
系统流程图如下:
图10流程图
C语言表达能力和运算能力比较强,且具有很好地可移植性和硬件控制能力.采用ICCAVR编译器.ICCAVR是众多AVR单片ser一机应用开发软件中地优秀软件之一,界面友好,易学易用.
四、结果分析
该系统能完成基本功能部分,传感器检测物体运动地最大误差为正负1cm,光敏电阻在正常光照情况下电阻值为2K,在强光下电阻值为200欧姆,在黑暗情况下2M..路灯电路正常时采样点电压为3V左右,在开路故障时电压为0V.
五、结论
硬件设计和软件设计是电子设计中不可缺少地内容,为了满足设计地功能和指标地要求,我们必须在开始设计时就考虑到硬件与软件地协调;不然会增加软件实现时困难和复杂程度,有时即使硬件和软件单独能用,却不能使他们组成地系统工作,故在设计地过程中必须考虑软硬件地处理能力以及它们地接口是否兼容,实现软硬件地信号过渡.
六、参考文献
【1】高吉祥.全国大学生电子设计竞赛系列教程【M】.北京:
电子工业出版社.2007
【2】张志良.模拟电子技术【M】.北京:
机械工业出版社.2006
【3】何小艇.电子系统设计【M】.杭州:
浙江大学出版社.2004
【4】胡斌.元器件及实用电路解说【M】.北京:
电子工业出版社.2007
【5】刁鸣.常用电路模块分析与设计指导【M】.北京:
清华大学出版社.2008
【6】唐竞新.数字电路基础【M】.北京:
清华大学出版社.2003
附录1系统原理图
附录2程序清单
/******************************************/
#include//包含型号头文件
#include//包含"位"操作头文件
#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//打开光标闪烁
/******************RTC常量******************/
#defineRTC_CLKPB7
#defineRTC_DATAPB5
#defineRTC_CSPC7
#defineRD0x01
#defineWR0x00
#defineC_SEC0x80//秒
#defineC_MIN0x82//分
#defineC_HR0x84//时
#defineC_WP0x8E//控制(写保护)
#defineC_BURST0xBE//时钟蛾dg多字节
#defineCLK_HALT0x80//停止时sst钟控制位
#definstwteCLK_START0x00//启动时钟
#definePROTECT0x80//写保护控制位
#defineUPROTECT0x00//写保护控制位
/***************按键常量控制位地宏定义**************************/
#defineKEY_OUTDDRA|=0XF8//按键方向定义输出
#defineKEY_INDDRA&=0X07//按键方向定义输入
#defineKghbbgfsEY_DATAPINA//读按键端口
#defineKEY_OUsT_HPORTA|=0XF8//按键端口输出高电平
erg
#prgdagmadata:
code
constduchartable[]={0x30,0x31,0x32,0x33,0x34,
d0x35,0x36,0x37,0x38,
d0x39}。
/********gd****************全局变量宏定义**********/
ucharhour,hghdourshi,hourge,minute,minuteshi,minutege,
second,strecondshi,secondge,haomiao,haomiaoshi,haomiaoge。
ucharchucun[]。
//fg存储设置时间时地当前值
gh
voghiddelayns(uintUS)
{rht
uintruti。
US=UtyS*5/4。
//5/4是在8MHz晶振下,通过软件仿真反复实验得到地数值
for(i=0ye。
ii++)。
}
voiddelay(yuintMS)
{ty
uitnti,j。
foutr(i=0。
ii++)
for(tuj=0。
j<1141。
j++)。
//1141是在8MHz晶振下,通过软件仿真反复实验得到地数值
}
/*****tur**************************************
函数名称tru:
LCD1602_write_com(ucharcom)
功能:
ut向1602液晶写入一个字节指令
参数:
coutm是指令
返回值:
无tu
/********************************************/
voidLCD1602_uywrite_com(ucharcom)
{yu
utrLCD_RS_L。
LCD_RW_L。
trueLCD_DATA=com。
dutrelay(5)。
LCDtru_OE_H。
delay(5tur)。
LCD_OE_utrL。
}utr
/*******************************************
函数tru名称:
LCD1602_write_dat(uchardat)
功能utr:
向1602液晶写入一个字节数据
参数:
datrut是数据
返回值:
无tru
/**************rtu********************************/
voidLCD1602_write_dat(uchardat)
{rtu
LrtuCD_RS_H。
LCDrtu_RW_L。
LCD_DrutATA=dat。
delay(5)。
rut
LCD_OE_Hrut。
delay(5)。
rut
LCD_OE_Lu。
}sru
/*******************************************
函数名称:
LCD1602_init()
功yse能:
初始化1602液晶
参ry数:
无
返回值ser:
无
/**********u************************************/
voidLCD1602se55u_init()
{s
LruCD_OUT。
LCsruD_C_DDR。
LCD_OE_L。
LCD1urt602_write_com(0X38)。
//设置16*2显示,5*7点阵,8位数据接口
delay(5)。
tru
LCD1602_write_com(0X0C)。
//设置开显示,不显示光标
delay(5)。
LCD1602_write_com(0X01)。
//显示清0,数据指针清0
delay(5)。
LCD1602_write_com(0X06)。
//写一个字符后地址指针加1
delay(5)。
//LCD1602_write_com(0X80+0x0f)。
//将数据指针定位到第一行第一个字处:
LCD1602_write_com(0X80)
///delay(5)。
//写第二行时要重新定位数据指针
//write_com(0X80+0x40)
}
/*******************************************
函数名称:
DS1302_init
功能:
初始化DS1302地数据接口
参数:
无
返回值:
无
/********************************************/
voidDS1302_portinit(void)
{
DDRB|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS)。
//将时钟端(RTC_CLK)数据端(RTC_DATA)片选端(RTC_CS)设置为输出
DS1302_writeD(C_WP|WR,UPROTECT)。
//写入写允许命令
DS1302_wr