基于51单片机的数字电压表仿真设计一、引言随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段,对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。
数字电压表是采用数字化测量技术设计的电压表。
数字电压表与模拟电压表相比,具有读数直观、准确、显示范围宽、分辨力高、输入阻抗大、集成度高、功耗小、抗干扰能力强,可扩展能力强等特点,因此在电压测量、电压校准中有着广泛的应用。
而单片机也越来越广泛的应用与家用电器领域、办公自动化领域、商业营销领域、工业自动化领域、智能仪表与集成智能传感器传统的控制电路、汽车电子与航空航天电子系统。
单片机是现代计算机技术、电子技术的新兴领域。
本文采用ADC0808对输入模拟信号进行转换,控制核心C51单片机对转换的结果进行运算和处理,最后驱动输出装置显示数字电压信号,通过Proteus仿真软件实现接口电路设计,并进行实时仿真。
Proteus软件是一种电路分析和实物模拟仿真软件。
它运行于Windows 操作系统上,可以进行仿真、分析(SPICE)各种模拟器件和集成电路,是集单片机和SPICE分析于一身的仿真软件,功能强大,具有系统资源丰富、硬件投入少、形象直观等优点,近年来受到广大用户的青睐。
二、数字电压表概述1、数字电压表的发展与应用电压表指固定安装在电力、电信、电子设备面板上使用的仪表,用来测量交、直流电路中的电压。
传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,并且传统的电压表在测量电压时需要手动切换量程,不仅不方便,而且要求不能超过该量程。
目前,由各种单片A/D转换器构成的数字电压表,已被广泛用于电子及电工测量领域,并且由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。
2、本次设计数字电压表的组成部分本设计是由单片机AT89C51作为整个系统控制的核心,整个系统由衰减输入电路、量程自动转换电路、交直流转换电路、模数转换及控制电路以及接口电路五大部分构成。
信号经过衰减电路进行衰减到测量所规范的电压值0~0.5V,直流信号直接经过模数转换及控制电路以及接口电路进行数据处理,交流信号要先经过交直流转换电路转换成直流信号,然后进行处理并由LCD显示。
三、系统概述1、设计任务利用单片机C51与ADC0808设计一个数字电压表,将模拟信号0~5V之间的电压值转换成数字量信号,以两位数码管显示,并通过虚拟电压表观察ADC0808模拟量输入信号的电压值,LED数码管实时显示相应的数值量。
2、总体方案数字电压表电路组成框图如图1所示。
图1 系统组成框图本设计中需要用到的电路有电源电路、模/数转换电路、单片机控制电路、显示电路等。
设计中需要用到的芯片有AT89C51单片机、ADC0808、74LS74、LED数码管等。
3、数字电压表的Proteus软件仿真电路设计待测电压输入信号在ADC0808芯片承受的最大工作电压范围内,经过模/数转换电路实现A/D转换,通过单片机控制电路进行程序数据处理,然后通过七段译码/驱动显示电路实现数码管显示输入电压。
硬件电路原理图如图2所示。
图2 Proteus软件仿真电路图3.1 C51单片机和数码管显示电路的接口设计利用单片机C51与ADC0808设计一个数字电压表,将模拟信号0~5V之间的直流电压值转换成数字量信号0~FF,以两位数码管显示。
Proteus软件启动仿真,当前输入电压为2.5V,转换成数字值为7FH,用鼠标指针调节电位器RV1,可改变输入模/数转换器ADC0808的电压,并通过虚拟电压表观察ADC0808模拟量输入信号的电压值,LED数码管实时显示相应的数值量。
在Proteus软件中设置AT89C51单片机的晶振频率为12MHz。
本电路EA接高电平,没有扩展片外ROM。
3.2 A/D转换电路的接口设计A/D转换器采用集成电路ADC0808。
ADC0808具有8路模拟量输入信号IN0~IN7(1~5脚、26~28脚),地址线C、B、A(23~25脚)决定哪一路模拟输入信号进行A/D转换,本电路将地址线C、B、A均接地,即选择0号通道输入模拟量电压信号。
22脚ALE为地址锁存允许控制信号,当输入为高电平时,对地址信号进行锁存。
6脚START为启动控制信号,当输入为高电平时,A/D转换开始。
本电路将ALE脚与START脚接到一起,共同由单片机的P2.0脚和WR脚通过或非门控制。
7脚EOC为A/D转换结束信号,当A/D转换结束时,7脚输出一个正脉冲,此信号可作为A/D转换是否结束的检测信号或向CPU申请中断的信号,本电路通过一个非门连接到单片机的P3.2脚。
9脚OE为A/D转换数据输出允许控制信号,当OE脚为高电平时,允许读取A/D转换的数字量。
该OE脚由单片机的P2.0脚和RD脚通过或非门控制。
l0脚CLOCK为ADC0808的实时时钟输入端,利用单片机30引脚ALE的六分频晶振频率得到时钟信号。
数字量输出端8个接到单片机的P0口。
四、数字电压表的软件程序设计系统上电状态,初始化ADC0808的启动地址,数码管显示关闭,开始启动A/D 转换。
等待启动结束后,将ADC0808的0号通道模拟量输入信号转换输出的数字量结果通过数码管动态显示的方式显示到三位数码管上。
根据设计要求结合硬件电路,在输入模拟信号时采用电阻分压,最终的采样输入电压只有实际输入电压的十分之一,所以在编写程序中要编写一段数据调整程序,其中还应注意硬件显示电路采用了动态扫描显示,在动态扫描显示方式中,动态扫描的频率有一定的要求,频率太低,数码管LED将会出现闪烁现象,通常数码管点亮时间间隔一般均取5ms 左右为宜,这就要求在编写程序时,使其点亮并保持一定的时间。
总结以上分析,程序流程图如图3,图4所示。
图3 主程序流程图图4 LED数码显示程序流程图本电路的程序设计主要包括A/D转换部分、LED显示、初始化和定时器中断部分。
部分程序代码如下所示:Sbit ST=P3^0;//启动A/D转换控制信号输入端Sbit OE=P3^1;//输出允许控制端Sbit EOC=P3^2;//转换结束信号输出端Sbit CLK=P3^3;void ding(){ST=0;OE=0;ET1=1; //定时/计数器1开中断EA=1; //CPU开中断TMOD=0x10; //定时/计数器1工作方式1:16位TH1=(65536-5000)/256;TL1=(65536-5000)%256;TR1=1; //定时/计数器运行控制位ST=1;ST=0;}voidmain(void){P2=0xf;f//初始化各数码管,不选中任何一只数码管ding();while(1){ST=0;//启动A/D转换ST=1;ST=0;while(EOC==0)//等待转换结束;OE=1;//输出允许getdata=P0;//得到转换后数据存放到getdataOE=0;//关闭输出允许i=getdata*196;//196=(5/256)*100*100dispbuf[5]=i/10000;i=%i10000;dispbuf[6]=i/1000;i=%i1000;dispbuf[7]=i/100;ST=1;ST=0;}}五、结束语本文的数字电压表可以测量0~5V的电压值,AT89C51为8位单片机,当ADC0808的输入电压为5V时,输出数字量值为+4.99V。
如果要获得更高的精度,需采用I2位、I3位等高于8位的A/D转换器。
数字电压表的显示部分可以增加BCD码调整程序来通过三位数码管显示其数据。
本设计的显示偏差,可以通过校正0808的基准参考电压来解决,或用软件编程来校正其测量值。
本系统在设计过程中通过Proteus仿真软件的调试,具有电路简单、成本低、精度高、速度快和性能稳定等特点。
参考文献[1] 张俊谟. 单片机中级教程——原理与应用[M].北京:北京航天航空大学出版社,2006:6—7.[2] 何立民. 单片机高级教程——应用与设计[M].2版. 北京:北京航天航空大学出版社,2007:2.[3] 刘振忠. 数字电压表发展概况和原理:电压-频率(VF)变换式积分型数字电压表[J].电讯工程,1998(2):39-42.[4] 王幸之. 单片机应用系统抗干扰技术[M].北京:北京航空航天大学出版社,2000.[5] 吴金戌,沈庆阳,郭庭吉. 单片机实践与应用[M].北京:清华大学出版社,2002.[6] 张志良,马彪. 单片机原理与控制技术[M].北京:机械工业出版社,2001.[7] 沈任元,吴勇. 常用电子元器件简明手册[M].北京:机械工业出版社,2004.[8] 沙占友. 新型数字电压表原理与应用[M].北京:机械工业出版社,2006.[9] 谢自美. 电子线路设计实验测试[M].武汉:华中科技大学出版社,2000.[10] 曲娜,程凤琴,周鹏. 基于51单片机的舵机控制信号的设计[J].中国科技信息,2010,21(63):137.[11] 刘敏娜,潘宏侠,王乔. 基于C51单片机的数字电压表仿真设计[J].山西电子技术,2011(2):46—47,64.[12] 徐毅,赵龙,王海峰. 基于单片机的新型数字电压表设计[J].河南科技2010,11(下):44—45.。