基于的电压检测报警系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
一、引言....................................................................................... 错误!未定义书签。
1.1设计目的 (9)
1.2设计要求......................................................................... 错误!未定义书签。
二、总体设计方案....................................................................... 错误!未定义书签。
2.1系统总体方案................................................................. 错误!未定义书签。
2.2系统原理图..................................................................... 错误!未定义书签。
三、硬件设计 (2)
3.1设计思路 (5)
3.2系统电路设计 (5)
四、软件设计 (7)
4.1设计思路 (7)
4.2串口通信子程序............................................................. 错误!未定义书签。
五、程序设计与调试 (2)
5.1程序代码设计 (5)
5.2程序代码调试................................................................. 错误!未定义书签。
六、设计结果演示....................................................................... 错误!未定义书签。
七、心得体会............................................................................... 错误!未定义书签。
参考文献.. (18)
基于的电压检测报警系统
摘要:本设计是基于嵌入式技术作为主处理器的电压报警系统,利用LPC318作为主控CPU,辅以电压采集模块采集数据,用滑动变阻器与之相连。
实现了简单的电压报警功能。
运用LM016L液晶动态显示提高系统的显示质,且其数字式接口使操作更简单。
解决了传统的数据采集系统由于存在响应慢、精度低、可靠性差、效率低、操作繁琐等弊端,能够完全适应现代化工业的高速发展。
关键词:嵌入式系统 ARM LPC318 LM016L液晶显示电压采集电压报警
一、引言
1.1设计目的
1. 通过本课程设计,熟悉嵌入式系统开发方法和流程。
2. 能结合课堂所学自主设计实现一个简单的监测报警系统。
3. 进一步学会应用定时器、A/D、显示等模块功能
1.2设计要求
1. 根据题目,自行设计方案,并编写程序
2. 要求能利用学过的A/D转换、定时器、按键等模块,实现温度(可用DS18B20传感器)或电压(可用滑动电阻)的检测、显示、阈值设置,以及超过阈值能声光报警。
3. 扩展功能:将温度/电压数据通过串行通信(UART)发送到PC上位机显示,由上位机可显示实时监测数据、历史曲线,并可发送控制命令给ARM实现报警或关闭加热源/电源。
注:上位机软件程序可用VB、VC++做界面,也可简单地通过“串口调试软件”显示。
二、总体方案设计
2.1系统总体方案
Philips公司的32位ARM7微控制器LPC2138具有强大的存储空间,内嵌32 KB片内静态RAM和512 KB的Flash存储器;可以实现在系统可编程(ISP)、在应用可编程(IAP);2个8路10位A/D转换器,1个D/A转换器,转换迅速准确;引脚资源丰富,多达47个可承受5 V电压的通用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 转换模块将采样所得的电压值转换为数字信号,从而显示到显示模块。
报警模块
ARM 处理器 LCD 显示器
按键模块
电压检测模
块
3.2.2按键模块电路设计
设有两个按键,按上上面的按键阀值增加1000mv,按下下面的按键阀值减少1000mv。
界面简单,操作方便。
3.2.3报警模块电路设计
报警系统由LED构成,在被测电压超过阀值时LED变亮发出警告。
数据端口接P0.21(由LPC的P0.21直接输出驱动)。
3.2.4 LCD显示模块电路设计
运行时,上面显示的是此刻检测到的电压,下面显示的是报警电压阀值。
四、软件设计
4.1设计思路
本系统软件设计是在CodeWarrior for ADS开发环境下完成的。
本电压报警系统的主体由LPC2138核心控制模块构成,所以系统软件也是围绕这个模块来编写的。
程序流程图如下图。
开始
ARM初始化
LED显示初始化
串口显示初始化
AD转换,显示屏显示,串口显示运行
N
V》I
Y
指示灯发光
调节按键改变电阻或改变报警电压
由该流程图可看出,刚上电时,要先进行ARM 内部的初始化,以使ARM进入相应的状态和模式;然后初始化硬件装置,以使硬件系统可以正常支持电压数据采集;然后初始化LCD显示和键盘,在LCD上显示相应的菜单列表,供用户通过按钮操作;至此,系统初始化完成,并进入正常主程序循环状态。
在正常主程序循环状态中,首先扫描键盘,以快速的响应用户的按键操作;
若没有键值按下,则ARM立即进行数据的采集、处理与显示,以实现实时数据采集与显示等功能。
其主程序包括电压采集程序、ARM获取电压子程序、电压处理和转换子程序。
当ARM 处理器接收到正确的电压数据后,立即进行相应的电压数据处理与转换,变成可被LCD直接显示的值。
4.2 串口通信子程序
串口通信程序流程图如图所示。
串口通信子程序流程图
五、程序设计与调试
5.1程序代码
#define uint unsigned int
#define uchar unsigned char
#define uint8 unsigned char
#define uint32 unsigned int
#include "stdio.h"
#include "lpc21xx.h"
#define RS (1<<24)
#define RW (1<<25)
#define E (1<<26)
#define BUSY (1<<23)
#define baojing (1<<1)
uint32 adc_data,v_test,a,b,c,d,v_set,e,f,g,h;
uint8 dis[]="v: mv";
uint8 str[]="l: mv";
uint32 v_test,adc_data;
void CheckBusy()
{
IO1DIR = (0x700)<<16;
while(1)
{
IO1CLR = RS;
IO1SET = RW;
IO1SET = E;
if(!(IO1PIN & BUSY))
{
break;
}
IO1CLR = E;
}
IO1DIR = (0x7ff)<<16;
}
void WriteCommand(unsigned char command) {
CheckBusy();
IO1CLR = RS;
IO1CLR = RW;
IO1CLR = (0xff)<<16;
IO1SET = command<<16;
IO1SET = E;
IO1CLR = E;
}
void WriteData(unsigned char data)
{
CheckBusy();
IO1SET = RS;
IO1CLR = RW;
IO1CLR = (0xff)<<16;
IO1SET = data<<16;
IO1SET = E;
IO1CLR = E;
}
void Set_XY(unsigned char x,unsigned char y)
{
switch(x)
{
case 0:
y+=0x80;
break;
case 1:
y+=0xc0;
break;
}
WriteCommand(y);
}
void DisplayChar(unsigned char x,unsigned char y,unsigned char data)
{
Set_XY(x,y);
WriteData(data);
}
void DisplayString(unsigned char x,unsigned char y,unsigned char *str) {
Set_XY(x,y);
while(*str)
{
WriteData(*str);
str++;
}
}
void InitLcd()
{
WriteCommand(0x01);
WriteCommand(0x38);
WriteCommand(0x0C);
}
void delay1ms(uint n)
{uint i,j;
for(i=0;i<n;i++)
for(j=1;j<2500;j++);}
void delay(uint n)
{uint i,j;
for(i=0;i<n;i++)
for(j=1;j<500;j++);}
void ADC(void)
{
PINSEL1=0x00400000;
ADCR=(1<<0)|
((12000000/1000000-1)<<8)|
(0<<16)|
(0<<17)|
(1<<21)|
(0<<22)|
(1<<24)|
(0<<27);
while((ADDR&0x80000000)==0);
adc_data=ADDR;
adc_data=(adc_data>>6)&0x3ff;
v_test=(long)adc_data*3300/1024;
}
char keyscan()
{char i=0;
if((IO0PIN&0x01)==0)
{delay1ms(10);
if((IO0PIN&0x01)==0)
{
i=1;
delay1ms(10);
} }
if((IO0PIN&0x04)==0)
{delay1ms(10);
if((IO0PIN&0x04)==0)
{
i=2;
delay1ms(10);
} }
return(i);}
int main()
{ int i;
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]. 北京:北京航空航天大学出版社2006。