搜档网
当前位置:搜档网 › 智能电压表剖析

智能电压表剖析

智能仪器设计报告

姓名:

学号:

班级:

时间:

南京理工大学紫金学院电光系

目录

摘要

1系统总设计方案

1.1设计原理………………………………………………………………

错误!未定义书签。

1.2系统流程………………………………………………………………

2

1.3模块原理………………………………………………………………

错误!未定义书签。

1.4元器件的选择……………………………………………………………

错误!未定义书签。

2理论分析

2.1电路的仿真和分析………………………………………………………

4

3硬件模块

3.1 OP07放大模块……………………………………………………………

5

3.2 COMPIM串口电路模块……………………………………………………

6

3.3 LED显示 (7)

3.4 A/D采集电路模块………………………………………………………

7

3.5 STC89C58RD+控制模块 (8)

4软件模块

4.1主函数流程图……………………………………………………………

9

4.2功能函数流程图 (10)

4.3显示函数流程图 (11)

4.4虚拟仪器设计 (12)

5系统测试与分析

5.1仿真测试 (13)

5.2测试中遇到的问题及解决方法 (19)

参考文献 20

摘要

随着电子学的发展,程控电子测量备受广大电子工程师的重视,测量精度和功能的要求也越来越高。

本次课程设计是电压表硬件由单片机系统、ADC0809芯片、OP07芯片、74HC4052芯片构成。代码由C语言编程编写,上位机界面Labview构成。本设计阐述了基于单片机和Labview的智能数字电压表。电压表设计要求分成三档0~100mV;100mV~1V;1~5V,为了实现电压的自动换挡,提高测量精度,利用程控增益放大器改变放大器的放大倍数,将各档内的输入电压依次放大50倍,5倍,1倍,程控放大器的输出端经ADC0809进行A/D转换,转换结果传输给STC89C51(实际硬件电路采用STC89C58RD+),STC89C51根据结果将信息反馈给多路选择器从而改变放大器放大倍数的,并利用串行通信发送给上位机,在Labview上实现测量数据的显示。

关键词数字电压表单片机程控放大电路 Labview

在电量的测量中,电压、电流和频率是最基本的三个被测量,其中电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。 1.1设计原理

采用STC89C51(实际为STC89C58RD+)单片机作为系统的控制单元,通过A/D 转换将被测值转换为数字量送入单片机中 再由单片机来送显。采用ADC0809转换芯片,其中A/D 转换器用于实现模拟量数字量的转换,单电源供电。它是具有8路模拟量输入(实际只选一路),8位数字量输出功能的A/D 转换器,转换时间大约为100us ,模拟输入电压范围为0V~5V 。

开始输入电压A/D 转换

放大50倍,完成一次A/D 转换

是否为满量

程?

Y

N

放大50倍,完成一次A/D 转换

是否为满量

程?Y

放大一倍,完成一次A/D 转换

A/D 采样串口发送数据显示结束

Y

N

该设计主要由滑动变阻器采集信号,送入信号放大模块,实现自动切换变档功能,变档功能由单片机控制多路选择开关CD4052实现不同的测量档位;模拟信号送入A/D 转换得到的数字信号经单片机进行判断处理后,再由单片机控制共阴数码管显示电压值,并通过串口上传至abview 显示。

主要由信号采集模块、信号放大模块、多路模拟开关、A/D 转换模块、单片机控制模块、智能仪器显示模块、数码管显示模块组成。

输入电压

程控放大器A/D 转换单片机

PC 机

1.3模块基本原理

(1)信号采集模块(产生输入信号):设计中主要采用分压电路实现,由两个电阻组成,一个为标称电阻,一个为滑动变阻器,滑动变阻器接在电路以产生不同电压。

(2)信号放大模块:信号放大部分主要由集成运放OP07组成,构成电路的三种测量倍率,分别为:1倍、5倍、50倍,配合多路模拟开关实现不同倍率的输出。 (3)多路模拟开关:通过单片机控制多路开关CD4052的地址位,顺序循环选择不同阻值的反馈电阻来确定电路模块的放大倍率,输出给A/D 模块进行转换。 (4)A/D 转换模块:接收信号模块产生的模拟信号由单片机控制进行适当延时,保证输出数据显示不会产生跳动,得到的数字信号送单片机处理。 (5)单片机模块:此模块为系统的控制中心,通过循环选择多路模拟开关输出不同倍率的模拟信号,通过控制A/D 转换得到不同倍率的数字信号,进行逻辑判断,若得到的数据超过A/D 的最大输出量程0XFF ,则认为此组数据无效,继续进行下一倍率转换,直到数据在A/D 测量量程内,则认为此组数据为实际测量所需值。

(6)Labview 显示模块:待单片机得到实际所需的测量值,通过串口发送到虚拟仪器,上位机界面由Labview 软件设计,所得数据经过Labview 编程处理,在界面上得到对应的电压值。

(7)数码管显示模块:待单片机得到实际所需的测量值,通过数据口将数据经过处理,发送给数码管,从而使数码管显示电压值。

1.4元器件的选择

(1)集成运放

在集成运放中选用OP07具有输入偏置电流低(OP07A为±2nA)和开环增益高(对于OP07A为300V/mV)的特点,这种低失调、高开环增益的特性使得OP07特别适用于高增益的测量设备和放大传感器的微弱信号等方面。

(2)多路模拟开关

在多路模拟开关中选用OP07是因为CD4052是一个双4选一的多路模拟选择开关,有A、B两个二进制控制输入端和INH输入,具有低导通阻抗和很低的截止漏电流。符合本次设计需求。所以选择该芯片。

(3)A/D转换

ADC0809芯片为A/D转换芯片,在本次设计中选择此芯片是因为AD0809转换速率高单(通道转换时间仅为116us)、电路简单,易于控制;并且还带有三态输出锁存器,转换结束时,可由MCU 打开三态门,读出8 位的转换结果,输出数据稳定。所以设计中选择了该芯片。

(4)STC89C58RD+

此次设计中的核心芯片选择了51单片机系列中的STC89C58RD+,STC89C58RD+与传统51单片机相比具有超低功耗,正常工作模式下典型功耗为4~7mA,空闲模式下功耗小于2mA。并且该芯片还具有超强抗干扰能力,每个I/O 口都对VCC和GND进行了保护措施。因此输入电压范围宽,不怕电源抖动。STC89C58RD+相比于传统的AT89C51存储容量更大,不需另加外扩存储器,且下载方便,用官方软件STC-ISP即可烧录程序,所以此次设计选择STC89C58RD+为核心芯片。

2.1 电路的仿真与分析

该仿真图由在Proteus背景下完成的,由信号采集模块、信号放大模块、多路模拟开关、A/D转换模块、单片机控制模块、上位机显示模块、数码管显示模块等共同构成。智能电压表仿真如图2.1.1所示,实际电路图如图2.1.2所示。

图2.1.1程控电压表仿真图2.1.2实际电路图

3硬件设计

3.1 OP07放大电路模块

程控放大器实现多个放大倍数,确保输出电压在0~5V之间,能有效输入到ADC0809。其中R1=5KΩ,R2=5KΩ,R4=20KΩ,R5=250Ω,根据多路选择器的A,B 端的输入,RF选择0Ω、R4、 R5之中的一个,为放大器的反馈电阻,从而起到改变放大器放大倍数的作用。

放大倍数 A B 图示

50 0 0 3.1.1

5 1 0 3.1.2

1 0 1 3.1.3

图3.1.1放大50倍电路

图3.1.2放大5倍电路

图3.1.3放大1倍电路

3.2 COMPIM串口电路模块

该电路的功能是把单片机处理后的数据,经过该电路送至虚拟仪器(Labview)上显示,使用的电平转换芯片为Max232。串口电路如图3.2.1

图3.2.1串口电路

3.3 LED显示电路模块

该电路是由单片机处理过的数据,进而控制共阴数码管显示电压值,显示的电压值跟电路中所要测的电压值相同,数据口A-G接单片机P1.0-P1.7端口。电路如图3.3.1所示。

图3.3.1数码管显示电路

3.4 A/D采集电路模块

A/D采集电路中包括启动、等待、采集数据。ADC0809系列内部含有三—八译码电路,以控制分别选通八个模拟输入通道,首先确定ADDA、ADDB、ADDC值,选通IN0-IN7中的一路(IN0),在clock信号下降该地址锁存在AD0809内部的地址锁存器中,经译码后选通指定的模拟通道。然后在START引脚上输出一个脉冲以启动A/D转换。EOC端上电平在A/D转换期间为低,转换后变成高电平,可作为查询中断信号使用。A/D采集电路如图3.4.1所示。

图3.4.1 A/D采集电路

3.5 STC89C58RD+控制模块

此模块为系统的控制中心,通过循环选择多路模拟开关输出不同倍率的模拟信号,通过控制A/D转换得到不同倍率的数字信号,进行逻辑判断,若得到的数据超过A/D的最大输出量程,则认为此组数据无效,继续进行下一倍率转换,直到数据在A/D测量量程内,则认为此组数据为实际测量所需值。单片机控制模块如图3.5.1所示。

图3.5.1单片机控制模块

4软件设计

4.1主函数流程图

功能函数实现的功能为:先用放大50倍方式获取电压值,判断是否满量程,如果没有满量程,则经串口发送数据到虚拟仪器,电压值显示在labview上。如果满量程,到下一次条件判断电压值是否大于0.1V-1V,若满足,则经5倍方式串口发送数据到虚拟仪器,电压值显示在labview上。如果不满足条件,则经1倍方式串口发送数据到上位机,电压值显示在屏幕上。主函数流程图如图4.1.1所示。

主函数代码:

void main()

{

uchar i;

vart_uint();

while(1)

{

tx_voltage();

for(i=0;i<50;i++)

{delay(500);

c=result*100000;p=c/100000;q=c/10000%10;m=c/1000%10;n=c/100%10;x=c/10 %10;y=c%10;

xianshi(p,q,m,n,x,y);

}

}

}

4.2 A/D转换函数流程图

功能函数实现的功能为:判断放大倍数是否满足条件,不满足条件,转到判断是否满足其他放大倍数。判断好倍数,开始AD转换,判断是否AD转换结束,若满足AD转换结束,计算出电压值。A/D转换函数流程图如图4.2.1所示

功能函数代码:

void tx_voltage()

{

float adc_data;

CD4052_A=0; CD4052_B=0;

delay(200);

adc_data=read_adc0808();

if (adc_data<0XFF)

{result = result/50; vart_tx(adc_data,50);}

else

{ CD4052_A=1; CD4052_B=0;

delay(200);

adc_data=read_adc0808();

if(adc_data<0XFF)

{result = result/5.0; vart_tx(adc_data,5);} else { CD4052_A=0; CD4052_B=1;

delay(200);

adc_data=read_adc0808();

if(adc_data<0XFF)

{result= esult/1.07; vart_tx(adc_data,1);

}

}

}

}

4.3显示函数

显示模块进行位选,段选通过单片机P2口显示

void xianshi(uint p,q,m,n,x,y)

{

P20=1;P21=0;P22=0;P23=0;P24=0;P25=0;

P1=LED[p];delay(25);

P20=0;P21=1;P22=0;P23=0;P24=0;P25=0;

P1=LED[q];delay(25);

P20=0;P21=0;P22=1;P23=0;P24=0;P25=0;

P1=LED[m];delay(25);

P20=0;P21=0;P22=0;P23=1;P24=0;P25=0;

P1=LED[10];delay(25);

P1=LED[n];delay(25);

P20=0;P21=0;P22=0;P23=0;P24=1;P25=0;

P1=LED[x];delay(25);

P20=0;P21=0;P22=0;P23=0;P24=0;P25=1;

P1=LED[y];delay(25);

P20=0;P21=0;P22=0;P23=0;P24=0;P25=0;

}

4.4虚拟仪器设计

虚拟仪器前面板以及程序框图都由NI公司开发的Labview软件设计完成,其中前面板包括了串口设置模块、电压当前值显示模块、数字电压表图形显示模块、按键启动、停止控制模块以及电压值实时状态图形显示模块组成。虚拟仪器如图4.3.1所示。

图4.3.1虚拟仪器

Labview由串口接收四组数据,前两组为规定的通信数据帧头和效验,后两组为单片机发送的电压值的对应的放大倍数,然后用电压值除以放大倍数后除以255乘以5得到正确的测量值送至数字电压表显示模块显示。

5系统测试与分析

5.1仿真测试

5.1.1放大50倍

当输入电压为0.05V时,电压表应该选择第一档,即放大50倍,串口发送数据,82/32这两组数据分别是放大后的电压的AD转换值以及放大倍数,82的十进制转换为130,130/255*5=2.55,得到放大后的电压为2.55V,而32的10进制转换为50,2.55/0.05=50,所以放大倍数为50倍,得到串口发送数据与实际数据相符。

5.1.2放大5倍

当输入电压为0.30V时,电压表应该选择第二档,即放大5倍,串口发送数据如图,4D/05这两组数据分别是放大后的电压的AD转换值以及放大倍数,4D 的十进制转换为77,77/255*5=1.50,得到放大后的电压为1.50V,而05的10进制转换为5,1.50/0.30=5,所以放大倍数为5倍,得到串口发送数据与实际数据相符。

5.1.3放大1倍

当输入电压为2.00V时,电压表应该选择第三档,即放大1倍,串口发送数据如图,68/01这两组数据分别是放大后的电压的AD转换值以及放大倍数,68的十进制转换为104,104/255*5=2.00,得到放大后的电压为2.00V,而01的10进制转换为1,2.03/2.00=1,所以放大倍数为1倍,得到串口发送数据与实际数据相符。

5.2测试中遇到的问题及解决方法

在硬件焊接完成后,进行了硬件测试,测试中遇到了不少问题。

(1)第一个问题就是OP07电源接0-5V不能很好的实现效果,这会导致放大倍数不对。

(2)在硬件图的时候,电路都要共地,就是电压表电路和单片机电路一定要共地,用导线把它们的地连接在一起。

(3)最后一点当连接好电路,但是测试结果与理论差距很大,需要分模块检查电路,对着仿真电路检查每个模块的结果是否与仿真中各个模块中结果相同,由此来寻找问题所在。

参考文献

[1] 郭天祥.《新概念51单片机C语言编程》-电子工业出版社。

[2] 谭浩强. 《C程序设计》-高等教育出版社。

相关主题