请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:MSP430G2553 #include #define pwmPeriod 1000 //载波为1kHz,基准为50Hz。 PWM 周期为1ms。 //const unsigned int phalfcycle[25]={200、223、245、266、287、 306、323、339、352、363、 371、377、380、380、377、 371、363、352、339、323、 306、287、266、245、223}; //const unsigned int phalfcycle[25]={100、123、145、166、187、206、 232、239、252、263、271、277、 280、280、277、271、263、 252、239、223、206、187、 16、145、123}; // const unsigned int phalfcycle[108]={312、328、344、360、372、340、356、372、304、320、336、368、384、400、416、432、448、464、464、462、 150、150、340、340、340、340、340、340、360、340、360、360、360、360、360、360、360、360、 //停止 WDT //针对1MHz 运行校准 DCO BCSCTL1 = CALBC1_1MHz; DCOCTL = CALDCO_1MHz; P1OUT &= 0x00; //将所有引脚设置为低 P2OUT &= 0x00; P1DIR |= BIT2 + BIT6; // PWM 输出引脚1.2和1.6已选择 P2DIR |= BIT1 + BIT2; P1SEL |= BIT2; P2SEL |= BIT1; TACCR0 = pwmPeriod - 1; //将 PWM 周期设置为400us、SMCLK TA1CCR0的400-1个时钟周期= pwmPeriod - 1; TACCTL0 = CCIE; //为 CCR0 TA1CCTL0 = CCIE 启用计时器 A0中断; TACCTL1 = OUTMOD_2; //针对计时器 A0 CCR1 TA1CCTL1 = OUTMOD_6进行复位/设置; TACTL = tassel_2 + MC_1 + TACLR; // Timer_A0控制寄存器(上变模式)正在启动定时器 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; } }
工具/软件:Code Composer Studio
大家好、我是 MSP430G2553和 CCSV5编码的初学者。 我尝试通过比较硬编码的正弦波和载波来生成 SPWM。 但是、根据我的代码、我无法在负周期内获得开关。
我是否可以提供特定的命令/语法来对载波进行电平转换,以便在比较这些值时也对正弦波的负半部分进行比较?

