arduino+双H桥直流电机控制器用按键控制两个直流电机的程序

2020-06-21 科技 134阅读

1、首先,请按照下图连接双路H桥驱动器和电机,4个按钮(右前进,右后退,左前进,左后退),以及核心板。

需要说明的是,双路H桥驱动器Vin和GND管脚,是接入驱动电机的电源的管脚,建议单独用一组负责动力的电池或电源,不要与单片机的供电混接,以防止大功率消耗瞬时拉低电压而死机。


完成好接线后,请在Arduino IDE中输入如下代码:(已提供源码下载)


int R_Q = 8; //定义右前按钮管脚

int R_H = 4; //定义右后按钮管脚

int L_Q = 7; //定义左前按钮管脚

int L_H = 2; //定义左后按钮管脚


int MOTO_A_a = 3;  //定义右电机控制端a

int MOTO_A_b = 5;  //定义右电机控制端b

int MOTO_B_a = 6;  //定义左电机控制端a

int MOTO_B_b = 9;  //定义左电机控制端b

//需要注意的是,双路H桥驱动器支持PWM方式输入,故In1-In4接3,5,6,9端口,便于以后改造为PWM信号输入


void setup()

{

pinMode(R_Q,INPUT_PULLUP);  //定义右前按钮为输入且上拉

pinMode(R_H,INPUT_PULLUP);  //定义右后按钮为输入且上拉

pinMode(L_Q,INPUT_PULLUP);  //定义左前按钮为输入且上拉

pinMode(L_H,INPUT_PULLUP);  //定义左后按钮为输入且上拉

pinMode(MOTO_A_a,OUTPUT);  //定义输出

pinMode(MOTO_A_b,OUTPUT);  //定义输出

pinMode(MOTO_B_a,OUTPUT);  //定义输出

pinMode(MOTO_B_b,OUTPUT);  //定义输出

}


void loop()

{

  //如果不按下右前和右后,则停转

if(digitalRead(R_Q)==1 && digitalRead(R_H)==1){STOP_Moto_A();}

  //如果同时按下右前和右后,逻辑错误,则停转

if(digitalRead(R_Q)==0 && digitalRead(R_H)==0){STOP_Moto_A();}

  //如果按下右后,则向后转

if(digitalRead(R_Q)==1 && digitalRead(R_H)==0){Driver_Moto_A(255,false);}

  //如果按下右前,则向前转

if(digitalRead(R_Q)==0 && digitalRead(R_H)==1){Driver_Moto_A(255,true);}


  //如果不按下左前和左后,则停转

if(digitalRead(L_Q)==1 && digitalRead(L_H)==1){STOP_Moto_B();}

  //如果同时按下左前和左后,逻辑错误,则停转

if(digitalRead(L_Q)==0 && digitalRead(L_H)==0){STOP_Moto_B();}

  //如果按下左后,则向后转

if(digitalRead(L_Q)==1 && digitalRead(L_H)==0){Driver_Moto_B(255,false);}

  //如果按下左前,则向前转

if(digitalRead(L_Q)==0 && digitalRead(L_H)==1){Driver_Moto_B(255,true);}

}


  //驱动右边电机,pwm为能量值,对应转速,Is_Forward为转向

void Driver_Moto_A(int pwm, bool Is_Forward)

{

if(Is_Forward)

{

  digitalWrite(MOTO_A_a,LOW);

  analogWrite(MOTO_A_b,pwm);

}

else

{

  digitalWrite(MOTO_A_b,LOW);

  analogWrite(MOTO_A_a,pwm);

}

}

  //停止右边电机

void STOP_Moto_A()

{

digitalWrite(MOTO_A_a,LOW);

digitalWrite(MOTO_A_b,LOW);

}


  //驱动左边电机,pwm为能量值,对应转速,Is_Forward为转向

void Driver_Moto_B(int pwm, bool Is_Forward)

{

if(Is_Forward)

{

  digitalWrite(MOTO_B_a,LOW);

  analogWrite(MOTO_B_b,pwm);

}

else

{

  digitalWrite(MOTO_B_b,LOW);

  analogWrite(MOTO_B_a,pwm);

}

}


  //停止左边电机

void STOP_Moto_B()

{

digitalWrite(MOTO_B_a,LOW);

digitalWrite(MOTO_B_b,LOW);

}


声明:你问我答网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系fangmu6661024@163.com