数字电压表设计报告 本文关键词:电压表,数字,报告,设计
数字电压表设计报告 本文简介:课程设计报告题目:数字电压表学生姓名:张强学生学号:1214010242系别:电气信息工程学院专业:自动化(2)班届别:2012指导教师:徐峰1设计总体方案1.1设计要求⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。⑵采用1路模拟量输入,能够测量0-5V之间的直流电压值。⑶电压
数字电压表设计报告 本文内容:
课程设计报告
题
目:数字电压表
学生姓名:张强
学生学号:1214010242
系
别:电气信息工程学院
专
业:自动化(2)班
届
别:2012
指导教师:
徐峰
1
设计总体方案
1.1设计要求
⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。
⑵采用1路模拟量输入,能够测量0-5V之间的直流电压值。
⑶电压显示用4位一体的LED数码管显示,至少能够显示两位小数。
⑷尽量使用较少的元器件。
1.2
设计思路
⑴根据设计要求,选择AT89C51单片机为核心控制器件。
⑵A/D转换采用ADC0808实现,与单片机的接口为P1口和P2口的高四位引脚。
⑶电压显示采用4位一体的LED数码管。
⑷LED数码的段码输入,由并行端口P0产生:位码输入,用并行端口P2低四位产生。
1.3
设计方案
硬件电路设计由6个部分组成;
A/D转换电路,AT89C51单片机系统,LED显示系统、时钟电路、复位电路以及测量电压输入电路。硬件电路设计框图如图1所示。
时钟电路
复位电路
A/D转换电路
测量电压输入
显示系统
AT89C51
P1
P2
P2
P0
图1
数字电压表系统硬件设计框图
2
硬件电路设计
2.1
A/D转换模块
现实世界的物理量都是模拟量,能把模拟量转化成数字量的器件称为模/数转换器(A/D转换器),A/D转换器是单片机数据采集系统的关键接口电路,按照各种A/D芯片的转化原理可分为逐次逼近型,双重积分型等等。双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0809、ADC0808等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送到单片机进行分析和显示。一个n位的逐次逼近型A/D转换器只需要比较n次,转换时间只取决于位数和时钟周期,逐次逼近型A/D转换器转换速度快,因而在实际中广泛使用[1]。
2.1.1
逐次逼近型A/D转换器原理
逐次逼近型A/D转换器是由一个比较器、A/D转换器、存储器及控制电路组成。它利用内部的寄存器从高位到低位一次开始逐位试探比较。
转换过程如下:
开始时,寄存器各位清零,转换时,先将最高位置1,把数据送入A/D转换器转换,转换结果与输入的模拟量比较,如果转换的模拟量比输入的模拟量小,则1保留,如果转换的模拟量比输入的模拟量大,则1不保留,然后从第二位依次重复上述过程直至最低位,最后寄存器中的内容就是输入模拟量对应的二进制数字量[5]。其原理框图如图2所示:
顺序脉冲发生器
逐次逼近寄存器
ADC
电压
比较器
输入电压
输入数字量
图2
逐次逼近式A/D转换器原理图
2.1.2
ADC0808
主要特性
ADC0808是CMOS单片型逐次逼近式A/D转换器,带有使能控制端,与微机直接接口,片内带有锁存功能的8路模拟多路开关,可以对8路0-5V输入模拟电压信号分时进行转换,由于ADC0808设计时考虑到若干种模/数变换技术的长处,所以该芯片非常适应于过程控制,微控制器输入通道的接口电路,智能仪器和机床控制等领域[5]。
ADC0808主要特性:8路8位A/D转换器,即分辨率8位;具有锁存控制的8路模拟开关;易与各种微控制器接口;可锁存三态输出,输出与TTL兼容;转换时间:128μs;转换精度:0.2%;单个+5V电源供电;模拟输入电压范围0-
+5V,无需外部零点和满度调整;低功耗,约15mW[6]。
2.1.3
ADC0808的外部引脚特征
ADC0808芯片有28条引脚,采用双列直插式封装,其引脚图如图3所示。
图3
ADC0808引脚图
下面说明各个引脚功能:
IN0-IN7(8条):8路模拟量输入线,用于输入和控制被转换的模拟电压。
地址输入控制(4条):
ALE:地址锁存允许输入线,高电平有效,当ALE为高电平时,为地址输入线,用于选择IN0-IN7上那一条模拟电压送给比较器进行A/D转换。
ADDA,ADDB,ADDC:3位地址输入线,用于选择8路模拟输入中的一路,其对应关系如表1所示:
表1
ADC0808通道选择表
地址码
对应的输入通道
C
B
A
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
IN0
IN1
IN2
IN3
IN4
IN5
IN6
IN7
START:START为“启动脉冲”输入法,该线上正脉冲由CPU送来,宽度应大于100ns,上升沿清零SAR,下降沿启动ADC工作。
EOC:
EOC为转换结束输出线,该线上高电平表示A/D转换已结束,数字量已锁入三态输出锁存器。
D1-D8:数字量输出端,D1为高位。
OE:OE为输出允许端,高电平能使D1-D8引脚上输出转换后的数字量。
REF+、REF-:参考电压输入量,给电阻阶梯网络供给标准电压。
Vcc、GND:
Vcc为主电源输入端,GND为接地端,一般REF+与Vcc连接在一起,REF-与GND连接在一起.
CLK:时钟输入端。
2.1.4
ADC0808的内部结构及工作流程
ADC0808由8路模拟通道选择开关,地址锁存与译码器,比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路和三态输出锁存器等组成,其内部结构如图4所示。
图4
ADC0808的内部结构
其中:
(1)8路模拟通道选择开关实现从8路输入模拟量中选择一路送给后面的比较器进行比较。
(2)地址锁存与译码器用于当ALE信号有效时,锁存从ADDA、ADDB、ADDC
3根地址线上送来的3位地址,译码后产生通道选择信号,从8路模拟通道中选择当前模拟通道。
(3)比较器,8位开关树型A/D转换器,逐次逼近型寄存器,定时和控制电路组成8位A/D转换器,当START信号有效时,就开始对当前通道的模拟信号进行转换,转换完成后,把转换得到的数字量送到8位三态锁存器,同时通过引脚送出转换结束信号。
(4)三态输出锁存器保存当前模拟通道转换得到的数字量,当OE信号有效时,把转换的结果送出。
ADC0808的工作流程为:
(1)输入3位地址,并使ALE=1,将地址存入地址锁存器中,经地址译码器从8路模拟通道中选通1路模拟量送给比较器。
(2)送START一高脉冲,START的上升沿使逐次寄存器复位,下降沿启动A/D转换,并使EOC信号为低电平。
(3)当转换结束时,转换的结果送入到输出三态锁存器中,并使EOC信号回到高电平,通知CPU已转换结束。
(4)当CPU执行一读数据指令时,使OE为高电平,则从输出端D0-D7读出数据。
2.2
单片机系统
2.2.1
AT89C51性能
AT89C51是美国ATMEL公司生产的低电压,高性能CMOS8位单片机,片内含有4KB的可反复擦写的只读程序存储器和128字节的随机存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容,由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,它为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
AT89C51功能性能:与MCS-51成品指令系统完全兼容;4KB可编程闪速存储器;寿命:1000次写/擦循环;数据保留时间:10年;全静态工作:0-24MHz;三级程序存储器锁定;128*8B内部RAM;32个可编程I/O口线;2个16位定时/计数器;5个中断源;可编程串行UART通道;片内震荡器和掉电模式[6]。
2.2.2
AT89C51各引脚功能
AT89C51提供以下标准功能:4KB的Flash闪速存储器,128B内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路,同时,AT89C51可降至0Hz静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作,掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有工作直到下一个硬件复位。AT89C51采用PDIP封装形式,引脚配置如图5所示[7]。
图5
AT89C51的引脚图
AT89C51芯片的各引脚功能为:
P0口:这组引脚共有8条,P0.0为最低位。这8个引脚有两种不同的功能,分别适用于不同的情况,第一种情况是89C51不带外存储器,P0口可以为通用I/O口使用,P0.0-P0.7用于传送CPU的输入/输出数据,这时输出数据可以得到锁存,不需要外接专用锁存器,输入数据可以得到缓冲,增加了数据输入的可靠性;第二种情况是89C51带片外存储器,P0.0-P0.7在CPU访问片外存储器时先传送片外存储器的低8位地址,然后传送CPU对片外存储器的读/写数据。P0口为开漏输出,在作为通用I/O使用时,需要在外部用电阻上拉。
P1口:这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。
P2口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。
P3口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表2所示:
表2
P3口各位的第二功能
P3口各位
第二功能
P3.0
RXT(串行口输入)
P3.1
TXD(串行口输出)
P3.2
/INT0(外部中断0输入)
P3.3
/INT1(外部中断1输入)
P3.4
T0(定时器/计数器0的外部输入)
P3.5
T1(定时器/计数器1的外部输入)
P3.6
/WR(片外数据存储器写允许)
P3.7
/RD(片外数据存储器读允许)
Vcc为+5V电源线,Vss接地。
ALE:地址锁存允许线,配合P0口的第二功能使用,在访问外部存储器时,89C51的CPU在P0.0-P0.7引脚线去传送随后而来的片外存储器读/写数据。在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。该脉冲序列可以作为外部时钟源或定时脉冲使用。
/EA:片外存储器访问选择线,可以控制89C51使用片内ROM或使用片外ROM,若/EA=1,则允许使用片内ROM,若/EA=0,则只使用片外ROM。
/PSEN:片外ROM的选通线,在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。
RST:复位线,可以使89C51处于复位(即初始化)工作状态。通常89C51复位有自动上电复位和人工按键复位两种。
XTAL1和XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。
2.4
LED显示系统设计
2.4.1
LED基本结构
LED是发光二极管显示器的缩写。LED由于结构简单、价格便宜、与单片机接口方便等优点而得到广泛应用。LED显示器是由若干个发光二极管组成显示字段的显示器件[6]。在单片机中使用最多的是七段数码显示器。LED七段数码显示器由8个发光二极管组成显示字段,其中7个长条形的发光二极管排列成“日”字形,另一个圆点形的发光二极管在显示器的右下角作为显示小数点用,其通过不同的组合可用来显示各种数字。LED引脚排列如下图8所示:
图8
LED引脚排列
2.4.2
LED显示器的选择
在应用系统中,设计要求不同,使用的LED显示器的位数也不同,因此就生产了位数,尺寸,型号不同的LED显示器供选择,在本设计中,选择4位一体的数码型LED显示器,简称“4-LED”。本系统中前一位显示电压的整数位,即个位,后两位显示电压的小数位。
4-LED显示器引脚如图9所示,是一个共阴极接法的4位LED数码显示管,其中a,b,c,e,f,g为4位LED各段的公共输出端,1、2、3、4分别是每一位的位数选端,dp是小数点引出端,4位一体LED数码显示管的内部结构是由4个单独的LED组成,每个LED的段输出引脚在内部都并联后,引出到器件的外部。
图9
4位LED引脚
对于这种结构的LED显示器,它的体积和结构都符合设计要求,由于4位LED阴极的各段已经在内部连接在一起,所以必须使用动态扫描方式(将所有数码管的段选线并联在一起,用一个I/O接口控制)显示。
2.4.3
LED译码方式
译码方式是指由显示字符转换得到对应的字段码的方式,对于LED数码管显示器,通常的译码方式有硬件译码和软件译码方式两种。
硬件译码是指利用专门的硬件电路来实现显示字符码的转换。
软件译码就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码,译码程序通常为查表程序[3]。
本设计系统中为了简化硬件线路设计,LED译码采用软件编程来实现。由于本设计采用的是共阴极LED,其对应的字符和字段码如下表3.3所示。
表3.3
共阴极字段码表
显示字符
共阴极字段码
0
3FH
1
06H
2
5BH
3
4FH
4
66H
5
6DH
6
7DH
7
07H
8
7FH
9
6FH
2.4.4
LED显示器与单片机接口设计
由于单片机的并行口不能直接驱动LED显示器,所以,在一般情况下,必须采用专用的驱动电路芯片,使之产生足够大的电流,显示器才能正常工作[7]。如果驱动电路能力差,即负载能力不够时,显示器亮度就低,而且驱动电路长期在超负荷下运行容易损坏,因此,LED显示器的驱动电路设计是一个非常重要的问题。
为了简化数字式直流电压表的电路设计,在LED驱动电路的设计上,可以利用单片机P0口上外接的上拉电阻来实现,即将LED的A-G段显示引脚和DP小数点显示引脚并联到P0口与上拉电阻之间,这样,就可以加大P0口作为输出口德驱动能力,使得LED能按照正常的亮度显示出数字,如图10所示。
图10
LED与单片机接口间的设计
2.5
总体电路设计
经过以上的设计过程,可设计出基于单片机的简易数字直流电压表硬件电路原理图如图11所示。
图11
简易数字电压表电路图
此电路的工作原理是:+5V模拟电压信号通过变阻器VR1分压后由ADC08008的IN0通道进入(由于使用的IN0通道,所以ADDA,ADDB,ADDC均接低电平),经过模/数转换后,产生相应的数字量经过其输出通道D0-D7传送给AT89C51芯片的P1口,AT89C51负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示段码传送给四位LED,同时它还通过其四位I/O口P2.0、P2.1、P2.2、P2.3产生位选信号控制数码管的亮灭。此外,AT89C51还控制ADC0808的工作。其中,单片机AT89C51通过定时器中断从P2.4输出方波,接到ADC0808的CLOCK,P2.6发正脉冲启动A/D转换,P2.5检测A/D转换是否完成,转换完成后,P2.7置高从P1口读取转换结果送给LED显示出来[3]。
简易数字直流电压表的硬件电路已经设计完成,就可以选取相应的芯片和元器件,利用Proteus软件绘制出硬件的原理,并仔细地检查修改,直至形成完善的硬件原理图。但要真正实现电路对电压的测量和显示的功能,还需要有相应的软件配合,才能达到设计要求。
3
程序设计
3.1
程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图12所示。
开始
初始化
调用A/D转换子程序
调用显示子程序
结束
图12
数字式直流电压表主程序框图
3.2
系统子程序设计
3.2.1
初始化程序
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等[9]。
3.2.2
A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图13所示。
开始
启动转换
A/D转换结束?
输出转换结果
数值转换
显示
结束
图13
A/D转换流程图
3.2.3
显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms[10]。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
4
仿真
4.1
软件调试
软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与u
Visions3
IDE工具软件结合进行编程仿真调试[8]。
本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是汇编语言,用Keil软件将程序写入单片机。
4.2显示结果及误差分析
4.2.1
显示结果
1.
当IN0口输入电压值为0V时,显示结果如图14所示,测量误差为0V。
图14
输入电压为0V时,LED的显示结果
2.当IN0输入电压值为1.50V时,显示结果如图15所示。测量误差为0.01V。
图15
输入电压为1.50V时,LED的显示结果
3.
当IN0口输入电压值为3.50V时,显示结果如图16。测量误差为0.01V。
图16
输入电压为3.50V时,LED的显示结果
4.2.2
误差分析
通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表4所示:
表4
简易数字电压表与“标准”数字电压表对比测试表
标准电压值/V
简易电压表测量值/V
绝对误差/V
0.00
0.00
0.00
0.50
0.51
0.01
1.00
1.00
0.00
1.50
1.51
0.01
2.00
2.00
0.00
2.50
2.50
0.00
3.00
3.00
0.00
3.50
3.50
0.00
4.00
4.00
0.00
4.99
5.00
0.01
由于单片机AT89C51为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.01V的幅度变化。
从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0808的基准电压来解决。因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。
参考文献
[1]胡健.单片机原理及接口技术.北京:机械工业出版社,2004年10月
[2]王毓银.数字电路逻辑设计.高等教育出版社,2005年12月
[3]于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007年5月
[4]谢维成、杨加国.单片机原理与应用及C51程序设计实例.电子工业出版社,2006年3月
[5]李广弟.单片机基础.北京航空航天大学出版社,2007年5月
[6]姜志海,黄玉清等著.单片机原理及应用[M]
.北京:电子工业出版社.2005年7月
[7]魏立峰.单片机原理及应用技术.北京大学出版社,2005年
[8]周润景.Protues在MCS-51&ARM7系统中的应用百例.第一版.北京:电子工业出版社,2006年
[9]边春远等著.MCS-51单片机应用开发实用子程序[M]
.北京:人民邮电出版社.2005年9月.
[10]苗红霞.单片机实现数字电压表的软硬件设计[J]
.河海大学常州分校学报,2002,(03).
[11]宋凤娟,孙军,李国忠.基于89C51单片机的数字电压表设计[J]
.工业控制计算机,2007,(04).
篇2:ARM课程设计报告--基于LPC2131数字电压表设计
ARM课程设计报告--基于LPC2131数字电压表设计 本文关键词:电压表,课程设计,数字,报告,设计
ARM课程设计报告--基于LPC2131数字电压表设计 本文简介:电控学院课程设计课程名称:ARM课程设计题目:基于LPC2131数字电压表设计院(系):电气与控制工程学院专业班级:测控技术与仪器1001班姓名:庞海洋呼霄鹏学号:10060701301006070124指导教师:黄梦涛李红岩2013年12月28日目录一概述11.1课题设计背景11.2ARM开发板(
ARM课程设计报告--基于LPC2131数字电压表设计 本文内容:
电控学院
课程设计
课程名称:
ARM课程设计
题
目:
基于LPC2131数字电压表设计
院
(系):
电气与控制工程学院
专业班级:
测控技术与仪器1001班
姓
名:
庞海洋
呼霄鹏
学
号:
1006070130
1006070124
指导教师:
黄梦涛
李红岩
2013年12月28日
目
录
一概述1
1.1课题设计背景1
1.2ARM开发板(简介)1
1.3、LPC2131微控制器2
二、
方案设计3
2.1设计思路3
2.2设计要求3
三、
硬件设计4
3.1硬件设计原理图及介绍4
四、
软件设计5
五、
参考文献6
六、
心得体会6
七、
附件8
15
西安科技大学电控学院课程设计
基于LPC2131数字电压表
一概述
1.1课题设计背景
电压表已经有100多年的发展历史,虽然不断改进与完善,仍然无法满足现代电子测量的需求,数字电压表(Digital
Voltmeter简称DVM)自1952年问世以来,显示出强大的生命力,现已成为在电子测量领域中应用最广泛的一种仪器。数字电压表可以显示清晰、直观,读数准确,准确度高,分辨力强,测量范围广,扩展能力强,测量速度快,输入阻抗高,集成度高,微功耗和抗干扰能力强等优点,独占电压表产品的熬头。
DVM的高速发展,使它已成为实现测量自动化、提高工作效率不可缺少的仪表,数字化是当前计量仪器发展的主要方向之一,而高准度的DC-DVC的出现,又使DVM进入了精密标准测量领域。随着现代化技术的不断发展,数字电压表的功能和种类将越来越强,越来越多,其使用范围也会越来越广泛。采用智能化的数字仪器也将是必然的趋势,它们将不仅能提高测量准确度,而且能提高电测量技术的自动化程序,可以扩展成各种通用数字仪表、专用数字仪表及各种非电量的数字化仪表(如:温度计、湿度计、酸度计、重量、厚度仪等),几乎覆盖了电子电工测量、工业测量、自动化仪表等各个领域。从而提高计量检定人员的工作效。
目前数字电压表的内部核心部件是A/D转换器,转换器的精度很大程度上影响着数字电压表的准确度,本课程设计A/D转换器采用LPC2131对输人模拟信号进行转换,控制核心再对转换的结果进行运算和处理,最后串口显示数字电压信号。
1.2ARM开发板(简介)
ARM开发板,即以基于ARM内核的芯片作为CPU,同时附加其他功能外围的嵌入式开发板,用以评估内核芯片的功能。ARM开发板可以分为Cortex-M0开发板、Cortex-M3开发板、Cortex-A5开发板[1]、Cortex-A8开发板、Cortex-A9开发板、Cortex-A15开发板等,而提供这些内核芯片的厂商有飞思卡尔、TI、NXP、三星、Atmel和ST等。英国ARM公司是嵌入式RISC处理器的IP(知识产权)供应商,它为ARM架构处理器提供ARM处理器内核(如ARM7TDMI、ARM9TDMI及ARM10TDMI等)。由各半导体公司在上述处理器内核基础上进行再设计,嵌入各种外围和处理部件,形成各种MCU。目前基于ARM内核的芯片在嵌入式处理器市场上占据75%的份额。ARM作为嵌入式系统的处理器,具有低电压,低功耗和高集成度等特点,并具有开放性和可扩充性。事实上,ARM内核已成为嵌入式系统首选的处理器内核。而对于医疗电子设备而言,并不需要图像处理等方面更高的要求,因此,ARM7TDMI内核以0.9MIPS(百万条指令每秒)/MHz的高效处理能力足以满足应用需要。ARM7TDMI内核是ARM核系列中32位通用内核中的一个产品,它采用三级流水线结构,指令的执行分成取指、译值和执行3个阶段。运算器能够实现32位整数运算。内核不但能够执行32位高效ARM指令,同时还支持简洁的16位Thumb指令集以提高代码密度。
1.3、LPC2131微控制器
1、简介
LPC2131/2132/2138
是基于一个支持实时仿真和跟踪的16/32
位ARM7TDMI-STM
CPU,并带有32kB、64kB
和512kB
嵌入的高速Flash
存储器。128
位宽度的存储器接口和独特的加速结构使32
位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16
位Thumb
模式将代码规模降低超过30%,而性能的损失却很小。较小的封装和很低的功耗使
LPC2131/2132/2138
特别适用于访问控制和POS
机等小型应用中;由于内置了宽范围的串行通信接口和8/16/32kB
的片内SRAM,它们也非常适合于通信网关、协议转换器、软件
modem、语音识别、低端成像,为这些应用提供大规模的缓冲区和强大的处理功能。多个32
位定时器、1个或2
个10
位8
路的ADC、10
位DAC、PWM
通道、47
个GPIO
以及多达9
个边沿或电平触发的外部中断使它们特别适用于工业控制应用以及医疗系统。
2、主要性能
a、
8/16/32kB
的片内静态RAM
和32/64/512kB
的片内Flash
程序存储器。128
位宽度接口/加速器可实现高达60
MHz
工作频率。
b、
1
个(LPC2131/2132)或2
个(LPC2138)8
路10
位的A/D
转换器,共提供16
路模拟输入,每个通道的转换时间低至2.44us。
c、
1
个10
位的D/A
转换器,可产生不同的模拟输出。(仅适用于LPC2132/2138)
d、
2
个32
位定时器/计数器(带4
路捕获和4
路比较通道)、PWM
单元(6
路输出)和看门狗。
e、多个串行接口,包括2
个16C550
工业标准UART、2
个高速I2C
接口(400
kbit/s)、SPITM
。
2、
方案设计
2.1设计思路
通过LPC2131板内的A/D转换器,采取中断方式,完成对2路0—5V的模拟电压进行循环采集,采集的数据通过串口UARTO
向PC机发送显示
。
2.2设计要求
(1)对2路模拟信号输入实行循环采集,每路连续采集16次,取平均值。
(2)分别设定每一路的上限值,若采集的平均值超过该上限值,则对应通道的指示灯闪烁10次后一直亮,指示灯闪烁时喇叭发声,以示警告。
3、
硬件设计
3.1硬件设计原理图及介绍
图3.1原理框图
由上图知,两个被测信号进入ARM开发板,经过A/D转换模块转换得出电压值,再经由上位机显示出数值。
图3.2蜂鸣器报警电路
图3.3指示灯闪烁电路
4、
软件设计
4.1程序流程图如图4.1所示。根据流程图编程实现各自功能。
图4.1程序流程图
5、
参考文献
[1]周立功.ARM嵌入式系统基础教程[M].北京航空航天大学出版社,2008.9.
[2]李红岩,杨学存.ARM嵌入式实验+实训指导书[M].西安科技大学出版社,2013.9.
[3]周立功,张华等.深入浅出ARM7——LPC213x/LPC214x(上册)[M].北京航空航天大学出版社,2005.
[4]黄智伟,税梦玲,张强.全国大学生电子设计大赛ARM嵌入式系统应用设计与实践[M].北京航空航天大学出版社,2011.
[7]百度文库
6、
心得体会
心得体会一(庞海洋)
这次的课程设计是基于LPC2131的数字电压表,实现的主要功能用ARM的A/D转换模块功能,外部扩展蜂鸣器报警电路和指示灯闪烁电路,用串口UART0向PC机发送显示。
在做数字电压表的设计时,开始是遇到不少的问题,比如我们想数字电压表到底是什么设计原理呢,模拟电压信号是怎样被数字电压表循环采集的呢。由于只是在课堂上学习过理论知识,还没有接触过实际真正设计和开发,所以在考虑问题的时候往往是不全面的,导致设计过程中存在着这样那样的问题。经过这一个星期的课程设计实习,过程曲折坎坷让人一言难尽啊。我们组一共二个人,整体上是我们二个人都在做,但个人的分工不同,呼霄鹏负责硬件部分,我负责软件部分。在设计程序的过程中,我明白到做一个好程序的不易,做一个好的编程者就更加困难。我主要负责软件程序编写以及调试工作。通过这次课程设计,加强了我的动手、思考和解决问题的能力。在整个设计过程中主要是软件编写,这个我们花了好长时间,几乎是前四天都在编写数字电压表程序。最后,在老师和同学的帮助下,我们完成了程序设计。经过一天的调试,我们的课程设计终于成功了。我们两个都很激动,尝到了通过自己设计电压表的喜悦。
这次课程设计我最大的收获就是“细节”。“细节决定成败”这句话太对了。我以后在生活中要注重细节。在课程设计过程中,我的程序框架是对的,可是细节部分出现很多错误。导致我的程序虽然在语法上没有错误但是出现逻辑错误使电压表不能完成其设计功能。我要做一个细心的人。最后,谢谢老师和同学们的帮助。
心得体会二(呼霄鹏)
这次的课程设计是基于LPC2131的数字电压表,实现的主要功能用ARM的A/D转换模块功能,外部扩展蜂鸣器报警电路和指示灯闪烁电路,用串口UART0向PC机发送显示。
本学期在学院的安排下我们学习了ARM嵌入式系统的理论知识,这门课程是我们测控专业的主要课程。虽然我们学的都是一些简单的知识,注重学习如何去分析和研究嵌入式系统的功能和结构等,但学习的过程中还是有一定的困难。在理论课结束后老师为我们安排了ARM的课程设计实习。
本次课程实习我们两个人组,我主要负责硬件的设计、调试和电路图的绘制,另一个同学负责软件的编写和调试。这次实习对于我来说还是有一定难度的,因为几乎没有什么实际经验而不像有的同学以前参加过电子设计大赛。他们做起来感觉得心应手可以说是一气合成,而我画图所用的软件以前虽然用过但还是不太熟悉,画图过程中有很多问题。
通过这次课程设计,虽然学到了不少东西不管是电路图的绘制还是软件的编写和调试,但同时也发现了自身的不足。就比如说实际动手能力吧。画基本一样的一电路图,熟悉画图软件的同学可能有一上午就可以画好所有的,而我却需要差不多一天的时间还不能保证还所画图完全正确。希望通过这次实习可以对自己的操作能力有所提高。
7、
附件
程序清单:
/****************************************************************************
文
件
名:main.c
功
能:使用ADC模块的通道0、1进行电压的测量,然后将转换结果从串口输出,
上位机使用EasyARM软件全仿真的DOS字符窗口观察。
说
明:跳线JP8、JP30短接。由W1、W2调节测量电压值。
通讯格式:8位数据位,1位停止位,无奇偶校验,波特率为115200。***************************************************************************/
#include
“config.h“#define
LED1
10;
dly--)
{
for(i=0;
i=80)
{
x
=
0;
y++;
}
}
}
/****************************************************************************
名
称:main()
功
能:进行通道0、1电压ADC转换,并把结果转换成电压值,然后发送到串口。
说
明:在CONFIG.H文件中包含stdio.h。***************************************************************************/
int
main(void)
{
uint32
ADC_Data;
char
str[20];
UART0Init(115200);//
初始化UART0
PINSEL1
=
0x01400000;//
设置P0.27、P0.28连接到AIN0、AIN1
IO1DIR
=
BEEPCON;
//
设置I/O为输出
IO2DIR
=
0x00000000;
IO1SET
=
BEEPCON;
/*
进行ADC模块设置,其中x>6)
//
提取AD转换值
ADC_Data
=
ADC_Data
3300;
//
数值转换
ADC_Data
=
ADC_Data
/
1024;
sprintf(str,“%4dmV
at
VIN1“,ADC_Data);
ISendStr(30,23,0x30,str);
if(
ADC_Data>=3000)
{
uint32
i;
for(i=0;i>6)
//
提取AD转换值
ADC_Data
=
ADC_Data
3300;
//
数值转换
ADC_Data
=
ADC_Data
/
1024;
sprintf(str,“%4dmV
at
VIN2“,ADC_Data);
ISendStr(30,21,0x30,str);
if(
ADC_Data>=2500)
{
uint32
i;
for(i=0;i<10;i++)
{
IO1SET
=
BEEPCON;
IO2DIR
=
0x00020000;
//
BEEPCON
=
1
DelayNS(15);
IO1CLR
=
BEEPCON;
//
BEEPCON
=
0
IO2DIR
=
0x00000000;
DelayNS(15);
}
IO2DIR
=
0x00020000;
DelayNS(150);
}
else
{
IO1SET
=
BEEPCON;
//
BEEPCON
=
0
IO2DIR
=
0x00000000;}
}
return(0);
}