打印
[应用相关]

求一个定时器B的pwm例程

[复制链接]
580|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Listate|  楼主 | 2018-10-24 20:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "msp430x54x.h"

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // Set P1.0 to output direction
  TBCTL = TBSSEL_1 + MC_2 + TBCLR + TBIE;   // ACLK, contmode, clear TBR,
                                            // enable interrupt

  __bis_SR_register(LPM3_bits + GIE);       // Enter LPM3, enable interrupts
  __no_operation();                         // For debugger
}

// Timer_B7 Interrupt Vector (TBIV) handler
#pragma vector=TIMERB1_VECTOR
__interrupt void TIMERB1_ISR(void)
{
  /* Any access, read or write, of the TBIV register automatically resets the
  highest "pending" interrupt flag. */
  switch( __even_in_range(TBIV,14) )
  {
    case  0: break;                          // No interrupt
    case  2: break;                          // CCR1 not used
    case  4: break;                          // CCR2 not used
    case  6: break;                          // CCR3 not used
    case  8: break;                          // CCR4 not used
    case 10: break;                          // CCR5 not used
    case 12: break;                          // CCR6 not used
    case 14: P1OUT ^= 0x01;                  // overflow
            break;
    default: break;
  }
}
沙发
Mozarts| | 2018-10-24 20:30 | 只看该作者
void main( void )
{
   // Stop watchdog timer to prevent time out reset
   WDTCTL = WDTPW + WDTHOLD;
   FLL_CTL0 |= XCAP14PF;                   // 匹配14pf电容
   __delay_cycles(20000);                    //延时20ms,等待晶振起振稳定

   do
   {
     IFG1 &= ~OFIFG;
     for(unsigned int i=5000;i>0;i--);
   }
   while(IFG1&OFIFG);

   TACTL |= TASSEL_1 + MC_1 + TACLR;
   TACCR0 = 32767;                            //T=1s
   TACCTL1 |= OUTMOD_7;
   TACCR1 = 19661;                           //占空比60%

   P1DIR |= 0x04;
   P1SEL |= 0x04;
   while(1);
}

使用特权

评论回复
板凳
_gege| | 2018-10-24 20:31 | 只看该作者

void main()
{
    // Stop watchdog timer to prevent time out reset
    WDTCTL = WDTPW + WDTHOLD;
    ClkInit();
   
    TAPwmInit('A',1,'P','P');   //将定时器TA初始化成为PWM发生器
                  //时钟源=ACLK ; 无分频;  通道1和通道2均设为高电平模式。
    TAPwmSetPeriod(500);        //通道1/2的PWM方波周期均设为500个时钟周期
    TAPwmSetDuty(1,200);        //1通道 有效200个时钟周期
    TAPwmSetPermill(2,200);     //2通道 20.0%

    LPM0;
}

使用特权

评论回复
地板
Edisons| | 2018-10-24 20:33 | 只看该作者
5529舵机的PWM信号控制的程序吗?

使用特权

评论回复
5
laozhongyi| | 2018-10-24 20:34 | 只看该作者
设定一个变量来选择初始占空比,然后通过Timer_B定时1s,每隔一秒

使用特权

评论回复
6
wanglaojii| | 2018-10-24 20:37 | 只看该作者

TB可以输出6路完整的PWM波形。

使用特权

评论回复
7
zhouhuanの| | 2018-10-24 20:38 | 只看该作者
void main(void)
{
  
  WDTCTL = WDTPW + WDTHOLD; // Stop WDT
  
   P1DIR |= 0x0C; // P1.2 and P1.3 output
   P1SEL |= 0x0C; // P1.2 and P1.3 TA1/2 options

   Init_TIMER_B();
   
   TACTL = TASSEL_2 + TACLR; // SMCLK, up mode
   
   CCR0 = 512-1; // PWM Period
   CCTL1 = OUTMOD_7 ; // CCR1 reset/set
   CCTL2 = OUTMOD_7 ; //CCR2 reset/set
   if(v==5)
   {
     CCR1 = 128; // CCR1 PWM duty cycle
     CCR2 = 384; // CCR2 PWM duty cycle
   }
   else if (v==12)
   {
     CCR1 = 384; // CCR1 PWM duty cycle
     CCR2 = 128; // CCR2 PWM duty cycle
   }
   else
   {
     CCR1 = 128; // CCR1 PWM duty cycle
     CCR2 = 384; // CCR2 PWM duty cycle
   }
   
   TACTL |= MC_1;      // Start Timer_A in up mode
   TBCTL |= MC_1;      // Start Timer_B in up mode
  
   _EINT();         //开全局中断
   _BIS_SR(LPM0_bits); // Enter LPM0
   
}




void  Init_TIMER_B()
{
    TBCTL |= TBSSEL0 +TBCLR; //ACLK
    TBCCTL0 = CCIE;
    TBCCR0 =32768;  //定时1s  
}

使用特权

评论回复
8
handleMessage| | 2018-10-24 20:40 | 只看该作者
定时器是单片机常用的其本设备,用来产生精确计时或是其他功能

使用特权

评论回复
9
bbapple| | 2018-10-24 20:41 | 只看该作者
详细参考示例工程和main.c。

使用特权

评论回复
10
Rospiers| | 2018-10-27 23:02 | 只看该作者
TB可以输出6路完整的PWM波形

使用特权

评论回复
11
stm32jy| | 2018-10-27 23:50 | 只看该作者
6路PWM很强啊,我输出一路的

使用特权

评论回复
12
stm32jy| | 2018-10-27 23:50 | 只看该作者
也可以玩下PWM捕获

使用特权

评论回复
13
stm32jy| | 2018-10-27 23:50 | 只看该作者
获取上下沿的持续时间

使用特权

评论回复
14
Rollo| | 2018-10-28 15:06 | 只看该作者
6路PWM相互之间能同时输出吗

使用特权

评论回复
15
paotangsan| | 2018-11-6 14:47 | 只看该作者
涨知识了 谢啦

使用特权

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

本版积分规则

161

主题

1233

帖子

1

粉丝