2014年电子设计竞赛
技 术 报 告
简易直流数字电压表设计
姓名: 班级: 学号: 电话: 老师:
2014-05-26
一.方案比较
此次实验要求为设计一个简易直流数字电压表。电压表设计可以用两种方法:逐次比较式和双积分式。逐次比较式的基本原理是:顾名思义,逐次逼近型ADC 实质上是一种二进制搜索算法。尽管实现逐次逼近式ADC 的方式千差万别,但其基本结构非常简单。双积分的基本原理是:对输入模拟电压和参考电压分别进行两次积分, 将输入电压平均值变成与之成正比的时间间隔。然后利用时钟脉冲和计数器测出此时间间隔, 进而得到相应的数字量输出。由于该转换电路是对输入电压的平均值进行变换, 因此它具有很强的抗工频干扰能力。综合考虑,选用双积分式。
二.设计与论证
图1 组成框图
图2 工作原理波形图
三.理论分析与计算
1. 工作过程分为3个阶段:(如图2)
1). 起始阶段t0—t1
2). 采样阶段t1—t2:进行充电 3). 比较阶段t2—t3:进行放电 2. 计算过程:
Vx*T1/R= Vr*T2/R Vx= T2* Vr/ T1 四.电路图
图3 电源电路设计
图4 显示电路设计
图5 双积分电路设计
图6 整体电路设计
五.程序框图
图7 主程序流程图 图8 定时器0中断 图9 定时器1中断 图10 外部中断
六.测试方法与仪器
首先通过电压表测量电源模块,若输出为+5V和-5V ,则电路正确。显示电路焊接好后,烧写一个简单的显示程序,若数码管显示,则电路正确。双积分电路要用示波器检测,首先要写好程序烧写进单片机中,控制CD4052的通断,通过检测输出和积分比较后的波形,即可判断电路是否正确。
七.测试数据与结果分析
经计算,满量程测量精度优于3%。
附件:源代码
#include unsigned char code DuanMa[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};// 显示段码值0~9,全灭,-
unsigned char code WeiMa[4]={0x01,0x02,0x04,0x08}; //位码 unsigned char disnum[5]={1,2,3,4,5}; //缓冲数组 unsigned char m,f,l;
unsigned long n,p; void main(void)
{
TMOD=0x11; //使用模式1,16位定时器 TH0=0xfc; //给定初值,定时1ms TL0=0x18;
EA=1; //总中断打开
IT0=1; //中断方式设为跳沿触发 ET0=1; //定时器中断打开 ET1=1;
TR0=1; //定时器打开
PX1=1; //外部中断为高优先级 while(1) {
P1=0x01; //清零
TH1=(65536-1000)/256; //定时1ms TL1=(65536-1000)%256; TR1=1;
while(!(m==100)); //清零100ms m=0; TR1=0;
P1=0x04; //开始充电 TH1=(65536-1000)/256; //定时1ms TL1=(65536-1000)%256; TR1=1;
while(!(m==100)); //充电200ms m=0; TR1=0; }
P1=0x06; l=1; IE0=0;
EX0=1; TR1=1; while(f==0); EX0=0; m=0; f=0;
l=0;
//开始放电
//开启外部中断 //开始计时
}
void xianshi(void) interrupt 1 //定时器0, 数码管显示 {
unsigned char i;
TH0=0xfc; //给定初值,定时1ms TL0=0x18; P2=0x00;
if(i==0)
P0=DuanMa[disnum[i]]|0x80; else
P0=DuanMa[disnum[i]]; P2=WeiMa[i]; i++; if(i==4) i=0; }
void time1(void) interrupt 3 //定时1ms {
if(l==0) {
TH1=(65536-1000)/256; TL1=(65536-1000)%256; } else {
TH1=0; TL1=0; }
m++; }
void jishi2(void) interrupt 0 //外部中断0 {
TR1=0; EX0=0; IE0=0;
n=m*65536+TH1*256+TL1; p=(n/100.0)*2.426-1426; f=1;
disnum[3]=p%10; disnum[2]=p/10%10;
disnum[1]=p/100%10; disnum[0]=p/1000%10; }
2014年电子设计竞赛
技 术 报 告
简易直流数字电压表设计
姓名: 班级: 学号: 电话: 老师:
2014-05-26
一.方案比较
此次实验要求为设计一个简易直流数字电压表。电压表设计可以用两种方法:逐次比较式和双积分式。逐次比较式的基本原理是:顾名思义,逐次逼近型ADC 实质上是一种二进制搜索算法。尽管实现逐次逼近式ADC 的方式千差万别,但其基本结构非常简单。双积分的基本原理是:对输入模拟电压和参考电压分别进行两次积分, 将输入电压平均值变成与之成正比的时间间隔。然后利用时钟脉冲和计数器测出此时间间隔, 进而得到相应的数字量输出。由于该转换电路是对输入电压的平均值进行变换, 因此它具有很强的抗工频干扰能力。综合考虑,选用双积分式。
二.设计与论证
图1 组成框图
图2 工作原理波形图
三.理论分析与计算
1. 工作过程分为3个阶段:(如图2)
1). 起始阶段t0—t1
2). 采样阶段t1—t2:进行充电 3). 比较阶段t2—t3:进行放电 2. 计算过程:
Vx*T1/R= Vr*T2/R Vx= T2* Vr/ T1 四.电路图
图3 电源电路设计
图4 显示电路设计
图5 双积分电路设计
图6 整体电路设计
五.程序框图
图7 主程序流程图 图8 定时器0中断 图9 定时器1中断 图10 外部中断
六.测试方法与仪器
首先通过电压表测量电源模块,若输出为+5V和-5V ,则电路正确。显示电路焊接好后,烧写一个简单的显示程序,若数码管显示,则电路正确。双积分电路要用示波器检测,首先要写好程序烧写进单片机中,控制CD4052的通断,通过检测输出和积分比较后的波形,即可判断电路是否正确。
七.测试数据与结果分析
经计算,满量程测量精度优于3%。
附件:源代码
#include unsigned char code DuanMa[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};// 显示段码值0~9,全灭,-
unsigned char code WeiMa[4]={0x01,0x02,0x04,0x08}; //位码 unsigned char disnum[5]={1,2,3,4,5}; //缓冲数组 unsigned char m,f,l;
unsigned long n,p; void main(void)
{
TMOD=0x11; //使用模式1,16位定时器 TH0=0xfc; //给定初值,定时1ms TL0=0x18;
EA=1; //总中断打开
IT0=1; //中断方式设为跳沿触发 ET0=1; //定时器中断打开 ET1=1;
TR0=1; //定时器打开
PX1=1; //外部中断为高优先级 while(1) {
P1=0x01; //清零
TH1=(65536-1000)/256; //定时1ms TL1=(65536-1000)%256; TR1=1;
while(!(m==100)); //清零100ms m=0; TR1=0;
P1=0x04; //开始充电 TH1=(65536-1000)/256; //定时1ms TL1=(65536-1000)%256; TR1=1;
while(!(m==100)); //充电200ms m=0; TR1=0; }
P1=0x06; l=1; IE0=0;
EX0=1; TR1=1; while(f==0); EX0=0; m=0; f=0;
l=0;
//开始放电
//开启外部中断 //开始计时
}
void xianshi(void) interrupt 1 //定时器0, 数码管显示 {
unsigned char i;
TH0=0xfc; //给定初值,定时1ms TL0=0x18; P2=0x00;
if(i==0)
P0=DuanMa[disnum[i]]|0x80; else
P0=DuanMa[disnum[i]]; P2=WeiMa[i]; i++; if(i==4) i=0; }
void time1(void) interrupt 3 //定时1ms {
if(l==0) {
TH1=(65536-1000)/256; TL1=(65536-1000)%256; } else {
TH1=0; TL1=0; }
m++; }
void jishi2(void) interrupt 0 //外部中断0 {
TR1=0; EX0=0; IE0=0;
n=m*65536+TH1*256+TL1; p=(n/100.0)*2.426-1426; f=1;
disnum[3]=p%10; disnum[2]=p/10%10;
disnum[1]=p/100%10; disnum[0]=p/1000%10; }