凌阳SPCE061A单片机智能万用表设计.docx
- 文档编号:30722837
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:49
- 大小:200.59KB
凌阳SPCE061A单片机智能万用表设计.docx
《凌阳SPCE061A单片机智能万用表设计.docx》由会员分享,可在线阅读,更多相关《凌阳SPCE061A单片机智能万用表设计.docx(49页珍藏版)》请在冰豆网上搜索。
凌阳SPCE061A单片机智能万用表设计
智能数字万用表的设计
摘要:
本智能数字万用表由凌阳SPCE061A单片机、MC14433——3
位A/D转换电路、自动量程转换电路、交直流转换电路和大、小电阻测量电路组成,能够对交流电压、直流电压、大电阻和小电阻进行精确测量。
使用凌阳SPCE061A单片机作为控制模块,实现量程自动转化;使用MC14433实现A/D转换;使用简易软键盘、凌阳SPLC501液晶显示模组实现输入和显示;使用单片机读取MC14433的数字信号来控制模拟开关,从而改变反馈电阻的大小实现档位的不同选择;本设计能够准确对被测量进行测量,所有性能指标符合要求。
关键词:
数字万用表单片机MC14433交直流电压测量电阻测量
1、方案论证
1.交流电压的测量:
由于交流电压不能直接测量,必须转换为直流电压。
转换方案有3种:
方案一、热电偶测量法:
根据交流有效值的物理定义来实现测量的,利用热电偶电路平衡原理通过两端的电势比较得到有效值。
但热电偶转换线性度差,且热电偶具有配对较难、响应速度慢、负载能力差等缺点。
方案二、模拟运算法:
根据有效值的数学定义,用集成器件乘法器、开放器等依次对被测信号进行平方、平均、开方等计算直接得到交流输入信号的有效值。
这种方案测量的动态范围小、精度不高且输入信号的幅度变小时,平均器输出电压的平均值下降值很快、输出幅度很小。
方案三、交流整形电路:
使用AD637等集成有效值转换芯片,把交流电压信号转换为幅值等于交流有效值的直流电压信号,在对直流电压进行测量,这种方案电路简单、响应速度快、失真度小、工作稳定可靠。
综上,采用方案三进行交流电压的测量。
2.小电阻的测量:
由于小电阻在通入电压后发热,测量出的电阻值会产生较大的误差,对于小电路有3种方案测量:
方案一、直流电桥测量法。
直流电桥又分直流单电桥和直流双电桥。
采用这两种方法测量时很多操作需要手动,并且对元件精度要求高,通过数字电位器来改变需要的电阻参数,索然可以实现数控,但数字电位器的每一级步进电阻值不确定,调节困难,用单片机处理计算复杂并且测量时操作不便。
方案二、电阻比例法。
电阻比例法采用如图1所示的双积分式A/D转换器电路,可实现电阻——数字的转换。
由于在电阻上Rx、Rs中流过相同的电流,因此不需要精密的基准电流,但需要计数器和精密时钟发生器且电路复杂处理难度大。
方案三、采用恒流外加小信号放大法。
当测量0~2Ω小电阻时,采用恒流源产生10mA的电流流经电阻产生0~20mV压降再放大10倍即0~200mV测量,这样解决了大电流流经小电阻发热大的问题。
此种方案误差主要取决于恒流源的精度,只要恒流源恒定,测量可以达到很高的精度。
综上,采用方案三进行小电阻的测量。
3.A/D转换模块
方案一、采用CC7106。
CC7106是CMOS大规模集成电路芯片,它将模拟电路与数字电路集成在一个有40个功能端的电路内,所以只需外接少量元件就可组成一个3
位数字电压表。
但是CC7106是以静态方式驱动LCD转换器,无BCD码输出端,因此不能直接获得降量程信号。
方案二、采用MC14433。
MC14433是一个低功耗3
位双积分式A/D转换器,与CC7106相比,MC14433采用动态扫描显示,有多路调制的BCD码输出端和超量程信号输出端,便于实现自动控制。
综上,采用方案二进行A/D转换。
4.自动量程转换模块
方案一、采用软件来实现。
通过单片机读取MC14433的数字信号来控制模拟开关,从而改变反馈电阻的大小实现档位的不同选择,能够很容易满足测量范围的要求。
此方案是电路比较简单,实现也较容易。
方案二、采用硬件实现。
电路的核心是一块双向移位寄存器CC40194,移位方向由MC14433过量程信号控制,并且还要外接一些数字电路才能实现换档,电路比较复杂,不方便。
综上,采用方案一进行自动量程转换。
二、系统实现
1.硬件设计
根据题目要求和本系统的设计思想,系统主要包括图一所示。
图一设计原理图
SPCE061A单片机是本系统的核心器件,负责控制整个系用的正常工作,包括读取MC14433转换后的结果及10mV、100mV、1V和10V档位的控制;按键输入动作响应;键盘与显示模块的驱动;量程自动控制等。
输入的电压信号经过自动量程转换电路进行转换,变成可供ADC模拟输入端能正常进行采样的电压。
交流电压测量电路的功能是将被测的交流电压经过AD637转换成直流电压进行测量。
电阻测量电路中使用2个三极管构成能产生10mA电流的恒流的电路,通过NE5532后得到被测电阻上的电压,运算得到被测电阻值。
A/D转换电路的功能是实现模拟量到数字量的转换,其转换后的数字量由单片机读取并送到键盘与显示模块中显示。
2.不同功能的单元电路
(1)整体电路图
本系统由电源管理电路、A/D转换电路、自动量程转换电路、交直流转换电路和电阻测量电路组成。
通过拨动开关和单片机选择所需功能进行测量,被测量通过与之相应的单元电路转化为电压,然后送入A/D转换电路转换成数字信号。
单片机将数字信号读入并进行相应操作,然后在液晶显示屏上显示出来。
(整体电路图见附录)
(2)交直流转换电路
交流电压测量真有效值的转换电路是测量交流电压的关键部分,其设计的好坏直接影响到交流电压信号的测量精度,在本次设计中我们通过比较采用AD637来实现交流信号到直流量的转变,将交流电压转换为直流,测量其有效值,电路如图三所示。
Vi是交流电压输入端,Vo端输出的是电压信号,输出直流电压的值是输入交流电压的真有效值。
我们在面包板上测试时,第一次输出值偏小,在多次检测后,我们认为是AD637芯片产生的误差。
在更换AD637芯片后,结果正确。
(3)电阻测量电路
电阻测量采用在待测电阻上流过恒定电流产生压降,通过测量相应的电压再经MC14433的A/D转换后得到电阻值。
大电阻测量:
大电阻测量由TL431芯片、C1、电位器RT产生2V恒定电压,被测电阻与10Ω、100Ω、1KΩ、10KΩ、100KΩ和1MΩ的标准电阻相串联到地。
通过测量Rx两端电压再经过相应的软件处理计算,可得到被测电阻的大小。
电路如图四所示。
小电阻测量:
小电阻在通过小电流时难以测量,再通过大电流时又有电阻发热的问题。
本数字万用表设计采用恒流源产生10mA的小电流流经电阻产生压降,通过测量Rx两端电压再经过相应的软件处理计算,可得到被测电阻的大小。
当测量0~2Ω小电阻时产生0~20mV电压再放大10倍即0~200mV测量,这样解决了大电流流经小电阻发热大的问题又提高了精度。
电路图如图五所示。
恒流源电路:
设计一个很简单的电路,使用元器件少,精度高。
由2个三极管组成电路,输出为10mA电流,加在Rx两端进行测量压降。
(电路图见附录)
(4)模数与量程转换电路
A/D转换原理:
MC1403提供输出可调基准电压
,当输入一个直流电压时,将进行A/D转换,用单片机来处理MC14433的控制信号。
当A/D转换结束时,MC14433的EOC引脚输出一个高电平脉冲给单片机,单片机进入中断处理程序。
单片机对MC14433的DS1~DS4进行动态扫描,然后将Q0~Q3进行转换之后由LCD显示。
相关理论推导:
双积分过程可以由下面的式子表示:
因为
,故有
,式中
=4000
,
是定时时间,
是变时间,由
确定斜率,若用时钟脉冲数N来表示时间
,则被测电压就转换成了相应的脉冲数,实现了A/D转换。
的参数计算:
(式1)
式中
为积分电容上充电电压幅度,
=
,且
=0.5V,
=4000
。
自动量程转换电路的作用是按输入条件信号(过量程、欠量程信号)和时钟信号(EOC、DS1~DS4)发生相应的量程信号控制。
通过单片机读取MC14433的数字信号,通过数字信号的大小来控制模拟开关,从而改变反馈电阻的大小来实现档位的不同选择。
模拟开关的导通由Q3和Q0决定,当被测电压过量程时(Q3=0且Q0=1),向高量程变化;欠量程时(Q3=1且Q0=1),向低量程变化;在量程适合时,保持原来状态不变。
相关参数计算:
,如果要实现4个档位,可以将
设为1k、10k、100k和1M,然后通过控制开关来接通电阻,从而实现换档。
(电路图见附录)
(5)电源管理电路
电源管理电路主要是将9V叠层电池转换成单片机工作电压、+5V和-5V的恒定电压,给后续电路提供工作电压。
电池的正极分成两路,第一路是直接接入到LM317的输入端,LM317是三端集成稳压芯片,其输出恒定的4.3V,做单片机的电源。
另一路是经过三极管9012可以开关控制,本设计中万用表处于正常工作状态时,单片机控制口输出高电平,9011处于饱和状态,9012的基极电压与低电压相近,9012饱和,即处于导通状态。
9V叠层电池的正极电压到达78L05三端集成稳压芯片的输入端,其输出端输出的+5V电压。
-5V有负压电荷泵7660S产生。
当万用表处于“睡眠”状态时,单片机控制口输出为低电平。
9011处于截止状态,9012的基极电压为9V,也处于截止状态,模拟部分电源电压为零。
(电路图见附录)
三、软件设计
以下是通过软件编程实现功能的流程图,源代码见附录所示。
四、系统测试
1.测试使用的仪器
(1)数字万用表UT2003;
(2)EE1640C型函数信号发生器;
(3)RIGOLDM3051型
的数字万用表。
2.指标测试和测试结果
(一)直流电压的测试
测试方案:
通过拨动开关和单片机选择直流档,由直流电源提供电压进行测量,然后由单片机显示输出。
档位
输入电压
实际电压
误差(%)
200mV
2V
20V
200V
结果分析:
测量误差大部分在-0.2%~+0.2%范围内,在200V档测量时,由于直流电源的输出电压不能超过30V,所以取两个值进行测量。
在200mV量程进行测量时,由于输入信号的不稳定导致部分测量误差较大,基本满足题目要求。
(二)电阻的测试
测试方案:
通过拨动开关和单片机选择电阻档,由电平转换电路提供2V的基准电压,将待测电阻接入测量端,然后选择合适的档位进行测量。
档位
理想电阻值
测得的电阻值
误差(%)
2Ω
200Ω
2MΩ
结果分析:
测量误差在-0.2%~+0.2%范围内,满足题目要求。
(三)交流电压的测试
测试方案:
通过拨动开关和单片机选择交流档,由函数信号发生器提供一个正弦交流电压,输入到交流端进行测量。
设定频率
档位
输入电压值
实际测得的电压值
误差
50Hz
200mV
2V
20V
结果分析:
测量误差大部分在-0.5~+0.5范围内,由于函数发生器的输出电压的不稳定,导致部分测量数据的误差较大,基本满足题目要求。
五、结论
本数字万用表系统完成了基本要求和发挥部分的所有内容,如下:
1.直流电压的测量;2.交流电压的测量;3.大、小电阻的测量;4.自动量程转换;5.睡眠、唤醒功能;6.相对误差的测量。
附录一:
1.整机电路图
2.交直流转换电路
3.大电阻测量电路
4.小电阻测量电路
5.模数与量程转换电路
6.电源管理电路
附录二:
源代码:
#include"spce061a.h"
#include"splc501user.h"
#include"wybzimo2.h"
voidIRQ3(void)__attribute__((ISR));
voidFIQ(void)__attribute__((ISR));
unsignedintcheck_key();
unsignedintkey_scan();
unsignedintbczsr();
unsignedintrdata();
voiddycl();
voiddzcl();
voidonlyclz();
intkeyval;
intsleep;
inthx;
unsignedintdistable[10]={encoding_18,encoding_19,encoding_1a,encoding_1b,encoding_1c,encoding_1d,
encoding_1e,encoding_1f,encoding_20,encoding_21};
unsignedintsrshuzi[7];
unsignedmc14433[5];
unsignedmcdata;
floatwcz1;
inteoc;
intdangwei;
doublebcz;
intowe;
intover;
intwcz[5];
intintctrl;
unsignedinttable[]={encoding_00,encoding_01,encoding_02,encoding_03,encoding_04,encoding_05,
encoding_06,encoding_07,encoding_08,encoding_09,encoding_0a,encoding_0b,
encoding_0c,encoding_0d,encoding_0e,encoding_0f,encoding_10,encoding_11,
encoding_12,encoding_13,encoding_14,encoding_15,encoding_16,encoding_17};
main()
{
#if1
*P_TimerA_Data=65416;
*P_TimerA_Ctrl=0x002d;
__asm("INTFIQ,IRQ");
*P_INT_Ctrl=0x2100;
intctrl=0x2100;
#endif
*P_IOB_Dir&=0x00ff;//B口(8-15位)作为mc14433的数据读取端口
*P_IOB_Attrib&=0x00ff;//B口(8-15位)作为mc14433的数据读取端口
*P_IOB_Data&=0x00ff;
*P_IOB_Dir|=0x0003;//B口(0-1位)作为量程控制信号输出
*P_IOB_Attrib|=0x0003;//B口(0-1位)作为量程控制信号输出
*P_IOB_Data|=0x0003;
*P_IOB_Dir&=0xfffb;//设置IOB2带上拉电阻的输入端口
*P_IOB_Attrib&=0xfffb;//设置IOB2带上拉电阻的输入端口
*P_IOB_Data|=0x0004;//设置IOB2带上拉电阻的输入端口
*P_IOB_Dir|=0x0003;//B口(0-1位)作为量程控制信号输出
*P_IOB_Attrib|=0x0003;//B口(0-1位)作为量程控制信号输出
*P_IOB_Data|=0x0003;//B口(0-1位)作为量程控制信号输出
while
(1)
{
keyval=key_scan();
if(keyval!
=16)
{
*P_TimerA_Data=65416;
*P_TimerA_Ctrl=0x002d;
}
switch(keyval)
{
case14:
LCD501_Init(0x00);
LCD501_Bitmap(0,32,(unsignedint*)table[12]);//进
LCD501_Bitmap(12,32,(unsignedint*)table[13]);//入
LCD501_Bitmap(24,32,(unsignedint*)table[9]);//电
LCD501_Bitmap(36,32,(unsignedint*)table[10]);//压
LCD501_Bitmap(48,32,(unsignedint*)table[3]);//测
LCD501_Bitmap(60,32,(unsignedint*)table[4]);//量
dycl();
break;
case15:
LCD501_Init(0x00);
LCD501_Bitmap(0,32,(unsignedint*)table[12]);//进
LCD501_Bitmap(12,32,(unsignedint*)table[13]);//入
LCD501_Bitmap(24,32,(unsignedint*)table[9]);//电
LCD501_Bitmap(36,32,(unsignedint*)table[11]);//阻
LCD501_Bitmap(48,32,(unsignedint*)table[3]);//测
LCD501_Bitmap(60,32,(unsignedint*)table[4]);//量
dzcl();
break;
default:
break;
}
}
}
voiddzcl()
{
dangwei=5;
LCD501_Init(0x00);
while
(1)
{
*P_Watchdog_Clear=1;
LCD501_Bitmap(0,12,(unsignedint*)table[0]);//标
LCD501_Bitmap(12,12,(unsignedint*)table[1]);//称
LCD501_Bitmap(24,12,(unsignedint*)table[2]);//值
LCD501_Bitmap(0,24,(unsignedint*)table[3]);//测
LCD501_Bitmap(12,24,(unsignedint*)table[4]);//量
LCD501_Bitmap(24,24,(unsignedint*)table[2]);//值
LCD501_Bitmap(1,36,(unsignedint*)table[6]);//误
LCD501_Bitmap(12,36,(unsignedint*)table[7]);//差
LCD501_Bitmap(24,36,(unsignedint*)table[2]);//值
LCD501_PutChar(108,33,'%');
LCD501_Bitmap(1,48,(unsignedint*)table[16]);//档
LCD501_Bitmap(12,48,(unsignedint*)table[17]);//位
LCD501_Bitmap(24,48,(unsignedint*)table[2]);//值
LCD501_Bitmap(96,24,(unsignedint*)table[8]);//欧
LCD501_Bitmap(112,48,(unsignedint*)table[8]);//欧
*P_Watchdog_Clear=1;
keyval=check_key();
if(keyval!
=16)
{
*P_TimerA_Data=65496;
*P_TimerA_Ctrl=0x002d;
}
switch(keyval)
{
case11:
LCD501_PutChar(36,9,'');
LCD501_PutChar(44,9,'');
LCD501_PutChar(52,9,'');
LCD501_PutChar(60,9,'');
LCD501_PutChar(68,9,'');
LCD501_PutChar(74,9,'');
LCD501_PutChar(82,9,'');
LCD501_PutChar(90,9,'');
LCD501_PutChar(98,9,'');
LCD501_PutChar(106,9,'');
bczsr();
break;
case13:
if(dangwei>0)
{
dangwei=dangwei-1;
}
break;
case12:
if(dangwei<5)
{
dangwei=dangwei+1;
}
break;
default:
break;
}
switch(dangwei)
{
case0:
*P_Watchdog_Clear=1;
LCD501_PutChar(48,48,'2');
LCD501_PutChar(60,48,'M');
LCD501_PutChar(72,48,'');
LCD501_PutChar(84,48,'');
LCD501_PutChar(96,48,'');
if(eoc==1)
{
eoc=0;
rdata();
}
*P_Watchdog_Clear=1;
mcdata=mc14433[0]*1000+mc14433[1]*100+mc14433[2]*10+mc14433[3];
mcdata=mcdata/(2000-mcdata);
mc14433[0]=mcdata/1000%10;
mc14433[1]=mcdata/100%10;
mc14433[2]=mcdata/10%10;
mc14433[3]=mcdata%10;
LCD501_Bitmap(36,24,(unsignedint*)distable[mc14433[0]]);
LCD501_PutChar(46,24,'.');
LCD501_Bitmap(48,24,(unsignedint*)distable[mc14433[1]]);
LCD501_Bitmap(60,24,(unsignedint*)distable[mc14433[2]]);
LCD501_Bitmap(72,24,(unsignedint*)distable[mc14433[3]]);
LCD501_PutChar(84,21,'M');
LCD501_PutChar(48,9,'.');
LCD501_PutChar(6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 凌阳 SPCE061A 单片机 智能 万用表 设计