微机原理课程设计数字电压表解析Word下载.docx
《微机原理课程设计数字电压表解析Word下载.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计数字电压表解析Word下载.docx(25页珍藏版)》请在冰点文库上搜索。
3.完成预习报告,报告中要有设计方案,设计电路图,还要有仿真结果;
4.进实验室进行电路调试,边调试边修正方案;
5.撰写课程设计报告——最终的电路图、调试过程中遇到的问题和解决问题的方法。
三、进度安排
1.时间安排
序号
内容
学时安排(天)
1
方案论证和系统设计
2
完成电路仿真,写预习报告
3
电路调试
4
写设计总结报告与答辩
合计
5
设计调试地点:
电气楼410
2.执行要求
微机原理与接口技术课程成绩优秀的可以自拟题目,其余的同学都是指定题目。
,每组不得超过2人,要求学生在教师的指导下,独力完成所设计的详细电路(包括计算和器件选型)。
严禁抄袭,严禁两篇设计报告雷同。
摘要
随着我国现代化技术建设的发展,电子检测技术日新月异,我们的课程设计是基于80C51单片机的一种8路输入电压测量电路,该电路采用ADC0832A/D转换元件,实现数字电压表的硬件电路与软件设计。
该系统的数字电压表电路简单,可以测量0~2V和0~0.2V的电压值,并在四位LED数码管上轮流显示或单路选择显示。
所用的元件较少,成本低,调节工作可实现自动化,还可以方便地进行8路A/D转换量的测量。
关键词:
数字电压表A/D转换器电压测量
Abstract
Withtheconstructionofmoderntechnology,electronicdetectiontechnologyadvances,the80C51microcontrollerforthisdesignisbasedonan8-inputvoltagemeasurementcircuitthatusesADC0832A/Dconversioncomponents,digitalvoltagemeterhardwareandsoftwaredesign.Thesystem'
sdigitalvoltmetercircuitissimple,canmeasurethevoltage0~2Vand0~0.2V,andthefourturnsontheLEDdigitaldisplayorasingleselectShow.Fewercomponentsusedinlowcost,regulationworkcanbeautomated,Youcanalsoeasily8A/Dconversionvolumemeasurement.
Keywords:
digitalvoltmeterA/Dconvertervoltagemeasurement
第一章系统方案设计
一.数字电压表设计要求简介
做一个量程可变的数字电压表。
主要用到的芯片有AD0832,继电器,8051单片机,运放及其外围设备。
主要的设计思路是将电压表设计成两档,0~200mV和0~2V。
其相对应的运放的放大增益是25倍和2.5倍。
二.工作原理
1.STC89C51单片机
89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。
89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
管脚说明:
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.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器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.74HC245
总线收发器(bustransceiver),典型的CMOS型三态缓冲门电路。
由于单片机或CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。
第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。
第2~9脚“A”信号输入输出端,A1=B1﹑﹑﹑﹑﹑﹑A8=B8,A1与B1是一组,如果DIR=“1”G=“0”则A1输入B1输出,其它类同。
如果DIR=“0”G=“0”则B1输入A1输出,其它类同。
第11~18脚“B”信号输入输出端,功能与“A”端一样,不在描述。
第19脚G,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用第10脚GND,电源地。
第20脚VCC,电源正极。
第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。
第2~9脚“A”信号输入输出端,A0=B0、、、、、、A7=B7,A0与B0是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。
如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。
第11~18脚“B”信号输入输出端,功能与“A”端一样,不再描述。
第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。
第10脚GND,电源地。
3.ADC0832
ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。
其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。
芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。
独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。
通过DI数据输入端,可以轻易的实现通道功能的选择。
正常情况下ADC0832与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。
但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI并联在一根数据线上使用。
当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK和DO/DI的电平可任意。
当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。
此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。
在第1个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。
在第2、3个脉冲下沉之前DI端应输入2位数据用于选择通道功能,其功能项见官方资料。
如资料所示,当此2位数据为“1”、“0”时,只对CH0进行单通道转换。
当2位数据为“1”、“1”时,只对CH1进行单通道转换。
当2位数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。
当2位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1作为正输入端IN+进行
输入。
到第3个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。
从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。
直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出
DC0832封装以及各端子(1张)完成。
也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。
随后输出8位数据,到第19个脉冲时数据输出完成,也标志着一次A/D转换的结束。
最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了。
作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。
如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。
但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。
CS_片选使能,低电平芯片使能。
CH0模拟输入通道0,或作为IN+/-使用。
CH1模拟输入通道1,或作为IN+/-使用。
GND芯片参考0电位(地)。
DI数据信号输入,选择通道控制。
DO数据信号输出,转换数据输出。
CLK芯片时钟输入。
Vcc/REF电源输入及参考电压输入(复用)。
4.继电器和放大器
继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。
故在电路中起着自动调节、安全保护、转换电路等作用。
放大器:
能把输入讯号的电压或功率放大的装置,由电子管或晶体管、电源变压器和其他电器元件组成。
P1.2控制继电器的工作状态,当P1.2低电平时,继电器处于常闭状态,那么相对应的运放的放大增益为25倍。
而当P1.2为高电平时继电器工作,其对应的放大增益即变为2.5倍。
对于一个模拟输入,现将其放大2.5倍,然后由AD输入并相应转化,如果它的输出要是小于0.5V,也就是19H,则选择此档位是不精确的,也说明此时的输入电压介于0~200mV之间。
那么我们就需要让P1.2置低电平,将相应的放大倍数改成25以提高转换精度。
若其满足相应的条件则直接将其转换成BCD码并直接送数显示即可。
三.实验原理和设计思路
由ADC0832采集电压信号,电压信号经过ADC0832变成相应的数字信号进入89s51,89s51根据输入电压的大小通过继电器和放大器电路选择对应的放大倍数及量程,然后显示在数码管上。
最终电路图如下:
1、系统组成框图如下
2、程序流程图:
3、ADC0832数据读取程序流程图
四.程序设计
ORG0000H
LJMPMAIN
ORG0600H
MAIN:
MOVSP,#70H;
设堆栈起始地址
MOVR0,#40H;
将转换得到BCD码高位地址给R0
MOVR2,#0DFH;
将高位LED数码位选择地址给R2
CLR20H.0;
START:
LCALLTOAD;
调用AD电压采集程序
MOV30H,A;
将采集回来的数据存储到30H
JB20H.0,READY
LCALLSWITCH;
调用量程判断切换程序
JB20H.0,START
READY:
LCALLTRANSFER;
调用BCD码换算程序
LCALLDISPLAY;
调用显示程序
CLR20H.0
SJMPSTART;
返回作循环电压测量
;
AD转换电压采集程序
TOAD:
CLRP3.3;
CS=0
MOVA,#03H;
起始位和配置位为011
MOVR3,#03H
LOOPB1:
CLRP3.2;
CLK=0
RRCA
MOVP3.0,C
NOP
SETBP3.2;
CLK=1
DJNZR3,LOOPB1
通道稳定脉冲
MOVR3,#08H
LOOPB2:
MOVC,P3.1;
读入一位数据
RLCA
DJNZR3,LOOPB2
SETBP3.3;
CS=1
RET
量程判断切换程序
SWITCH:
MOVA,30H
JBP3.4,SWITCH2
SWITCH1:
CJNEA,#0FEH,NEXT1;
大量程
NEXT1:
JCBACK
SETBP3.4
MOVA,#0FEH;
由小量程变为大量程
MOVP0,A
MOVA,#01H;
显示字符1
MOVDPTR,#TAB1;
选择表TAB1
MOVCA,@A+DPTR
MOVP2,A
LCALLDELAY
SETB20H.0
SJMPBACK
SWITCH2:
CJNEA,#15H,NEXT2;
小量程
NEXT2:
JNCBACK
CLRP3.4
由大量程变为小量程
MOVA,#02H;
显示字符2
MOVDPTR,#TAB1;
MOVP2,A
BACK:
BCD码转换程序
TRANSFER:
JNBP3.4,TRF1
ADDA,#06H;
补偿量程切换造成的电压差值
TRF1:
MOVB,#200;
B赋值200
MULAB;
AB乘低8位给A
MOVR1,A
MOVA,B;
B赋给A
MOVB,#100;
B赋值100
DIVAB;
A除以100,A为商,B为余数
MOV40H,A
MOVB,#10
A除以10,A为商
MOV41H,A
MOV42H,B
MOVA,R1;
R1赋给A
MOV43H,A
数码显示输出程序
DISPLAY:
MOVR4,#06H
DISPLAY1:
MOVA,R2
JNBP3.4,AB1
JBACC.5,ABX;
根据字位选择查相应的表
AB2:
MOVDPTR,#TAB2;
选择表TAB2
SJMPCONTINUE
AB1:
JNBACC.3,AB2
ABX:
MOVDPTR,#TAB1;
CONTINUE:
MOVA,@R0
MOVCA,@A+DPTR
MOVP2,A
JNBACC.2,RETURN
RRA
MOVR2,A
INCR0
SJMPDISPLAY1
RETURN:
MOVR0,#40H
MOVR2,#0DFH
DJNZR4,DISPLAY1
TAB1:
DB3FH06H5BH4FH66H6DH7DH07H7FH6FH77H
TAB2:
DB0BFH86H0DBH0CFH0E6H0EDH87H0FFH0EFH0F7H
延时程序
DELAY:
MOVR7,#0AH
DELAY1:
MOVR6,#0FFH
DELAY2:
DJNZR6,DELAY2
DJNZR7,DELAY1
END
第二章仿真
实验电路图:
电阻为0欧姆时:
电压为<
200mV时:
电压为>
电压最大值为1.99V时:
第三章调试
电压为0mV时:
电压为193.1mV时:
电压为0.210V时:
电压为1.922V时:
第四章结论
本次课程设计在老师的帮助下,我们解决了切换档位、字符错误的问题,完成了规定的所有要求,并对该电路板上所用电路以及元器件有了更为深刻的认识。
但是对于一个完整的电压表而言,我们的工作还存在缺陷,就是当电压表超出量程的时候,我们的电压表会出现重新开始计数的问题。
这个问题我们能力有限所以难以解决,这将是我们今后认真研究的一个问题。
遇到的问题:
本次实验我们根据老师发的电路板做了仿真,虽然做仿真不太难,但是调程序的时候遇到了一些解决的问题。
1.量程的调变。
我们组先根据电路图和课设的要求把程序写了,然后做了仿真。
做完仿真后把程序调到仿真电路图里面,经过一个小时左右的调试得到了单量程的电压表效果。
但是得到双量程的电压表不是那么容易了。
2.字符错误。
当处于低量程时候,电压表示数会出现A字符,这不符合十进制的基本常识,说明算法出现了严重错误。
解决步骤:
我们先把程序查了两三次,没发现问题,然后查了仿真电路图,也没发现问题。
我们跟其他组同学讨论了很长时间也没发现问题,虽然把电路图改了以后显示效果有发生变化,但是比200mv一下的电压值显示不是理想的。
我们周末两天的时间为了解决这个问题而奋斗得到了双量程的电压表,输入电压从小到大变化过程没错,从大到小变化时就乱了,。
我们程序按照逻辑构成又分析了一遍,结果发现问题在于仿真电路和实际电路的不同即我们所选的量程转折点电压值对应的数字在仿真里面没有,于是我们把量程转折点改了以后就得到了理想的有两个量程的数字电压表。
同时,在详细剖析程序时候,我们还一起对小量程时候的算法进行逻辑分析,发现我们的算法在小量程时,进位的写错了,应该是当余数出现10时候,要考虑对其进行“+1”运算,才能避免出现字符里的A情况。
第五章心得体会与建议
此次单片机课程设计较其他课程设计而言时间较充足,因此我们组也做了充分的前期准备。
得知课程设计的题目与要求之后,便与组员一起查找资料,对相关元器件的工作原理和结构进行分析和研究,并设计了电路图。
由于这次实验AD采集用的不是AD0809而是AD0832,而AD0832是我们所不熟悉的,为了弄明白AD0832的工作原理和模拟量采集与模数转换的具体实现过程进而为编程做准备,我们在网上和图书馆查找资料,这也加强了我们的自学能力。
同时对单片机的引脚连接有了更为直观的认识,对于程序的编写也有了很大的提高。
指导老师的严谨负责,也给了我们很大的帮助。
例如在验收时他提问继电器的结构和它内部的工作原理是怎样的。
我们对继电器的认识只停留在了它在整个设计中的作用上而忽略了它本身内部的结构和原理,当老师提出这一问题时,我们认真思索,翻阅资料,在较短的时间内牢牢的掌握住了继电器的工作原理,老师的鼓励也给了我们很大的信心。
在此要感谢王老师,他使我们懂得在学习中要有自主钻研的精神,要踏踏实实,从小的知识点全方位的掌握课程内容。
参考文献
[1]李维波,MATLAB在电气工程中的应用,中国电力出版社,2007
[2]胡汉才,单片机原理及其接口技术,清华大学出版社,2004
附录1:
元器件清单
1.实验指定所用电路板
2.51单片