求msp430g2553TimerA2输出PWM波的程序,现在只能用TimerA1产生一路pwm波,现在急需两路pwm波
Hardy Hu:
在P2.2与P2.4上输出PWM波形,周期为TACCR0/SMCLK,正平宽(TACCR0-TACCR1)/TACCR0,(TACCR0-TACCR2)/TACCR0
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P2DIR |= BIT2+BIT4; // P2.2 and P2.4 output
P2SEL |= BIT2+BIT4; // P2.2: TACCR1 output, P2.4: TACCR2 output
TACCR0 = 128; // PWM Period/2
TACCTL1 = OUTMOD_6; // CCR1 toggle/set
TACCR1 = 32; // CCR1 PWM duty cycle
TACCTL2 = OUTMOD_6; // CCR2 toggle/set
TACCR2 = 64; // CCR2 PWM duty cycle
TACTL = TASSEL_2 + MC_3; // SMCLK, up-down mode
_BIS_SR(LPM0_bits); // Enter LPM0
}
Peter_Zheng:
两路PWM的频率是否有要求?
Young Hu:
您好!
两路PWM信号之间有没有什么关系? 比如频率,占空比等等的。
另外,在2553中有两个Timer:Timer0_A3, Timer1_A3,其中两个timer的工作方式时一模一样的。
只不过在寄存器定义,引脚等方面有些差别。
Timer1_A3相应的寄存器定义可以在头文件中找到,可以根据您的程序填充相应的寄存器即可
SFR_16BIT(TA1IV); /* Timer1_A3 Interrupt Vector Word */
SFR_16BIT(TA1CTL); /* Timer1_A3 Control */
SFR_16BIT(TA1CCTL0); /* Timer1_A3 Capture/Compare Control 0 */
SFR_16BIT(TA1CCTL1); /* Timer1_A3 Capture/Compare Control 1 */
SFR_16BIT(TA1CCTL2); /* Timer1_A3 Capture/Compare Control 2 */
SFR_16BIT(TA1R); /* Timer1_A3 */
SFR_16BIT(TA1CCR0); /* Timer1_A3 Capture/Compare 0 */
SFR_16BIT(TA1CCR1); /* Timer1_A3 Capture/Compare 1 */
SFR_16BIT(TA1CCR2); /* Timer1_A3 Capture/Compare 2 */
Hardy Hu:
能不能说明一下您需要的两路PWM波是用在什么应用中有什么具体要求,比如频率,精度,两路之间是独立的呢还是有同步、互补、死区等关系?这样大家可以为您提供更好的方案
yun mu:
回复 Hardy Hu:
这个程序不能输出PWM波啊,现在急需两路占空比独立可调的pwm波(频率可以相同)
Hardy Hu:
回复 yun mu:
这就是输出PWM波的程序啥
#include <msp430g2553.h>
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P2DIR |= BIT2+BIT4; // P2.2 and P2.4 output
P2SEL |= BIT2+BIT4; // P2.2: TACCR1 output, P2.4: TACCR2 output
TACCR0 = 128; // PWM Period/2
TACCTL1 = OUTMOD_6; // CCR1 toggle/set
TACCR1 = 32; // CCR1 PWM duty cycle
TACCTL2 = OUTMOD_6; // CCR2 toggle/set
TACCR2 = 64; // CCR2 PWM duty cycle
TACTL = TASSEL_2 + MC_3; // SMCLK, up-down mode
_BIS_SR(LPM0_bits); // Enter LPM0
}