基于MSP430F149的高精度低功耗电能消耗计量装置_第1页
基于MSP430F149的高精度低功耗电能消耗计量装置_第2页
基于MSP430F149的高精度低功耗电能消耗计量装置_第3页
基于MSP430F149的高精度低功耗电能消耗计量装置_第4页
基于MSP430F149的高精度低功耗电能消耗计量装置_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、山东科技大学电子学院通信工程专业方向课程设计年级学号: * 姓 名:* 指导教师: * 设计时间: 2015.9.72015.9.20 目录摘要3关键字31目的与内容42硬件系统设计42.1电压采样方案52.2电流采样方案62.3电压、电流有效值测量方案63单元模块设计原理73.1电压采样电路73.2电流采样电路83.3电流电压测量电路83.4短信模块93.5过流报警和过流保护模块103.6防窃电模块103.7智能电能表与电脑的通信114、总的电路原理图及仿真输出波形125、系统特点与性能126、心得体会13参考文献 15附录16摘要本系统以MSP430F149单片机为控制核心,设计并制作了高

2、精度低功耗电能消耗计量装置。该系统硬件电路简单稳定,可靠性较高;该系统由阻容降压供电电路,电压测量电路,电流测量电路,显示电路等部分组成。电压测量部分是220v电压经过变压器降压后经过整流桥得到1.7v半波电压,输入单片机之后经采样和数据处理,可得到电压的峰值,周期,频率,有效值等参数;电流参数测量电路是采用了50A/62.5mA互感器将负载上的大电流转换成较小的电流,并将小电流通过定值电阻,电阻两端的电压输入单片机从而计算得到电流峰值,有效值等参数;采用的是全球鹰SIM900A V3.7模块,固定时间给用户发送短信,让用户了解目前耗电情况。题目中要求的参数均经单片机计算输出到OLED液晶屏模

3、块上予以显示。关键词:MSP430F149 低功耗 ADC采样SIM900A V3.7模块1目的与内容 随着国民经济的不断发展,电力已经成为国家的最重要能源。长期以来,我国生产的交流电度表均为感应式机械电度表,几十年来不得不采用人工抄读电表的原始方式。这种方法不但劳动强度大、效率低,而且还会存在抄表不到位、估抄、漏抄、错抄、错算及抄表周期长等问题,对窃电的防治更无从谈起。在社会走向信息化,网络化,电力系统大踏步现代化的今天,手工抄表更是与无人值班等高度的自动化形成了鲜明对比,成为制约供电系统现代化管理的一大障碍。正是由于以上背景,智能电能表应运而生。2硬件系统设计由民用单相电的火线和零线接入电

4、能表接入口,在火线入口处接有一个继电器,用于过流(短路)保护。火线在电表内分成并联的两路:一路经过变压器变为双6V,然后经过峰值检波电路,将交流变为直流,然后经过分压电路分压,通过IAP15F2K61S2单片机AD口采集,得到电压数据;另一路通过电流互感器,感应出交流电流,通过放大电路和峰值检波电路后,通过IAP15F2K61S2单片机的AD口采集数据。然后通过OLED液晶屏将数据显示出来。具体如下框图1所示。系统可以将用户的电压、电流以及耗电量显示出来。另外,本系统还带有过流报警与过流保护装置、防窃电装置、短信通知用户每月耗电情况功能以及能够实时的将电表状态及数据发送到电网公司电脑终端的功能

5、。2.1电压采样方案 方案一:直接在电网中并入1M的电阻采集电压信号,串入一段小电阻铜丝,再加差放采集电流信号。该方案成本较低,但是采集电路会污染电网,不能使用。 方案二:采用光耦芯片HCNR200对电网进行耦合采集。但是光耦芯片较为昂贵,抗高压的能力不足,在电网的电压或者电流较大情况下,测量将受到限制。 方案三:采用变压器降压后在用大电阻分压,分压后得到适合ADC采样输入电压,经ADC转换后得到数字信号,最后按比例还原成原来的被测电压的大小。综上所述,我们选用了方案三。2.2电流采样方案 方案一:直接在被测用电器上串联小阻值大功率电阻,通过测量小阻值电阻两端的电压从而测得电路中的电流。次方案

6、的测量电阻的消耗功率大,同时会是测量系统连上单相电的火线,使得整个系统有安全隐患。 方案二:直接在被测用电器上串联小阻值大功率电阻,小阻值电阻两端的电压加给光电耦合器,用光电耦合法测量电路中的电流,起到电器隔离的作用,使得测量系统安全可靠,但光电藕线性度不是很高,而且易受到干扰。 方案三:采用仪用精密高线性度交流互感器测量交流电流,线性度高,安装简单,调试方便,同时还能起到电气隔离的作用,安全可靠。通过以上方案的比较,显然选择方案三是三个方案中最好的。2.3电压、电流有效值测量方案 方案一:采用普通峰值检波电路,实现电压、电流峰值的采集,再根据正弦波峰值和有效值的转换关系,得出有效值。此方案简

7、单,易于实现,但是此电路会使用二极管来半波整流,二极管上会有压降,从而引入误差,另外,检波的值和前端峰值不成线性比例关系,测量困难。方案二:由正弦波与基准电压相比较得到的脉宽再和基准电压通过相关公式算出有效值。 图3 它的主要优点是无需A/D转换就能快速测量交流电压有效值,且能消除直流分量对测量结果的影响。但是其测量值只在较小范围内线性,不能符合本题0到20V的测量要求。 方案三:采用精密峰值检波电路,电路中运用跟踪和保持模式对正弦波精密采集,克服了方案一不线性的缺陷,且测量值精确,符合本题要求。综上所述,我们选取方案三。3、单元模块设计原理3.1电压采样电路 电压采样电路是先通过变压器降压后

8、,再用分压电阻网络采样被测电压。电路中采用了变压器起到了电气隔离的作用,系统安全,其电路如图 1 图43.2电流采样电路 用高线性度的仪用电流互感器来测量电路中的电流,起到电器隔离的作用,测量方便简洁,电路如Error! Reference source not found.,互感器感应产生的电流在电阻上的压降,经OP07运算放大器组成的电压更随器输出给ADC测量。 图53.3电流电压测量电路 把采样到的电流、电压信号经过AC_DC转换电路后得到对应的电压信号的真有效值,把真有效值信号输入到ADC就能测量其大小,电路图如 图 图6其中DCV模块是交流转直流电路,其电路如 图 图 73.4短信模

9、块 采用的是全球鹰SIM900A V3.7模块,固定时间给用户发送短信,让用户了解目前耗电情况。其中部分短信发送模块代码如下。 if(SIM_ONE=0&&Count>2400) PrintString1("AT+CMGF=1rn"); DelaySec(3);PrintString1("AT+CSMP=17,167,2,25rn");DelaySec(3);PrintString1("AT+CSCS="UCS2"rn");DelaySec(3);PrintString1("AT+C

10、MGS="00310035003700360034003200340036003000370031"rn");/此处修改为对方的电话号DelaySec(3);PrintString1(sms_text);/修改短信内容TX1_write2buff(0x1a);DelaySec(3);SIM_ONE=1; 3.5过流报警和过流保护模块 该模块采用的是声光报警方式。用户可以自行设置报警电流阈值,当电表监测到用户的电流大于该阈值的时候,警示灯会立即点亮、报警声响起,与此同时,控制火线的继电器会断开火线,使用户财产不会遭受进一步损失。3.6防窃电模块 系统采用多种方法来防

11、止窃电行为的发生。第一,本系统时刻监测着电表两端的电压值,一旦有窃电行为,电表两端电压接近零伏,本装置就会发送信息岛电脑终端;第二,本系统采用在零线上接一个氖管,一旦出现将零火线反接的窃电行为时,氖管就会发光,提示有窃电行为发生。3.7智能电能表与电脑的通信为了方便管理和消除传统抄表的繁琐,我们自己编写了一款上位机,实现了智能电表与电网公司的电脑进行通信的功能。系统能够将用户的耗电情况实时的传输到电脑的软件终端,并且可以将是否有窃电行为显示到电脑上,能够及时的预防窃电行为的发生。上位机软件界面如下图8所示。 图84、总的电路原理图及仿真输出波形 电路原理图 5、系统特点与性能第一,功耗低,本系

12、统采用STC公司的低功耗单片机IAP15F2K61S2、OLED低功耗液晶屏,而且电路结构简单,功耗很低。第二,精度高,本系统充分利用IAP15F2K61S2的AD资源,数据的精度值得信赖。第三,实现了人工智能,我们利用准确计时模块,以固定时间间隔给用户发送信息,通知用户本月耗电情况,并提醒用户计时缴电费,以免停电。第四,过流报警与过流保护,一旦用户的家用电器发生短路,电表会及时断开火线,以免用户财产遭受进一步损失。第五,防窃电功能,本系统实现多种防窃电方法。第一,本系统时刻监测着电表两端的电压值,一旦有窃电行为,电表两端电压接近零伏,本装置就会发送信息到电脑终端,通知电网管理人员;第二,本系

13、统在穿过电流互感器的电线上加了氖管,如果有反接零火线的窃电行为,氖管就会点亮。本设计实现了对电网质量的测试,利用互感器对电流,电压信号进行信号采集,用多种方法实现对电压、电流、功率的测试,经过理论推理,计算出电压有效值,电流有效值,负载功率,电网阻抗等,整个系统原理较为简单易于实现,测试结果精度较高。利用SIM900A模块,实现了固定时间给用户发送短信的功能,使用户能够及时了解本月耗电情况,并及时缴电费以免被停电。并编写了上位机,实现了智能电表与电脑的通信,极大方便了电网公司的管理。本系统的设计充分利用了MSP430F149单片机的资源,其中包括单片机的3路AD口,3个定时器T0、T1和T2,

14、2路外部中断,以及单片机的2个串口通讯。6、心得体会做这个系统的设计不仅是对自己过去的所学的知识做一个总结,同时也增强了自己的动手能力。它不仅是一门文化课程,教会了我们科学技术,也是一门人生课程。我们学到了许多在课堂上无法学到的东西。无论遇到怎样失败,我们都要从失败中爬起,哪怕再失败。这是我们学习这门课程十分宝贵的知识。  我们的设计包含了单片机技术,单片机技术是现在的热门技术,单片机的应用改变了传统的设计思路,以前构建一个系统不仅需用很多的数字模拟器件或者电路单元来构建,而且制作的东西还存在可靠性差、缺乏灵活性、维护不便、成本高、无法实现智能化等诸多缺点。单片机的应用解决

15、了很多问题,现在只要写一个软件,通过单片机和一些简单的外接电路就可以实现具有很多功能的、而且具有智能化的系统,同时可方便升级维护。所以单片机的应用广泛,在日常生活和生产中占用重要位置。我们在使用单片机技术后也深深的体会到其强大的功能,所以我们意识到掌握好单片机技术是电子专业学生必须的。对英语知识和专业英语的学习,掌握了外文阅读和外文翻译的能力,在外文翻译和查阅外文资料时候可以得心应手;通过C语言的学习,在编程的时候也不感觉到非常棘手;计算机知识的学习,使我能够熟练使用多种最基本的计算机相关软件和专业软件的使用方法,包括基本的Windows办公软件,还有一些专业软件,如Protel99、Alti

16、um Designer等。同时,我们作为一个团队,我们感受到了团队精神的重要。团结是整个团队的凝聚力。在完成这个项目是,需要小组所有成员的共同努力,单凭个人的力量是无法完成的。而每个人的能力都是不同的,我们要根据每个人的实际情况进行分工。力求其在指定时间里完成任务,这样才能保证任务的顺利完成。通过以上的设计过程,我们不但在知识上收获了,而且发现了自己的一些不足之处:对以前所学过的知识理解得不够深刻掌握得不够牢固。通过这次设计把知识温故知新。同时,我们也对自己的动手能力有所锻炼,而且一次成功的经历给我增添了不少的信心。在以后的时间里,我将继续努力学习,除此之外,我还将培养自己的动手能力,常动手,

17、把所学的理论知识与实践相结合。我相信长期坚持之后一定会有更大的提升!在此我们还要感谢在这次设计中所有给予我们帮助的人们,谢谢你们!参考文献【1】谢自美 电子线路设计实验测试武汉:华中理工大学出版社 2000年第二版【2】童诗白 华成英 模拟电子技术基础 高等教育出版社【3】邱关源 电路高等教育出版附录#include <msp430f169.h>#include <math.h>#define CPU_F (double)8000000) /External OSC#define delay_us(x) _delay_cycles(long)(CPU_F*(double

18、)x/1000000.0)#define delay_ms(x) _delay_cycles(long)(CPU_F*(double)x/1000.0)#define DataPort P4OUT#define uchar unsigned char#define uint unsigned int#define ulong unsigned long#define RS_CLR P5OUT &= BIT5 /RESET RS#define RS_SET P5OUT |= BIT5 /SET RS#define RW_CLR P5OUT &= BIT6 /RESET RW#de

19、fine RW_SET P5OUT |= BIT6 /SET RW#define EN_CLR P5OUT &= BIT7 /RESET E#define EN_SET P5OUT |= BIT7 /SET E#define PSB_CLR P5OUT &= BIT0 /RESET PSB Serial #define PSB_SET P5OUT |= BIT0 /SET PSB,Parallel#define RST_CLR P5OUT &= BIT1 /RESET RST#define RST_SET P5OUT |= BIT1#define Num_of_Resu

20、lts 200#define Time_interval 30 /微秒static unsigned int index1,index2;/static unsigned int A0resultsNum_of_Results; /static unsigned int A1resultsNum_of_Results;static unsigned int VoltageNum_of_Results; static unsigned int CurrentNum_of_Results;static uchar TransOverFlag = 1;static unsigned int peri

21、odN;static unsigned int index = 0;void Clock_Init() uchar i; BCSCTL1&=XT2OFF; /Turn XT2 BCSCTL2|=SELM1+SELS; /MCLK:8MHZ,SMCLK:8MHZ do IFG1&=OFIFG; /Clear XT2 Error Flag for(i=100;i>0;i-) ; while(IFG1&OFIFG)!=0); /Wait For XT2 IFG1&=OFIFG;void Clock_Init_Inc() / DCOCTL = DCO0 + DCO

22、1 + DCO2; / Max DCO / BCSCTL1 = RSEL0 + RSEL1 + RSEL2; / XT2on, max RSEL DCOCTL = 0x60 + 0x00; /DCO 3MHZ,3030KHZ BCSCTL1 = DIVA_0 + 0x07; BCSCTL2 = SELM_2 + DIVM_0 + SELS + DIVS_0;void WDT_Init() WDTCTL = WDTPW + WDTHOLD; /Stop WDT/*/初始化IO口子程序/*void Port_init()P4SEL = 0x00; P4DIR = 0xFF; /DATA PORT

23、P5SEL = 0x00; P5DIR|= BIT5 + BIT6 + BIT7; /SET Control PIN MODE->OUT/*/显示屏命令写入函数/*void LCD_write_com(unsigned char com)RS_CLR;RW_CLR;EN_SET;DataPort = com; /WRITE COMMANDdelay_ms(5);EN_CLR;/*/显示屏数据写入函数/*void LCD_write_data(unsigned char data)RS_SET;RW_CLR;EN_SET;DataPort = data; /WRITE DATAdelay_

24、ms(5);EN_CLR;/*/显示屏清空显示/*void LCD_clear(void)LCD_write_com(0x01); /Clear SCREENdelay_ms(5);/*/显示屏字符串写入函数/*void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) if (y = 0) LCD_write_com(0x80 + x); /THE FIRST ROW else LCD_write_com(0xC0 + x); /THE SECOND ROW while (*s) LCD_write_data( *

25、s); s +; /*/显示屏单字符写入函数/*void LCD_write_char(unsigned char x,unsigned char y,unsigned char data) if (y = 0) LCD_write_com(0x80 + x); /THE FORST ROW else LCD_write_com(0xC0 + x); /THE SECOND ROW LCD_write_data( data);/*/显示屏初始化函数/*void LCD_init(void) LCD_write_com(0x38);/显示模式设置 delay_ms(5); LCD_write_c

26、om(0x08);/显示关闭 delay_ms(5); LCD_write_com(0x01);/显示清屏 delay_ms(5); LCD_write_com(0x06);/显示光标移动设置 delay_ms(5); LCD_write_com(0x0C);/显示开及光标设置 delay_ms(5);/*求最大值*/unsigned int getMax(unsigned int temp) unsigned int max=temp0; for(unsigned int i=0;i<Num_of_Results;i+) if(max<tempi) max = tempi; in

27、dex1 = i; if(tempi+1<max) break; return max;/*转换最大值至电压电流*/float maxTOv(unsigned int vParameter) float transResult = vParameter/100.5; return transResult; float maxTOi(unsigned int iParameter) float transResult = iParameter/10.5; return transResult; /*获得周期*/ unsigned int getPeriod(unsigned int tem

28、p) unsigned int periodN; unsigned int i,num=tempindex1; for(i=index1;i<Num_of_Results;i+) if(num>tempi) num = tempi; index2 = i; periodN = 4*(index2 - index1); return periodN; /*获得相位差*/float PhaseDiff(unsigned int curTemp) float difference; unsigned int i,num=curTempindex1; for(i=index1;i<N

29、um_of_Results;i+) if(num<curTempi) num = curTempi; index2 = i; if(curTempi+1<num) break; difference = (index2 - index1)/periodN; return difference;/*数字周期转换至模拟周期*/float transTOperiod(unsigned int temp) return temp/Time_interval;/*数值提取至数组用以显示,*/void deltaExtract(float temp,uint a) unsigned int t

30、emp1; if(temp=0) return ; else temp1 = (unsigned int)temp*1000; a2 = temp1%10; /取个位 a1 = (temp1/10)%10; /取十位 a0 = (temp1/100); /取百位 /*数值转换至ASCII*/void transTOASCII(unsigned int temp,unsigned int num) for(unsigned int i=0;i<num-1;i+) tempi+='0' tempnum-1 ='0'void main(void) /*初始化*/

31、 WDT_Init(); /Set WDT Clock_Init(); /Clock Initialize Port_init(); /PORT Initialize delay_ms(100); /delay 100ms LCD_init(); /LCD Initialize LCD_clear(); /clear screen LCD_write_str(0,0,"OSC"); delay_ms(1000); /*AD转换*/ P6SEL = 0x03; / Enable A/D channel inputs ADC12CTL0 = ADC12ON+MSC+SHT0_8

32、 + REFON +REF2_5V; / Turn on ADC12, extend sampling time / to avoid overflow of results ADC12CTL1 = SHP+CONSEQ_3; / Use sampling timer, repeated sequence ADC12MCTL0 = INCH_0+SREF_1; / ref+=2.5V, channel = A0 ADC12MCTL1 = INCH_1+EOS+SREF_1; / ref+=2.5V, channel = A1 end seq ADC12IE = 0x02; / Enable A

33、DC12IFG.3 ADC12CTL0 |= ENC; / Enable conversions ADC12CTL0 |= ADC12SC; / Start conversion _EINT(); /global interrupt while(TransOverFlag); /wait for conversion over LCD_write_str(0,0,"ADC"); delay_ms(1000); /*处理数据 */ /* for(unsigned i = 0;i<Num_of_Results;i+) Voltagei=A0resultsi; Curren

34、ti=A1resultsi; */ unsigned int vMaxNum; unsigned int cMaxNum; float MaxVol; float MaxCur; float POWER; float PERIOD; vMaxNum = getMax(Voltage); /电压电流最大值 cMaxNum = getMax(Current); MaxVol = maxTOv(vMaxNum); /电压峰值 MaxCur = maxTOi(cMaxNum); /电压峰值 float delta; float phaseDiff; float avoltage; float acurrent; float pPara; periodN = getP

温馨提示

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

评论

0/150

提交评论