MSP430输出可调占空比的PWM波失败

2019-08-07 15:37发布

手中板子为launchpad 芯片为MSP430G2553
现想用定时器输出PWM占空比可调的波形,尝试多种办法,一直失败,我看过http://bbs.21ic.com/forum.php?mod=viewthread&tid=560476
这个帖子,里面是用TIMERB实现的PWM波调制,我会将我的结果发上来,大家帮我看看有什么问题
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
pluto55
1楼-- · 2019-08-07 20:50
一.这个实现的思路是:使用定时器的UP_MODE,配置CCIE的中断,在中断中对TA1CCR1进行更改,从面实现PWM波占空比的改变
//系统时钟配置为8Mhz,中断开启
        P2DIR |= 0x02;                            // P2.1  output
        P2SEL |= 0x02;                            // P2.1  配为定时器输出

        TA1CTL = TASSEL_2  + ID_3 + MC_1; //+ TAIE//  开启定时器   SMCLK, 8分频(1M) up mode
        TA1CCTL1 =  OUTMOD_7 + CCIE; //           // 工作模式7,使能CCR0中断,即最高优先级中断
        TA1CCR0 = 50;                             // PWM Period
        TA1CCR1 = 5;                              // 高电平时间
        while(1);

//中断代码:在中断中实现TA1CCR1在30和10之间的切换
#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer_A(void)
{
switch( TA1IV )
{
   case  2:
invert_flag_1 ^= 1;
   if(invert_flag_1)
   {       
                TA1CCR1 = 30;                              // 高电平时间
   }
   else
   {
                TA1CCR1 = 10;                              // 高电平时间
   }
                      break;                          // CCR1 not used
   case  4: break;                          // CCR2 not used
   case 10:break;
}
}

二.P2.1 的输出波形:
dirtwillfly
2楼-- · 2019-08-08 01:25
 精彩回答 2  元偷偷看……
pluto55
3楼-- · 2019-08-08 02:49
问题找到了,还是对TI的定时器寄存器没有足够熟悉
TA1CCTL1 =  OUTMOD_7 + CCIE; //           // 工作模式7,使能CCR0中断,即最高优先级中断
上面这句代码使能的是CCR1定时到的中断
而我的目的实现应该是使能CCR0定时到的中断,在中断中更改CCR1
故应该配置为
TA1CCTL0 = CCIE;
另外在中断中还应注意一点:
在更改CCR1更改PWM波时应该将CCR1设置尽量接近CCR0,因为MSP430进入中断需要时间,
有这样的可能性:配置的CCR1太小,在TAR1计数达到CCR1之后,CCR1的赋值才实现,这样波形会失败
1988020566
4楼-- · 2019-08-08 06:24
直接计数的
pluto55
5楼-- · 2019-08-08 09:59
遇到这样一个问题:MSP430的定时器输出为什么会不能直接输出PWM波?而是要等待一段时间?
        P1DIR |= 0x08;                            // P1.3  output
        P1SEL |= 0x08;                            // P1.3 配为定时器输出
        TA0CCTL2 = OUTMOD_7 ;         // 工作模式7,
        TA0CCR0 = 40-1;                             // PWM Period
        TA0CCR2 = 39;                              // 高电平时间

        TA0CTL = TASSEL_2 + MC_1;   开启定时器   SMCLK, up mode

波形如下:有办法把这7.4us去掉吗?

dirtwillfly
6楼-- · 2019-08-08 14:27
pluto55 发表于 2013-12-6 12:03
遇到这样一个问题:MSP430的定时器输出为什么会不能直接输出PWM波?而是要等待一段时间?
        P1DIR |= ...

额,有新的问题建议重新发帖。
原来的问题解决了就及时结贴。结贴方法:http://bbs.21ic.com/icview-442857-1-1.html
如果需要找我可以 @dirtwillfly ,这样我一上线就能看到:handshake

一周热门 更多>