想通过CC430F5137自身的TA0定时器的CCR1、CCR2、CCR3进行输出3路占空比可调的PWM,同时将3路PWM信号通过IO口映射到P3.0、P3.1、P3.2的IO口具体代码如下:
uint8_t IintPWM(void)//PWM参数设置
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
PMAPPWD = 0x02D52; // Get write-access to port mapping regs //P3MAP0 = PM_TA0CCR0A; // Map CBOUT output to P1.6 P3MAP0 = PM_TA0CCR1A; P3MAP1 = PM_TA0CCR2A; P3MAP2 = PM_TA0CCR3A; // P3MAP3 = PM_NONE; P3MAP7 = PM_NONE; PMAPPWD = 0; // Setup Port Pins P3DIR |= BIT0+BIT1+BIT2; // P2.0,2,4,6,7 output P3SEL |= BIT0+BIT1+BIT2; // P2.0,2,4,6,7 Port Map functions // Setup TB0 TA0CCTL0 = OUTMOD_4; // CCR1 toggle/set TA0CCR0 = 256; // PWM Period/2 TA0CCTL1 = OUTMOD_6; // CCR1 toggle/set TA0CCR1 = 192; // CCR1 PWM duty cycle TA0CCTL2 = OUTMOD_6; // CCR2 toggle/set TA0CCR2 = 128; // CCR2 PWM duty cycle TA0CCTL3 = OUTMOD_6; // CCR3 toggle/set TA0CCR3 = 64; // CCR3 PWM duty cycle
TA0CTL = TASSEL_2 + MC_3 + TACLR; // SMCLK, up mode, clear TAR
__bis_SR_register(LPM3_bits); // Enter LPM3
__no_operation(); // For debugger
return 0;
}
占空比调节函数:
uint8_t SetPWMDUTY(uint16_t PWM_1,uint16_t PWM_2,uint16_t PWM_3) //3路PWM输出
{
TA0CCR1 = PWM_1; TA0CCR2 = PWM_2;
TA0CCR3 = PWM_3;
return 0;
}
但是发现在程序运行过程中,无法进行占空比调节,请问要如何才能实现在占空比可调节??
kqian0327:
你好,
你所谓的PWM不能调节是指的程序初始化以后不能调节还是初始化设置的时候就有问题呢?
还是你调节的速度过快?
通常调节是ok的,只是调节的瞬间会有一个PWM抖动过程。
e_tang lin:
回复 kqian0327:
是程序初始化后,无法调节。我是在按键有按下的情况下才调节的。应该不存在过快的