先附上我的程序
#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
|