微机原理课程设计--数字电压表(共26页).doc
精选优质文档-倾情为你奉上电气工程学院 微机原理与接口设计 课程设计设计题目: 数字电压表 学号: xxxxxxxxxxx 姓 名: xxxxxxxx 同 组 人: xxxxxxxx 指导教师: xxxxxxxx 设计时间: xxxxxxxxxxxxxxxxxxxxxxx 设计地点: 电气学院实验中心 微机原理与接口设计课程设计成绩评定表姓 名 学 号课程设计题目: 数字电压表课程设计答辩或提问记录:成绩评定依据:课程设计预习报告及方案设计情况(30):课程设计考勤情况(15):课程设计调试情况(30):课程设计总结报告与答辩情况(25):最终评定成绩(以优、良、中、及格、不及格评定)指导教师签字: 年 月 日微机原理与接口设计课程设计任务书学生姓名: 指导教师: 一、课程设计题目: 数字电压表二、课程设计要求1. 根据具体设计课题的技术指标和给定条件,独立进行方案论证和电路设计,要求概念清楚、方案合理、方法正确、步骤完整;2. 查阅有关参考资料和手册,并能正确选择有关元器件和参数,对设计方案进行仿真;3. 完成预习报告,报告中要有设计方案,设计电路图,还要有仿真结果;4. 进实验室进行电路调试,边调试边修正方案;5. 撰写课程设计报告最终的电路图、调试过程中遇到的问题和解决问题的方法。三、进度安排1时间安排序 号内 容学时安排(天)1方案论证和系统设计12完成电路仿真,写预习报告13电路调试24写设计总结报告与答辩1合 计5设计调试地点:电气楼4102执行要求微机原理与接口技术课程成绩优秀的可以自拟题目,其余的同学都是指定题目。,每组不得超过2人,要求学生在教师的指导下,独力完成所设计的详细电路(包括计算和器件选型)。严禁抄袭,严禁两篇设计报告雷同。摘要随着我国现代化技术建设的发展,电子检测技术日新月异,我们的课程设计是基于80C51单片机的一种8路输入电压测量电路,该电路采用ADC0832 A/D转换元件,实现数字电压表的硬件电路与软件设计。该系统的数字电压表电路简单, 可以测量02V和00.2V的电压值,并在四位LED数码管上轮流显示或单路选择显示。所用的元件较少,成本低,调节工作可实现自动化,还可以方便地进行8路A/D转换量的测量。关键词:数字电压表 A/D转换器 电压测量 Abstract With the construction of modern technology, electronic detection technology advances, the 80C51 microcontroller for this design is based on an 8-input voltage measurement circuit that uses ADC0832 A / D conversion components, digital voltage meter hardware and software design . The system's digital voltmeter circuit is simple, can measure the voltage 0 2V and 00.2V, and the four turns on the LED digital display or a single select Show. Fewer components used in low cost, regulation work can be automated, You can also easily 8 A / D conversion volume measurement.Key words: digital voltmeter A/D converter voltage measurement 目录 专心-专注-专业第一章 系统方案设计一. 数字电压表设计要求简介做一个量程可变的数字电压表。主要用到的芯片有AD0832,继电器,8051单片机,运放及其外围设备。主要的设计思路是将电压表设计成两档,0200mV和02V。其相对应的运放的放大增益是25倍和2.5倍。二. 工作原理1. STC89C51单片机89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压、高性能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.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. 74HC245总线收发器(bus transceiver),典型的CMOS型三态缓冲门电路。由于单片机或CPU的数据/地址/控制总线端口都有一定的负载能力,如果负载超过其负载能力,一般应加驱动器。第1脚DIR,为输入输出端口转换用, DIR=“1”高电平时信号由“A”端输入“B”端输出, DIR=“0”低电平时信号由“B”端输入“A”端输出。第29脚“A”信号输入输出端,A1=B1A8=B8,A1与B1是一组,如果DIR=“1”G=“0”则A1输入B1输出,其它类同。如果DIR=“0”G=“0”则B1输入A1输出,其它类同。 第1118脚“B”信号输入输出端,功能与“A”端一样,不在描述。第19脚G,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用 第10脚GND,电源地。第20脚VCC,电源正极。管脚说明:第1脚DIR,为输入输出端口转换用,DIR=“1”高电平时信号由“A”端输入“B”端输出,DIR=“0”低电平时信号由“B”端输入“A”端输出。第29脚“A”信号输入输出端,A0=B0、A7=B7,A0与B0是一组,如果DIR=“1”OE=“0”则A1输入B1输出,其它类同。如果DIR=“0”OE=“0”则B1输入A1输出,其它类同。第1118脚“B”信号输入输出端,功能与“A”端一样,不再描述。第19脚OE,使能端,若该脚为“1”A/B端的信号将不导通,只有为“0”时A/B端才被启用,该脚也就是起到开关的作用。第10脚GND,电源地。第20脚VCC,电源正极。3. ADC0832ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在05V之间。芯片转换时间仅为32S,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过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的输入电压是05V且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,则选择此档位是不精确的,也说明此时的输入电压介于0200mV之间。那么我们就需要让P1.2置低电平,将相应的放大倍数改成25以提高转换精度。若其满足相应的条件则直接将其转换成BCD码并直接送数显示即可。三. 实验原理和设计思路由ADC0832采集电压信号,电压信号经过ADC0832变成相应的数字信号进入89s51,89s51根据输入电压的大小通过继电器和放大器电路选择对应的放大倍数及量程,然后显示在数码管上。 最终电路图如下:1、 系统组成框图如下STC89C51电源、时钟、复位电路ADC0832显示电路输入电压2、 程序流程图:开始清除显示器启动AD转换AD转换完成转换数据送ABCD转换调整输出显示否是3、 ADC0832数据读取程序流程图开始初始化通道选择ADCLK清零、CS置低产生CLK信号串行循环送数输入通道控制字结束将值送入指定寄存器CS 、CLK初始化四. 程序设计 ORG 0000H LJMP MAIN ORG 0600HMAIN: MOV SP,#70H ;设堆栈起始地址 MOV R0,#40H ;将转换得到BCD码高位地址给R0 MOV R2,#0DFH ;将高位LED数码位选择地址给R2 CLR 20H.0 ;START: LCALL TOAD ;调用AD电压采集程序 MOV 30H,A ;将采集回来的数据存储到30H JB 20H.0,READY LCALL SWITCH ;调用量程判断切换程序 JB 20H.0,STARTREADY: LCALL TRANSFER ;调用BCD码换算程序 LCALL DISPLAY ;调用显示程序 CLR 20H.0 SJMP START ;返回作循环电压测量;AD转换电压采集程序TOAD: CLR P3.3 ;CS=0 MOV A,#03H ;起始位和配置位为011 MOV R3,#03HLOOPB1: CLR P3.2 ;CLK=0 RRC A MOV P3.0,C NOP SETB P3.2 ;CLK=1 DJNZ R3,LOOPB1 CLR P3.2 ;通道稳定脉冲 NOP SETB P3.2 ;CLK=1 MOV R3,#08HLOOPB2: CLR P3.2 ;CLK=0 MOV C,P3.1 ;读入一位数据 RLC A SETB P3.2 ;CLK=1 DJNZ R3,LOOPB2 SETB P3.3 ;CS=1 RET;量程判断切换程序SWITCH: MOV A,30H JB P3.4,SWITCH2SWITCH1: CJNE A,#0FEH,NEXT1;大量程NEXT1: JC BACK SETB P3.4 MOV A,#0FEH;由小量程变为大量程 MOV P0,A MOV A,#01H ;显示字符1 MOV DPTR,#TAB1 ;选择表TAB1 MOVC A,A+DPTR MOV P2,A LCALL DELAY SETB 20H.0 SJMP BACKSWITCH2: CJNE A,#15H,NEXT2;小量程NEXT2: JNC BACK CLR P3.4 MOV A,#0FEH;由大量程变为小量程 MOV P0,A MOV A,#02H ;显示字符2 MOV DPTR,#TAB1 ;选择表TAB1 MOVC A,A+DPTR MOV P2,A LCALL DELAY SETB 20H.0BACK: RET;BCD码转换程序TRANSFER: MOV A,30H JNB P3.4,TRF1 ADD A,#06H ;补偿量程切换造成的电压差值TRF1: MOV B,#200 ;B赋值200 MUL AB ;AB乘 低8位给A MOV R1,A MOV A,B ;B赋给A MOV B,#100 ;B赋值100 DIV AB ;A除以100,A为商,B为余数 MOV 40H,A MOV A,B ;B赋给A MOV B,#10 DIV AB ;A除以10,A为商 MOV 41H,A MOV 42H,B MOV A,R1 ;R1赋给A MOV B,#100 ;B赋值100 DIV AB ;A除以100,A为商,B为余数 MOV 43H,A RET;数码显示输出程序DISPLAY: MOV R4,#06HDISPLAY1: MOV A,R2 MOV P0,A JNB P3.4,AB1 JB ACC.5,ABX ;根据字位选择查相应的表AB2: MOV DPTR,#TAB2 ;选择表TAB2 SJMP CONTINUEAB1: JNB ACC.3,AB2ABX: MOV DPTR,#TAB1 ;选择表TAB1CONTINUE: MOV A,R0 MOVC A,A+DPTR MOV P2,A LCALL DELAY MOV A,R2 JNB ACC.2,RETURN RR A MOV R2,A INC R0 SJMP DISPLAY1RETURN: MOV R0,#40H MOV R2,#0DFH DJNZ R4,DISPLAY1 RETTAB1: DB 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH 77HTAB2: DB 0BFH 86H 0DBH 0CFH 0E6H 0EDH 87H 0FFH 0EFH 0F7H;延时程序DELAY: MOV R7,#0AHDELAY1: MOV R6,#0FFHDELAY2: DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END第二章 仿真实验电路图:电阻为0欧姆时:电压为<200mV时:电压为>200mV时:电压最大值为1.99V时:第三章 调试电压为0mV时:电压为193.1mV时: 电压为0.210V时:电压为1.922V时: 第四章 结论本次课程设计在老师的帮助下,我们解决了切换档位、字符错误的问题,完成了规定的所有要求,并对该电路板上所用电路以及元器件有了更为深刻的认识。但是对于一个完整的电压表而言,我们的工作还存在缺陷,就是当电压表超出量程的时候,我们的电压表会出现重新开始计数的问题。这个问题我们能力有限所以难以解决,这将是我们今后认真研究的一个问题。遇到的问题:本次实验我们根据老师发的电路板做了仿真,虽然做仿真不太难,但是调程序的时候遇到了一些解决的问题。1. 量程的调变。我们组先根据电路图和课设的要求把程序写了,然后做了仿真。做完仿真后把程序调到仿真电路图里面,经过一个小时左右的调试得到了单量程的电压表效果。但是得到双量程的电压表不是那么容易了。2. 字符错误。当处于低量程时候,电压表示数会出现A字符,这不符合十进制的基本常识,说明算法出现了严重错误。解决步骤:我们先把程序查了两三次,没发现问题,然后查了仿真电路图,也没发现问题。我们跟其他组同学讨论了很长时间也没发现问题,虽然把电路图改了以后显示效果有发生变化,但是比200mv一下的电压值显示不是理想的。我们周末两天的时间为了解决这个问题而奋斗得到了双量程的电压表,输入电压从小到大变化过程没错,从大到小变化时就乱了,。我们程序按照逻辑构成又分析了一遍,结果发现问题在于仿真电路和实际电路的不同即我们所选的量程转折点电压值对应的数字在仿真里面没有,于是我们把量程转折点改了以后就得到了理想的有两个量程的数字电压表。同时,在详细剖析程序时候,我们还一起对小量程时候的算法进行逻辑分析,发现我们的算法在小量程时,进位的写错了,应该是当余数出现10时候,要考虑对其进行“+1”运算,才能避免出现字符里的A情况。第五章 心得体会与建议此次单片机课程设计较其他课程设计而言时间较充足,因此我们组也做了充分的前期准备。得知课程设计的题目与要求之后,便与组员一起查找资料,对相关元器件的工作原理和结构进行分析和研究,并设计了电路图。由于这次实验AD采集用的不是AD0809而是AD0832,而AD0832是我们所不熟悉的,为了弄明白AD0832的工作原理和模拟量采集与模数转换的具体实现过程进而为编程做准备,我们在网上和图书馆查找资料,这也加强了我们的自学能力。同时对单片机的引脚连接有了更为直观的认识,对于程序的编写也有了很大的提高。指导老师的严谨负责,也给了我们很大的帮助。例如在验收时他提问继电器的结构和它内部的工作原理是怎样的。我们对继电器的认识只停留在了它在整个设计中的作用上而忽略了它本身内部的结构和原理,当老师提出这一问题时,我们认真思索,翻阅资料,在较短的时间内牢牢的掌握住了继电器的工作原理,老师的鼓励也给了我们很大的信心。在此要感谢王老师,他使我们懂得在学习中要有自主钻研的精神,要踏踏实实,从小的知识点全方位的掌握课程内容。参考文献1李维波,MATLAB在电气工程中的应用,中国电力出版社,20072胡汉才,单片机原理及其接口技术,清华大学出版社,2004附录1:元器件清单 1. 实验指定所用电路板2. 51单片机wave仿真器3. +5V,±12V稳压电源