打印

我想用msp430的timerB调pwm波形,可是怎么也出不来?求解??

[复制链接]
2214|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
rowang99|  楼主 | 2013-8-10 15:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我想用msp430的timerB调pwm波形,可是怎么也出不来?求解??
用timerA能完美实现,但timerB却不行,即便是TI的例程也不行,哪位大神给解释一下啊,谢谢了

#include  <msp430x14x.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P4DIR |= 0x7e;                            // P4.1 - P4.6 output
  P4SEL |= 0x7e;                            // P4.1 - P4.6 TBx options
  TBCCR0 = 512-1;                           // PWM Period
  TBCCTL1 = OUTMOD_7;                       // CCR1 reset/set
  TBCCR1 = 384;                             // CCR1 PWM duty cycle
  TBCCTL2 = OUTMOD_7;
  TBCCR2 = 128;
  TBCCTL3 = OUTMOD_7;
  TBCCR3 = 64;
  TBCCTL4 = OUTMOD_7;
  TBCCR4 = 32;
  TBCCTL5 = OUTMOD_7;
  TBCCR5 = 16;
  TBCCTL6 = OUTMOD_7;
  TBCCR6 = 8;
  TBCTL = TBSSEL_2 + MC_1;                  // SMCLK, up mode

  _BIS_SR(CPUOFF);                          // Enter LPM0
}

相关帖子

沙发
rowang99|  楼主 | 2013-8-10 15:08 | 只看该作者
有木有人啊???

使用特权

评论回复
板凳
dirtwillfly| | 2013-8-10 15:27 | 只看该作者
有人的,我看看

使用特权

评论回复
地板
hxfxt| | 2013-8-10 15:30 | 只看该作者
本帖最后由 hxfxt 于 2013-8-10 15:40 编辑

这个程序和官方例程一样啊............那就要看看你开发板的连接了..........会不会有影响啊.........

使用特权

评论回复
5
dirtwillfly| | 2013-8-10 15:59 | 只看该作者
找了找,发现介绍Timer_B的还真少。

Timer_B与Timer_A不同之处:
1 Timer_B计数长度为8位,10位,12位和16位可编程,而Timer_A的计数长度固定为16位。
2 lTimer_B中没有实现Timer_A中的SCCI寄存器位的功能。
3Timer_B在比较模式下的捕获/比较寄存器功能与Timer_A不同,增加了比较锁存器
4 有些型号芯片中的Timer_B输出实现了高阻输出
5 比较模式的原理稍有不同:在Timer_A中, CCRx寄存器中保存与TAR相比较的数据;而在Timer_B中, CCRx寄存器中保存的是要比较的数据,但并不直接与定时器TBR相比较,而是将 CCRx送到与之相对应的锁存器之后,由锁存器与定时器TBR相比较。从捕获/比较寄存器向比较锁存器传输数据的时机也是可以编程的,可以是在写入捕获/比较寄存器后立即传输,也可以是由一个定时事件来触发。
6 Timer_B支持多重的、同步的定时功能;多重的捕获/比较功能;多重的波形输出功能(比如PWM信号)。而且,通过对比较数据的两级缓冲,可以实现多个PWM信号周期的同步更新。

使用特权

评论回复
6
rowang99|  楼主 | 2013-8-10 16:13 | 只看该作者
hxfxt 发表于 2013-8-10 15:30
这个程序和官方例程一样啊............那就要看看你开发板的连接了..........会不会有影响啊......... ...

用timera没问题,就是timerb不行,弄了一下午了

使用特权

评论回复
7
rowang99|  楼主 | 2013-8-10 16:13 | 只看该作者
dirtwillfly 发表于 2013-8-10 15:59
找了找,发现介绍Timer_B的还真少。

Timer_B与Timer_A不同之处:

这个我也发现了,谢谢

使用特权

评论回复
8
hxfxt| | 2013-8-10 18:06 | 只看该作者
rowang99 发表于 2013-8-10 16:13
用timera没问题,就是timerb不行,弄了一下午了

我知道啊..............你的开发板上timerB上是怎么连接的建议看一下啊........或者在程序里加个时钟初始化试试.........可以把自己的时钟源输出来观察一下看有没有啊

使用特权

评论回复
9
mmbs| | 2013-8-11 10:17 | 只看该作者
io口没有配置吧?

使用特权

评论回复
10
mmbs| | 2013-8-11 10:17 | 只看该作者
选择的是pwm输出的?

使用特权

评论回复
11
dirtwillfly| | 2013-8-11 23:57 | 只看该作者
楼主的问题解决了吗?你可以单步调试检查一下Timer_B counter有没有变化

使用特权

评论回复
12
dirtwillfly| | 2013-8-11 23:58 | 只看该作者
资料的话还是得参考官方的用户手册:http://wenku.baidu.com/view/fb3c251e59eef8c75fbfb364.html

使用特权

评论回复
13
dirtwillfly| | 2013-8-12 22:19 | 只看该作者
楼主可以试试这个例程,如果还没反应,就是硬件问题
#include <msp430.h>

int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P4DIR |= 0x06; // P4.1 and P4.2 output
P4SEL |= 0x06; // P4.2 and P4.2 TB1/2 otions
TBCCR0 = 128; // PWM Period/2
TBCCTL1 = OUTMOD_6; // CCR1 toggle/set
TBCCR1 = 32; // CCR1 PWM duty cycle
TBCCTL2 = OUTMOD_6; // CCR2 toggle/set
TBCCR2 = 96; // CCR2 PWM duty cycle
TBCTL = TBSSEL_2 + MC_3; // SMCLK, up-down mode

while(1);
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

9

帖子

0

粉丝