量程手动切换的数字电压表.docx
《量程手动切换的数字电压表.docx》由会员分享,可在线阅读,更多相关《量程手动切换的数字电压表.docx(19页珍藏版)》请在冰豆网上搜索。
量程手动切换的数字电压表
课程设计题目:
量程手动切换的数字电压表
一.要求:
利用单片机AT89C51与ADC0809设计一个数字电压表,能够测量量程为0~5V、0~2.5v、0~1v、0~500mv、0~100mv之间直流电压值,能连续,稳定显示所测电压,手动切换量程,要求3位数码显示,测量精度1%(量程0~5v精度为2%),能脱机稳定工作,但要求使用元器件尽量少。
二.目的:
掌握A/D的使用,了解单片机整个开发过程。
三.设计方案:
按系统功能要求,决定控制系统采用AT89C51单片机,A/D转换采用ADC0809。
系统除能确保实现的要求的功能外,还可以方便地进行其它功能的扩展。
数字电压表系统设计方案框图如图所示:
数字电压表系统设计方案图
1.硬件选择:
AT89C51、ADC0809、74LS74、SN74LS245、CD4066、LM358、SW-DIP5(开关)、LM2596芯片各1个,共阳LED数码管、PNP三极管、二极管1N4148各3个,12MHZ晶振、10K可调电位器1个,220Ω的电阻8个,4.7kΩ的电阻3个,1kΩ的电阻2个,90kΩ的电阻3个,990kΩ的电阻一个,490kΩ的电阻1个,40kΩ的电阻1个,10kΩ的电阻1个,发光二极管1个,30pF左右的电容2个,470uF的电容1个,220uF的电容1个,0.1uF的电容1个,33uH的电感1个。
2.实现原理:
8路输入模拟信号数值显示电路由A/D转换,数据处理及显示控制等组成,A/D转换由集成电路0809完成。
0809具有8路模拟输入端口,地址线(23~25脚)可决定对哪一路模拟输入作A/D转换。
第22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存;6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始A/D转换;7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平;9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从端口输出;10脚为0809的时钟输入端,利用单片机30脚的六分频晶振信号再通过74LS74二分频得到1MHZ的时钟。
单片机的P1,P3.0~P3.3端口作为三位LED数码管显示控制,P0端口作A/D转换数据读入用,P2端口用作0809的A/D转换控制。
3.电路各元器件的分析:
a.数码管和电阻,二极管:
数码管为共阳极型数码管.
数码管的A,B,C,D,E,F,G,H为片选信号;一片控制一个数码管。
将三个数码管的A和A,B和B,C和C,D和D,E和E,F和F,G和G分别连接,形成三个数码管串联.而三个数码管的公共端分别和AT89S51的P3.0,P3.1,P3.2三个引脚连接,由这三个引脚控制三个数码管的位选.而P0口则控制灯亮的数字.因为是共阳极所以加三极管进行驱动,使公共端为高电平.而为了防止数码管的电压反回芯片,遭成显示数字抖动有鬼影则在电阻旁加一个二极管进行消隐.
数码管后接八个200Ω的电阻,起限流作用。
数码管有一定的允许功耗,最大正向直流,最大反向电压,若超此过耗,则会使数码管发热,损坏.
PNP型三极管产生驱动作用,为共阳极型数码管的公共端提供高电平。
4.7kΩ电阻是为了将基极电压拉下,防止电压大于二极管负端电压从而使数码管的显示数字产生鬼影。
二极管也起消隐作用。
b.SN74LS245:
74LS245作为缓冲器,驱动器使用.
控制G非
输入A
输出Q
H
X
高阻
L
L
L
L
H
H
它将从89S51中接收到数据进行缓冲后送入数码管显示.
c.AT89C51:
AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元.AT89C51具有如下特点:
40个引脚,4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89C51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器,保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
它的引脚图如图所示.
d.A/D0809:
0809为A\D转换芯片.
该部分电路主要实现待测电压值的模数转换功能,是本设计的主要模块。
通过外围电路各类参数调整,实现正确的电压转换范围。
通过芯片各类使能端的置高或者置低来实现数据的转换输出。
针对单片机编程来实现A/D转换功能,再将输出数据存入寄存器中。
只要再调用计算子程序和显示子程序便可实现待测电压值的显示。
ADC0809功能有八位分辨率,最大不可调误差小于±1LSB,单一+5V供电,模拟输入范围为0-5V.具有锁存三态输出,输出与TTL兼容。
功耗为15MW。
不必进行零点和满度调整。
转换速度取决于芯片的时钟频率。
IN0-IN7:
8路输入通道的模拟量输入端口。
D0-D7:
8位数字量输出端口。
START,ALE:
START为启动控制输入端口,ALE为地址锁存控制信号端口。
这两个信号端口亦可连结在此一起,当通过软件输入一个正脉冲,便立即启动模/数转换。
EOC,OE:
EOC为转换结束信号脉冲输出端口,OE为输出允许控制端口。
这两个信号端口亦可连结在一起,表示模/数转换结束。
OE端的电平由低变高,打开三态输出锁存器,将转换结果的数字量输出到数据总线上。
VREF(+)、VREF(-)、VCC、GND:
VREF(+)、VREF(-)为参考电压输入端;VCC为主电源输入端,GND为接地端。
一般VREF(+)与VCC接在一起,VREF(-)与GND接在一起。
CLK:
时钟输入端。
ADDA、ADDB、ADDC:
8路模拟开关的三位地址选通输入端,以选择对应的输入通道。
地址码
对应的输入通道
ADDA
ADDB
ADDC
0
0
0
IN0
0
0
1
IN1
0
1
0
IN2
0
1
1
IN3
1
0
0
IN4
1
0
1
IN5
1
1
0
IN6
1
1
1
IN7
e.SN74LS74:
SN74LS74是一种双D触发器.
由于ADC0809片内无时钟,所以需要用89S51单片机提供的地址锁存允许信号ALE经D触发器74LS74二分频后获得ALE脚的频率是89S51的时钟频率的1/6.所以单片机的时钟频率采用12MHZ时ALE引脚的输出频率为2MHZ
将1和4引脚接高电平,若第2引脚1D=1时按动单次脉冲,则Q=1,Q非为0.若1D=0时按动单次脉冲,则Q=0,Q非为1.
第7引脚接地.
第14引脚接电源.
其它引脚悬空.
f.振荡电路
单片机的定时功能是用片内的时钟电路和定时电路来完成的,而片内的时钟产生有两种方式:
内部时钟方式和外部时钟方式。
本系统采用内部时钟方式,片内高增益反相放大器通过XTAL1,XTAL2外接作为反馈元件的晶体(呈感性)与电容组成的并联谐振回路过程的一个自激振荡向内部时钟提供振荡时钟。
内部振荡方式的外部电路如下图I所示,图中电容C1、C2起稳定振荡频率、快速起振的作用,其电容值一般在5—30pF,在本设计中,C1、C2的值通常取30pF左右。
振荡器的频率主要取决于晶体的振荡频率,一般晶体可在1.2-12MHz之间任选,本设计采用晶振频率的典型值为12MHZ。
因为内部振荡方式所得的时钟信号比较稳定,所以实用电路中使用较多。
振荡电路
单片机以晶体振荡器的振荡周期为最小的时序单位,片内的各种微操作都以此周期为时序基准。
振荡频率二分频后形成状态周期,一个状态周期包含2个振荡周期,振荡频率二分频后形成机器周期,一个机器周期包含有6个状态周期或者12个振荡周期,1到4个机器周期确定一条指令的执行时间,这个时间便是指令周期。
在MCS—51单片机的所有指令中,有些完成的比较快,只需一个机器周期就行,有些完成的比较慢,则需两个机器周期或者四个机器周期才能完成。
具体的周期计算是这样的。
如果外接晶振频率为12MHZ,那么振荡周期=1/12MHZ=0.0833us,状态周期=0.0167us,机器周期=1us,指令周期=1~4us。
当单片机工作于计数模式时,它的初值=(计数个数)求补,当工作于定时模式时,它的初值=(定时时间/机器周期)求补,根据不同的工作模式对初值进行装入。
g.复位电路
当MCS-5l系列单片机的复位引脚RST(全称RESET)出现2个机器周期以上的高电平时,单片机就执行复位操作。
如果RST持续为高电平,单片机就处于循环复位状态。
单片机复位系统常常有上电复位和手动复位两种方法,上电复位,是指计算机加电瞬间,要在RST引脚上出现大于10微秒的正脉冲,使单片机进入复位状态。
手动复位是指用户按下“复位”按钮,使单片机进入复位状态。
本设计采用上电或手动复位,并且高电平有效。
复位是靠外部电路来实现的,具体电路如图H所示。
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
图H所示的RC复位电路可以实现上述基本功能。
上电或开关复位要求电源接通后,单片机自动复位,并且在单片机运行期间,用开关操作也能使单片机复位。
上电后,由于电容C11的充电作用,使RST持续一段时间的高电平。
当单片机已在运行当中时,按下复位键S1后松开,也能使RST为一段时间的高电平,从而实现上电或开关复位的操作。
其中C11=22uF,R34=200Ω,R35=1kΩ,VCC就为+5V电源。
复位电路
51单片机的复位是由RESET引脚来控制的,此引脚与高电平相接超过24个振荡周期后,51单片机即进入芯片内部复位状态,而且一直在此状态下等待,直到RESET引脚转为低电平后,才检查EA引脚是高电平或低电平,若为高电平则执行芯片内部的程序代码,若为低电平便会执行外部程序。
由于本设计只采用内部存储器,不会执行外部程序,因此EA端一般为高电平。
单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。
单片机冷启动后,片内RAM为随机值,运行中的复位操作不改变片内RAM区中的内容,21个特殊功能寄存器复位后的状态为确定值。
但本实验中应特殊原因,而未采用以上复位,而是直接采用人工复位.
h.电源电路
LM2596开关电压调节器是降压型电源管理单片集成电路,能够输出3A的驱动电流,同时具有很好的线性和负载调节特性.固定输出版本有3.3V、5V、12V,可调版本可以输出小于37V的各种电压.该器件内部集成频率补偿和固定频率发生器,开关频率为150KHz,与低频开关调节器相比较,可以使用更小规格的滤波元件.由于该器件只需4个外接元件,可以使用通用的标准电感,这更优化了LM2596的使用,极大地简化了开关电源电路的设计.其封装形式包括标准的5脚TO-220封装(DIP)和5脚TO-263表贴封装(SMD).该器件还有其他一些特点:
在特定的输入电压和输出负载的条件下,输出电压的误差可以保证在±4%的范围内,振荡频率误差在±15%的范围内;可以用仅80μA的待机电流,实现外部断电;具有自我保护电路(一个两级降频限流保护和一个在异常情况下断电的过温完全保护电路)特点※3.3V、5V、12V的固定电压输出和可调电压输出※可调输出电压范围1.2V~37V±4%※输出线性好且负载可调节※输出电流可高达3A※输入电压可高达40V※采用150KHz的内部振荡频率,属于第二代开关电压调节器,功耗小、效率高※低功耗待机模式,IQ的典型值为80μA※TTL断电能力※具有过热保护和限流保护功能※封装形式:
TO-220(T)和TO-263(S)※外围电路简单,仅需4个外接元件,且使用容易购买的标准电感应用领域※高效率降压调节器※单片开关电压调节器※正、负电压转换器
电源原理图:
i.放大和衰减电路:
CD4066是四双向模拟开关,主要用作模拟或数字信号的多路传输。
引出端排列与CC4016一致,但具有比较低的导通阻抗。
另外,导通阻抗在整个输入信号范围内基本不变。
CD4066由四个相互独立的双向开关组成,每个开关有一个控制信号,开关中的p和n器件在控制信号作用下同时开关。
这种结构消除了开关晶体管阈值电压随输入信号的变化,因此在整个工作信号范围内导通阻抗比较低。
与单通道开关相比,具有输入信号峰值电压范围等于电源电压以及在输入信号范围内导通阻抗比较稳定等优点。
但若应用于采宝电路,仍推荐CD4016。
当模拟开关的电源电压采用双电源时,例如=﹢5V,=﹣5V(均对地0V而言),则输入电压对称于0V的正、负信号电压(﹢5V~﹣5V)均能传输。
这时要求控制信号C=“1”为+5V,C=“0”为-5V,否则只能传输正极性的信号电压。
元件电路管脚图如下:
4.程序设计:
(1).初始化程序:
系统上电时,将30H~33H内存单元清零,P2口置零。
(2).主程序:
在刚上电时,因30H~33H内存单元的数据为0,则每一通道的数码管显示值都为零,当进行一次测量后,将显示出每一通道的A/D转换值。
每个通道的数据显示时间在1s左右。
主程序在调用显示程序和测试程序之间循环,其流程图如图所示。
主程序:
MAIN:
LCALLSAMP;ADC对输入的模拟量进行采样
LCALLCONVERT;启动转换
LCALLDISPLAY;数码管显示数字
AJMPMAIN
(3).显示子程序:
采用动态扫描法实现三位数码管的数值显示。
测量所得的A/D转换数据放在30H~33H内存单元中。
测量数据在显示时需经过转换成为十进制BCD码放在30H~33H中,其中30H存放0809转换输出数据。
寄存器R0用作显示数据地址指针。
(4).模拟转换测量子程序:
模拟转换测量子程序是用来对ADC0809的模拟输入电压的A/D转换,并将对应的数值移入30H~34H内存单元,其程序流程图如下:
A/D转换测量子函数流程图
SAMP:
MOVP2,#0;选择通道0
SETBP2.3;与ADC的ALE端相连,起地址锁存的功能,即锁存通道0
NOP;延时1US
CLRP2.3
SETBP2.4;START=1时,ADC0809进行数据转换
NOP;延时1US
CLRP2.4
NOP;延时4US
NOP
NOP
NOP
WAIT:
JBP3.7,DATAIN;判断ADC里面的数据是否转换结束
AJMPWAIT
DATAIN:
SETBP2.5;OE=1时,AT89S51从ADC0809取数据
MOVA,P0;将ADC转换以后的数据放入AT89S51的累加器ACC里
MOVR0,#30H
MOV@R0,A;将累加器里面的数据放入单片机内部的存储器R0里
CLRP2.5
MOVP2,#0;选择通道0
MOVP0,#0FFH;初始化P0口
MOVP1,#0FFH;关闭数码管
RET
(5).A/D标度转换以及程序分析:
a.标度转换
Ⅰ.被测电压0~5V,A/D转换后0~255数字量
Ax=A0+(A0)*(Nx-N0)/(Nm-N0)
Ax-参考量测量值,实际测量值
Am-参考量程终点值
A0-参考量程起点值
Nx-量程测量对应的A/D转换后的值,实际是经数字滤波后确定的采样值
Nm-量程终点对应的A/D转换后的值,实际是经数字滤波后确定的采样值
N0-量程起点对应的A/D转换后的值,实际是经数字滤波后确定的采样值
Ⅱ.用模拟量的数值除以51后得的商做为数码管显示的第一位,再用得到的余数除以5以后得到的商为数码管显示的第二位,而得到的余数为
数码管显示的第三位.
b.转换程序
Ⅰ.比较精确的转换程序
CONVERT:
MOVA,@R0;将从ADC读入的数据放入累加器A中
MOVB,#51
DIVAB;将A中的值除以51
MOV33H,A;第一位数值,将A中的值除以51,得到的商放入内部存储器33H里
MOVA,B;将A中的值除以51,得到的余数传送给A
CLRF0;F0为PSW寄存器的第5位,可以由用户定义的一个状态标志。
用软件来置位或清除的。
SUBBA,#26;将得到的余数与26比较
MOVF0,C;将借位标志位送入F0
MOVA,#10;将数值10送入寄存器A
MULAB;再将余数乘以10,将低8位放在加器A中,将高8位放在寄存器B中
MOVB,#51
DIVAB;用(A)除以51,得到的商放入累加器A,余数放入寄存器B中
JBF0,LOOP1;若借位标志位为1,即余数<26,就跳转至LOOP1
ADDA,#5;若余数>26,就要加上5
LOOP1:
MOV32H,A;第二位数值的处理
MOVA,B
CLRF0;清除了借位标志位
SUBBA,#26
MOVF0,C
MOVA,#10
MULAB
MOVB,#51
DIVAB
JBF0,LOOP2
ADDA,#5
LOOP2:
MOV31H,A;第三位数值的处理
RET
Ⅱ.精度不高的转换程序
CONVERT:
MOVA,@R0
MOVB,#51
DIVAB
MOV33H,A
MOVA,B
MOVB,#5
DIVAB
MOV32H,A
MOVA,B
MOV31H,A
RET
(6).数码管的显示分析
在软件方面,利用查表的方式来完成这一功能的。
DISPLAY:
SETBP3.0
SETBP3.1
SETBP3.2
MOVR1,#31H
MOVA,@R1
MOVDPTR,#TAB;查不带小数点的表
MOVCA,@A+DPTR
MOVP1,A
CLRP3.0;选择控制位,在硬件图中(从左向右)为第三个数码管控制端
LCALLDELAY;调用延时
MOVP1,#0FFH
SETBP3.0;关掉第三个数码管
INCR1;内部存储器地址自加1
MOVA,@R1
MOVDPTR,#TAB;查不带小数点的表
MOVCA,@A+DPTR
MOVP1,A
CLRP3.1;选择控制位,在硬件图中(从左向右)为第二个数码管控制端
LCALLDELAY
MOVP1,#0FFH
SETBP3.1
INCR1;内部存储器地址自加1
MOVA,@R1
MOVDPTR,#TAB1;查带小数点的表
MOVCA,@A+DPTR
MOVP1,A
CLRP3.2;选择控制位,在硬件图中(从左向右)为第一个数码管控制端
LCALLDELAY
MOVP1,#0FFH
SETBP3.2
RET
DELAY:
MOVR6,#14H;延时1MS
DL1:
MOVR7,#19H
DL2:
DJNZR7,DL2
DJNZR6,DL1
RET
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;不带小数点的表
TAB1:
DB40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
;带小数点的表
5.测试及结果:
性能分析:
(1).由于单片机为8位处理器,当输入电压为5.00V时,ADC0809输出数据值为255(FFH),因此单片机最大数值分辨率为0.0196V(5/255),这就决定了该电压表的最大分辨率只能达到0.0196V,测试时电压数值的变化一般一0.02的电压幅度变化。
如果要获得更高的精度要求,应采用12位,13位的A/D转换器。
(2).简易电压表测得的值基本上均比标准值偏大0.01~0.02V,这可以通过校正ADC0809的基准电压来解决。
因为该电压表设计时直接用5V的供电电源作为基准电压,所以电压可能有偏差。
另外,可以用软件编程来校正测量值。
(3).ADC0809的直流输入阻抗为1MΩ,能满足一般的电压测试需要。
另外,经测试ADC0809可直接在2MHZ的时钟频率下工作,这样可省去分频器74LS74。
6.遇到问题及解决方法:
四.参考文献:
《单片微型计算机》、《单片机接口技术讲义》、《51系列单片机设计实例》、《单片机C程序设计实例指导》、《数字电路实验讲义·补充》
五.收获和心得:
通过了一个星期的制作,我们了解了单片机整个开发过程,熟知和掌握了AT89C51,ADC0809,74LS245,74LS74、SN74LS245、CD4066、LM358、SW-DIP5(开关)、LM2596芯片的各个引脚的作用及其使用。
虽然这个学期学习单片机课程只有短短的两个月,但是经过自己亲身实践,加之先前所学理论知识,学会了更多的东西,能够积极地思考问题,善于发现问题。
无论从硬件还是软件方面,都提高了我们的动手和动脑能力:
在硬件方面,我们的焊接和布线能力有所改进;在软件方面,我们学会了分析和调试程序。
整个过程中,不但扩展了我们的知识面,而且也不断在挖掘我们的潜力,为我们今后的学习奠定扎实的基础。
附录:
原理图: