积分型直流数字电压表.docx
《积分型直流数字电压表.docx》由会员分享,可在线阅读,更多相关《积分型直流数字电压表.docx(17页珍藏版)》请在冰点文库上搜索。
积分型直流数字电压表
测控电路设计
专业:
测控技
班级:
姓名:
学号:
积分型直流数字电压表
1.设计题目:
在不采用专用A/D转换器芯片的前提下,设计并制作积分型直流数字电压表。
2.设计要求:
测量范围:
10mV~2V
量程:
200mV,2V
显示范围:
十进制数0~1999
测量分辨率:
1mV(2V档)
测量误差:
≤±0.5%±5个字
采样速率:
≥2次/秒
输入电阻:
≥1M
具有抑制工频干扰功能
3.设计思路:
将输入电压检查量程范围,经过放大后,和积分式电路的电压经过模拟开关CD4066在单片机的控制下计数处理,最后用点阵式液晶显示器(LCD)显示。
放大电路是通过OP07集成运算放大器构成同相比例放大电路,再运用积分式原理,利用双积分式A/D转换器构成积分电路,从而达到积分的要求。
控制部分,应用MEGA8单片机控制模拟开关,从而达到自动调零,量程转换,电压转换显示电路,通过单片机中断定时,计数并转换其电压值。
然后通过点阵式液晶显示器(LCD)显示出来。
4.设计流程:
如图1
图1主程序流程图
5.系统方案:
5.1输入放大与量程自动转换电路的设计
输入放大与量程自动转换电路的主要作用是提高输入阻抗和完成量程转换,本设计采用OP07集成运算放大器构成同相比例放大电路,以提高电路的输入阻抗,以达到题目要求,模拟开关CD4066在单片机的控制下形成不同的通断组合,实现量程的自动转换和自动校零功能。
5.2积分式A/D转换器的设计
虽然双积分式A/D转换器具有抗干扰能力强的特点,在采用零点校准的前提下,其转换精度也可以做得很高,但显著的不足是转换速度较慢,并且分辨率越高,其转换速度也就越慢。
因此本设计采用了分立元件构成的三斜积分式A/D转换器,可以较好的改善转换速度慢的缺点,它的转换速率分辨率的乘积比传统的双积分式A/D转换器提高至少两个数量级。
5.3单片机计数、控制电路的设计
通过对A/D转换电路的方案分析,本设计采用三斜积分电路和单片机编程实现A/D转换。
脉冲的计数功能由单片机实现,所以对单片机的速度提出了较高的要求。
本课题基本要求分辨率为11位,转换速度不低于2次/S;发挥部分要求分辨率15位,若采用MCS-51单片机实现控制和脉冲计数,转换速度较慢。
因此本设计采用了MEGA8单片机实现控制和脉冲计数。
MEGA8单片机具有速度高、超功能精简指令等特点,采用16MHZ晶振,完全能满足分辨率15位和转换速度2次/S的要求。
5.4显示电路
本设计采用点阵式液晶显示器(LCD)显示。
液晶显示器显示功能强大,可显示各种字体的数字、图像,还可以自定义显示内容,增加了显示的美观性与直观性。
最重要的是提供了友好的人机界面。
图2总体电路框图
6.设计步骤:
6.1输入放大与量程自动转换电路
输入电路的主要作用是提高输入阻抗和实现量程的转换。
输入电路的核心是输入放大器和模拟开关CD4066组成的量程自动转换电路,如图2所示。
TG1、TG2是单片机控制的模拟开关,采用CD4066芯片,控制不同的增益。
各种组合分析如下:
6.1.1200mv量程。
TG2导通,放大电路被接成电压串联负反馈放大器。
放大倍数Af及最大的输出电压Uomx分别为:
Uomx=200mV×20=4V
图3输入放大与量程自动转换电路
6.1.22V量程。
TG1导通,此时的电压放大倍数Af及最大的输出电压Uomx分别为:
Uomx=200×20=4V
由上述计算可见,输入A/D转换器的规范电压为0-4V,同时电路被接成了电压串联负反馈放大器形式,输入电阻高达10000㏁,完全达到题目的要求,电路输入端采用RC低通滤波电路抑制交流干扰。
6.2三斜积分式A/D转换器
图4三斜积分式A/D转换器的原理图
图4是一个三斜积分式A/D转换器的原理图。
它由基准电压-VREF、、积分器、比较器和由单片机构成的计数控制电路组成。
转换开始前,先将计数器清零,并接通S0使电容C完全放电。
转换开始,断开S0。
整个转换过程分三步进行:
首先,令开关S1置于输入信号Ui一侧。
积分器对Ui进行固定时间T1的积分。
积分结束时积分器的输出电压为:
可见积分器的输出电压与Ui成正比。
这一过程也称为转换电路对输入模拟电压Ui的采样过程。
图5三斜积分式A/D转换波形图
在采样开始时,逻辑控制电路将计数门打开,计数器对周期为Tc的计数脉冲CP计数。
当计数器达到满量程N1,此时计数器由全“1”恢复为全“0”,这个时间正好等于固定的积分时间T1,。
计数器复“0”时,同时给出一个溢出脉冲(即进位脉冲)使控制逻辑电路发出信号,令开关S1转换至参考电压-VREF一侧,采样阶段结束。
三斜积分式A/D转换器的转换波形是将双积分式A/D的反向积分阶段T2分为图4所示的T21、T22两部分。
在T21期间,积分器对基准电压-VREF进行积分,放电速度较快;在T22期间积分器改为对较小的基准电压进行积分,放电速度较慢。
在计数时,把计数器也分为两段进行计数。
在T21期间,从计数器的高位(2m位)开始计数,设其计数值为N1;在T22期间,从计数器的低位(20位)开始计数,设其计数值为N2。
则计数器中最后的读数为:
N=N1×2m+N2
在一次测量过程中,积分器上电容器的充电电荷与放电电荷是平衡的,则
|Ux|T1=VREFT21+(VREF/2m)T22
其中:
T21=N1TcT22=N2Tc
本设计中,取m=8,时钟脉冲周期Tc=120us,基准电压VREF=5V,并希望把2V被测电压变换成N=65536码读数时,由上式可以计算出T1=76.8ms,而传统的双积分式A/D转换器在相同的条件下所需的积分时间T1=307.2s,可见三斜积分式A/D转换器可以使转换速度大幅度提高。
6.3三斜积分A/D转换器模拟电路部分
图6三斜积分A/D转换器模拟电路部分
图6为三斜积分A/D转换器模拟电路部分,图中放大电路选用精密运放OP07;积分电路也选用OP07;积分电容选用漏电流很小且等效串联电阻、电感都很小的CBB80电容;比较器选用LM311;图中的电子开关TG1、TG2、TG3、TG4、TG5、TG6、TG7、TG8均选用模拟开关CD4066芯片,只要将CD4066控制端接到单片机不同控制端口PBX上即可实现不同的开关通断控制。
TG1为自动校零控制、TG2、TG3为量程自动转换控制,TG4、TG5、TG6控制积分的三个阶段,TG7、TG8为转换开始前的控制。
6.4计数器的设计
题目基本要求测量分辨率为1mV(2V档),因此计数器至少要11位,发挥部分要求测量分辨率为0.1mV(2V档),计数器至少要15位,故本设计采用MEG8单片机实现控制和脉冲计数,构成16位计数器,内部采用16MHZ晶振,完全满足分辨率15位和转换速度2次/S的要求。
6.5单片机控制、计数、显示部分电路
采用MEGA8单片机实现对CD4066模拟开关的通断控制,从而实现量程自动转换、自动校零以及三斜积分A/D转换过程的控制;同时利用单片机编程实现16位高速计数功能。
显示部分采用1602LCD液晶显示器实现A/D转换数据和测量电压值的显示。
单片机控制、计数器以及LCD液晶显示电路如图7、8所示。
图7单片机控制/计数器电路
图8LCD液晶显示电路
6.6基准电压产生电路
图9基准电压信号生成电路
自行设计了一个从0—100mV连续调节的模拟电压信号作为该系统的基准电压源,选用TL431AA,其电压精度可以达到0.5%;两组电压跟随器选用精密运放OP07;可变电阻RW101、RW103选用多圈精密可变电阻;电位器RW102选用10圈线绕精密电位器。
由TL431产生2.50V电压,经电位器RW101分压得到100mV电压送给第一组电压跟随器(由IC101组成)输入端。
第一组电压跟随器的输出由多圈精密电位器RW102进行分压,分压后的信号由第二组电压跟随器(由U2组成)输出0--100mV的可调电压作为A/D转换电路的电压基准。
7.设计程序:
#include
#include
#include"lcd.h"
#include
#include
#include
#defineS01<<0//pc0gnd
#defineS11<<1//2v
#defineS21<<7//200mvPD7
#defineS31<<2//-vref
#defineS41<<4//-20mv
#defineS51<<3//discharge
#defineS61<<5//Ux
#defineS71<<6//Ix
//全局变量
unsignedchartimetemp=0;
unsignedchartime100ms=0;
unsignedinttime500ms=0;
unsignedcharstepflag=0;//转换阶段标志-uref?
-uref/27?
unsignedcharconflag=0;//正在转换标志
unsignedintvoltcount=0;//ad值
floatvolt=0;//电压值
unsignedchartimeH=0;//计数器值
unsignedchartimeL=0;
voidinit_devices(void);//函数
voidport_init(void);
voidtimer2_init(void);//1ms
voidtimer2_ovf_isr(void);
voidtimer1_init(void); //100us
voidtimer1_ovf_isr(void);
voidadadjust(void)
voidadini(void);
voidadconvert(unsignedchardata);
voidmain()//main()
{
unsignedchari;
unsignedcharlcdbuf[32];
unsignedchar*lcdp=lcdbuf;
init_devices();
Inti_Disp();
adadjust();
adini();
while
(1)
{
adini();
adconvert(0x08);
set_cur(0);
lcdp=ftoa(volt,0);
putstr(lcdp);
set_cur(16);
ltoa(lcdbuf,voltcount,10);
putstr(lcdbuf);
}//abc();
}
voidadini(void)
{
PORDC=0x08;//放电30ms
timetemp=30;
conflag=1;
}
voidadconvert(unsignedchardata)//充电
{//充电196ms
PORDC=data;//打开Ux
timetemp=196;
conflag=1;
while(timetemp);//等待,反向放电,读取U0值
if(PIND&0x08)
{
PORDC=0x10;//接入-uref/27
stepflag=1;//qidongcounter
timeH=0;
timeL=0;
}
Else
{
PORDC=0x04;//接入-uref
stepflag=2;//qidongcounter
timeH=0;
timeL=0;
}
dischar1:
while(stepflag==2)
{
if(PIND&0x08)
else
{
PORDC=0x10;//接入-uref/27
stepflag=1;//qidongcounter
}
}
while(PIND&0x04);
voltcount=timeH;
voltcount=(voltcout<<7)+timeL;
}
voidport_init(void)
{
PORTB=0xFF;
DDRB=0xff;
PORTC=0x08;//m103outputonly
DDRC=0xff;
PORTD=0x7F;
DDRD=0xf3;
}
//TIMER1initialisation-prescale:
64
//WGM:
0)Normal,TOP=0xFFFF
//desiredvalue:
500uSec
//actualvalue:
500.000uSec(0.0%)
voidtimer1_init(void)
{
TCCR1B=0x00;//stop
TCNT1H=0xFF;//setup
TCNT1L=0x83;
OCR1AH=0x00;
OCR1AL=0x7D;
OCR1BH=0x00;
OCR1BL=0x7D;
ICR1H=0x00;
ICR1L=0x7D;
TCCR1A=0x00;
TCCR1B=0x03;//startTimer
}
#pragmainterrupt_handlertimer1_ovf_isr:
9
voidtimer1_ovf_isr(void)
{
//TIMER1hasoverflowed
TCNT1H=0xFF;//reloadcounterhighvalue
TCNT1L=0x83;//reloadcounterlowvalue
if(stepflag==1)
{//timeH
timeL++;
}
if(stepflag==2)
{
timeH++;
}
}
//TIMER2initialisation-prescale:
64
//WGM:
Normal
//desiredvalue:
1mSec
//actualvalue:
1.000mSec(0.0%)
voidtimer2_init(void)
{
TCCR2=0x00;//stop
ASSR=0x00;//setasyncmode
TCNT2=0x06;//setup
OCR2=0xFA;
TCCR2=0x04;//start
}//1ms
#pragmainterrupt_handlertimer2_ovf_isr:
5
voidtimer2_ovf_isr(void)
{
TCNT2=0x06;//reloadcountervalue
if(timetemp!
=0)
timetemp--;
else
conflag=0;
if(time500ms==0)
{
PORTC^=0x20;
time500ms=500;
}
time500ms--;
}
//callthisroutinetoinitialiseallperipherals
voidinit_devices(void)
{
//stoperrantinterruptsuntilsetup
CLI();//disableallinterrupts
port_init();
timer1_init();
timer2_init();
MCUCR=0x00;
GICR=0x00;
TIMSK=0x44;//timerinterruptsources
SEI();//re-enableinterrupts
//allperipheralsarenowinitialised
}
8.设计总结:
本系统采用三斜积分式A/D转换器将输入的直流电压ui转换成与ui成正比的时间间隔,在此期间用MEGA8单片机计数器对恒定频率的时钟脉冲计数,计数结束时,计数器记录的数字量正比于输入的模拟电压,从而实现模拟量到数字量的转换。
在设计过程中,因为使用普通器件,元器件较多,而且输入信号较弱容易受到干扰,所以力求硬件电路简单,努力从元器件选择上下功夫,并对某些电路进行创新。
本系统达到了预想设计中的各项要求。
同时,设计过程中遇到了许多困难,设计上还存在诸多的不足以及许多值得改进的地方。
通过本次设计,我们深刻体会到课程设计是对所学内容的一次全面性的总结,也是对自己在大学专业课程的检验,不仅能够拓宽自己对专业课程的思维认识,也提高了自己解决问题的能力。
9.参考文献:
9.1张军.AVR单片机应用系统开发典型实例.中国电力出版社,2005年
9.2曹建平.智能化仪器原理及应用.西安电子科技大学出版社.2004年
9.3杨志忠.数字电子技术.高等教育出版社.2000年