msp430f149定时器A怎样产生PWM驱动电机

楼主
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]
1楼
[P]驱动电机分别有软件和硬件部分。
看你居然贴出程序,我想应该是IO没有PWM输出吧。
你用的是149,应该比较简单。为使程序跑起来,在不太了解的情况可以直接使用TI的模块例子来修改。在保护IO有PWM情况下再去调其他的。比较的方法会比较好些...。[/P]
2楼
你的中断入口有问题,[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]

电脑版 Page created in 0.1719 seconds width 3 queries.