刘彪组多功能数字万用表Word文档格式.docx
《刘彪组多功能数字万用表Word文档格式.docx》由会员分享,可在线阅读,更多相关《刘彪组多功能数字万用表Word文档格式.docx(79页珍藏版)》请在冰豆网上搜索。
STM32F
存储器容量,RAM:
20KB
计时器数:
4
封装形式:
LQFP
工作温度范围:
-40°
Cto+105°
针脚数:
64
SVHC(高度关注物质):
NoSVHC(18-Jun-2010)
工作温度最低:
工作温度最高:
105°
串行通讯:
2xSPI,2xI2C,3xUSART,USB,CAN
位数:
32
器件标号:
(ARMCortex)STM32
存储器类型:
FLASH
定时器位数:
16
封装类型:
剥式
接口类型:
CAN,I2C,
UART,USB
时钟:
72MHz
模数转换器输入数:
电源电压最大:
3.6V
电源电压最小:
2V
芯片标号:
32F103RB
表面安装器件:
表面安装
输入/输出线数:
49
闪存容量:
128KB
总流程图如图:
待测信号
表
笔
选
择
档
位
选择功能
STM32
液晶显示
图1总原理图
3.2小模块方案设计:
1.测直流电压部分:
方案一,采用芯片NE5532,一种双运放高性能低噪声运算放大器,通过放大信号输出所需信号。
方案二,采用芯片TLV2472,也是一种运算放大器,通过放大信号输出所需信号。
方案比较:
芯片NE5532需要双电源供电,总设计中受9V电池供电限制,9V变为正负5V,功耗会很大,芯片TLV2472是一种高性能低噪声运算放大器,所以采用方案二。
原理流程如图:
图2测直流电压流程方框图
2.测直流电流部分:
测直流电流的原理跟测直流电压原理相似,都是通过运放,放大所需型号,再输出信号,所采用的芯片一样方案也是跟测直流电压的一样,所以也是采用芯片TLV2472为核心。
图3测直流电流流程方框图
3.测交流电压部分:
方案选择,所采用的芯片跟测直流电压和电流的一样,根据模块的统一所以也采用芯片TLV2472,输入信号经过分压整流再通过芯片,经单片机出去。
图4测交流电压流程方框图
4.测电阻、电容部分:
方案选择,是通过RC震荡电路测量电容,通过频率计算出电阻,通过示波器观察频率计算出电阻,所以采用555定时器,方便性能高,原理流程如图:
图5测电阻、电容流程方框图
5.电源部分:
电源要求采用9V电池供电,所以只能通过开关电路或是稳压电路将9V转为相应需要的工作电压5V和3.3V。
方案一,采用LM2736芯片将9V电压稳压到5V,再将5V电压稳压到3.3V。
方案二,采用LM2576芯片通过开关电路将将9V电压转到5V,再通过LM2576芯片通过开关电路将将9V电压转到3.3V。
方案比较,方案一功耗大,转化效率比方案二低,噪声也较方案二的要大,由于方案二LM2576有几种型号,其电路已经集合在其内部,只要简单的外围滤噪声已经稳压的保护电路,并且不同型号的外围电路可以一样,LM2736T-5.0可以直接将9V转化为5V,LM2736T-3.3可以直接将9V转化为3.3V,所以采用方案二来设计制作电源部分。
3.3系统组成
本系统以MSP430G2553作为核心,分电源,测电阻,测电容,测直流电压,测交流电压,测直流电流,测二极管等几个小模块,主要工作是通过单片机的控制将各模块的输入信号按照预定的算法进行运算后从而在我们采用的LCD12864液晶上显示,显示内容为正在进行的测量模块提示字符以及测量的实时结果。
功能方框图如图所示:
图6系统方框图
功能
选择
待
测
输
入
电容测量
电阻测量
直流电压
交流电压
直流电流
电感测量
单
片
机
系
统
独立按键
电源管理
LED
现实
电路
4项目设计
4.1系统模块设计
4.1.1测直流电流模块
1、原理分析
2、原理图如图所示:
图7测直流电流原理图
3、PCB如图所示:
图8测直流电流PCB图
4.1.2测直流电压模块
1、原理分析:
图9测直流电压原理图
图10测直流电压PCB图
4.1.3测交流电压模块
1、原理分析:
:
图11测交流电压原理图
图12测交流电压PCB图
4.1.4测电阻模块
图13测电阻原理图
图14测电阻PCB图
。
4.1.5测电容模块
图15测电容原理图
图16测电容PCB图
4.1.7液晶显示模块
2、原理图如图所示:
图19液晶显示原理图
图20液晶显示PCB图
4.1.8电源显示模块
1、原理分析
图21电源原理图
图22电源PCB图
4.2接口设计
4.2.1外部接口
四个外部接口和两个外部开关功能分别如下:
外部接口1:
测电容、交直流电压、直流电流;
外部接口2:
测电阻;
外部接口3:
测二极管(蜂鸣器);
外部接口4:
接地端。
多功能数字万用表的外部接口是将不同的被测量(如电容、电压、电阻等)不同的量程,切换到合适的接口。
两个外部开关,一个是电源开关,控制多功能数字万用表的通断电,另一个是转换开关,多功能数字万用表中各种测量种类及量程的选择是靠转换开关的切换来实现的。
转换开关里面有固定接触点和活动触点,当固定触点和活动触点闭合时接通电路。
我们所采用的拨动SS16F01六档开关,通过拨动开关可以使得某些活动触点与固定触点闭合,从而相应的接通所需要的测量电路。
4.2.2内部接口:
P1.0控制测直流小电压模块;
P1.1控制测电阻模块;
P1.2控制测电容模块;
P1.3控制测高电压模块;
P1.4控制测小直流电流模块;
P1.5控制测大直流电流模块;
P1.6控制测交流电压模块;
RST控制复位电路;
P2.0、P2.1控制继电器;
P2.2控制蜂鸣器模块;
P2.3、P2.4、P2.5三个接口液晶模块;
P2.6接晶振;
DVCC接电源;
2DVSS接地。
芯片引脚说明,关键硬件电路图如下
图23关键硬件电路图图
74HC4060用256分频器,sn74hc573a为锁存器用作开关P1.2为被测信号进入端,P2.1连接MSP430G2553捕获测量端。
P1.1通过IO控制。
当原理图中的P1.1为高电平时,锁存器打开,相当于开关关闭,同时分频器处于复位状态,即信号不分频直接进入MSP430。
当原理图中的P1.1为高电平时,锁存器关闭,相当于开关打开,同时分频器处于工作状态,即信号经256分频进入MSP430。
4.3运行设计
运行控制采用半自动,通过表笔的选择,还有档位开关的选择来切换,另外通过软件来自动换挡。
各模块组合设计以MSP430G2553作为核心,采用了其内部的16位定时/计数器以及分频控制和液晶显示器共同实现对被测信号的频率进行测量及显示。
在单片机应用系统中,经常要对一个连续的脉冲波频率进行测量,使用单片机测量频率通常是利用它的定时/计数器来完成的。
模块间通过表笔的选择,还有档位开关的选择来切换。
4.4系统软件设计
4.4.1主程序设计流程图
首先把各个模块初始化,进入到液晶显示,选择所需功能,通过公式计算相应的值,将结果传到液晶显示。
流程图如下:
开始
界面初始化
P1.0>
0.2V
P1.0<
2.0V
AD采集P1.0
AD采集P1.3
通过公式计算出电压值
送12864液晶显示
P1.4>
AD采集P1.4
AD采集P1.5
通过公式计算出电流值
P1.4<
控制继电器1挡
控制继电器2挡
FFT计算出有效电压值
P2.6<
No
Yes
图24软件流程图
进入中断
测量确定频率F
F<
100
R_C_flag=0
70
通过公式计算R
通过公式计算C
10000
1000000
图25中断流程图
4.4.2详细设计与编码
在电子技术中,频率是最基本的参数之一,数字频率计具有精度高、使用方便、测量迅速、以及便于实现测量过程自动化等优点,是近代电子技术领域的重要工具之一,在许多领域得到广泛应用。
本系统以超低功耗MSP430G2553单片机为核心处理芯片来测量信号的频率,通过定时器A采用计数法完成信号频率测量,并将被测频率值通过LCD12864液晶串行显示。
频率可测量范围在1Hz到999MHz之间。
如需要,范围可继续扩宽,频率计的误差在1%以内。
基于MSP430G2553的频率计设计原理图如图所示,通过串口方式液晶显示,只需配置单片机三个口线便可以实现对频率的测量。
其中待测频率信号从P1.0口输入,然后可以直接在液晶屏上显示。
4.4.3引脚说明
1、MSP430G2553引脚功能说明
由原理图可以看出,430单片机的最小系统用到1脚电源、16脚复位端、20脚接地端、配置P1.0口为待测信号输入端,P1.4为串行数据输出口,P1.5为串行时钟输出口,如表1所示。
表1MSP430G2553引脚功能说明
引脚序号
引脚名称
功能说明
备注
1
VCC
电源正
2
P1.0
频率信号输入端
6
P1.4
串行数据输出端
7
P1.6
串行时钟输出端
RST
复位脚
20
GND
电源地
表3MSP430G2553引脚功能说明
2、LCD12864引脚功能说明
LCD12864液晶显示屏用到1、2脚,电源接口线,19、20脚背光电源接口线,15脚并行/串行接口选择,5脚串行数据口,6脚串行的同步时钟。
LCD12864引脚功能如表2所示。
表2LCD12864接口说明
VSS
模块的电源地
VDD
模块的电源正端
RS(CS)
并行指令/数据选择信号;
串行片选信号
5
R/W(SID)
并行读写选择信号;
串行的数据口
E(CLK)
并行使能信号;
串行的同步时钟
15
PSB
PSB并/串行接口选择:
H-并行,L-串行
19
LED_A
背光源正极
LED_K
背光源负极(0V)
表4LCD12864接口说明
4.4.4软件系统与其他系统的关系
Fft测交流,先采用测数法测试频率再根据频率通过fft测幅度。
ADC该函数文件用来驱动液晶显示。
BCSC
MSP430基础时钟的配置注意:
DCOCLK最大频率与工作电压成线性关系,设置注意工作电压是否满足时钟配置该函数应先调用,否则会影响其他时钟设置函数的调用。
Delay延时函数延时函数与MCLK有关,不同频率下的Dealy_Base下头文件有定义。
LCD_12864液晶显示函数。
Mian主函数。
Timer频率计。
UARTMSP430串口驱动函数。
4.4.5各函数模块分析
1、主函数
主函数流程图如图2所示。
在主程序中,主要对单片机配置进行初始化和屏幕初始化,以及频率信号数据的处理并实时显示。
单片机初始化
开始
屏初始化
显示
结束
图27主函数流程图
部分主函数代码如下:
#include"
main.h"
ADC10.h"
FFT.h"
floatmax;
/*私有函数模型----------------------------------------------------------------------------------*/
staticvoidSys_Init(void);
voidmain(void)
{
Sys_Init();
LCD_Init();
//ADC10_Config();
//ADC10_TA0_Config(1000);
/*ADC10CLK_Convert(INCH_0,BIT0);
FFT_Test(FFT_D);
max=Return_max(FFT_D);
//while(ADC10IFG==0);
//V_Channel();
LCD_Display_FloatNum(2,1,max,8);
delay_ms(10);
while
(1);
Test_Frequance();
while
(1)
{
while(Ta1_OV_flag!
=1);
LCD_Display_FloatNum(2,1,Input_Frequance,8);
delay_ms(1000);
}*/
//Display_Str(0,0,"
频率计"
);
//Display_Str(1,0,"
当前频率值:
"
//Display_Str(2,6,"
Hz"
Timer_Base_Conf();
//捕获配置
ADC10_Config();
__bis_SR_register(GIE);
if(V_Channel()>
0.1)//0.1为指定电压当电压超过这个值的时候开始启动电压挡
ADC10_Convert(INCH_3,BIT3);
Display_Str(0,0,"
电压值"
Display_Str(1,0,"
当前电压值:
LCD_Display_FloatNum(2,1,V_value,8);
Display_Str(2,6,"
V"
delay_ms(100);
}
if(I_Channel()>
0.1)//0.1同电压
ADC10_Convert(INCH_5,BIT5);
电流值"
当前电流值:
LCD_Display_FloatNum(2,1,I_value,8);
A"
if(VC_Channel()>
ADC10CLK_Convert(INCH_6,BIT6);
交流电压值"
当前有效值:
/*ADC10_Convert(INCH_3,BIT3);
Convert_End();
ADC10_Convert(INCH_4,BIT4);
ADC10_Convert(INCH_6,BIT6);
ADC10_Convert(INCH_7,BIT7);
*/
//if()
//}
}
2、单片机初始化函数
单片机初始化函数包括对看门狗定时器模式的设置、I/O口输入/输出功能的配置。
定时器A所需时钟源、分频系数的选择,并将总中断打开。
函数流程图
图28初始化函数流程图
结束
开中断
定时器A配置ANG
I/O口配置
关闭看门狗
部分函数代码如下
/***************************************************************************************************
*描述:
系统初始化
*参数:
无
*返回:
*注意:
*************************************************************************************************/
staticvoidSys_Init(void)
{
WDTCTL=WDTPW+WDTHOLD;
//停止看门狗
DCOCLK_Set(_16MHZ);
//DCO频率为8MHz
ACLK_Set(LF,DIVA_0);
//ACLK频率为32.768KHz
SMCLK_Set(SM_DCO_CLK,DIVS_0);
//SMCLK=DCOCLK
MCLK_Set(M_DCO_CLK,DIVM_0);
//MCLK=DCOCLK
/*******************
3、中断函数
中断函数流程图如图4所示。
当定时器A溢出后就进入中断,count就加上65535。
count=count+65535
图29中断流程图
部分函数代码如下:
定时器中断服务函数
TimerA0interruptserviceroutine
#pragmavector=TIMER0_A0_VECTOR//测量电阻
__interruptvoidTimer_A0(void)
Capture[Cap_Offset++]=TA0CCR0;
if(Cap_Offset==2)
R_C_flag=0;
CCTL0&