多功能数字万用表设
计与制作
1、摘要
随着科技的日新月异,电子产品发展也非常之快,在电子电路测试、家用电气设备的维修、电子仪器检修、电子元器件测量中,万用表是最普及、最常用的的测量仪表。由于它操作简单、功能齐全、便于携带、一表多用等特点,深受电工、电子专业工作者及广大无线电爱好者的喜爱。
事实证明,万用表不仅能检测电工、电子元器件的性能优劣,查找电子、电气线路的故障,估测某些电气参数,有时还能代替专业测试仪器,获得比较准确的结果,基本上可以满足电工、电子专业人员和业余无线电爱好者的需要。因此,推广万用表的应用技术,实现一表多用,既符合节约精神,又可以在一定程度上克服专用仪器的困难。
多功能数字万用表是在电子方面的学习、开发以及生产方面应用相当广发的一种仪器工具,整机电路设计以大规模的集成模拟和数字电路组合,采用
STM32F103RBT6为核心,高精度的运算放大器,低功耗高效率的开端电源转换器,全电子调校技术赋予仪表高可靠性,高精度。仪表可用于测量交直流电压、交直流电流、电阻、电感、电容,RS232C接口技术的应用使其和计算机构成可靠多种的双向通讯。仪表采用独特的外观设计,采用OLED3.1液晶显示器,仪表采用220V交流供电使之成为性能更优越的高精度电工仪表。
目录
1摘要 (2)
多功能数字万用表的设计与制作 (11)
2项目概述与功能需求 (11)
3项目论证 (12)
3.1 总体方案论证 (12)
3.1.1设计目标 (12)
3.1.2总体设计方案 (12)
3.2小模块方案设计: (15)
(18)
4 项目设计 (18)
4.1 系统模块设计 (18)
4.1.2测直流电压模块 (19)
图9 测直流电压原理图 (19)
4.1.3测交流电压模块 (20)
图11 测交流电压原理图 (20)
4.1.4测电阻模块 (21)
图13 测电阻原理图 (21)
4.1.5测电容模块 (22)
图15 测电容原理图 (22)
4.1.7液晶显示模块 (22)
1、原理分析: (22)
2、原理图如图所示: (23)
图19 液晶显示原理图 (23)
4.1.8电源显示模块 (23)
1、原理分析 (23)
2、原理图如图所示: (23)
图21 电源原理图 (24)
4. 2接口设计
4.2.1外部接口 (24)
四个外部接口和两个外部开关功能分别如下: (24)
外部接口1:测电容、交直流电压、直流电流; (24)
外部接口2:测电阻; (24)
外部接口3:测二极管(蜂鸣器); (24)
外部接口4:接地端。 (24)
多功能数字万用表的外部接口是将不同的被测量(如电容、电压、电阻等)不同的量程,切换到合适的接口。 (25)
两个外部开关,一个是电源开关,控制多功能数字万用表的通断电,另一个是转换开关,多功能数字万用表中各种测量种类及量程的选择是靠转换开关的切换来实现的。转换开关里面有固定接触点和活动触点,当固定触点和活动触点闭合时接通电路。我们所采用的拨动
SS16F01 六档开关,通过拨动开关可以使得某些活动触点与固定触点闭合,从而相应的接通所需要的测量电路。 (25)
4.2.2内部接口: (25)
P1.0控制测直流小电压模块; (25)
P1.1控制测电阻模块; (25)
P1.2控制测电容模块; (25)
P1.3控制测高电压模块; (25)
P1.4控制测小直流电流模块; (25)
P1.5控制测大直流电流模块; (25)
P1.6控制测交流电压模块; (25)
RST控制复位电路; (25)
P2.0 、P2.1控制继电器; (25)
P2.2控制蜂鸣器模块; (25)
P2.3、P2.4、P2.5三个接口液晶模块; (25)
P2.6接晶振; (25)
2DVSS接地。 (25)
芯片引脚说明,关键硬件电路图如下 (25)
74HC4060用256分频器,sn74hc573a为锁存器用作开关P1.2为被测信号进入端,P2.1连接MSP430G2553捕获测量端。P1.1通过IO控制。当原理图中的P1.1为高电平时,锁存器打开,相当于开关关闭,同时分频器处于复位状态,即信号不分频直接进入MSP430。当原理图中的P1.1为高电平时,锁存器关闭,相当于开关打开,同时分频器处于工作状态,即信号经256分频进入MSP430。 (26)
4.3 运行设计 (26)
4.4.1主程序设计流程图 (26)
4.4.2详细设计与编码 (28)
4.4.3引脚说明 (29)
1、MSP430G2553引脚功能说明 (29)
2、LCD12864引脚功能说明 (29)
表4 LCD12864接口说明 (29)
4.4.4软件系统与其他系统的关系 (29)
UART MSP430串口驱动函数。
4.4.5各函数模块分析 (30)
1、主函数 (30)
主函数流程图如图2所示。在主程序中,主要对单片机配置进行初始化和屏幕初始化,以及频率信号数据的处理并实时显示。 (30)
部分主函数代码如下: (31)
#include "main.h" (31)
#include "ADC10.h" (31)
#include "FFT.h" (31)
float max; (31)
/* 私有函数模型 ----------------------------------------------------------------------------------*/ (31)
static void Sys_Init(void); (31)
void main(void) (31)
{ (31)
Sys_Init(); (31)
LCD_Init(); (31)
// ADC10_Config(); (31)
// ADC10_TA0_Config(1000); (31)
/* ADC10CLK_Convert(INCH_0,BIT0); (31)
FFT_Test(FFT_D); (31)
max=Return_max(FFT_D); (31)
//while(ADC10IFG==0); (31)
// ADC10_Config(); (31)
// V_Channel(); (31)
LCD_Display_FloatNum(2,1,max,8); (31)
delay_ms(10); (31)
while(1); (31)
while(1) (32)
{ (32)
while(Ta1_OV_flag!=1); (32)
LCD_Display_FloatNum(2,1,Input_Frequance,8); (32)
Test_Frequance(); (32)
delay_ms(1000); (32)
}*/ (32)
// Display_Str(0,0," 频率计"); (32)
// Display_Str(1,0,"当前频率值:"); (32)
// Display_Str(2,6,"Hz"); (32)
Timer_Base_Conf();//捕获配置 (32)
ADC10_Config(); (32)
__bis_SR_register(GIE); (32)
while(1) (32)
{ (32)
if(V_Channel()>0.1)//0.1为指定电压当电压超过这个值的时候开始启动电压挡 (32)
{ (32)
ADC10_Convert(INCH_3,BIT3); (32)
Display_Str(0,0," 电压值 "); (32)
Display_Str(1,0,"当前电压值:"); (32)
LCD_Display_FloatNum(2,1,V_value,8); (32)
Display_Str(2,6,"V "); (33)
delay_ms(100); (33)
} (33)
if(I_Channel()>0.1)//0.1同电压 (33)
{ (33)
ADC10_Convert(INCH_5,BIT5); (33)
Display_Str(0,0," 电流值 "); (33)
Display_Str(1,0,"当前电流值:"); (33)
LCD_Display_FloatNum(2,1,I_value,8); (33)
Display_Str(2,6,"A "); (33)
} (33)
if(VC_Channel()>0.1)//0.1同电压 (33)
{ (33)
ADC10CLK_Convert(INCH_6,BIT6); (33)
FFT_Test(FFT_D); (33)
max=Return_max(FFT_D); (33)
Display_Str(0,0," 交流电压值 "); (33)
Display_Str(1,0,"当前有效值:"); (33)
LCD_Display_FloatNum(2,1,max,8); (33)
Display_Str(2,6,"V "); (33)
} (33)
} (33)