|
SPWM波在MSP430F5529上的实现与调节
[复制链接]
SPWM波的定义和生成方法在这里就不多说了,本文主要说SPWM波在单片机上的实现,以及如何调节滤出后的正弦波的频率及幅度。
先弄清楚SPWM在单片机上如何产生,比如你要输出100HZ的SPWM正弦波,每个周期100个点,则定时器B的中断频率为100*100=10K,用于载波(定时器A)的PWM频率应>=10K(这里我建议载波为1M,因为定时器的配合问题会有+-1的误差,所以载波尽量的大则滤出的正弦波的波形越好)。
通过软件,你先得到100个点的正弦波采样值,你可以用定时器A来产生1MHZ的PWM,然后用定时器B,做定时器中断,10KHZ的频率,每次中断,就把一个采样值赋值给定时器A的输出通道:CCRx。然后不停的循环,每中断一百次,就输出1个波。不停的循环就不停的输出,那么PWM输出端,经过滤波后(外部滤
#include "SPWM.h"
/*============================================================================
* 功能 : 产生单路SPWM波
* 输入 : 无
* 输出 : P1.4
* 注意 : 定时器也为TA1.1;载波频率为126.26K;;默认正弦频率为100HZ,幅度未知
*============================================================================*/
//初始化1路
void SPWM_1Way_Init(void)
{
P1SEL |=BIT4;
P1DIR |=BIT4;
//P1DS |=BIT4; //全力驱动
P1OUT &=~BIT4;
spwm_i=0;
TA0CCR0 =198; //载波126.26KHZ
TA0CCR3 =Lab1[spwm_i];
TA0CCTL3 =OUTMOD_7;
TA0CTL =TASSEL_2+MC_1+TACLR; //选择时钟为SMCLK,UP模式
P2SEL |=BIT0;
P2DIR |=BIT0;
P2OUT &=~BIT0;
TA1CCR0 =2499; //25000000/(100*100)=2500:100Hz,100个点:10KHZ(时间不太准我做了些补偿)
TA1CTL =TASSEL_2+MC_1+TACLR; //选择时钟为SMCLK,UP模式
TA1CTL |= TAIE; //开启中断
__enable_interrupt(); //开启总中断
}
//输出1路
void SPWM_1Way_Set_Freq(unsigned int freq)
{
unsigned long freq_num;
freq_num=250000/(freq)-1;
TA1CCR0 =freq_num;
}
程序代码如下:
MSP430F5529的SPWM_01.zip
(65.89 KB, 下载次数: 59)
|
|