作者简介:陈古波(1975-),男,重庆人,主要从事实验教学工作.
【计算机与自动化】
基于单片机MSP430的正弦输出波形设计
Ξ
陈古波,向险峰,李 双
(重庆工学院电工电子技术实验中心,重庆 400050)
摘要:根据电力系统模拟测试继电保护的需要,采用MSP430单片机产生正弦信号来控制需要输
出的模拟量.介绍了该方法的硬件组成和软件编程,并给出了具体的程序.最后介绍了该设计在实际的测试系统中的应用.关 键 词:正弦波;MSP430F1611;在线编程;象限;继电保护中图分类号:TP21 文献标识码:A 文章编号:1671-0924(2006)08-0087-03
The Design of Sinusoidal W ave ’s Output B ased on SCM MSP 430
CHE N G u-bo ,XI ANG X ian-feng ,LI Shuang
(E lectrical &E lectronic T echnology Lab Center ,Chongqing Institute of T echnology ,Chongqing 400050,China )
Abstract :Based on demand of electric power system for simulated relay protection test ,SC M MC U (MSP430)is used to produce sinus oidal signal s o as to control the output of simulative variables.This paper introduces the hardware com ponents and s oftware programming and puts forward specific programs ,and final 2ly introduces the application of the design in actual testing systems.
K ey w ords :sinus oidal wave ;MSP430F1611;On-line programming ;quadrant ;relaying protection
0 引言
随着工业技术的迅猛发展,人们对电力的运行提出了更高的要求.要保证电力的运行可靠,必须配备先进的检测手段.以往检测电力设备,多采用模拟装置产生正弦信号进行调试,这种方法可控性不强,操作比较繁琐,无法实现自动化测试,精度也不能满足要求.本文中基于单片机MSP430的正弦输出波形设计,采用数字式的方式产生正弦信号,保证了输出的可控性和操作的简单性,能完全实现了自动化测试功能.本文中采用的TI 公司的MSP430单片机,由于指令少,编程语言采用C 语言编程(C430),具有在线编程的功能,可以大大缩短开发周期,降低开发成本.相对于系统机而言,基于单片机的设备由于携带方便,性能可靠,且具有价格优势,更适合于基层的检测调试.
1 正弦波的特征
正弦函数的表达式为y =A sin (ωt +θ
),由该函数表达式可以得知正弦函数有3个量:幅值A ,初始相位θ,角频率ω(转化为频率f ,其关系式为ω=2πf ).如果这3个量是确定的,正弦函数就只是一个与时间有关的周期函数.
2 单片机的选型
单片机选型主要应从以下几个方面入手:①单片机系列产品的完整性是否利于后续产品的升级;②其管脚能否兼容;③RAM 的空间容量;④程序空间的大小;⑤端口及中断的数量;⑥编程方式是否容易;⑦有无硬件乘法器.
参数的选择需要根据项目的要求而定,在笔者开发的这个项目中,选用的是TI 公司的MSP430F1611单片机,其主要参数、结构和功能如下:①低电源电压范围:1.8~3.6V ;②从等待到唤醒时间:6μs ;③基本时钟模块配置:
第20卷 第8期Vol.20 No.8重 庆 工 学 院 学 报
Journal of Chongqing Institute of T echnology
2006年8月Aug.2006
高速晶体(最高10MH z )、低速晶体(32768H z )、DC O 具有3/7个捕获/比较寄存器的16位定时器T imer-A3/T imer-B7;④两通道串行通信接口可用于异步与同步(软件选择US ART /SPI 模式);⑤具有一个硬件乘法器和12位A/D 转换器———ADC12;⑥2个具有中断功能的8位并行端口———P1和P2;⑦多达48K B 的F LASH ROM 和10K B RAM ;⑧具有串行在线编程和安全熔丝的程序代码保护功能.
3 项目的实现
3.1 硬件部分.由单片机MSP430的P1和P4口(
具有控制I/O 方向、输出、输入的功能)输出16位的正弦函数数值,经过D/A 转换,输出正弦波形.D/A 选用16位、有4路输出的DAC74.图1为该项目硬件框图:
图1 硬件实现电路框图
其中键盘为项目的功能选择部分,通过旋转编码器实
现数值输入,开入量采集为继电保护的触点引入处理电路,保护电路用于仪器出口出现故障时切断输出,D/A (DAC74)将单片机输出的数值转化为所需的正弦波形,滤波放大是将D/A 输出波形进行放大、平整光滑处理,功率模块是将小信号放大,目的是能够提供强负载的大电流、电压,通过外接高精度的检测仪表可以自动调节仪器的输出精度.3.2 软件部分.由于单片机处理的是数字信号,而正弦波是一个连续变化的模拟量,所以就必须对一个周期内的正弦波形进行点数选择(斩波处理).周期内选择的点数越多,得到的波形就越接近真实的波形;但另一方面,由于单片机处理的速度有限,点数如果选取过多,单片机就无法处理其它程序,进而导致死机.本文中在一个周期内(一个
周期360°)选择100点,即每隔3.6°计算一个正弦函数值,由
单片机中断送出.图2为该程序流程图.
由于单片机处理正弦函数的计算会耗去很长时间,
如果单片机一边中断送数,一边计算下一个点的正弦函数值,这样在速度响应上就会存在问题.因此该项目采用先计算好一个周期为100点的正弦函数值,存放在RAM 中,在中断送数的过程中只负责取出数据即可.根据正弦函数的特点有:
当0°ΦαΦ180° sin α=sin (180°-α
)当180°<α<360° sin α=-sin (360°-α)所以,只要0°ΦαΦ90°求出的函数值,周期内其它函数
值也就相应确定(在此用sinn[]数组存储以0.1°为步长、0°ΦαΦ90°的正弦函数值),其目的是为了节约单片机的程序
空间,如果以0.1°(分辩率)存储一个点(2个字节),90°需要
占用1.8K 字节,360°就需要占用7.2K 字节,这会对单片机的有限空间将造成极大浪费.
图2 MSP430输出正弦波形程序流程图
由于sinn[]数组只存储了0°ΦαΦ90°的函数值,所以在
求整个周期内的函数值时,需要判断该点所处的象限,再进行查表计算.以下为在RAM 中存放周期内100个点的正弦函数值的实现程序:
v oid zxcx w (long fz ,float g ,int zero )∥正弦函数初始相位判断及计算{ int n ,n0,t ;float g f ;xx1:∥计算初始相位0°~90°的正弦函数数组
n0=g f 310;∥初始点
for (n =0;n <100;n ++) ∥总点数为100,正弦波两个点之间相差3.6°, { t =n0+363n ; ∥而sinn[]存储的两个点间隔0.1°
if (t >900)g oto c11; ∥第1象限an[n]=0x7fff +zero +(fz 3sinn[t ]>>15);return ; c11: if (t >1800)g oto c22; ∥第2象限
t =1800-t ;an[n]=0x7fff +zero +(fz 3sinn[t ]>>15);return ;
c22: if (t >2700)g oto c33; ∥第3象限
t =t -1800;an[n]=0x7fff +zero -(fz 3sinn[t ]>>15);return ;
88重庆工学院学报
t=3600-t;an[n]=0x7fff+zero-(fz3sinn[t]>>15);return; c44:∥第1象限
t=t-3600;an[n]=0x7fff+zero+(fz3sinn[t]>>15);return;
}
}
v oid zxa(float vifa,float ga,int zeroa)∥A相正弦函数(幅值、相位、零点)
{
long a;
int n;∥满度为30000
a=vifa32003iF LASH-Valuea+0.5;∥iF LASH-Valuea为修正系数 zxcx w(a,ga,zeroa);
for(n=0;n<100;n++)
{bn1[23n]=an[n]>>8;
bn1[2
3n+1]=an[n];}
}
如果一个周期频率f=50H z,则T=1/f=20ms,根据项目要求在一个周期内单片机送出100个点,那么单片机每隔200μs就需送出一个点,下面为定时器中断定时间隔设定的程序.如果要改变周期的频率,只需改变CCR0的值即可,程序如下:
∥定时器timer-A设置
T ACT L=0x0214; ∥设timer-A时钟源为系统主时钟MC LK(10MHZ),0x0200
∥设timer-A为增记数模式,0x0010
∥设timer-A定时器清0,0x0004
CCT L0=CCIE; ∥中断允许
CCR0=2000; ∥定时器设定值,2000=200uS
为了得到连续的正弦波形,单片机在送数的过程不能被其他程序中断,只要当定时器的值满足设定值时,就按既定点的顺序送出正弦波的函数值.以下为中断函数程序:
#pragma vector=TI MERA0-VECT OR
interrupt v oid T imer-A0(v oid)∥定时器A中断函数
{
P5OUT=0X0F; ∥选A通道和W
P4OUT=bn1[n1];∥P4口输出高8位
n1++;
P1OUT=bn1[n1];∥P1口输出低8位
n1++;
if(n1>199)n1=0;∥送完100点后n1置0重新下一个周期送数
P6OUT=0XF0;∥DA片选变低
P6OUT=0XF7;
}
4 项目的应用
通过单片机实现正弦波的输出,外接电压、电流功率放大模块,就可方便地实现对电压、电流幅值的自由调节、频率大小的改变和相位的随意控制,可广泛应用于电力系统中的继电保护的测试.如可用于电流、电压、频率动作值测试,相位动作边界测试,触点动作时间的测试,整祖传动测试(瞬时故障、永久故障),低周减载测试等等.
参考文献:
[1] 胡大可.MSP430系列F LASH型超低功耗16位单片机
[M].北京:北京航空航天大学出版社,2001.
[2] 胡大可.MSP430系列单片机C语言程序设计与开发
[M].北京:北京航空航天大学出版社,2003:56-177.
[3] 魏小龙.MSP430系列单片机接口技术及系统设计实
例[M].北京:北京航空航天大学出版社,2002.
[4] 尹项根.电力系统继电保护原理与应用[M].武汉:华
中科技大学出版社,2001.
[5] 张举.微型机继电保护原理[M].北京:中国水利水电
出版社,2004.
(责任编辑 刘 舸)
98
陈古波,等:基于单片机MSP430的正弦输出波形设计