基于单片机的模拟量采集
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
绪论
随着电子产业数字化程度的不断发展,逐渐形成了以数字系统为主体的格局。
A/D 转换器作为模拟和数字电路的接口,正受到日益广泛的关注。
随着数字技术的飞速发展,人们对A/D转换器的要求也越来越高,新型的模拟/数字转换技术不断涌现。
本文着重介绍了当前几种常用的模拟/数字转换技术;并通过对数字技术发展近况的分析,探讨了模拟/数字转换技术未来的发展趋势。
在自动化控制设备的数据采集和转换输出过程中,A/D、D/A转换往往是必不可少的,因此在很多场合要使用到A/D、D/A转换芯片。
选择一款合适的A/D、D/A转换芯片显得尤为重要。
传统的并行A/D、D/A转换需占用较多的I/O口,串行的A/D、D/A 转换周期长,读写复杂,可扩展性较差。
I²C总线A/D、D/A转换具有接口线少,控制方式简单,通信速率较高,扩展性方便等优点,得到了广泛应用。
当前,数字处理系统正在飞速发展,在视频领域,高清晰度数字电视系统(HDTV)的出现,将广播电视推向了一个更高的台阶,HDTV的分辨率与普通电视相比至少提高了一倍。
在通信领域,过去无线通信系统的设计都是静态的,只能在规定范围内的特定频段上使用专用调制器、编码器和信道协议。
而软件无线电技术(SDR)能更加灵活、有效地利用频谱,并能方便地升级和跟踪新技术,大大地推动了无线通信系统的发展。
在高精度测量领域,高级仪表的分辨率在不断提高,电流到达μA量级,电压到达mV甚至更低;在音频领域,各种高性能专业音频处理设备不断涌现,如DVD-Audio和超级音频CD(SACD),它们能处理更高质量的音频信号。
第1章单片机概述
单片微型计算机简称单片机,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的缩写MCU表示单片机,它最早是被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中,使计算机系统更小,更容易集成进复杂的而对体积要求严格的控制设备当中。
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
单片机比专用处理器更适合应用于嵌入式系统,因此它得到了最多的应用。
事实上单片机是世界上数量最多的计算机。
现代人类生活中所用的几乎每件电子和机械产品中都会集成有单片机。
手机、电话、计算器、家用电器、电子玩具、掌上电脑以及鼠标等电脑配件中都配有1-2部单片机。
而个人电脑中也会有为数不少的单片机在工作。
汽车上一般配备40多部单片机,复杂的工业控制系统上甚至可能有数百台单片机在同时工作!单片机的数量不仅远超过PC机和其他计算的总和,甚至比人类的数量还要多
单片机的应用:目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。
更不用说自动控制领域的机器人、智能仪表、医疗器械以及各种智能机械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
本设计采用的单片机是89C52,结合PCF8591P,实现模拟量的采集。
第2章元器件介绍及其工作原理2.1实验元件清单
序号元件名称数量
1 PCB板 1
2 STC89C52 1
3 PCF8591P 1
4 四位数码管SM420362K 1
5 74HC573锁存器 2
6 74HC138译码器 1
7 12M晶振 1
8 MAX232 1
9 24CXX 1
10 发光二级管 1
11 电位器 1
12 220*4排阻 2
13 20PF电容 3
14 10K电阻 2
15 10uF电容 2
16 1K电阻 1
17 510Ω电阻 1
18 10K上拉排阻 1
19 2*20排针 1
20 USB接头 1
21 跳冒15
2.2单片机89C52芯片
89C52是一种可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C52是一种高效微控制器,89C2052是它的一种精简版本。
89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
89C52芯片
89C52芯片引脚及功能:
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。
在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,
P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
P3.0 RXD(串行输入口)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(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC 指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE 禁止,置位无效。
PSEN:外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次PSEN有效。
但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
EA/VPP:当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,EA将内部锁定为RESET;当EA端保持
高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
2.3PCF8591概述
PCF8591是一个单片集成、单独供电、低功耗、8-bitCMOS数据采集获取器件,具有I²C总线接口的8 位A/D和D/A 转换芯片,及4个模拟输入、1个模拟输出和1个串行I²C总线接口。
在与CPU的信息传输过程中仅靠时钟线SCL 和数据线SDA 就可以实现。
PCF8591的3个地址引脚A0, A1 和A2 可用于硬件地址编程,允许在同个I²C 总线上接入8个PCF8591 器件,而无需额外的硬件。
在PCF8591 器件上输入输出的地址、控制和数据信号都是通过双线双向I²C 总线以串行的方式进行传输。
各引脚及其功能介绍如下表所示:
引脚序号引脚名称功能描述
1~4 AIN0~AIN3 模拟信号输入端0~5V
5~7 A0~A2 器件硬件地址输入端,由硬件电路决定
16、8 VDD、VSS 电源、地
9、10 SDA、SCL I²C总线的数据线、时钟线
11 OSC 外部时钟输入端,内部时钟输出端
12 EXT 时钟选择线,EXT=0,使用内部时钟;EXT=1,使用外部时钟
13 AGND 模拟信号地
15 AOUT D/A转换输出端,
2
7
i
256
i
i
AGND
REF
AGND
AOUT D
V
V
V
V∑
=
-
+
=
14 VREF 基准电源端(0.6~5V),取值大小影响D/A转换输出电压;当
取值等于VDD时,输出电压为0~5V
PCF8591 的功能包括多路模拟输入、内置跟踪保持、8-bit 模数转换和8-bit 数模转换。
PCF8591 的最大转化速率由I²C 总线的最大速率决定。
PCF8591的A/D 转换为逐次比较型,在A/D转换周期中借用DAC及高增益比较器对PCF8591进行写读操作后便立即启动A/D转换,并读出A/D 转换结果在每个应答信号的后沿触发转换周期,采样模拟电压并读出前一次转换后的结果。
A/D转换中,一旦A/D采样周期被触发,所选择通道的采样电压便保存在采样,保持电路中,并转换成8 位二进制码(单端输入)或二进制补码(差分输入)存放在ADC 数据寄存器中等待器件读出。
如果控制字节中自动增量选择位置1,则一次A/D 转换完毕后自动选择下一通道。
读周期中读出的第一个字节为前一个周期的转换结果。
PCF8591的A/D 转换亦使用的是I2C 总线的读方式操作完成的。
PCF8591工作流程图如下:
2.4 74HC573芯片
2.4.1 74HC573介绍
74HC573是一款高速CMOS器件,74HC573引脚兼容低功耗肖特基TTL(LSTTL)系列。
74HC573包含八路D型透明锁存器,每个锁存器具有独立的D型输入,以及适用于面向总线的应用的三态输出。
所有锁存器共用一个锁存使能LE端和一个输出使能OE端。
当LE为高时,数据从Dn输入到锁存器,在此条件下,锁存器进入透明模式,也就是说,锁存器的输出状态将会随着对应的D输入每次的变化而改变。
当LE为低时,锁存器将存储D输入上的信息一段就绪时间,直到LE的下降沿来临。
当OE为低时,8个锁存器的内容可被正常输出;当OE为高时,输出进入高阻态。
OE端的操作不会影响锁存器的状态。
2.4.2 74HC573特性
(1)输入输出分布在芯片封装的两侧,为微处理器提供简便的接口
(2)用于微控制器和微型计算机的输入输出口
(3)三态正相输出,用于面向总线的应用
(4)共用三态输出使能端
(5)逻辑功能与74HC563、74HC373相同
(6)遵循JEDEC标准no.7A
(7)ESD保护:HBM EIA/JESD22-A114-C超过2000 V
MM EIA/JESD22-A115-A超过200 V
(8)温度范围:-40~+85 ℃或-40~+125 ℃
第3章电路仿真及其工作原理3.1仿真原理图
3.2仿真数据显示图
3.3实验原理
3.3.1 A/D转换基本原理
基本流程:模拟信号(A)→采样→保持→量化→编码→数字信号(D)
1. 采样、保持
采样:将时间和数值都是连续变化的模拟量转化为时间离散,数值连续的模拟量。
保持:A/D转换并不是瞬间完成的,它要求在转换器件被转换的模拟值保持不变,以保证转换的精度。
2.取样原理:
定义:为保证能从取样信号将原来的被取样信号无失真地恢复,必须满足:fs≥2fimax 量化:将取样电压转化为最小单位的整数倍的过程。
最小单位也叫量化单位,用Δ表示,显然Δ=1 LSB 。
编码:把量化结果用代码(通常是二进制、二一十进制、七段码)表示的过程。
本次实验是基于单片机的模拟量采集设计的,模拟转换为数字的A/D转换器的工作原理为:主要是通过PCF8591来进行数据的采集,通过采集到的数据传送给MAX232芯片进行分析再传送到单片机进行运行。
由单片机进行程序编码运行而传给74HC573D
锁存器,再到138译码器,最后传到数码管进行显示数据出来。
从而时间基于单片机的模拟量采集设计A/D转换器功能。
3.3.2 实验程序代码(详见附录)
3.3.3 实验结果及分析
以下数据是在实验实际值与理论值的比较,单位为V。
实验值 1.0 2.0 2.5 3.0 3.5 4.0 4.5 5.0
理论值0.98 1.95 2.45 3.01 3.50 4.02 4.52 4.98 由以上数据分析可以得出:由于元器件的原因或者电压不稳定,造成实验值跟理论值存在误差。
第4章总结
在这次单片机课设中,通过自己动手查阅资料,不仅知道了芯片PCF8591和89C52的工作原理、各引脚的功能等,还巩固了汇编语言程序的编写,对51单片机也有了更深的理解,能熟练的运用Keil C软件和proteus等软件。
期间遇到过LCD显示数据会抖动的问题,检查了相关的I²C总线程序,延长了延时程序,修改了LCD查忙时程序与AD转换程序中的控制字写入检查模块,在主程序中增加了一个模块:若控制字写入有问题则重新启动I²C总线重新开始转换电压与数据传送。
经过这基于单片机的模拟量采集的设计,让我体会到:要设计成功一个好的作品出来,必须要有扎实的专业知识基础,也要熟练地掌握本专业上的知识。
这样才能对调试出现的问题进行分析解决,同时要有耐心和毅力。
在具体设计的时候,我深刻地体会到做一个设计,要考虑到的东西很多,比如各个元件的功能和特性等,这些问题都要翻阅大量的资料,也要适当地参考别人的经验。
这样设计出来的东西才能更好的发挥出它应有的功能。
总体来说,这次的设计让我受益匪浅。
在平时的理论学习中遇到的问题都在这里一一解决了,同时也加深了我对单片机的程序设计,和基于单片机的模拟量采集设计过程的了解。
在摸索设计电路中我体会到了知识的伟大性,发挥了我的主观能动性和创造能力,这样可以在学到东西的同时又能发挥自己的思维,为我以后的工作和学习打下了一个良好的开端。
附录程序代码ORG 0000H
JMP START
ORG 0030
SCL EQU P3.6 ;PCF8591时钟线
SDA EQU P3.7 ;PCF8591数据线
LE1 EQU P2.6
LE2 EQU P2.7
START: MOV 60H,#00H
MOV 61H,#00H
MOV 62H,#00H
MOV 63H,#00H
MOV 64H,#00H
MOV 70H,#0H
MOV 71H,#0H
MOV 72H,#0H
MOV 73H,#0H
MOV P3,#00H
START1: MOV R0,#04H
MOV R1,#60H
// LCALL AD
// LCALL ZHUANGHUAN
MOV P1,#0FEH
LCALL XIANSHI
LCALL DELAY
AJMP START1
DELAY: MOV R5,#10
LOOP: MOV R2,#10
DJNZ R2,$
DJNZ R5,LOOP
RET
AD: LCALL STR
MOV A,#90H
LCALL WRITE
CALL DELAY
LCALL CHEK
JB F0,AD
;LCALL YIDA
MOV A,#04H
LCALL WRITE
CALL DELAY
LCALL CHEK
JB F0,AD
;LCALL YIDA
AD1: LCALL STR
MOV A,#91H
LCALL WRITE
CALL DELAY
LCALL CHEK
JB F0,AD1
LCALL READ
LCALL YIDA
AGAIN: LCALL READ
MOV @R1,A
DJNZ R0,NEXT
LCALL YIDAF
LCALL STOP
RET
NEXT: LCALL YIDA
INC R1
LJMP AGAIN
STR:NOP
SETB SDA
NOP
SETB SCL ;起始条件建立时间大于4.7us
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP ;起始条件锁定时间大于4.7us
NOP
NOP
NOP
NOP
CLR SCL ;钳住总线,准备发数据
NOP
RET
WRITE: NOP
MOV R3,#08H
CLR SCL
CLR C
LL0: RLC A
JC LL1
LJMP LL2
LL1: NOP
SETB SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
;CLR SDA
LJMP LL4
LL2: NOP
CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
LJMP LL4
LL4: DJNZ R3,LL0
RET
YIDA: CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
READ: MOV R3,#08H
SS0: SETB SDA ;置P1.1为输入
NOP
NOP
SETB SCL ;时钟线为高,接收数据位。
NOP
MOV A,P3 ;读取数据位
JNB ACC.7,SS1
LJMP SS2
SS1: NOP
CLR C
MOV A,R4
RLC A
MOV R4,A
CLR SCL
LJMP SS3
SS2: SETB C
MOV A,R4
RLC A
MOV R4,A
CLR SCL
LJMP SS3
SS3: DJNZ R3,SS0
CLR SDA
NOP
NOP
SETB SCL
RET
YIDAF: NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
STOP: NOP
CLR SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
RET
ZHUANHUAN: MOV A,60H
MOV B,#51
DIV AB
MOV 70H,A ;整数个位数放入DISSTART+2
MOV A,B ;余数大于1AH,F0为0,乘法溢出,结果加5
CLR F0
SUBB A,#1AH ;相减不够,C=1 表示余数小于1AH(26)
MOV F0,C
MOV A,#10
MUL AB ;余数乘以10,相当于补0,继续除。
MOV B,#51
DIV AB ;再除以51
JB F0,T_BCD1
ADD A,#5
T_BCD1: MOV 71H,A ;小数后第一位放入DISSTART+1
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,T_BCD2
ADD A,#5
T_BCD2: MOV 72H,A ;小数后第二位放入DISSTART
MOV A,B
CLR F0
SUBB A,#1AH
MOV F0,C
MOV A,#10
MUL AB
MOV B,#51
DIV AB
JB F0,T_BCD3
ADD A,#5
T_BCD3: MOV 73H,A
RET
XIANSHI: MOV A,70H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
SETB LE1
CLR LE1
// ORL A,#80H
MOV P0,#0H
SETB LE2
CLR LE2
// SETB LE1
CALL DELAY
MOV P0,#0
SETB LE1
CLR LE1
MOV A,71H
MOV DPTR,#TAB
MOVC A,@A+DPTR
SETB LE2
MOV P0,#01H
CLR LE2
SETB LE1
MOV P0,A
CALL DELAY
MOV P0,#0
SETB LE1
CLR LE1
MOV A,72H
MOV DPTR,#TAB
MOVC A,@A+DPTR
SETB LE2
MOV P0,#02H
CLR LE2
SETB LE1
MOV P0,A
CALL DELAY
MOV P0,#0
SETB LE1
CLR LE1
MOV A,73H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
SETB LE1
CLR LE1
MOV P0,#03H
SETB LE2
CLR LE2
CALL DELAY
MOV P0,#0
SETB LE1
CLR LE1
RET
CHEK:SETB SDA ;设P1.1为输入
NOP
NOP
SETB SCL
CLR F0
NOP
NOP
;MOV C,SDA
;JC GEND
MOV A,P3
JNB ACC.7,GEND
SETB F0
GEND: NOP
CLR SCL
NOP
RET
TAB: DB 3fH,06H,5bH,4fH,0E6H,6dH,7dH,07H,7fH,6fH END
参考文献
[1] 朱兆优.单片机原理与应用.北京:电子工业出版社,2010.9
[2] 陈忠平. 单片机原理及接口(第2版).北京:清华大学出版社,2011.5
[3] 杨欣.电路设计与仿真—基于Multisim8与Protel2004.北京:清华大学出版社.2006.4
[4] 阎石.数字电子技术基础(第5版).北京:高等教育出版社,2006.5
[5] 万光毅.单片机实验与实验教程.北京:北京航空航天大学出版社,2003.6
[6] 张毅刚,彭喜元,董继成.单片机原理及应用.北京:高等教育出版社,2003.4。