万用表电子设计大赛.docx
- 文档编号:19201155
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:26
- 大小:725.65KB
万用表电子设计大赛.docx
《万用表电子设计大赛.docx》由会员分享,可在线阅读,更多相关《万用表电子设计大赛.docx(26页珍藏版)》请在冰豆网上搜索。
万用表电子设计大赛
湖北经济学院
电子设计大赛设计报告
课题名称:
智能数字万用表
指导教师:
汪成义刘光然王金庭
学生班级:
电子Q0931
学生姓名:
田甜李艳凤涂彬
学号:
091809041、17、25
学生院系:
管理技术学院计科系
2011年7月
一实验目的--------------------------------------------------------------2
二实验任务及要求-----------------------------------------------------2
三总体设计方案--------------------------------------------------------3
四硬件电路设计与计算-------------------------------4
五软件设计-----------------------------------------8
六系统联调、测试与分析-----------------------------8
七心得体会-----------------------------------------13
八参考文献--------------------------------------------------------------13
附录--------------------------------------------------------------------14
智能数字万用表实验电路
一实验目的
1.培养综合性电子线路的设计能力。
2.掌握综合性电子线路的安装和调试方法。
3.掌握Cortex-M3的工作环境,实现硬件与软件的联调。
4.实现万用表的智能测量功能。
二任务及要求
(一)任务
设计并制作一台具有直流电压、交流电压和电阻测量功能的智能数字万用表。
示意图如图2-1所示。
图2-1智能数字万用表示意图
(二)要求
1.基本要求
(1)
数码显示,最大读数1999。
(2)直流电压量程:
0.2V、2V、20V,精度为0.2%1个字;输入阻抗≥10MΩ。
(3)交流电压量程:
0.2V、2V、20V,精度为0.5%2个字(以50Hz为基准);输入阻抗≥10MΩ;频率响应范围为40-1000Hz。
(4)电阻量程:
2Ω、200Ω、2MΩ,精度0.2%2个字。
2.发挥部分
(1)直流电压测量具有自动量程转换功能。
(2)具有“自动关机”功能,即在测量过程中,若1分钟内无任何键按下,仪器会自动关闭显示并处于低功耗状态;再按任意键,仪器能返回“自动关机”前的工作状态。
(3)具有相对误差(△%)测量功能,即在进行某项测量时,首先通过显示屏提示用户从键盘输入标称值,一旦输入确认后,仪器能显示相对误差中的△值。
5.jpg(15.3KB)
2010-8-1908:
16
三总体设计方案
(一)总体方案论证
根据题目要求和本系统的设计思想,系统主要包括图3-1所示的模块。
图3-1系统模块框图
(二)各模块方案论证
1.交直流转换模块
全波整流电路,利用二极管的单向导电性,可以很容易的得到直流电压,且能满足设计要求。
2.自动量程转换模块
通过单片机读取MC14433的数字信号来控制模拟开关CD4052,采用软件来实现,从而改变反馈电阻的大小实现档位的不同选择,能够很容易满足测量范围的要求。
3.电阻测量模块
利用运算放大器采用反相比例运算的方法进行测量。
该方法实现比较简单,且能满足设计要求。
4.A\D转换模块
采用MC14433,MC14433是一个低功耗3
位双积分式A/D转换器,MC14433采用动态扫描显示,有多路调制的BCD码输出端和超量程信号输出端,便于实现自动控制。
四硬件电路设计与计算
(一)交流直流转换电路
利用二极管的单向导电性。
如图4-1,运放A1和D1、D2组成半波整流电路。
当
<0时,D1导通、D2截止;所以
=0;当
>0时,D1截止、D2导通,运放A1构成反相器,所以
=-
。
对运放A2来说,它构成的是反相加法电路,
被反相放大2倍,与输入信号叠加,即
=-2
-
。
此时输入信号的正半周被保留,负半周被抵消,再加上剩下的
就变成了一个完整的全波整流电路,波形如图4-2。
可利用NE5532双运放芯片(图4-3)。
在A2上再并上一个100pF的电容(如图4-4)就实现了交直流转换,滤波图为一条直线如图4-5。
图4-1交流直流转换电路
图4-2整流波形
图4-3NE5532
图4-4交流直流转换电路
图4-5滤波图
(二)模拟选择开关量程转换电路
模拟选择开关量程转换电路的作用是按输入条件信号(过量程、欠量程信号)和时钟信号(EOC、DS1~DS4)发生相应的量程信号控制。
通过单片机读取MC14433的数字信号,通过数字信号的大小来控制模拟开关,从而改变反馈电阻的大小来实现档位的不同选择。
模拟开关的导通由Q3和Q0决定,当被测电压过量程时Q0=1且Q3=0;欠量程时Q0=1且Q3=1;在量程时,保持原来状态不变。
相关参数计算:
可以将Rf设为1k、10k、100k,然后通过CD4052芯片(图4-6)的一组4选一的多路模拟选择开关,从而实现换档。
原理图如图4-7。
图4-6CD4052双4选一的多路模拟选择开关
图4-7模拟选择开关量程转换电路
(三)电阻测量电路
利用运算放大器采用反相比例运算的方法,原理图如图4-8,将电阻转换成与之相关的电压,将电压输入MC14433测量电路,并通过单片机计算在液晶屏上显示出来。
具体的电路及换算公式如下:
=>
图4-8电阻测量电路
(四)A\D转换电路
MC1403提供输出可调基准电压
,当输入一个直流电压时,将进行A/D转换,用单片机来处理MC14433的控制信号。
当A/D转换结束时,MC14433的EOC引脚输出一个高电平脉冲给单片机,单片机进入中断处理程序。
单片机对MC14433的DS1~DS4进行动态扫描,然后将Q0~Q3进行转换之后由液晶显示器LCM12832显示。
原理图如图4-9。
MC14433属于双积分型A/D转换器,因而被测电压与基准电压有以下关系:
输出读数=
因此,满量程的Vx=Vr。
当满量程选为1.999V,Vr可取2.000V;而当满量程为199.9mV时,Vr取200.0mV;在实际的应用电路中,根据需要,Vr值可在200mV—2.000V之间选取。
积分电容一般选0.1uF原片电容,如果需转换4次每秒,时钟频率选为66kHz,在2.000V满量程时,电阻R约为470kΩ,而满量程为200mV时,R取27kΩ。
图4-9A\D转换电路
五软件设计
见附录
六系统联调、测试与分析
(一)测试使用的仪器
1.数字万用表UT2003
2.EE1640C型函数信号发生器
3.RIGOLDS1062C型示波器
(二)测试与测试结果分析
1.交流直流转换电路的测试
示波器输出整流波形(图6-1)与理论波形图完全吻合;接上电容后,由于干扰,示波器上滤波波形很不稳定,万用表测量时数据为636.8mV(Vpp=2V),结果正确。
图6-1整流波形
2.模拟选择开关量程转换电路的测试
时,输入、输出间为1倍的关系,输入Vpp=2V时,输出Vpp=2.14V,波形正常,如图6-2。
时,输入、输出间为0.1倍的关系,输入Vpp=2V时,输出Vpp=204mV,波形正常,如图6-3。
时,输入、输出间为10倍的关系,输入Vpp=200mV时,输出Vpp=2.06V,波形正常,如图6-4;若输入Vpp=2V时,输入电压过大导致示波器波形失真,如图6-5。
图6-2BA=01,1倍
图6-3BA=10,0.1倍
图6-4BA=00,10倍关系
图6-5BA=00,Vi过大,波形失真
3.电阻测量电路的测试
理论计算:
=>
测量下图:
数字万用表测得Rx=100.9
图6-6
4.A\D转换电路的测试
MC14433的EOC引脚输出一个高电平脉冲给单片机,则单片机对MC14433的DS1~DS4进行动态扫描,扫描脉冲理论波形如图6-7,DS1~DS4分别连接示波器可观察到波形图如图6-8,EOC在示波器上显示的波形图很不稳定,是由于EOC的脉冲很短暂。
图6-7EOC、DS1~DS4时序脉冲
图6-8DS1~DS4的扫描脉冲
5.交直流转换的测量
设定频率
档位
输入Vpp
计算电压值
实际测量电压值
误差(%)
1KHz
200mV
40mV
12.7mV
13.3mV
4.51
100mV
31.8mV
29.7mV
-6.64
200mV
63.6mV
61.9mV
-2.71
2V
2V
0.636V
0.639V
0.47
2.4V
0.763V
0.776V
1.70
2.8V
0.891V
0.904V
1.45
20V
3V
0.95V
0.98V
2.72
3.6V
1.14V
1.11V
-3.05
4V
1.27V
1.15V
-9.56
6.电阻的测试
档位
理想电阻值
测得的电阻值
误差(%)
20Ω
7.35Ω
6.78Ω
-7.75
10.51Ω
9.77Ω
-7.04
15.37Ω
14.36Ω
-6.57
200Ω
85.21Ω
84.4Ω
-0.95
125.54Ω
126.0Ω
0.36
189.63Ω
186.5Ω
-1.65
2kΩ
242.96Ω
232Ω
-4.31
341.74Ω
329Ω
-3.72
七心得体会
程序编写部分,我们是首次接触lm3s811单片机,并且首次用C语言编写单片机程序,所以开始学习的时候比较困难,通过读已有的程序来熟悉编程语句及规则。
程序下载到开发板上运行前,切记由于各跳线引脚的不同定义,从而根据需要改变跳帽的接法,刚开始我们往往忽视了跳帽这一小步骤而得不到预期的实验效果。
检测A/D转换电路部分时,尽管DS1~DS4波形正确,但与开发板联调时在液晶显示器上却没有显示,我们先检查基准电压是否为2V,发现基准电压却为0V,结果是MC1403芯片坏了。
搭建电路的时候,每搭完一小部分电路就进行检测,可以减少总电路中不正常现象的发生,同时也方便查找错误的潜在部分。
焊接电路板时,要注意各元件在电路板上的排布,不仅要好看还得布局合理,要避免电路板焊接面导线的交叉。
八参考文献
1.谢自美电子线路设计·实验·测试(第三版)武汉:
华中科技大学出版社,2006年8月
附录:
#include"systemInit.h"
#include"lcd.h"
#defineQ_PERIPHSYSCTL_PERIPH_GPIOB//ADC输入信号#defineQ_PORTGPIO_PORTB_BASE
#defineQGPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0//输入位标志位
#defineDS_PERIPHSYSCTL_PERIPH_GPIOA
#defineDS_PORTGPIO_PORTA_BASE
#defineDSGPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0//输入数据千百十个
#defineEOC_PERIPHSYSCTL_PERIPH_GPIOB
#defineEOC_PORTGPIO_PORTB_BASE
#defineEOCGPIO_PIN_4
#defineBAGPIO_PIN_6|GPIO_PIN_5
#defineLEDGPIO_PIN_7
#defineKEY_PERIPHSYSCTL_PERIPH_GPIOD//D口键盘读入数据
#defineKEY_PORTGPIO_PORTD_BASE
#defineKEY_ROWGPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7//D口行输入
#defineKEY_CLOGPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3//D口列输出
unsignedchara[4],q,g;
intkey_z=16;
unsignedcharstr0[]="测量:
";//定义将要显示的汉字与字符
unsignedcharstr1[]="1:
直流电压";
unsignedcharstr2[]="2:
交流电压";
unsignedcharstr3[]="3:
电阻";
unsignedcharm=0,b=0,c=0;
voidGPIO_Init()
{SysCtlPeripheralEnable(Q_PERIPH);//使能ADC输入数据的端口
GPIOPinTypeGPIOInput(Q_PORT,Q);
SysCtlPeripheralEnable(KEY_PERIPH);//使能键盘扫描端口
GPIOPinTypeGPIOInput(KEY_PORT,KEY_ROW);
GPIOPinTypeGPIOOutput(KEY_PORT,KEY_CLO);
SysCtlPeripheralEnable(DS_PERIPH);//使能ADC输入命令的端口
GPIOPinTypeGPIOInput(DS_PORT,DS);
SysCtlPeripheralEnable(EOC_PERIPH);
GPIOPinTypeGPIOInput(EOC_PORT,EOC);
GPIOPinTypeGPIOOutput(EOC_PORT,BA|LED);
GPIOPinTypeGPIOInput(EOC_PERIPH,EOC);
GPIOIntTypeSet(EOC_PERIPH,EOC,GPIO_RISING_EDGE);
GPIOPinIntEnable(EOC_PERIPH,EOC);
IntEnable(INT_GPIOB);
IntMasterEnable();
}
intKEY()
{GPIOPinWrite(KEY_PORT,KEY_CLO,0x0f);
GPIOPinWrite(KEY_PORT,KEY_CLO,0x0E);
if((GPIOPinRead(KEY_PORT,KEY_ROW)&0xf0)!
=0xf0)
{if(GPIOPinRead(KEY_PORT,GPIO_PIN_4)==0)key_z=0;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_5)==0)key_z=4;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_6)==0)key_z=8;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_7)==0)key_z=12;
}
GPIOPinWrite(KEY_PORT,KEY_CLO,0x0f);
GPIOPinWrite(KEY_PORT,KEY_CLO,0x0D);
if((GPIOPinRead(KEY_PORT,KEY_ROW)&0xf0)!
=0xf0)
{if(GPIOPinRead(KEY_PORT,GPIO_PIN_4)==0)key_z=1;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_5)==0)key_z=5;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_6)==0)key_z=9;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_7)==0)key_z=13;
}
GPIOPinWrite(KEY_PORT,KEY_CLO,0x0f);
GPIOPinWrite(KEY_PORT,KEY_CLO,0x0B);
if((GPIOPinRead(KEY_PORT,KEY_ROW)&0xf0)!
=0xf0)
{if(GPIOPinRead(KEY_PORT,GPIO_PIN_4)==0)key_z=2;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_5)==0)key_z=6;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_6)==0)key_z=10;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_7)==0)key_z=14;
}
GPIOPinWrite(KEY_PORT,KEY_CLO,0x0f);
GPIOPinWrite(KEY_PORT,KEY_CLO,0x07);
if((GPIOPinRead(KEY_PORT,KEY_ROW)&0xf0)!
=0xf0)
{if(GPIOPinRead(KEY_PORT,GPIO_PIN_4)==0)key_z=3;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_5)==0)key_z=7;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_6)==0)key_z=11;
if(GPIOPinRead(KEY_PORT,GPIO_PIN_7)==0)key_z=15;
}
return(key_z);
}
voidjudge_display()
{unsignedcharqian,bai,ge,shi,fuhao,dian;
bai=a[2];
shi=a[1];
ge=a[0];
dian='.';
if(a[3]&0x04==0x04)//是否为正
fuhao=1;//为正显示+
elsefuhao=0;//为负显示-
if(a[3]&0x01==0x00)//是否在量程内
{if(a[3]&0x08==0x08)//千位是否为1
qian='0';//为1送0到千
elseqian='1';//否则送1到千
}
else
{if(a[3]&0x08==0x08)//是否欠压
{GPIOPinWrite(EOC_PORT,BA,0x00);q=1;gotolop0;}//是BA输出00
else{GPIOPinWrite(EOC_PORT,BA,0x02);g=1;gotolop1;}//否BA输出10
}//在量程内的显示
WriteCommand(0x92);
if(fuhao==1)
WriteData('+');
else
WriteData('-');
WriteNum(qian);
WriteNum(bai);
WriteNum(shi);
WriteNum(ge);
//在欠压的显示
lop0:
if(a[3]&0x01==0x00)//是否在量程内
{if(a[3]&0x08==0x08)//千位是否为1
qian='0';//为1送0到千
elseqian='1';//否则送1到千
}
WriteCommand(0x92);
if(fuhao==1)
WriteData('+');
else
WriteData('-');
WriteNum(qian);
WriteNum(bai);
WriteNum(shi);
WriteNum(ge);
//在过压的显示
lop1:
if(a[3]&0x01==0x00)//是否在量程内
{if(a[3]&0x08==0x08)//千位是否为1
qian='0';//为1送0到千
elseqian='1';//否则送1到千
}
WriteCommand(0x92);
if(fuhao==1)
WriteData('+');
else
WriteData('-');
WriteNum(qian);
WriteNum(bai);
WriteNum(shi);
WriteNum(ge);
}
voiddanwei_v()
{if(q==1){WriteData('m');WriteData('v');}
if(g==1)WriteData('v');
if((q==1)&(g==1))WriteData('v');
}
//延时0.1ms
voidDelay1(unsignedchara,unsignedcharb)//延时读取DS的电平
{unsignedchari,j;
for(i=a;i>0;i--)
for(j=b;j>0;j--);
}
//显示一级菜单函数
voiddisplay_menu1(void)
{PSB_L;//串行方式
SysCtlDelay(250*(SysCtlClockGet()/3000));
LcmInit();//液晶初始化
KEY();
WriteCommand(0x30);
do
{PutStr(0,0,str0);
if(KEY()!
=16){LcmClearTXT0();return;}
elsePutStr(1,1,str1);//直流电压
SysCtlDelay(2000*(SysCtlClockGet()/3000));
LcmClearTXT();
if(KEY()!
=16){LcmClearTXT0();return;}
elsePutStr(1,1,str2);//交流电压
SysCtlDelay(2000*(SysCtlClockGet()/3000));
LcmClearTXT();
if(KEY()!
=16){LcmClearTXT0();return;}
elsePutStr(1,1,str3);//电阻
SysCtlDelay(2000*(SysCtlClockGet()/3000));
LcmClearTXT();
key_z=KEY();
}
while(key_z==16);
}
//测量直流电压
voidzhiliu(void)
{WriteCommand(0x30);
WriteCommand(0x80);
do{PutStr(0,0,str1);judge_display();da
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 万用表 电子设计 大赛