当前位置:文档之家› 智能数字万用表的设计

智能数字万用表的设计

湖北经济学院电子设计大赛设计报告课题名称:数字智能万用表指导教师:汪成义王金庭刘光然学生姓名:汪凡夏晶晶张薇学生院系:电子工程系时间: 2011年7月智能数字万用表一 设计目的1、培养综合性电子线路的设计能力。

2、掌握综合性电子线路的安装和调试方法。

3、学会基于M3进行软件设计。

二 任务及要求 1、任务设计并制作一台具有直流电压、交流电压和电阻测量功能的智能数字万用表。

示意图如图1所示。

图1 智能数字万用表示意图2、要求1、基本要求(1)213数码显示,最大读数1999。

(2)直流电压量程:、2V 、20V ,精度为%1个字;输入阻抗≥10MΩ。

(3)交流电压量程:、2V 、20V ,精度为%2个字(以50 Hz 为 基准);输入阻抗≥10MΩ;频率响应范围为40~1000Hz 。

(4)电阻量程: 2Ω、200Ω、2M Ω,精度%2个字。

2、发挥部分(1)直流电压测量具有自动量程转换功能。

(2)具有“自动关机”功能,即在测量过程中,若1分钟内无任何键按下,仪器会自动关闭显示并处于低功耗状态;再按任意键,仪器能返回“自动关机”前的工作状态。

(3)具有相对误差(△%)测量功能,即在进行某项测量时,首先通过示屏提示用户从键盘输入标称值,一旦输入确认后,仪器能显示相对误差中的△值。

(4)其它。

三 总体设计方案1、系统模块图根据题目要求和本系统的设计思想,系统主要包括图2所示的模块:图2系统模块框被 测 量 输 入电测阻测直流 测交流 交测直流转换电路电阻测量电路量 程 自 动 转换电路A/D 转换电路 单片 机 系 统键盘与显示2、总体方案分析若被测量为电阻,则须经过电阻测量电路将电阻量转化为直流电压量后才可以进入量程自动转换电路;若被测量为直流电压,则可以直接进入量程自动转换电路;若被测量为交流电压,则需要先经过交直流转换电路将交流电压转换为直流电压后再进入量程自动转换电路。

单片机系统通过对CD4052芯片A、B端的控制实现量程自动转换。

A/D转换电路将测得的模拟量转化为数字量之后通过单片机系统在液晶显示屏上显示出来。

四单元电路设计与计算1、电阻测量电路利用运算放大器采用反相比例运算的方法,将测电阻转化为测电压,电路图如下:图3电阻测量电路由反相比例电路可知:Uo=(Rx/500)×5V,可推出Rx=Uo×100,测量电阻时若输出电压Uo=2V,则被测电阻Rx=200Ω如上图所示。

2、交直流转换电路测量交流电压时须先将交流转化为直流,这里采用全波精密整流电路,利用二极管的单向导电性,运放A1构成反相器,运放A2构成反相加法器,电路图如下所示:图4交直流转换电路当U I>0时 D1导通、D2截止 U O1= -2U I U O= - U O1-U I=U I当U I<0时 D1截止、D2导通 U O1=0 U O= - U O1-U I=-U I输入与输出信号波形如下:图5交直流转换电路输入与输出波形3、量程自动转换电路自动量程转换电路的作用是按输入信号条件(过量程、欠量程信号)和时钟信号(EOC、DS1~DS4)发生相应的量程信号控制。

通过单片机读取MC14433的数字信号,通过数字信号的大小来控制模拟开关,从而改变反馈电阻的大小来实现档位的不同选择。

模拟开关的导通由Q3和Q0决定,当被测电压过量程时(Q3=0且Q0=1),向高量程变化;欠量程时(Q3=1且Q0=1),向低量程变化;当量程适当时,保持原来状态不变。

其中,Au=-Rf/R ,R=10K ,如果要实现3个档位,可以将Rf设为1k、10k、100k,然后通过控制开关来接通电阻,从而实现换档。

CD4052是一个双 4 选一的多路模拟选择开关,其使用真值表如表 1所示:图6 CD4052芯片真值表应用时可以通过单片机对A/B的控制来选择输入哪一路,这里选择Y通道,电路图如下:图 7量程自动转换电路4、A/D 转换电路采用MC14433,集成芯片MC14433是是一个3 1/2位A/D 转换器,其中集成了双积分式A/D 转换器所有的CMOS 模拟电路和数字电路。

具有外接元件少,输入阻抗高,功耗低,电源电压范围宽,精度高等特点,并且具有自动校零和自动极性转换功能。

MC1403提供输出可调基准电压REF V ,当输入一个直流电压时,将进行A/D 转换,用单片机来处理MC14433的控制信号。

当A/D 转换结束时,MC14433的EOC 引脚输出一个高电平脉冲给单片机,单片机进入中断处理程序。

单片机对MC14433的DS1~DS4进行动态扫描,然后将Q0~Q3进行转换之后由LCD 显示。

相关理论推导:双积分过程可以由下面的式子表示:1112111011T C R V dt V C R V xt t x -=-=⎰X REFt t REF T C R V dt V C R V 112111021-=-=⎰因为0201V V =,故有REF xX V T T V 1=,式中1T =4000CP T ,1T 是定时时间,X T 是变时间,由1R 1C 确定斜率,若用时钟脉冲数N 来表示时间X T ,则被测电压就转换成了相应的脉冲数,实现了A/D 转换。

1R 1C 的参数计算:CX V TC V R ∆⨯=11(max) 式中C V ∆为积分电容上充电电压幅度,C V ∆=V V V x DD ∆--(max),V ∆=,T =4000clkf 1⨯。

假定1C =uF ,DD V =5V ,clk f =66kHz 。

当(max)x V =2V 时,代入式1,可得1R =480 Ωk ,取标称值470Ωk 。

电路图如下图所示:图 8 A/D 转换电路五 软件设计1、软件设计流程图:图 9软件设计流程2、程序代码:程序清单#include ""unsigned long TheSysClock = UL;=1 Busy};WriteNum(bai);WriteNum(shi);WriteNum(ge);WriteData('v');};WriteNum(n);WriteNum(c);WriteNum(d);WriteData('v');}//定义电阻显示void dianzu_judge_display(){unsigned char qian=0,bai=0,shi=0,ge=0;unsigned char m,n,c,d,dianzu ;if((a[3]&0x08)==0x08)qian=0;elseqian=1;bai=a[2];shi=a[1];ge=a[0];dianzu=(qian*1000+bai*100+shi*10+ge )/10 ;m=dianzu/1000;n=(dianzu-m*1000)/100 ;c=(dianzu-m*1000-n*100)/10 ;d=dianzu%10 ;WriteCommand(0x85);WriteNum(m);WriteNum(n);WriteNum(c);WriteNum(d);//WriteData('') ;}void GPIO_Port_B_ISR(void){unsigned long ulStatus;ulStatus=GPIOPinIntStatus(READDATA_PORT,true);GPIOPinIntClear(READDATA_PORT,ulStatus);if(ulStatus&INT){while(!((flag0==1)&&(flag1==1)&&(flag2==1)&&(flag3==1))){scan();}GPIOPinWrite(READDATA_PORT,LED,0xff);}flag0=0;flag1=0;flag2=0;flag3=0;}程序清单#include ""#include ""#define SysCtlPeriClkGating SysCtlPeripheralClockGating#define SysCtlPeriSlpEnable SysCtlPeripheralSleepEnable#define LED_PERIPH SYSCTL_PERIPH_GPIOA#define LED_PORT GPIO_PORTA_BASE#define LED_PIN GPIO_PIN_0// 定义KEY#define KEY_PERIPH SYSCTL_PERIPH_GPIOD#define KEY_PORT GPIO_PORTD_BASE#define KEY_PIN GPIO_PIN_7void keyInit(void){SysCtlPeriEnable(KEY_PERIPH); GPIOPinTypeIn(KEY_PORT, KEY_PIN); GPIOIntTypeSet(KEY_PORT, KEY_PIN, GPIO_LOW_LEVEL); GPIOPinIntEnable(KEY_PORT, KEY_PIN);IntEnable(INT_GPIOD); IntMasterEnable( );}//定义睡眠程序void sleep (void){jtagWait( );clockInit( );keyInit( ); SysCtlPeriEnable(LED_PERIPH); GPIOPinTypeOut(LED_PORT, LED_PIN);GPIOPinWrite(LED_PORT, LED_PIN, 0x00);SysCtlDelay(2500 * (TheSysClock / 3000));SysCtlPeriClkGating(true);SysCtlPeriSlpEnable(KEY_PERIPH);for (;;){GPIOPinWrite(LED_PORT, LED_PIN,0xff);SysCtlSleep( );GPIOPinWrite(LED_PORT, LED_PIN, 0x00);SysCtlDelay(2500 * (TheSysClock / 3000));}}void GPIO_Port_D_ISR(void){unsigned long ulStatus;ulStatus = GPIOPinIntStatus(KEY_PORT, true); GPIOPinIntClear(KEY_PORT, ulStatus);if (ulStatus & KEY_PIN){SysCtlDelay(10 * (TheSysClock / 3000));while (GPIOPinRead(KEY_PORT, KEY_PIN) == 0); SysCtlDelay(10 * (TheSysClock / 3000));}}程序清单#define SCK_L GPIOPinWrite(CTL_PORT,SCK,0x00); // 定义信号输出低电平#define SID_L GPIOPinWrite(CTL_PORT,SID,0x00);#define CS_L GPIOPinWrite(CTL_PORT,CS,0x00);#define PSB_L GPIOPinWrite(CTL_PORT,PSB,0x00);#define SCK_H GPIOPinWrite(CTL_PORT,SCK,0xFF); // 定义信号输出高电平#define SID_H GPIOPinWrite(CTL_PORT,SID,0xFF);#define CS_H GPIOPinWrite(CTL_PORT,CS,0xFF);#define PSB_H GPIOPinWrite(CTL_PORT,PSB,0xFF);#define SID_READ GPIOPinRead(CTL_PORT,SID); // 定义读回的数据#define SID_IN GPIOPinTypeGPIOInput(CTL_PORT,SID); // 定义SID信号为输入#define SID_OUT GPIOPinTypeGPIOOutput(CTL_PORT,SID);void LCD_init(void);void SendByte(unsigned char Dbyte);unsigned char ReceiveByte(void);void CheckBusy( void );void WriteCommand( unsigned char Cbyte );void WriteData( unsigned char Dbyte );unsigned char ReadData( void );void Delay(unsigned int MS);void DelayKey(unsigned int Second , unsigned int MS100);void LcmInit( void );void LcmClearTXT( void );void PutStr(unsigned char row,unsigned char col,unsigned char *puts); void WriteNum(unsigned char num);#endif程序清单#ifndef __TEST_H_#define __TEST_H_#include ""#include ""#define READDATA_PERIPH SYSCTL_PERIPH_GPIOB#define READDATA_PORT GPIO_PORTB_BASE#define READDATAGPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0#define INT GPIO_PIN_4#define LED GPIO_PIN_5#define SCAN_PERIPH SYSCTL_PERIPH_GPIOA#define SCAN_PORT GPIO_PORTA_BASE#define SCANGPIO_PIN_3|GPIO_PIN_2|GPIO_PIN_1|GPIO_PIN_0#define OUTPUT_PERIPH SYSCTL_PERIPH_GPIOE#define OUTPUT_PORT GPIO_PORTE_BASE#define OUTPUT GPIO_PIN_1|GPIO_PIN_0void scan(void);void zhiliu_judge_display(void);void jiaoliu_judge_display(void);void dianzu_judge_display(void);void display_wucha_val(void);#endif六系统联调、测试与分析1、测试使用的仪器(1)函数信号发生器(2)直流电源(3)示波器(4)数字万用表2、系统联调测试结果(1)直流电压的测试测试方法:通过单片机系统选择直流电压档,将直流电源作为整机系统的输入端,在LCD上显示出所测直流电压值。

相关主题