打印

430-L298-PWM控制直流电机不同速度正反转求助·!!

[复制链接]
1729|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
包子lxy|  楼主 | 2013-8-3 14:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先附上我的程序

#include <msp430.h> #include "gdata.h"//包含延时的头文件


#define keyin1 (P2IN&BIT1)//定义的时候记得()前面有个空格

#define keyin2 (P2IN&BIT2)


#define keyin3 (P2IN&BIT3)


#define keyin4 (P2IN&BIT4)

void init()
{
  P1DIR|=BIT2;//输出,电机
  P1DIR|=BIT3;//输出,电机

  P2DIR&=~BIT1;//输入
  P2IE|=BIT1;//中断允许
  P2IES|=BIT1;//设定触发方式,下降沿

  P2DIR&=~BIT2;//输入
  P2IE|=BIT2;//中断允许
  P2IES|=BIT2;//设定触发方式,下降沿

  P2DIR&=~BIT3;//输入
  P2IE|=BIT3;//中断允许
  P2IES|=BIT3;//设定触发方式,下降沿

  P2DIR&=~BIT4;//输入
  P2IE|=BIT4;//中断允许
  P2IES|=BIT4;//设定触发方式,下降沿

  _EINT();//中断使能,开中断
}



int main(void)

{
    WDTCTL =WDTPW | WDTHOLD;        // Stop watchdog timer

    init();


    TACTL = TASSEL_1 + MC_1;
    CCR0=512;
    CCTL1=OUTMOD_7;
    CCTL2=OUTMOD_7;
    while(1);

}




#pragma vector=PORT2_VECTOR
__interrupt
void port_2(void)

{
    int i;
       
    if(keyin1== 0x00)
    {
     P1SEL|=BIT2;
      delay_ms(10);//延时消抖
               
      if(keyin1==0x00) //再次检测按键状态
      {
            //P1OUT&=~BIT3;
           for(i=0;i<9000;i++)
           CCR1=512;           
      }
      P2IFG=0x00;
    }

    if(keyin2==0x00)
    {
        P1SEL|=BIT2;
        delay_ms(10);//延时消抖
        if(keyin2==0x00) //再次检测按键状态
        {
           //P1OUT&=~BIT3;
          for(i=0;i<9000;i++)
          CCR1=256;                    
        }
        P2IFG=0x00;
    }

    if(keyin3==0x00)
    {
        P1SEL|=BIT3;
        delay_ms(10);//延时消抖
        if(keyin3==0x00) //再次检测按键状态
        {
          //P1OUT&=~BIT2;
          for(i=0;i<9000;i++)
          CCR2=512;                    
        }
        P2IFG=0x00;
    }

    if(keyin4==0x00)
    {
        P1SEL|=BIT3;
        delay_ms(10);//延时消抖
        if(keyin4==0x00) //再次检测按键状态
        {
          //P1OUT&=~BIT2;
          for( i=0;i<9000;i++)
          CCR2=256;                    
        }
        P2IFG=0x00;
    }
}



说说问题所在吧

                 首先是,我一通电,电机就开始转动,时转时停很不规律,但都是在最大转速情况下。不知道为什么。。。
                 其次是,电机按键控制经常失灵,有时候按键没反应,我觉得我的按键去抖也加了啊。。不知道为什么
                还有,按键1,按键2控制的那个方向,分别是100%转速,和50%,都是正常的,但是在按键3,按键4(反向转动)的时候,原本应为反向100%的转速大约只有50%,而原本应该反向50%的则完全静止,后来我量了298输出电压,(我外加8V VCC给电机)正转100%和50%时,大约是6.2V和3.6V,和预想一样,但反向100%仅为 -3.6V(的确只有一半),反向50%输出直接是0V。



百思不得其解,现在来这求助~!!L298换过一块新的也是这个情况,觉得不是298模块的问题
C

相关帖子

沙发
dirtwillfly| | 2013-8-3 22:45 | 只看该作者
为啥大家喜欢把那么大段的代码放到中断服务程序中啊?
建议在中断服务程序里只留必须的代码,其余非必须的都放到中断服务程序外面。
你能把你的电路图也传上来看一下吗?只看程序看不出什么问题。

使用特权

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

本版积分规则

28

主题

95

帖子

0

粉丝