工具/软件:Code Composer Studio
我是 MSP430G2553的初学者、我必须生成载波频率(三角形)为2.5kHz 的 SPWM、调制频率为50Hz (正弦)、调制指数为0.9、我尝试通过在 CCSV5中编写以下代码(如下所示)来生成 SPWM 但是、它没有为我提供所需的输出。 有人能不能帮助我弄清楚这一点。
#include
#define pwmPeriod 400//载波2.5kHz、基准50Hz。 PWM 周期为0.4ms。
const unsigned int phalfcycle[25]={764,787,809,830,871,887,900,911,921,927,930,927,9921,911,900,887,871,830,809,787,764};
unsigned int pulsecounterA0 = 0;
unsigned int pulsecounterA1 = 0;
void main (void)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
//Calibrate DCO for 1MHz operation
BCSCTL1 = CALBC1_1MHz;
DCOCTL = CALDCO_1MHz;
P1OUT &= 0x00;//将所有引脚设置为低电平
P2OUT &= 0x00;
P1DIR |= BIT2 + BIT6;// PWM 输出
P2DIR |= BIT1 + BIT2;
P1SEL |= BIT2;
P2SEL |= BIT1;
TACCR0 = pwmPeriod - 1;//将 PWM 周期设置为0.4ms、SMCLK 的400-1个时钟周期
TA1CCR0 = pwmPeriod - 1;
TACCTL0 = CCIE;//为 CCR0启用计时器 A0中断
TA1CCTL0 = CCIE;
TACCTL1 = OUTMOD_2;//针对计时器 A0 CCR1复位/置位
TA1CCTL1 = OUTMOD_6;
TACTL = tassel_2 + MC_1 + TACLR;// Timer_A0控制寄存器、SMCLK = 1MHz、上行模式。 启动计时器
TA1CTL = tassel_2 + MC_1 + TACLR;
_BIS_SR (LPM0_Bits + GIE);//输入 LPM0、带中断
}
//计时器 A0中断服务例程
//#pragma 是一个包罗万象的预处理器指令、用于扩展预定义指令尚未涵盖的编译器的功能。
//在此代码中,编译器(和链接器)被告知我们将为 TIMER0_A0_VECTOR 创建 ISR。
#pragma vector=TIMER0_A0_VECTOR
_interrupt void Timer_A0 (void)
{
//TACCTL1 = OUTMOD_7;
IF (pulsecounterA0 < 25)
{
TACCR1 = phalfcycle[pulsecounterA0];
pulsecounterA0 = pulsecounterA0 + 1;
}
其他
{
P1SEL ^=(BIT2 + BIT6);
pulsecounterA0 = 0;
}
}
//计时器 A1中断服务例程
//#pragma 是一个包罗万象的预处理器指令、用于扩展预定义指令尚未涵盖的编译器的功能。
//在此代码中,编译器(和链接器)被告知我们将为 Timer1_A0_vector 创建 ISR。
#pragma vector=Timer1_A0_vector
_interrupt void Timer_A1 (void)
{
IF (pulsecounterA1 < 25)
{
TA1CCR1 = phalfcycle[pulsecounterA1];
pulsecounterA1 = pulsecounterA1 + 1;
}
其他
{
P2SEL ^=(BIT1 + BIT2);
pulsecounterA1 = 0;
}
}