数字电流表电压表量程选择所能测试的量程由什么来确定,是A/D转换器吗

2007年 G 题 积分型直流数字电压表设计 年时间: 08:47来源:竞赛组委会 作者:济南铁道职业技术 点击: 816次本设计为16位高分辨率的三斜积分式直流数字电压表, A/D 转换器部分采用普通元器件构成模拟部分,利 用 MEGA8单片机借助软件实现数字计数显示功能,同时采用 MEGA8单片机编程实现直流电压表量程积分型直流数字电压表的设计济南铁道职业技术学院 丁华、张亮、胡刚正目 录摘要 ……………………………………………………………………1 第一部分:系统方案…………………………………………………1 第二部分:理论分析与计算 …………………………………………2 第三部分:电路与程序设计 …………………………………………4 第四部分:测试方案与测试结果 ……………………………………6 总结 ……………………………………………………………………6 参考文献………………………………………………………………6 附录一 主程序流程图 ………………………………………………7附录二 元器件清单 ……………………………………………………8 附录三 部分源程序……………………………………………………9摘要: 摘要:本设计为16位高分辨率的三斜积分式直流数字电压表, A/D 转换器部分采 用普通元器件构成模拟部分,利用 MEGA8单片机借助软件实现数字计数显示功 能,同时采用 MEGA8单片机编程实现直流电压表量程的自动转换、自动校零、和 液晶显示等功能。 关键词:三斜积分,A/D 转换,电压测量 关键词第一部分 系统方案一、 总体电路构成 本系统由输入放大与量程转换电路、三斜积分 A/D 转换电路、单片机计数控 制电路、LCD 数字显示器构成。总体结构框图如图1所示。图1 总体电路框图 二、各单元电路设计 1. 输入放大与量程自动转换电路的设计 输入放大与量程自动转换电路的主要作用是提高输入阻抗和完成量程转换, 本 设计采用 OP07集成运算放大器构成同相比例放大电路,以提高电路的输入阻 抗,以达到题目要求,模拟开关 CD4066在单片机的控制下形成不同的通断组合, 实现量程的自动转换和自动校零功能。 2.积分式 A/D 转换器的设计 虽然双积分式 A/D 转换器具有抗干扰能力强的特点,在采用零点校准的前提 下,其转换精度也可以做得很高,但显著的不足是转换速度较慢,并且分辨率越 高,其转换速度也就越慢。因此本设计采用了分立元件构成的三斜积分式 A/D 转换器,可以较好的改善转换速度慢的缺点,它的转换速率分辨率的乘积比传统 的双积分式 A/D 转换器提高至少两个数量级。 单片机计数 3、单片机计数、控制电路的设计 通过对 A/D 转换电路的方案分析, 本设计采用三斜积分电路和单片机编程实现 A/D 转换。脉冲的计数功能由单片机实现,所以对单片机的速度提出了较高的要 求。本课题基本要求分辨率为11位,转换速度不低于2次/S;发挥部分要求分辨率 15位,若采用 MCS-51单片机实现控制和脉冲计数,转换速度较慢。因此本设计 采用了 MEGA8单片机实现控制和脉冲计数。MEGA8单片机具有速度高、超功能精 简指令等特点,采用16MHZ 晶振,完全能满足分辨率15位和转换速度2次/S 的要 求。 4、显示电路 本设计采用点阵式液晶显示器(LCD)显示。液晶显示器显示功能强大,可显 示各种字体的数字、图像,还可以自定义显示内容,增加了显示的美观性与直观 性。最重要的是提供了友好的人机界面。第二部分 理论分析与计算一、输入放大与量程自动转换电路 输入放大与量程自动转换电路 输入电路的主要作用是提高输入阻抗和实现量程的转换。 输入电路的核心是输 入放大器和模拟开关 CD4066组成的量程自动转换电路,如图2所示。TG1、TG2是 单片机控制的模拟开关,采用 CD4066芯片,控制不同的增益。各种组合分析如 下: (1)200mv 量程。TG2导通,放大电路被接成电压串联负反馈放大器。放大倍数 Af 及最大的输出电压 Uomx 分别为:图2输入放大与量程自动转换电路 Uomx=200mV×20=4V (2)2V 量程。TG1导通,此时的电压放大倍数 Af 及最大的输出电压 Uomx 分别为: Uomx=200×20=4V 由上述计算可见,输入 A/D 转换器的规范电压为0-4V,同时电路被接成了电 压串联负反馈放大器形式,输入电阻高达10000,完全达到题目的要求,电路 输入端采用 RC 低通滤波电路抑制交流干扰。 二、三斜积分式 A/D 转换器 图3三斜积分式 A/D 转换器的原理图图3是一个三斜积分式 A/D 转换器的原理图。它由基准电压-VREF、 、积分器、 比较器和由单片机构成的计数控制电路组成。 转换开始前,先将计数器清零,并接通 S0使电容 C 完全放电。转换开始,断 开 S0。整个转换过程分三步进行: 首先,令开关 S1置于输入信号 Ui 一侧。积分器对 Ui 进行固定时间 T1的积分。 积分结束时积分器的输出电压为: 可见积分器的输出电压与 Ui 成正比。 这一过程也称为转换电路对输入模拟电 压 Ui 的采样过程。图4 三斜积分式 A/D 转换波形图 在采样开始时,逻辑控制电路将计数门打开,计数器对周期为 Tc 的计数脉冲 CP 计数。当计数器达到满量程 N1,此时计数器由全“1”恢复为全“0”,这个 时间正好等于固定的积分时间 T1, 。计数器复“0”时,同时给出一个溢出脉冲 (即进位脉冲)使控制逻辑电路发出信号,令开关 S1转换至参考电压-VREF 一侧, 采样阶段结束。三斜积分式 A/D 转换器的转换波形是将双积分式 A/D 的反向积 分阶段 T2分为图4所示的 T21、T22两部分。在 T21期间,积分器对基准电压-VREF 进行 积分,放电速度较快;在 T22期间积分器改为对较小的基准电压 进行积分,放电 速度较慢。在计数时,把计数器也分为两段进行计数。在 T21期间,从计数器的高 m 0 位(2 位)开始计数,设其计数值为 N1;在 T22期间,从计数器的低位(2 位)开始 计数,设其计数值为 N2。则计数器中最后的读数为: m N= N1×2 +N2 在一次测量过程中,积分器上电容器的充电电荷与放电电荷是平衡的,则 m |Ux|T1=VREFT21+(VREF/2 )T22 其中: T21=N1Tc T22=N2Tc 将上式加以整理得: 将上式进一步整理,可得三斜式积分式 A/D 转化器的基本关系式为 本设计中,取 m=8,时钟脉冲周期 Tc=120us,基准电压 VREF=5V,并希望把2V 被测电压变换成 N=65536码读数时,由上式可以计算出 T1=76.8ms,而传统的双 积分式 A/D 转换器在相同的条件下所需的积分时间 T1=307.2s,可见三斜积分式 A/D 转换器可以使转换速度大幅度提高。 三、计数器的设计 题目基本要求测量分辨率为1mV(2V 档) ,因此计数器至少要11位,发挥部分 要求测量分辨率为0.1mV(2V 档) ,计数器至少要15位,故本设计采用 MEG8单片 机实现控制和脉冲计数,构成16位计数器,内部采用16MHZ 晶振,完全满足分辨 率15位和转换速度2次/S 的要求。第三部分 电路与程序设计一、三斜积分 A/D 转换器模拟电路部分 图5三斜积分 A/D 转换器模拟电路部分 图5为三斜积分 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为转换开 始前的控制。 单片机控制、计数、 二、 单片机控制、计数、显示部分电路 采用 MEGA8单片机实现对 CD4066模拟开关的通断控制,从而实现量程自动转 换、自动校零以及三斜积分 A/D 转换过程的控制;同时利用单片机编程实现16 位高速计数功能。显示部分采用1602LCD 液晶显示器实现 A/D 转换数据和测量 电压值的显示。单片机控制、计数器以及 LCD 液晶显示电路如图6、7所示。 图6单片机控制、计数器电路 图7 LCD 液晶显示电路 三、基准电压产生电路图8基准电压信号生成电路 自行设计了一个从0—100mV 连续调节的模拟电压信号作为该系统的基准电压 源,选用 TL431AA,其电压精度可以达到0.5%;两组电压跟随器选用精密运放 OP07;可变电阻 RW101、RW103选用多圈精密可变电阻;电位器 RW102选用10圈线 绕精密电位器。由 TL431产生2.50V 电压,经电位器 RW101分压得到100mV 电压送 给第一组电压跟随器(由 IC101组成)输入端。第一组电压跟随器的输出由多圈 精密电位器 RW102进行分压,分压后的信号由第二组电压跟随器(由 U2组成)输 出0--100mV 的可调电压作为 A/D 转换电路的电压基准。 四、主程序流程(见附录一) 主程序流程(见附录一)第四部分 测试方案与测试结果为了确定系统与题目要求符合程度,我们对系统中关键部分进行了实际测试。 一、分辨率和测量误差 我们从信号源输入0—2V 连续调节的直流电压信号作为该系统的被测信号源, 对 A/D 转换电路的分辨率和测量误差进行了测试。选取被测信号源的1mV、5mV、 50mV、150mV、200mV、300mV、500mV、1V、1.5V、2V 点作为测试电压,分别进 行了测试,结果见表1: 输入电压(mV) 1 5 50 150 200 200m 显示数据(字) 96 498
19997 V 档 显示电压值 (mV) 0.96 4.98 50.04 149.97 199.97 测量误差 0.04% 0.02% 0.04% 0.03% 0.03% 输入电压(V) 0.3 0.5 1 1.5 2 显示数据 004
2V 档 显示电压值 0.6 1.8 1.9997 测量误差 0.02% 0.04% 0.04% 0.02% 0.03% 从上述测试结果分析, 本设计直流数字电压表的测量分辨率和测量误差均能达 到题目基本和发挥部分的要求。 二、采样速率测试 A/D 转换结束后,单片机输出一个信号驱动发光二极管闪烁,显示 A/D 转换速 度。用脉冲计数器测得其转换速度大于10次/S,达到了题目要求,结果如表2 测试次数 1 2 3 4 转换速度(次/S) 11 13 12 12 三、结论 电路设计完成后,通过进行分辨率、测量误差以及转换速度测试,测试结果表 明本设计达到了设计的基本和发挥部分的全部要求, 并且具备自动校零和自动转 换量程的功能。总 结本系统采用三斜积分式 A/D 转换器将输入的直流电压 ui 转换成与 ui 成正比的 时间间隔,在此期间用 MEGA8单片机计数器对恒定频率的时钟脉冲计数,计数结 束时,计数器记录的数字量正比于输入的模拟电压,从而实现模拟量到数字量的 转换。 在设计过程中,因为使用普通器件,元器件较多,而且输入信号较弱容易受到 干扰,所以力求硬件电路简单,努力从工艺上下功夫,并对某些电路进行创新。 本系统达到了竞赛题目中的各项要求。同时,设计过程中遇到了许多困难,设计 上还存在许多值得改进的地方。通过本次设计,我们深刻体会到共同协作和团队 精神的重要性,提高了自己解决问题的能力。 参考文献: 参考文献: 1.张军. AVR 单片机应用系统开发典型实例.中国电力出版社,2005年 2.曹建平.智能化仪器原理及应用.西安电子科技大学出版社.2004年 3.杨志忠.数字电子技术.高等教育出版社. 2000年 附录一: 附录一:主程序流程
附录二: 附录二:元器件清单元件清单器件名 运算放大器 可调电阻 直流基准电压 产生电路元件 清单 电阻 电容 二极管 可调压稳压二极 管 精密电位器 运算放大器 电压比较器 模拟开关 电容 电阻 电压比较器 可调电阻 单片机 单片机部分电 路元件清单 电容 电阻 晶振 显示电路元件 清单 液晶 可调电阻 规格(型号) OP07 10KΩ 20Ω 200Ω 47F/16v 100F/16v 1N4007 TL431AA 2.2KΩ/2W Op07 LM311 CDuF 1KΩ 20kΩ 9kΩ LM311 10KΩ Mega8 100F 0.1F 22pF 10KΩ 16MHz WYM160 2A 1KΩ CW7805 CW7905 CW7812 CW7912 10Ω 数量 2 1 1 1 3 2 2 1 1 2 2 2 1 1 1 1 1 4 1 1 1 2 1 1 1 1 1 1 1 1 4 精度0.5% 十圈线绕式 精密运算放大 器 高速精密 备注 精密运算放大 器三斜积分 A/D 转换电路 元件清单电源电路元件 清单集成电路 电阻 整流桥 电容 附录三: 附录三: 部分源程序 #include &iom8v.h& #include &macros.h& #include &lcd.h& #include &stdlib.h& #include &math.h& #include&string.h& #define S0 1&&0 //pc0 gnd #define S1 1&&1 //2v #define S2 1&&7 //200mv PD7 #define S3 1&&2 //-vref #define S4 1&&4 //-20mv #define S5 1&&3 //discharge #define S6 1&&5 //Ux #define S7 1&&6 //Ix //全局变量 unsigned char timetemp=0; unsigned char time100ms=0; unsigned int time500ms=0;RS307L 0.1F、 1000F2 8 12unsigned char stepflag=0;//转换阶段标志-uref ? -uref/2 7? unsigned char conflag=0; //正在转换标志 unsigned int voltcount=0; //ad 值 float volt=0; //电压值 unsigned char timeH=0; unsigned char timeL=0; //函数 void init_devices(void); void port_init(void); //1ms void timer2_init(void); void timer2_ovf_isr(void); //100us void timer1_init(void); void timer1_ovf_isr(void); //计数器值 void adadjust(void) void adini(void); void adconvert(unsigned char data); //main() void main() { unsigned char lcdbuf[32]; unsigned char *lcdp= 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(); } void adini(void) { PORDC=0x08; //放电30ms timetemp=30; conflag=1;} void adconvert(unsigned char data)//充电 { //充电196ms PORDC= //打开 Ux timetemp=196; conflag=1; while(timetemp);//等待 //反向放电 //读取 U0值 if(PIND&0x08) { PORDC=0x10;//接入-uref/2 7 stepflag=1;//qi dong counter timeH=0; timeL=0; } else { PORDC=0x04;//接入-uref stepflag=2; //qi dong counter timeH=0; timeL=0; } dischar1: while(stepflag==2) { if(PIND&0x08) { } else { PORDC=0x10;//接入-uref/2 7 stepflag=1;//qi dong counter } } while(PIND&0x04); voltcount=timeH; voltcount=(voltcout&&7)+timeL; } void port_init(void) { PORTB = 0xFF; DDRB = 0 PORTC = 0x08; //m103 output only DDRC = 0 PORTD = 0x7F; DDRD = 0xf3; }//TIMER1 initialisation - prescale:64 // WGM: 0) Normal, TOP=0xFFFF // desired value: 500uSec // actual value: 500.000uSec (0.0%) void timer1_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; //start Timer }#pragma interrupt_handler timer1_ovf_isr:9 void timer1_ovf_isr(void) { //TIMER1 has overflowed TCNT1H = 0xFF; //reload counter high value TCNT1L = 0x83; //reload counter low value if(stepflag==1) { //timeH timeL++; } if(stepflag==2) { timeH++; } } //TIMER2 initialisation - prescale:64 // WGM: Normal // desired value: 1mSec // actual value: 1.000mSec (0.0%) void timer2_init(void) { TCCR2 = 0x00; //stop ASSR = 0x00; //set async mode TCNT2 = 0x06; //setup OCR2 = 0xFA; TCCR2 = 0x04; //start } //1ms #pragma interrupt_handler timer2_ovf_isr:5 void timer2_ovf_isr(void) { TCNT2 = 0x06; //reload counter value if(timetemp!=0) timetemp--; else conflag=0; if(time500ms==0) { PORTC^=0x20; time500ms=500; } time500ms--; } //call this routine to initialise all peripherals void init_devices(void) {//stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer1_init(); timer2_init(); MCUCR = 0x00; GICR = 0x00; TIMSK = 0x44; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialised }扫一扫,手机访问
您好,欢迎来到捷配电子市场网
您所在的位置:&&&&&&&&智能电压表中量程自动转换电路研究
版权与免责声明
凡本网注明“出处:捷配电子市场网”的所有作品,版权均属于捷配电子市场网,转载请必须注明捷配电子市场网,http://www.dzsc.com,违反者本网将追究相关法律责任。
本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
相关技术资料
热门技术资料
最新技术资料现在位置:
积分型直流数字电压表的设计
积分型直流数字电压表的设计
积分型直流数字电压表的设计&
摘要:本设计为16位高分辨率的三斜积分式直流数字电压表, A/D转换器部分采用普通元器件构成模拟部分,利用MEGA8单片机借助软件实现数字计数显示功能,同时采用MEGA8单片机编程实现直流电压表量程的自动转换、自动校零、和液晶显示等功能。
关键词:三斜积分,A/D转换,电压测量
第一部分& 系统方案
一、&&&&&& 总体电路构成
本系统由输入放大与量程转换电路、三斜积分A/D转换电路、单片机计数控制电路、LCD数字显示器构成。总体结构框图如图1所示。
图1& 总体电路框图
二、各单元电路设计
1. 输入放大与量程自动转换电路的设计
输入放大与量程自动转换电路的主要作用是提高输入阻抗和完成量程转换,本设计采用OP07集成运算放大器构成同相比例放大电路,以提高电路的输入阻
抗,以达到题目要求,模拟开关CD4066在单片机的控制下形成不同的通断组合,实现量程的自动转换和自动校零功能。
2.积分式A/D转换器的设计
虽然双积分式A/D转换器具有抗干扰能力强的特点,在采用零点校准的前提下,其转换精度也可以做得很高,但显著的不足是转换速度较慢,并且分辨率越高,其转换速度也就越慢。因此本设计采用了分立元件构成的三斜积分式A/D转换器,可以较好的改善转换速度慢的缺点,它的转换速率分辨率的乘积比传统的双积分式A/D转换器提高至少两个数量级。
3、单片机计数、控制电路的设计
通过对A/D转换电路的方案分析,本设计采用三斜积分电路和单片机编程实现A/D转换。脉冲的计数功能由单片机实现,所以对单片机的速度提出了较高的要求。本课题基本要求分辨率为11位,转换速度不低于2次/S;发挥部分要求分辨率15位,若采用MCS-51单片机实现控制和脉冲计数,转换速度较慢。因此本设计采用了MEGA8单片机实现控制和脉冲计数。MEGA8单片机具有速度高、超功能精简指令等特点,采用16MHZ晶振,完全能满足分辨率15位和转换速度2次/S的要求。
4、显示电路
本设计采用点阵式液晶显示器(LCD)显示。液晶显示器显示功能强大,可显示各种字体的数字、图像,还可以自定义显示内容,增加了显示的美观性与直观性。最重要的是提供了友好的人机界面。
第二部分& 理论分析与计算
一、输入放大与量程自动转换电路
输入电路的主要作用是提高输入阻抗和实现量程的转换。输入电路的核心是输入放大器和模拟开关CD4066组成的量程自动转换电路,如图2所示。TG1、TG2是单片机控制的模拟开关,采用CD4066芯片,控制不同的增益。各种组合分析如下:
(1)200mv量程。TG2导通,放大电路被接成电压串联负反馈放大器。放大倍数Af及最大的输出电压Uomx分别为:
&&&&&&&&&&&&&&&&&& 图2 输入放大与量程自动转换电路
Uomx=200mV×20=4V
(2)2V量程。TG1导通,此时的电压放大倍数Af及最大的输出电压Uomx分别为:&&&&&&&&&&&&&&
Uomx=200×20=4V
由上述计算可见,输入A/D转换器的规范电压为0-4V,同时电路被接成了电压串联负反馈放大器形式,输入电阻高达1;,完全达到题目的要求,电路输入端采用RC低通滤波电路抑制交流干扰。
二、三斜积分式A/D转换器
图3&& 三斜积分式A/D转换器的原理图
图3是一个三斜积分式A/D转换器的原理图。它由基准电压-VREF、 、积分器、比较器和由单片机构成的计数控制电路组成。
转换开始前,先将计数器清零,并接通S0使电容C完全放电。转换开始,断开S0。整个转换过程分三步进行:
首先,令开关S1置于输入信号Ui一侧。积分器对Ui进行固定时间T1的积分。积分结束时积分器的输出电压为:
可见积分器的输出电压与Ui成正比。这一过程也称为转换电路对输入模拟电压Ui的采样过程。
图4& 三斜积分式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=N1Tc&&& T22=N2Tc
将上式加以整理得:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
将上式进一步整理,可得三斜式积分式A/D转化器的基本关系式为
&& 本设计中,取m=8,时钟脉冲周期Tc=120us,基准电压VREF=5V,并希望把2V被测电压变换成N=65536码读数时,由上式可以计算出T1=76.8ms,而传统的双积分式A/D转换器在相同的条件下所需的积分时间T1=307.2s,可见三斜积分式A/D转换器可以使转换速度大幅度提高。
三、计数器的设计
题目基本要求测量分辨率为1mV(2V档),因此计数器至少要11位,发挥部分要求测量分辨率为0.1mV(2V档),计数器至少要15位,故本设计采用MEG8单片机实现控制和脉冲计数,构成16位计数器,内部采用16MHZ晶振,完全满足分辨率15位和转换速度2次/S的要求。
&&&&&&&&&&&&&& &第三部分& 电路与程序设计
一、三斜积分A/D转换器模拟电路部分
图5 三斜积分A/D转换器模拟电路部分
&& 图5为三斜积分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为转换开始前的控制。
二、 单片机控制、计数、显示部分电路
采用MEGA8单片机实现对CD4066模拟开关的通断控制,从而实现量程自动转换、自动校零以及三斜积分A/D转换过程的控制;同时利用单片机编程实现16位高速计数功能。显示部分采用1602LCD液晶显示器实现A/D转换数据和测量电压值的显示。单片机控制、计数器以及LCD液晶显示电路如图6、7所示。
&&&&&&&&&&&&&
图6 单片机控制、计数器电路&&&&&&&&
&&& 图7& LCD液晶显示电路
三、基准电压产生电路
图8 基准电压信号生成电路
自行设计了一个从0―100mV连续调节的模拟电压信号作为该系统的基准电压源,选用TL431AA,其电压精度可以达到0.5%;两组电压跟随器选用精密运放OP07;可变电阻RW101、RW103选用多圈精密可变电阻;电位器RW102选用10圈线绕精密电位器。由TL431产生2.50V电压,经电位器RW101分压得到100mV电压送给第一组电压跟随器(由IC101组成)输入端。第一组电压跟随器的输出由多圈精密电位器RW102进行分压,分压后的信号由第二组电压跟随器(由U2组成)输出0--100mV的可调电压作为A/D转换电路的电压基准。
四、主程序流程(见附录一)
第四部分& 测试方案与测试结果
为了确定系统与题目要求符合程度,我们对系统中关键部分进行了实际测试。
一、分辨率和测量误差
我们从信号源输入0―2V连续调节的直流电压信号作为该系统的被测信号源,对A/D转换电路的分辨率和测量误差进行了测试。选取被测信号源的1mV、5mV、50mV、150mV、200mV、300mV、500mV、1V、1.5V、2V点作为测试电压,分别进行了测试,结果见表1:
输入电压(mV)
显示数据(字)
显示电压值(mV)
输入电压(V)
显示电压值
&& 从上述测试结果分析,本设计直流数字电压表的测量分辨率和测量误差均能达到题目基本和发挥部分的要求。
二、采样速率测试
A/D转换结束后,单片机输出一个信号驱动发光二极管闪烁,显示A/D转换速度。用脉冲计数器测得其转换速度大于10次/S,达到了题目要求,结果如表2
转换速度(次/S)
电路设计完成后,通过进行分辨率、测量误差以及转换速度测试,测试结果表明本设计达到了设计的基本和发挥部分的全部要求,并且具备自动校零和自动转换量程的功能。
本系统采用三斜积分式A/D转换器将输入的直流电压ui转换成与ui成正比的时间间隔,在此期间用MEGA8单片机计数器对恒定频率的时钟脉冲计数,计数结束时,计数器记录的数字量正比于输入的模拟电压,从而实现模拟量到数字量的转换。
在设计过程中,因为使用普通器件,元器件较多,而且输入信号较弱容易受到干扰,所以力求硬件电路简单,努力从工艺上下功夫,并对某些电路进行创新。本系统达到了竞赛题目中的各项要求。同时,设计过程中遇到了许多困难,设计上还存在许多值得改进的地方。通过本次设计,我们深刻体会到共同协作和团队精神的重要性,提高了自己解决问题的能力。
参考文献:
1.张军. AVR单片机应用系统开发典型实例.中国电力出版社,2005年
2.曹建平. 智能化仪器原理及应用.西安电子科技大学出版社.2004年
3.杨志忠. 数字电子技术. 高等教育出版社. 2000年
附录一:主程序流程
附录二:元器件清单
直流基准电压产生电路元件清单
规格(型号)
运算放大器
精密运算放大器
可调压稳压二极管
精密电位器
十圈线绕式
&三斜积分A/D转换电路元件清单
运算放大器
精密运算放大器
电压比较器
&&& 模拟开关
&&&&& 电容
&&&&& 电阻
电压比较器
单片机部分电路元件清单
显示电路元件清单
&&& 可调电阻
电源电路元件清单
附录三:& 部分源程序
#include &iom8v.h&
#include &macros.h&
#include "lcd.h"
#include &stdlib.h&
#include &math.h&
#include&string.h&
#define S0&& 1&&0&&& //pc0 gnd
#define S1&& 1&&1&&& //2v
#define S2&& 1&&7&&& //200mv&& PD7
#define S3&& 1&&2&&& //-vref
#define S4&& 1&&4&&& //-20mv
#define S5&& 1&&3&&& //discharge
#define S6&& 1&&5&&& //Ux
#define S7&& 1&&6&&& //Ix
//全局变量
unsigned char timetemp=0;
unsigned char time100ms=0;
unsigned int time500ms=0;
unsigned char stepflag=0;//转换阶段标志 -uref ? -uref/2 7?
unsigned char conflag=0; //正在转换标志
unsigned int& voltcount=0;& //ad值
float&&&&&&&& volt=0;&&&&&& //电压值
unsigned char timeH=0;&&&& //计数器值
unsigned char timeL=0;
void init_devices(void);
void port_init(void);
void timer2_init(void);
void timer2_ovf_isr(void);
void timer1_init(void);
void timer1_ovf_isr(void);
void adadjust(void)
void adini(void);
void adconvert(unsigned char data);
void main()
&unsigned char lcdbuf[32];
&unsigned char *lcdp=
&init_devices();
&Inti_Disp();
&adadjust();
&& adini();
&& adconvert(0x08);//
&& set_cur(0);
&& lcdp=ftoa(volt,0);&&
&& putstr(lcdp);
&& set_cur(16);
&& ltoa(lcdbuf,voltcount,10);
&& putstr(lcdbuf);
void adini(void)
&&& PORDC=0x08; //放电30ms
&&& timetemp=30;
&&& conflag=1;&&&
void adconvert(unsigned char data)//充电
&&&&&& //充电196ms&&&
&&&&&& PORDC= //打开Ux
&&&&&& timetemp=196;
&&&&&& conflag=1;&&&
&&&&&& while(timetemp);//等待
&&&&&& //反向放电
&&&&&&&&& //读取U0值&&&&&&&&&
&&&&&&&&& if(PIND&0x08)
&&&&&&&&&&& {
&&&&&&&&&&&&& PORDC=0x10;//接入-uref/2 7
&&&&&&&&&&&&& stepflag=1;//qi dong counter
&&&&&&&&&&&&& timeH=0;
&&&&&&&&&&&&& timeL=0;
&&&&&&&&&&&
&&&&&&&&&&& }
&&&&&&&&& else
&& &&&&&&&&{
&&&&&&&&&& &&&&& PORDC=0x04;//接入-uref
&&&&&&&&&& &&&&& stepflag=2; //qi dong counter
&&&&&&&&&& &&&&& timeH=0;
&&&&&&&&&&&&&&& timeL=0;
&&&&&&&&&& }
dischar1:&
&&&&&&&&& while(stepflag==2)
&&&&&&&&&&& {
&&&&&&&&&&& &&& if(PIND&0x08)
&&&&&&&&&&& &&& &&&{
&&&&&&&&&&& &&& &&&
&&&&&&&&&&& &&& &&&}
&&&&&&&&&&& &&& &else
&&&&&&&&&&& &&& &&&{
&&&&&&&&&&& &&& &&&&PORDC=0x10;//接入-uref/2 7
&&&&&&&&&&&&&&&&&&& stepflag=1;//qi dong counter
&&&&&&&&&&& &&& &&&}&
&&&&&&&&&&& &&&
&&&&&&&&&&&&& }
&&&&&&&&& while(PIND&0x04);
&&&&&&&&& voltcount=timeH;
&&&&&&&&& voltcount=(voltcout&&7)+timeL;
&&&&&&&&&&&&
void port_init(void)
&PORTB = 0xFF;
&DDRB& = 0
&PORTC = 0x08; //m103 output only
&DDRC& = 0
&PORTD = 0x7F;
&DDRD& = 0xf3;
//TIMER1 initialisation - prescale:64
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 500uSec
// actual value: 500.000uSec (0.0%)
void timer1_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; //start Timer
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
&//TIMER1 has overflowed
&TCNT1H = 0xFF; //reload counter high value
&TCNT1L = 0x83; //reload counter low value
&if(stepflag==1)
&&& &&&&& //timeH
&&& &&&&& timeL++;
&if(stepflag==2)
&&&& timeH++;&&
//TIMER2 initialisation - prescale:64
// WGM: Normal
// desired value: 1mSec
// actual value:& 1.000mSec (0.0%)
void timer2_init(void)
&TCCR2 = 0x00; //stop
&ASSR& = 0x00; //set async mode
&TCNT2 = 0x06; //setup
&OCR2& = 0xFA;
&TCCR2 = 0x04; //start
#pragma interrupt_handler timer2_ovf_isr:5
void timer2_ovf_isr(void)
&TCNT2 = 0x06; //reload counter value
&if(timetemp!=0)
&& timetemp--;
& &conflag=0;&
&if(time500ms==0)
&&&& PORTC^=0x20; &&&
&&&& time500ms=500;
&time500ms--;
//call this routine to initialise all peripherals
void init_devices(void)
&//stop errant interrupts until set up
&CLI(); //disable all interrupts
&port_init();
& timer1_init();
&timer2_init();
&MCUCR = 0x00;
&GICR& = 0x00;
&TIMSK = 0x44; //timer interrupt sources
&SEI(); //re-enable interrupts
&//all peripherals are now initialised
没有相关文章
推 荐 阅 读
阅 读 排 行
专 题 列 表
Corporation </small Inc. 网站备案号:鄂ICP备号-2 
基于架构  

我要回帖

更多关于 多量程直流数字电压表 的文章

 

随机推荐