于基arm7的电压检测系统设计课程设计本科毕业设计Word格式文档下载.docx
《于基arm7的电压检测系统设计课程设计本科毕业设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《于基arm7的电压检测系统设计课程设计本科毕业设计Word格式文档下载.docx(26页珍藏版)》请在冰豆网上搜索。
实现了电压数据的自动采集、传输、处理与显示等功能,解决了传统的数据采集系统由于存在响应慢、精度低、可靠性差、效率低、操作繁琐等弊端。
关键字:
ARM微处理器、电压检测、AD转换
目录:
1、引言-----------------------------------------------------------------------3
2、设计目的-----------------------------------------------------------------3
3、设计要求-------------------------------------------------------------------3
4、系统总方案-------------------------------------------------------------3
5、硬件设计------------------------------------------------------------------4
1、电压检测模块设计-------------------------------------------------4
2、键盘设计---------------------------------------------------------------4
3、显示模块设计------------------------------------------------------5
4、A/D转换模块设计------------------------------------------------7
5、串行口通信模块设计--------------------------------------------7
6、声光报警模块设计---------------------------------------------------9
6、软件流程图-----------------------------------------------------------------10
7、程序代码设计----------------------------------------------------------11
8、设计结果演示----------------------------------------------------------21
9、设计体会------------------------------------------------------------------22
10、附录---------------------------------------------------------------------22
一、引言
所以市场上涌现出多种多样的智能电压传感器。
电压监测系统在工业生产和科学研究等各个行业开辟了更为广阔的发展空间。
也为嵌入式系统的进一步发展奠定良好的基础。
电压监测系统不论在哪个应用领域中,数据采集与处理越及时,工作效率就越高,取得的经济效益也越高而且比较价格低,在工农业中得到了广泛的应用。
本文设计的报警系统对电路电压进行实时的采样,一旦电压高于设定的正常阈值,系统就会触发报警动作,提醒人们做出相应措施。
本设计采用了飞利浦的32位ARM微处理器LPC2138作为核心处理器。
二、设计目的
1.通过本课程设计,熟悉嵌入式系统开发方法和流程。
2.能结合课堂所学自主设计实现一个简单的监测报警系统。
3.进一步学会应用定时器、A/D、显示等模块功能。
三、设计要求
1.要求能利用学过的A/D转换、定时器、按键等模块,实现电压(可用滑动电阻)的检测、显示、阈值设置,以及超过阈值能声光报警。
2.扩展功能:
将电压数据通过串行通信(UART)发送到PC上位机显示。
四、系统总体方案
本系统设计框图如下图1:
液晶显示
图1:
系统总框图
电压信号经电压检测模块采样得到模拟信号,该信号送到AD转换模块处理成数字信号。
五、硬件设计
1、电压检测模块设计
通过滑动变阻器的滑动,改变采样电阻所分电压值,此值可以通过采样引脚实时传送给CPU,这样便可通过AD转换模块将采得的电压值转换成数字信号,经处理后送显示输出模块。
本系统采用1K的电阻作为采样电阻,以最高采样电压为3.3v为例,实际应用中可根据情况更改其他阻值。
其结构设计如下图2:
图2:
电压检测模块
2、键盘设计
本系统设置两个机械按键,一个是控制门值电压的增加,另一个控制门值电压的减少。
每按下一次,门值电压值加0.1v或减0.1v。
这样可以控制检测电压的阀值得大小,其设计电路图如下3:
图3:
按键设计
3、显示模块设计
本模块采用液晶显示屏,具有显示质量高,数字式接口,体积小、重量轻,功耗低等特点。
因1602液晶屏并未做系统学习,现对采用的1602字符型LCD做如下简介:
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法
1602LCD的基本参数及引脚功能
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图5所示:
图51602LCD尺寸图
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示:
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
3
VL
液晶显示偏压
11
D4
4
RS
数据/命令选择
12
D5
5
R/W
读/写选择
13
D6
6
E
使能信号
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
表1:
引脚功能说明
仿真图如下图5:
图5:
LCD显示模块
4、A/D转换模块设计
在设计时应考虑A/D转换模块的如下特性:
1.本系统芯片是10位逐次逼近式模数转换器
2.4个(LPC2114/2124)或8个(LPC2210/2212/2214)引脚复用为A/D输入脚,本系统设计只采用一路A/D采样通道。
3.测量范围:
0~3.3V
4.10位转换时间>
=2.44us
A/D转换器的基本时钟由VPB时钟提供。
可编程分频器可将时钟调整至逐步逼近转换所需的4.5MHz(最大)。
10位精度要求的转换需要11个A/D转转换时钟。
ADC转换时钟分频值计算:
5、串行口通信模块设计
LPC2114/2124/2210/2212/2214的两个UART,均具有16字节的收发FIFO,寄存器位置符合16C550工业标准,内置波特率发生器,两个串口具有基本相同的寄存器,其中UART1带有完全的调制解调器控制握手接口。
在使用UART与上位机PC通讯时,需要一个RS232电平转换电路,在本系统中直接采用虚拟终端。
UART0的基本寄存器功能框图如下图6:
图6:
UART0的基本寄存器功能框图
其中,寄存器U0RBR与U0THR是同一地址,但物理上是分开的,读操作时为U0RBR,而写操作时为U0THR;
寄存器U0DLL与U0RBR/U0THR、U0DLM与U0TER具有同样的地址,如果要访问U0DLM、U0DLL,除数访问位DLAB必须为1,若要访问U0RBR/U0THR、U0IER,则除数访问位DLAB必须为0。
图5.34中,U0DLM和U0DLL寄存器是波特率发生器的除数锁存寄存器,用于设置合适的串口波特率;
U0RBR为数据接以缓冲,用于读取接收到的数据,若FIFO使能,串口接收到的数据会压入FIFO缓冲;
U0THR为发送保存,向此寄存器写入数据时,将会引起串口数据发送,若FIFO使能,数据会压入FIFO缓冲。
波特率的除数计算如下:
其中,baud为所需要的波特率。
在PROTEUS仿真中采用如下虚拟终端:
在仿真过程中可得到如下显示现象:
图7:
虚拟终端
6、声光报警模块设计
声光报警模块可以在被测信号超过规定值时,发出蜂鸣以示警告,同时LED灯发出视觉信号。
具体操作时,可使用按键设置报警门值电压,当被测信号超出门值电压时,会发出声光报警信号,提醒操作者采取措施。
其设计图如下图8:
图8:
声光报警模块设计
图9:
报警效果图
六、软件流程图
开始
初始化
门值设置
电压检测
小于门值
大于门值
比较
不报警
声光报警
显示
七、程序代码设计
1、主程序设计:
#include<
stdio.h>
#include"
NXP/iolpc2138.h"
cry1602.c"
cry1602.h"
uart.h"
#defineuintunsignedint
#defineucharunsignedchar
voidadcini();
voidTime0init(void);
uintv_gate=120,v_now,v_nows;
voidmain()
{
PINSEL0=0;
PINSEL0=0x00000005;
//设置I/O连接到UART0
PINSEL1=0x00000000;
PINSEL2=0x00000000;
IO1DIR=IO1DIR|0xffffffff;
IO0DIR&
=(~0x00003800<
<
16);
IO0DIR|=1<