基于的电压检测报警系统Word下载.docx
- 文档编号:16190057
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:16
- 大小:282.78KB
基于的电压检测报警系统Word下载.docx
《基于的电压检测报警系统Word下载.docx》由会员分享,可在线阅读,更多相关《基于的电压检测报警系统Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
嵌入式系统ARMLPC318LM016L液晶显示电压采集电压报警
一、引言
1.1设计目的
1.通过本课程设计,熟悉嵌入式系统开发方法和流程。
2.能结合课堂所学自主设计实现一个简单的监测报警系统。
3.进一步学会应用定时器、A/D、显示等模块功能
1.2设计要求
1.根据题目,自行设计方案,并编写程序
2.要求能利用学过的A/D转换、定时器、按键等模块,实现温度(可用DS18B20传感器)或电压(可用滑动电阻)的检测、显示、阈值设置,以及超过阈值能声光报警。
3.扩展功能:
将温度/电压数据通过串行通信(UART)发送到PC上位机显示,由上位机可显示实时监测数据、历史曲线,并可发送控制命令给ARM实现报警或关闭加热源/电源。
注:
上位机软件程序可用VB、VC++做界面,也可简单地通过“串口调试软件”显示。
2、总体方案设计
2.1系统总体方案
Philips公司的32位ARM7微控制器LPC2138具有强大的存储空间,内嵌32KB片内静态RAM和512KB的Flash存储器;
可以实现在系统可编程(ISP)、在应用可编程(IAP);
2个8路10位A/D转换器,1个D/A转换器,转换迅速准确;
引脚资源丰富,多达47个可承受5V电压的通用I/O口;
多个串行接口,包括2个16C550工业标准UART、2个高速I2C接口、SPI,以及具有缓冲作用和数据长度可变功能的SSP协议。
LPC2138可以移植μC/0S-II操作系统,软件的可移植性好,工作可靠。
LM016L液晶应用非常广泛,操作简单,功能强大,通过对LM016L的编程来读取滑动变阻器和按键的值来获取相应的信息,再通过对液晶的编程控制将获取到的信息通过一系列转换从而显示到液晶屏上。
最后达到有电压采集显示和报警等功能。
系统论证时通过在proteus的仿真,能够达到预期的效果!
系统设计方案的确定
核心控制体:
LPC2138
显示:
LM016L
电压检测传感器:
滑动变阻器
报警模块,LED报警。
2.2系统原理图
三、硬件设计
3.1设计思路
本设计的基于ARM的电压报警系统框图如下图所示。
由图可见,本系统采用“ARM核心控制模块+电压采集模块+报警模块”实现所需功能。
并考虑到系统的可扩展性和延伸性,本系统添加了按键模块,使系统更加完善,提高了扩展性。
系统原理框图
3.2系统电路设计
3.2.1电压检测模块电路设计
通过改变滑动变阻器串入的阻值来改变采样电阻所分电压值,此值可以通过A/D转换模块将采样所得的电压值转换为数字信号,从而显示到显示模块。
3.2.2按键模块电路设计
设有两个按键,按上上面的按键阀值增加1000mv,按下下面的按键阀值减少1000mv。
界面简单,操作方便。
3.2.3报警模块电路设计
报警系统由LED构成,在被测电压超过阀值时LED变亮发出警告。
数据端口接P0.21(由LPC的P0.21直接输出驱动)。
3.2.4LCD显示模块电路设计
运行时,上面显示的是此刻检测到的电压,下面显示的是报警电压阀值。
四、软件设计
4.1设计思路
本系统软件设计是在CodeWarriorforADS开发环境下完成的。
本电压报警系统的主体由LPC2138核心控制模块构成,所以系统软件也是围绕这个模块来编写的。
程序流程图如下图。
N
Y
由该流程图可看出,刚上电时,要先进行ARM内部的初始化,以使ARM进入相应的状态和模式;
然后初始化硬件装置,以使硬件系统可以正常支持电压数据采集;
然后初始化LCD显示和键盘,在LCD上显示相应的菜单列表,供用户通过按钮操作;
至此,系统初始化完成,并进入正常主程序循环状态。
在正常主程序循环状态中,首先扫描键盘,以快速的响应用户的按键操作;
若没有键值按下,则ARM立即进行数据的采集、处理与显示,以实现实时数据采集与显示等功能。
其主程序包括电压采集程序、ARM获取电压子程序、电压处理和转换子程序。
当ARM处理器接收到正确的电压数据后,立即进行相应的电压数据处理与转换,变成可被LCD直接显示的值。
4.2串口通信子程序
串口通信程序流程图如图所示。
串口通信子程序流程图
五、程序设计与调试
5.1程序代码
#defineuintunsignedint
#defineucharunsignedchar
#defineuint8unsignedchar
#defineuint32unsignedint
#include"
stdio.h"
lpc21xx.h"
#defineRS(1<
<
24)
#defineRW(1<
25)
#defineE(1<
26)
#defineBUSY(1<
23)
#definebaojing(1<
1)
uint32adc_data,v_test,a,b,c,d,v_set,e,f,g,h;
uint8dis[]="
v:
mv"
;
uint8str[]="
l:
uint32v_test,adc_data;
voidCheckBusy()
{
IO1DIR=(0x700)<
16;
while
(1)
{
IO1CLR=RS;
IO1SET=RW;
IO1SET=E;
if(!
(IO1PIN&
BUSY))
break;
}
IO1CLR=E;
IO1DIR=(0x7ff)<
}
voidWriteCommand(unsignedcharcommand)
CheckBusy();
IO1CLR=RW;
IO1CLR=(0xff)<
IO1SET=command<
voidWriteData(unsignedchardata)
IO1SET=RS;
IO1SET=data<
voidSet_XY(unsignedcharx,unsignedchary)
switch(x)
case0:
y+=0x80;
case1:
y+=0xc0;
WriteCommand(y);
voidDisplayChar(unsignedcharx,unsignedchary,unsignedchardata)
Set_XY(x,y);
WriteData(data);
voidDisplayString(unsignedcharx,unsignedchary,unsignedchar*str)
while(*str)
WriteData(*str);
str++;
voidInitLcd()
WriteCommand(0x01);
WriteCommand(0x38);
WriteCommand(0x0C);
voiddelay1ms(uintn)
{uinti,j;
for(i=0;
i<
n;
i++)
for(j=1;
j<
2500;
j++);
}
voiddelay(uintn)
500;
voidADC(void)
PINSEL1=0x00400000;
ADCR=(1<
0)|
((12000000/1000000-1)<
8)|
(0<
16)|
17)|
(1<
21)|
22)|
24)|
27);
while((ADDR&
0x80000000)==0);
adc_data=ADDR;
adc_data=(adc_data>
>
6)&
0x3ff;
v_test=(long)adc_data*3300/1024;
charkeyscan()
{chari=0;
if((IO0PIN&
0x01)==0)
{delay1ms(10);
{
i=1;
delay1ms(10);
}}
if((IO0PIN&
0x04)==0)
i=2;
return(i);
intmain()
{inti;
v_set=2500;
PINSEL0=0x00000000;
PINSEL1=0x400000;
IO0DIR|=2;
IO1DIR|=0x7ff0000;
IO0CLR|=baojing;
InitLcd();
DisplayString(0,0,dis);
DisplayString(1,0,str);
while
(1)
if(i==1)
{v_set=v_set-100;
if(i==2)
{v_set=v_set+100;
i=0;
ADC();
a=v_test/1000;
b=v_test%1000/100;
c=v_test%1000%100/10;
d=v_test%1000%100%10;
DisplayChar(0,2,a+0x30);
DisplayChar(0,3,b+0x30);
DisplayChar(0,4,c+0x30);
DisplayChar(0,5,d+0x30);
e=v_set/1000;
f=v_set%1000/100;
g=v_set%1000%100/10;
h=v_set%1000%100%10;
DisplayChar(1,2,e+0x30);
DisplayChar(1,3,f+0x30);
DisplayChar(1,4,g+0x30);
DisplayChar(1,5,h+0x30);
if(v_test>
v_set)
{IO0SET|=baojing;
delay(5);
}
else
IO0CLR|=baojing;
i=keyscan();
5.2程序代码调试
调试工具:
Proteus仿真工具、keil3
用Protues仿真工具画好原理图,打开keil,选用LPC2138芯片,在keil中新建工程,设置好端口,将编好的程序添加再加以编译,生成axf文件,双击Protues中LPC2138芯片,点击打开生成axf文件,然后可以进行仿真。
六、设计结果演示
6.1当前电压小于报警电压
当当前电压小于报警电压时,报警器不发光。
6.2当前电压大于报警电压
当当前电压大于报警电压时,报警器发光。
七、心得体会
在这次ARM嵌入式系统课程设计中,老师给我们的设计课题是《基于ARM的电压报警系统设计》。
通过这次课程设计,我对ARM嵌入式系统尤其是数据处理中的温度采集系统有了更进一步的了解,同时知识面也进一步得到了扩展和加深。
本次课程设计的任务主要是自行设计出电压报警装置,帮助我们更好的理解嵌入式系统和电压采集系统的原理和应用。
这次的设计时通过电压检测模块对当前电压进行数据的收集与处理,最后得到我们所需要的有用的数字信号并送入系统的下一环节进行其他操作。
在现代化社会中,这类的器件功能越来越强大,越来越人性化,将来有更多的功能等待我们去实现。
所以,学习和应用ARM为基础的各种设计及其应用技术对我们以后的学习和工作有着十分重要的意义。
参考文献
[1]周立功,ARM嵌入式系统基础教程[M].北京:
北京航空航天大学出版社2008
[2]周立功,深入浅出ARM7-LPC213X/214X[M].北京:
北京航空航天大学出版社2006
[3]周立功,从51到ARM-32位嵌入式系统入门[M].北京:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 电压 检测 报警 系统