在线情况
楼主
  • 头像
  • 级别
    • 积分3
    • 经验106
    • 文章2
    • 注册2011-12-06
    msp430f149定时器A怎样产生PWM驱动电机
    [P]我想使用msp430f149定时器A产生PWM驱动电机,但是不知道为什么电机不能驱动起来,望各位指点。谢谢[/P][P]程序如下:[/P][P]#include <msp430x14x.h>
    typedef unsigned int uint;
    void PWM_n(uint pwm);
    void main()
    {
        WDTCTL=WDTPW+WDTHOLD;
        P1DIR=0x01;    //P1.0设置为输出
        _BIS_SR(GIE);   //打开总中断
        PWM_n(500);          //占空比为50%    可调,0~1000
    }                                            
    void PWM_n(uint pwm)
    {
        TACTL=TASSEL_1+MC_1;  //选择MCLK时钟源,增计数到CCR0
        CCTL0=CCIE;
        CCTL1=CCIE;
        CCR0=1000;
        CCR1=pwm;      //   pwm/1000 为占空比
       
    }[/P][P]#pragma vector=TIMERA1_VECTOR  //计数到CCR0后产生中断
    __interrupt void ccr0(void)
    {
        P1OUT |= 0x00;                //P1.0输出低电平
    }[/P][P]
    #pragma vector=TIMERA0_VECTOR
    __interrupt void ccr1(void)      //计数到CCR1后产生中断
    {
        switch(TAIV)
        {
           case 2:P1OUT |= 0x01;break;        // P1.0输出高电平  计数到CCR1产生的中断
           case 4:break;     //计数到CCR2产生的中断
           case 10:break;    //TIMERA产生的中断,未用到
           default:break;
        }
    }
    [/P]
    微控网感谢您的参与
    在线情况
    2
    • 头像
    • 级别
    • 门派
    • 职务总版主
    • 声望+9
    • 财富5
    • 积分3065
    • 经验390701
    • 文章6744
    • 注册2006-03-07
    [P]驱动电机分别有软件和硬件部分。
    看你居然贴出程序,我想应该是IO没有PWM输出吧。
    你用的是149,应该比较简单。为使程序跑起来,在不太了解的情况可以直接使用TI的模块例子来修改。在保护IO有PWM情况下再去调其他的。比较的方法会比较好些...。[/P]
    [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
    在线情况
    3
    • 头像
    • 级别
      • 积分1
      • 经验81
      • 文章3
      • 注册2012-04-30
      你的中断入口有问题,[LINE-HEIGHT=21px][P][ALIGN=left][SIZE=14px]TIMERA0_VECTOR对应的是CCIFG0,[/SIZE][/FONT][/ALIGN][/P][/LINE-HEIGHT][LINE-HEIGHT=21px][P][ALIGN=left][SIZE=14px]TIMERA1_VECTOR 对应的是CCIFG1,CCIFG2和TAIFG,[/SIZE][/FONT][/ALIGN][/P][/LINE-HEIGHT][LINE-HEIGHT=21px][P][ALIGN=left][SIZE=14px]TACTL=[COLOR=#ff0000]TASSEL_1[/SIZE]+MC_1; 是ACLK时钟
      [P][LINE-HEIGHT=21px][P][ALIGN=left][SIZE=14px]P1OUT |= 0x00;,尤其是这一句,根本就不可能改变P1OUT的值,应该是P1OUT&=~(OXO1);依版主说,使用TIMERA的比较器的OUTMOD_7模式,,可以自动改变输出值,TACTL=TASSEL_1+MC_1+TACLR;[/COLOR][/ALIGN][/ALIGN][/P][/LINE-HEIGHT][P][P][ALIGN=left][LINE-HEIGHT=21px][SIZE=14px]CCR0=1000;CCTL1=OUTMOD_7;CCR1=pwm,至于P1口那一个是TA0.1你自己查资料,类似于P1DIR&=~(BIT3);P1SEL|=BIT3;[/SIZE][/LINE-HEIGHT][/ALIGN][/P][/P][/SIZE][/FONT][/P][/LINE-HEIGHT]
      [ 此贴最后由DC在2012-4-30 23:18:21编辑过 ]
      微控网感谢您的参与
      Powered by LeadBBS 9.2 .
      Page created in 0.1719 seconds with 5 queries.