timerB调pwm波

[复制链接]
2346|38
 楼主| zhaoxqi 发表于 2016-4-12 19:35 | 显示全部楼层 |阅读模式
可是怎么也出不来?求解?
heweibig 发表于 2016-4-12 19:38 | 显示全部楼层
详细说说,timerA呢
 楼主| zhaoxqi 发表于 2016-4-12 19:40 | 显示全部楼层
用timerA能完美实现,但timerB却不行,即便是TI的例程也不行,哪位大神给解释一下啊
jiaxw 发表于 2016-4-12 19:42 | 显示全部楼层
看看代码把
 楼主| zhaoxqi 发表于 2016-4-12 19:44 | 显示全部楼层
#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
}
huangchui 发表于 2016-4-12 19:47 | 显示全部楼层
这个程序和官方例程一样啊............那就要看看你开发板的连接了..........会不会有影响啊.........
zhenykun 发表于 2016-4-12 19:49 | 显示全部楼层

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信号周期的同步更新。

评分

参与人数 1威望 +6 收起 理由
dirtwillfly + 6 赞一个!

查看全部评分

zhanghqi 发表于 2016-4-12 19:52 | 显示全部楼层
huangchui 发表于 2016-4-12 19:47
这个程序和官方例程一样啊............那就要看看你开发板的连接了..........会不会有影响啊.........
...

用timera没问题,就是timerb不行,弄了一下午了
huangchui 发表于 2016-4-12 19:55 | 显示全部楼层
知道啊..............你的开发板上timerB上是怎么连接的建议看一下啊........或者在程序里加个时钟初始化试试.........可以把自己的时钟源输出来观察一下看有没有啊
jiahy 发表于 2016-4-12 19:58 | 显示全部楼层
io口没有配置吧?
shimx 发表于 2016-4-12 20:04 | 显示全部楼层
选择的是pwm输出的?
jiaxw 发表于 2016-4-12 20:06 | 显示全部楼层
楼主的问题解决了吗?你可以单步调试检查一下Timer_B counter有没有变化
liliang9554 发表于 2016-4-12 20:09 | 显示全部楼层
资料的话还是得参考官方的用户手册:http://wenku.baidu.com/view/fb3c251e59eef8c75fbfb364.html
午夜粪车 发表于 2016-4-12 20:12 | 显示全部楼层
可以试试这个例程,如果还没反应,就是硬件问题
#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);
}
 楼主| zhaoxqi 发表于 2016-4-12 20:16 | 显示全部楼层
嗯,我知道了,多谢大家哈
vibra2016 发表于 2016-4-13 21:46 | 显示全部楼层
zhenykun 发表于 2016-4-12 19:49
Timer_B与Timer_A不同之处:
1 Timer_B计数长度为8位,10位,12位和16位可编程,而Timer_A的计数长度固定 ...

楼上说的是,timerA与timerB的区别是需要注意的。
1988020566 发表于 2016-4-14 22:18 | 显示全部楼层
楼主进入中断了吗
pmp 发表于 2016-4-14 22:19 | 显示全部楼层
最好的资料就是,MSP430X1XX Family User's Guide

这个例程是可以工作的,单步检查一下Timer_B counter有没有变化
i1mcu 发表于 2016-4-14 22:20 | 显示全部楼层

#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);
}
51xlf 发表于 2016-4-14 22:20 | 显示全部楼层
硬件问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

808

主题

10636

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部