基于MSP430数字式电压表.docx_第1页
基于MSP430数字式电压表.docx_第2页
基于MSP430数字式电压表.docx_第3页
基于MSP430数字式电压表.docx_第4页
基于MSP430数字式电压表.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 题 目: 基于MSP430数字式电压表 院 系: 电子与信息工程学院 班 级: 学生姓名: 学 号: 指导老师: 2016年7月6日 Msp430数字电压表设计1、 目标 采用MSP430单片机来实现数字电压表的功能,本数字电压表由MSP430F5529作为主控器件,A/D转换器采用MSP430自带转换器,利用单片机灵活的编程设计和丰富的I/O端口,及其控制的准确性,实现数字电压表的硬件电路和软件设计。利用外部硬件电路对不同档位的输入电压进行处理,使电压达到单片机测量范围,实现基本的数字电压表功能,使其可以测量016.5V的电压值,并且误差控制在0.02v以内,最后在AY-SEB Module板的液晶屏上显示。 该系统的数字电压表电路元件较少,成本低,调节工作简单等优点。在电压测量中有较强的实用性。2、 器件1.MSP430F5529LP开发板 2.AY-SEB Module核心板3.测试前端(电阻分压和电压跟随器组成)三、原理分析 测试前端包括电阻分压和电压跟随器,即输入电压前接电阻分压电路和LM358运算放大器组成的电压跟随器,电阻分压能增大测量量程(可通过改变两个电阻比值而改变量程)。运算放大器同时起到增加输入阻抗的作用,使得电阻分压得到的电压更稳定,避免影响被测量的电压值。用MSP430F5529开发板P6.0(A0)通道采用中断方式,不间断连续采集输入电压,通过程序控制,由MSP430F5529开发板的AD转换电路完成电压的采集,对采集信息处理换算后,把电压发信息至AY-SEB Module核心板液晶屏上显示。 四、硬件电路原理分析 1.电路设计(测试前端) 2.电路分析经过电阻分压后,检测电压U2=XU1,其中R1=10k,R2=1k,可得U1=11U2,实现扩大11倍量程的作用。在这里将R2定为1K,是为了方便计算,可通过R1的阻值,来改变设计的电压表的量程(阻值越大,量程越大);另外用LM358作为运算放大器来提高精确度。五、数据测量及误差分析输入电压(V)测试电压(V)0.100 0.1080.300 0.2960.700 0.694 0.801 0.791 1.000 0.991 3.000 2.993 5.000 5.000 7.000 7.002 9.000 9.009 11.001 11.006 13.003 13.026 16.504 16.500 1.误差分析 通过分析以上测试数据,得出一下结论由表中数据和图例可以看出电压测量分辨率0.01V,通过统计求均值可得出测量误差1%。达到了设计要求。测量值与实际值有一定的误差,并且误差随着输入电压的增大而变大。其原因是输入电路中由电阻串联构成来实现分压,电阻参数的变化及负载效应会引起分压比的误差;运算放大器本身存在漂移和噪声,开环增益和开环输入电阻不无穷大,因此会引入误差。由图例不难看出输入电压不是线性的,且随着输入电压增大,误差也变大,这说明信号源输入电压给电路,由于电路本身输入阻抗不够高,电路会向信号源索取的电流,输入电压越大,索取的电流就越大,就导致了误差增大。2. 减小误差探究在电路中假如一个射极跟随器,用它连接两电路,减少电路间直接相连所带来的影响,起缓冲作用。由于动态电压放大倍数小于1并接近1,且输出电压与输入电压同相但是输出电阻低,具有电流放大作用,所以有功率放大作用,从而提高精确度。六、结论经过一段时间的努力,基于单片机的简易数字电压表基本完成。但设计中的不足之处仍然存在。这次设计是我第一次设计电路,在这过程中,我对电路设计,单片机的使用等都有了新的认识。通过这次设计熟练了软件的使用方法,积累了不少经验。本文设计主要实现了简易数字电压表测量一路电压的功能,详细说明了从原理图的设计到软件的调试。其中有苦也有乐。苦的是自己的知识太贫乏,到处找资料,问同学;乐的是在付出过程中,同学的帮助,让我学到了许多的东西。在整个设计过程中,经常经常出现这样那样的问题,但是最后还是都得以解决,当看到自己的设计课题成功时,心中有一种成就感。 忙了几个星期的设计终于要结束了,从开始布置题目的期待,到着手设计时,因为知识匮乏的迷惘,再到同学诚心的帮助和老师的释疑,最后到作品的成功。虽然是一个简单的数字电压表设计,但这期间,对我来说就是一笔丰富的财富,是一种成长。七、另附程序/*数字电压表程序*/ MSP430F5529LP - MSP-EXP430F5529LP + AY-SEB Module核心板/ 描 述:P60(A0)通道采用中断方式,不间断连续采集输入电压,再经液晶屏显示。/*#include #include grlib.h#include LCD_driver/Template_Driver.h#include images/images.h#include driverlib.h/*/变量来存储振荡器故障标志的状态/*uint16_t status;#define Num_of_Results 16#define ADC_REF 1500 / adc基准参考电压(1.5V与2.5V)#define ADC_RANGE4095/ adc转换位数volatile uint16_t resultsNum_of_Results;volatile uint16_t adc_filter;Graphics_Context g_sContext;#if defined(_IAR_SYSTEMS_ICC_)int16_t _low_level_init(void) / Stop WDT (Watch Dog Timer) WDTCTL = WDTPW + WDTHOLD; return(1);#endiftContext g_sContext;extern void GrStringNumberCentered(const tContext *pContext, int16_t Number, uint8_t ui8Dot,uint8_t ui8X, uint8_t ui8Y);void main(void)volatile unsigned int i;volatile unsigned int vin_mv;_system_pre_init(); / 设置LCD Template_DriverInit(); Graphics_initContext(&g_sContext, &g_sTemplate_Driver); Graphics_setForegroundColor(&g_sContext, ClrBlack); / 设置前景为白色 Graphics_setBackgroundColor(&g_sContext, ClrWhite);/ 设置背景为黑色 Graphics_setFont(&g_sContext, &g_sFontCm16b);/ 设置字体 Graphics_clearDisplay(&g_sContext); / 清空显示页面/ 绘制LCD界面GrStringDraw(&g_sContext, =shuzidianya=, AUTO_STRING_LENGTH, 5, 17, OPAQUE_TEXT);GrStringDraw(&g_sContext, zhi: v, AUTO_STRING_LENGTH, 5, 34, OPAQUE_TEXT);GrFlush(&g_sContext); / 打开全局中断 _bis_SR_register(GIE);while(1)/ 转换成电压值(单位:mv)并乘于电阻分压倍数11,得到电阻分压电压,在加上射级跟随电压0.707,最后得到检测电压。vin_mv =(adc_filter*1.0*11)/ADC_RANGE*ADC_REF+707; / 擦除旧的LCD显示数据GrStringDrawCentered(&g_sContext, , AUTO_STRING_LENGTH, 70, 40, OPAQUE_TEXT);/ 显示电压并把电压换算成V(1V=1000mV)GrStringNumberCentered(&g_sContext,vin_mv,3,70,40);GrFlush(&g_sContext);/=数字转字符串函数=void Num2String(int16_t i16Number,uint8_t ui8Dot,uint8_t *p)int8_t i=0 ,ds=0;uint8_t pos=0,m=0;uint8_t DispBuff11=0;uint8_t tempBuff11=0; if(i16Number0) i16Number=-i16Number;/处理负数DispBuff0=-; /显示负号m=1;/跟踪缓存位置 else m=0; /等效为-清除负号 for(i=m;i=0;i-) /消隐无效0 if (DispBuffi=0) DispBuffi=0; else pos=i;/ 保存当前第一个有效值 break; tempBuff0 = DispBuff0;/ 保存对应的符号位 for(i=10;i=m;i-) / 高低位数据转换存储位置,高位在前,符号位不变 if(i 0) if(ui8Dot =pos-(ui8Dot-1);i-) tempBuffi+1=tempBuffi; tempBuffpos-(ui8Dot-1) = 0x2e;/ 小数点 else /if(ui8Dot pos+m) ds = ui8Dot - (pos+1-m);/ 移位距离(既需要增加几个0) for(i=pos;i=m;i-) tempBuffi+ds+2= tempBuffi;/这里+2是为了增加前置:“0.” for(i=0;ids;i+) tempBuffm+2+i=0x30;/这里 小数点后“补0操作” tempBuffm = 0x30;/ 添加前置“0.” tempBuffm+1 = 0x2e; for(i=0;i7;i+) if(tempBuffi!= ) *p=tempBuffi; *p+; else break; /-/GrStringDraw(const tContext *pContext, const char *pcString, long lLength,long lX, long lY, unsigned long bOpaque)void GrStringNumberCentered(const tContext *pContext, int16_t Number,uint8_t ui8Dot,uint8_t ui8X, uint8_t ui8Y)uint8_t String8=0;Num2String(Number,ui8Dot,String);GrStringDrawCentered(pContext, (const char*)String, AUTO_STRING_LENGTH,ui8X,ui8Y, OPAQUE_TEXT);#if defined(_TI_COMPILER_VERSION_) | defined(_IAR_SYSTEMS_ICC_)#pragma vector=ADC12_VECTOR_interrupt#elif defined(_GNUC_)_attribute_(interrupt(ADC12_VECTOR)#endifvoid ADC12ISR(void) / adc12a中断函数 static uint8_t index = 0; volatile uint8_t i; switch(_even_in_range(ADC12IV,34) case 0: break; /矢量0:无 case 2: break; /矢量2:ADC溢出 case 4: break; /矢量4:ADC时序溢出 case 6: /矢量6: ADC12IFG0 /Move results resultsindex = ADC12_A_getResults(ADC12_A_BASE, ADC12_A_MEMORY_0); index+; if(index = Num_of_Results) adc_filter = 0; for(i = 0; i= 4; index = 0; case 8: break; /Vector 8: ADC12IFG1 case 10: break; /Vector 10: ADC12IFG2 case 12: break; /Vector 12: ADC12IFG3 case 14: break; /Vector 14: ADC12IFG4 case 16: break; /Vector 16: ADC12IFG5 case 18: break; /Vector 18: ADC12IFG6 case 20: break; /Vector 20: ADC12IFG7 case 22: break; /Vector 22: ADC12IFG8 case 24: break; /Vector 24: ADC12IFG9 case 26: break; /Vector 26: ADC12IFG10 case 28: break; /Vector 28: ADC12IFG11 case 30: break; /Vector 30: ADC12IFG12 case 32: break; /Vector 32: ADC12IFG13 case 34: break; /Vector 34: ADC12IFG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论