打印

timerB调pwm波

[复制链接]
1701|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 | 只看该作者
看看代码把

使用特权

评论回复
5
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
}

使用特权

评论回复
6
huangchui| | 2016-4-12 19:47 | 只看该作者
这个程序和官方例程一样啊............那就要看看你开发板的连接了..........会不会有影响啊.........

使用特权

评论回复
7
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 赞一个!
8
zhanghqi| | 2016-4-12 19:52 | 只看该作者
huangchui 发表于 2016-4-12 19:47
这个程序和官方例程一样啊............那就要看看你开发板的连接了..........会不会有影响啊.........
...

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

使用特权

评论回复
9
huangchui| | 2016-4-12 19:55 | 只看该作者
知道啊..............你的开发板上timerB上是怎么连接的建议看一下啊........或者在程序里加个时钟初始化试试.........可以把自己的时钟源输出来观察一下看有没有啊

使用特权

评论回复
10
jiahy| | 2016-4-12 19:58 | 只看该作者
io口没有配置吧?

使用特权

评论回复
11
shimx| | 2016-4-12 20:04 | 只看该作者
选择的是pwm输出的?

使用特权

评论回复
12
jiaxw| | 2016-4-12 20:06 | 只看该作者
楼主的问题解决了吗?你可以单步调试检查一下Timer_B counter有没有变化

使用特权

评论回复
13
liliang9554| | 2016-4-12 20:09 | 只看该作者
资料的话还是得参考官方的用户手册:http://wenku.baidu.com/view/fb3c251e59eef8c75fbfb364.html

使用特权

评论回复
14
午夜粪车| | 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);
}

使用特权

评论回复
15
zhaoxqi|  楼主 | 2016-4-12 20:16 | 只看该作者
嗯,我知道了,多谢大家哈

使用特权

评论回复
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的区别是需要注意的。

使用特权

评论回复
17
1988020566| | 2016-4-14 22:18 | 只看该作者
楼主进入中断了吗

使用特权

评论回复
18
pmp| | 2016-4-14 22:19 | 只看该作者
最好的资料就是,MSP430X1XX Family User's Guide

这个例程是可以工作的,单步检查一下Timer_B counter有没有变化

使用特权

评论回复
19
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);
}

使用特权

评论回复
20
51xlf| | 2016-4-14 22:20 | 只看该作者
硬件问题

使用特权

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

本版积分规则

808

主题

10636

帖子

4

粉丝