模拟路灯控制系统1组液晶.docx

上传人:b****6 文档编号:7975240 上传时间:2023-01-27 格式:DOCX 页数:23 大小:335.81KB
下载 相关 举报
模拟路灯控制系统1组液晶.docx_第1页
第1页 / 共23页
模拟路灯控制系统1组液晶.docx_第2页
第2页 / 共23页
模拟路灯控制系统1组液晶.docx_第3页
第3页 / 共23页
模拟路灯控制系统1组液晶.docx_第4页
第4页 / 共23页
模拟路灯控制系统1组液晶.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

模拟路灯控制系统1组液晶.docx

《模拟路灯控制系统1组液晶.docx》由会员分享,可在线阅读,更多相关《模拟路灯控制系统1组液晶.docx(23页珍藏版)》请在冰豆网上搜索。

模拟路灯控制系统1组液晶.docx

模拟路灯控制系统1组液晶

2009年全国大学生电子设计竞赛设计报告

 

模拟路灯控制系统(I题)

【高职高专组】

 

参赛学校:

湖南铁道职业技术学院

参赛队员:

曾雄英殷理杰程城

 

2009年9月

模拟路灯控制系统

摘要:

本系统采用3片Atmel公司的AT89S51单片机作为系统的控制器件,其中支路控制器为主控制器,两个单元控制器作为从控制器。

支路控制器接显示器和键盘组成人机界面,可通过外部时钟模块进行开关灯定时控制,可通过光敏传感器检测环境明暗程度,可通过反射式红外传感器检测交通情况,以控制LED的亮灭。

在单元控制器中,采用OP07集成运放接大功率场效应管设计了LED压控恒流源,可由单片机通过D/A方便地控制恒流源的输出电流和功率,并由A/D芯片将功率数据反馈到单片机,形成闭环自动控制系统。

支路控制器与单元控制器之间采用485工业串口进行通信,可推广到现场实际应用中。

关键词:

路灯 89S51单片机 恒流源

1方案设计与比较

1.1LED恒流源设计方案

方案一:

分立元件设计法。

LED恒流源可以采用三极管、稳压管加电阻等分立元件进行设计,具有电路简单、成本低等优点,但是性能较差,单片机不好控制。

方案二:

专用芯片设计法。

市面上有不少专用LED恒流源的驱动芯片,如美国安森美公司的CAT4201以及UCT4611,SN3350等。

采用专用芯片电路简单可靠、性能好,通过PWM可控制输出电流大小,但是功率数据不易采集。

方案三:

运放设计法。

采用OP07集成运放接大功率场效应管等元器件组成压控恒流源,这种方案具有电路简单可靠、性能好、单片机容易控制、功率数据易于采集等优点,故本系统采用此方案。

1.2移动物体通过检测方案

方案一:

超声波检测法。

利用超声波发射接收的时间差不同,可用来检测是否有物体通过。

该方法简单有效,但由于声波的发散特性,精度达不到题目要求。

方案二:

红外对管检测法。

采用位于同一直线上面对面放置的一个红外发射管和一个红外接收管(即红外对管),可以用来检测是否有物体通过其间。

只需通过检测红外接收管的电阻变化,即可以方便地掌握物体通过情况。

该方法简单易行,检测距离远,但是安装调试较困难,受环境光影响较大。

方案三:

反射式红外传感器检测法。

利用红外线发射接收的时间差不同,也可来检测是否有物体通过。

该方法同样简单有效,安装方便,精度高,经过调试,检测距离可超过20cm,故本系统采用该方案。

1.3整体方案

方案一:

单MCU控制法。

单从题目功能的实现,采用单MCU方案是可行的。

支路控制器采用单MCU设计,所有外部接口(包括键盘、显示器、时钟模块、光电传感器、红外对管、AD、DA等)都挂在这个MCU上。

两个单元控制器不带MCU,只设计恒流源。

两个恒流源的控制及功率数据采集由支路控制器中的MCU通过双通道的A/D、D/A来完成。

这种方案单元控制器电路相当简单,支路控制器电路较为复杂,MCU工作负荷大,I/O资源紧张。

整体方案成本较低,易于实现,但不符合实际情况,不满足题意。

方案二:

主从机协同控制法。

支路控制器、单元控制器各采用1片MCU进行控制,支路控制器的主MCU与单元控制器的从MCU之间采用串口通信进行数据交换。

支路控制器只用于人机界面、开关灯时间设定、自动亮度识别、道路通过检测及故障报警等,而各个LED恒流源及其控制、数据采集电路均集成到单元控制器电路中,并由其内部的从MCU通过串口接收主MCU的指令进行控制。

此方案各MCU分工合理,协同工作,负荷不高,电路、程序都较简单。

同时采用工业串口,传输距离远,可推广到实际应用中,故本系统采用该方案。

2理论分析与计算

2.1功率数据采集原理分析

单元控制器采集当前LED的输出功率数据分两步进行:

一、采集通过LED的电流值。

由于本系统采用压控恒流源,故通过LED的电流即为通过采样电阻的电流,因为采样电阻阻值为1Ω,所以电流等同于采样电阻上的电压。

又因为前级运放OP07接成电压跟随器,该值即为D/A输出的电压值,在单元控制器在设定LED输出功率时已知。

二、采集LED两端的电压值。

该值由LM358接成减法器直接在LED两端取得,经A/D转换送给从机。

将这两个值相乘,即得到当前LED的功率值。

2.2功率调节原理分析

设定功率时,单元控制器并不能一步到位。

必须先通过D/A输出一个初始的LED电流值,然后通过A/D把LED两端电压读回来,将电流与电压相乘得到的功率值与需设定值进行比较,如果小于设定值,则增加D/A的输出;如果大于,则减小D/A的输出。

通过这种闭环系统,使当前输出功率值逐步逼近设定功率值。

2.3调节误差分析

D/A设定恒流源电流值、A/D采集电压数据都将带来转换误差,这是A/D、D/A器件本身硬件带来的,不可避免。

A/D、D/A位数越高,转化误差越小,调节误差也越小。

本系统采用12位的A/D、D/A器件,转换误差小于0.1%,而功率误差由电流转化误差与电压转换误差共同决定,由于他们之间是乘积关系,因此误差的数量级不会上升,总的调节误差小于0.5%,精度完全符合题目要求。

3电路设计

3.1系统框图

系统框图如图1所示。

图1系统框图

3.2显示器模块电路

该模块采用1个1602液晶模块构成,数据线控制线接单片机I/O,电路如图2所示。

图21602液晶显示电路图3光传感器电路

3.3光传感器模块

采用光敏电阻作为敏感元件,当环境亮度较高时,光敏电阻R1阻值很小,P17为低电平;当环境亮度较低时,光敏电阻R1阻值很大,P17为高电平。

电路如图3所示。

3.4时钟电路

时钟模块用于给MCU提供精确时间数据,从而使支路控制器能够准确控制LED的开关灯时间。

该模块采用具有I2C接口的PCF8563来进行设计,只占用MCU2个I/O,该模块电路如图4所示。

图4PCF8563时钟电路

3.5反射式红外传感器检测电路

系统采用反射式红外传感器实现道路通过情况的检测。

反射式红外传感器使用起来非常方便,只需三条线(电源、地和数据线)就可以进行控制。

当该传感器接上电源后,如果没有物体通过,数据线保持高电平;如果有物体通过时,其反射回来的红外信号将被传感器接收,数据线电平将被拉低。

3.6声光报警电路

采用一个普通发光二极管加一个蜂鸣器实现,当LED出现故障时的声光报警提示功能。

如图6所示为声光报警电路。

图6声光报警电路

3.7A/D电路

该模块采用TI公司双通道12位串行ADCTLC2552实现,用于采集LED上电压值到从机。

其电路如图7所示:

图7A/D转换电路

3.8D/A转换电路

该模块采用Linear公司12位串行DACLTC2622实现,用于设定恒流源的输出电流及功率。

电路如图8所示:

图8D/A转换电路

3.9串口接口电路

本系统采用工业串口485进行主机与从机间的通信,其接口电路如图9所示:

图9串口接口电路

4程序设计

4.1定时开关灯的实现

支路控制器通过不停的读取时钟芯片中的时间值,并将其与开关灯设定时间做比较,如果达到开灯或关灯时间,主机将产生中断,将开灯或关灯指令通过485串口发到相应的单元控制器,单元控制器一旦发现串口有数据送来,立即产生串口中断,并从串口数据中获取开灯或关灯指令,再通过控制继电器的闭合与断开实现该功能。

4.2功率调节的实现

当调节功率时,单元控制器并不能一步到位,立即使当前功率值等于设定功率值。

必须先通过D/A输出一个初始的LED电流值,然后通过A/D把LED两端电压读回来,将电流与电压相乘得到的功率值与需设定值进行比较,如果小于设定值,则增加D/A的输出;如果大于,则减小D/A的输出。

通过这种闭环系统,使当前输出功率值逐步逼近设定功率值。

4.3程序流程图

主机的主程序流程图、从机程序流程图、从机中断程序流程图分别如图10、11、12所示。

图10主机主程序流程图

图11从机主程序流程图图12从机中断服务程序流程图

5系统测试

5.1测试仪器

DS-1双通道直流稳压源、C31-A型高精度指针式毫安表、C31-V型高精度指针式电压表

5.2测试方案

功能逐项测试法:

根据题目要求,依次逐项测试系统功能。

数据实测计算法:

使用精密毫伏表、电压表,实时测试通过LED的电流及其两端的电压,再计算出LED的输出功率,并将其与控制器设定的功率值进行比较,以计算出调节误差。

5.3测试结果

1)功能完成情况

经测试,系统可完成题目的基本及发挥部分全部功能。

2)指标完成情况

本题的指标主要是恒流源输出功率的调节误差。

经测试,测试数据及计算结果如表1所示:

表1恒流源的功率数据及调节误差表

设定功率百分比

仪器测量电流值(mA)

仪器测量电压值(V)

实际功率计算值(W)

调节误差

20%

64.99

2.81

0.1826

1.74%

55%

180.18

2.99

0.5387

1.13%

76%

240.13

3.11

0.7468

1.32%

100%

307.86

3.21

0.9882

1.18%

5.4结果分析

通过测试、计算和分析,系统完成题目的基本及发挥部分全部功能,并在设定调节LED输出功率的指标上达到题目发挥部分要求,整体性能达到题目发挥部分要求。

6总结

本系统采用3片Atmel公司的AT89S51单片机作为系统的控制器件,其中支路控制器为主控制器,两个单元控制器作为从控制器。

支路控制器接显示器和键盘组成人机界面,可通过外部时钟模块进行开关灯定时控制,可通过光敏传感器和电压比较器检测环境明暗程度,可通过发射式红外传感器检测交通情况,控制LED的亮灭。

在单元控制器中,采用OP07集成运放接大功率场效应管设计了LED压控恒流源,可由单片机通过D/A方便地控制恒流源的输出电流和功率,并由A/D芯片将功率数据反馈到单片机,形成闭环自动控制系统。

支路控制器与单元控制器之间采用485工业串口进行通信,可推广到实际应用中。

所有功能和指标均达到或部分超过赛题要求。

参考文献

[1]宋文绪,杨帆.自动检测技术.北京:

高等教育出版社,2008.

[2]高吉祥.全国大学生电子设计竞赛培训系列教程.北京:

电子工业出版社,2007.

[3]周坚.单片机C语言轻松入门.北京:

北京航空航天出版社,2006.

[4]孙传友等.测控电路及装置.北京:

北京航空航天大学出版社,2002.

[5]李朝青著.单片机原理及接口技术.北京航空航天大学出版社,2005.

附件1:

支路控制器单片机电路图

附件2:

单元控制器单片机电路图

附件3:

恒流源电路图

附件4:

主要PCB图

1)恒流源PCB图

2)主控电路PCB

3)从机电路PCB

附件5:

主要元器件清单

序号

元器件名称

型号、规格

数量

1

单片机

AT89S51

3

2

路灯LED

1W

2

3

ADC

TLC2552

2

4

DAC

LTC2622

2

5

液晶显示器

1602

1

6

74LS138

1

7

LM358

2

8

OP-07

1

9

晶振

11.0592M

3

10

按键

4

11

大功率电阻

1欧5W

2

12

继电器

2

13

场效应管

IRFZ44N

2

14

三端稳压器

7809

2

15

各类电阻

若干

16

各类电容

若干

附件6:

部分程序清单

(1)主机部分程序

#include

#include

#defineUINT8unsignedchar

#defineUINT16unsignedint

sbitRS=P2^5;

sbitRW=P2^6;

sbitE=P2^7;

//sbitout1=P1^0;

sbitin1=P1^7;

//sbitout2=P1^1;

sbitSpeaker=P3^7;

sbitRENENABLE=P3^2;

sbitNo1=P1^0;

sbitNo2=P1^1;

sbitNo3=P1^2;

sbitNo4=P1^3;

sbitNo5=P1^4;

sbitNo6=P1^5;

sbitNo7=P1^6;

sbitISDA=P3^4;//IO口冲突

sbitISCL=P3^3;

#defineDataP0

#defineS10xfe//1号键

#defineS20xfd//2号键

#defineS30xfb//3号键

#defineS40xf7//4号键

#defineS50x7e//长按键

UINT8codetab[]={'0','1','2','3','4','5','6','7','8','9'};//字符变量数组

UINT8idataText1[16]="**-RealTime-**";//字符变量数组

UINT8idataText2[16]="*---:

:

---*";//字符变量数组00:

00:

00

UINT8idataText3[16]="**-OpenTime-**";

UINT8idataText4[16]="**CloseTime-**";

UINT8codeText5[16]="**Test1**";

UINT8codeText6[16]="**Test2**";

UINT8codeText7[16]="**Test3**";

UINT8codeText8[16]="**Normal**";

UINT8idataText9[16]="Power0is%";

UINT8idataText10[16]="Power1is%";

UINT8codeText11[16]="Led0wasbroken.";

UINT8codeText12[16]="Led1wasbroken.";

UINT8codeText13[16]="Welcome...";

UINT8Time=0;

UINT8Sec=00,Min=00,Hou=00;

UINT8Mod=0,Set=0;

UINT8OpenHou0,OpenMin0,OpenSec0,CloseHou0,CloseMin0,CloseSec0;

UINT8OpenHou1,OpenMin1,OpenSec1,CloseHou1,CloseMin1,CloseSec1;

UINT8TextModNum=0;

UINT8PowerA=70,PowerB=70;

UINT8AdjustN=0;

UINT8Hypotaxis=0;

bitLedFlag0=0;

bitLedFlag1=0;

bitLed1=0,Led2=0,Led3=0,Led4=0,Led5=0,Led6=0;

bitNum=0;

bitTimeFlag0=0;

bitTimeFlag1=0;

bitLedFlag2=1;

bitReadFlag=0;

bitAdjustFlag=0;

bitAdjustPowerFlag=0;

bitL1BFlag=0,L2BFlag=0;

bitTestLedFlag=0;

bitLedFlagLight1=0;

bitLedFlagLight2=0;

/******************通讯协议***********************/

#defineADDR10x01

#defineADDR20x02

#defineLedLight0x03

#defineLedDrown0x04

#defineLedTest0x05

#defineLedBro0x06

#defineLedRight0x07

/*************************************************/

/**********************函数声明*******************/

voidAdjust(void);

/*************************************************/

 

voidDelayms(unsignedintcount)

{

unsignedinti;

for(i=0;i

}

voidDelay_ms(UINT16t)

{

UINT16i,j;

for(i=0;i

for(j=0;j<124;j++);

}

voidWriteCommand(unsignedcharCom)

{

E=0;

RS=0;E=1;RW=0;

Data=Com;

E=0;RS=0;RW=0;

}

voidWriteData(unsignedcharDat)

{

E=0;

RS=1;E=1;RW=0;

Data=Dat;

E=0;RS=0;RW=0;

}

voidInit1602()

{

Delayms(500);

WriteCommand(0x38);

Delayms(200);

WriteCommand(0x38);

Delayms(200);

WriteCommand(0x38);

Delayms(1400);

WriteCommand(0x38);//显示模式设置,开始要求每次检测忙信号

Delayms(1400);

WriteCommand(0x08);//关闭显示

Delayms(1400);

WriteCommand(0x01);//显示清屏

Delayms(1400);

WriteCommand(0x06);//显示光标移动设置

Delayms(1400);

WriteCommand(0x0C);//显示开及光标设置

}

voidShow_Text(char*Text,charrow)//显示行

{

unsignedchari;

if(row==0)

{

WriteCommand(0x80);

Delayms(1400);

for(i=0;i<16;i++)

{

WriteData(Text[i]);

}

}

else

{

WriteCommand(0xC0);

Delayms(1400);

for(i=0;i<16;i++)

{

WriteData(Text[i]);

}

}

}

(2)从机部分程序

#include

#include

#include

#defineUINT8unsignedchar

#defineUINT16unsignedint

UINT16ADCDat[2];

UINT8Power;

UINT16codetable[9]={1,30,80,90,130,160,190,220,260};

sbitDA_CS=P1^3;

sbitDA_SCK=P1^4;

sbitDA_SDI=P1^5;

sbitADCS=P1^2;

sbitADCLK=P1^1;

sbitADSDO=P1^0;

sbitRENENABLE=P1^6;

sbitBUTTON=P2^0;

floatA=100;

floatErrorData=65536;

floatRealPower=0;

UINT16AnsK=0;

UINT16k=0,Temp2=100;

bitflag;

bitLedBroken=0;

bitLedFlag=0;

/********************通讯协议********************/

#defineAddr0x01

#defineLedLight0x03

#defineLedDrown0x04

#defineLedTest0x05

#defineLedBro0x06

#defineLedRight0x07

/************************************************/

/*********************函数声明*******************/

voidWrite_LTC2622(UINT16Data);

voidRead_TLC2552(void);

/************************************************/

/********************系统初始化******************/

voidSysInit()

{

RENENABLE=0;

SCON=0xf0;

TMOD=0x20;

TH1=0xfd;

TL1=0xfd;

TR1=1;

EA=1;

ES=1;

}

/************************************************/

voidDelay_ms(UINT16t)

{

UINT16i,j;

for(i=0;i

for(j=0;j<124;j++);

}

 

/******************功率调节**********************/

voidAdjustPower(UINT8P)

{

UINT8temp1;

UINT16Add=0;

floattemp=0;

floattt=0;

bitFlag1=0;

temp1=P/10;

switch(temp1)

{

case2:

k=table[0];break;

case3:

k=table[1];break;

case4:

k=table[2];break;

case5:

k=table[3];break;

case6:

k=table[4];break;

case7:

k=table[5];break;

case8:

k=table[6];break;

case9:

k=table[7];break;

case10:

k=table[8];break;

}

while

(1)

{

Write_LTC2622(k);

Delay_ms

(1);

Read_TLC2552();

Delay_ms

(1);

tt=(5000/4096)*ADCDat[0];

RealPower=((2500*k)/4096)*tt;

if(tt>=3500)

{

LedBroken=1;

}

else

LedBroken=0;

temp=(P*10-RealPower);

if(temp<0)

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 成考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1