//这个电机驱动板使用数字端口4 5 6 7 控制电机
//正确连接你的电机到M1+ M1- M2+ M2-
//数字端口10 11 连接到L298N的使能端接口
//下载代码到Arduino/
// 控制两个直流电机的正反转
//本程序作用两个直流电机先正转一秒 暂停一秒 反转一秒 如此反复
int IN1=4;
int IN2=5;
int IN3=6;
int IN4=7;
int EN1=10;//使能端口1
int EN2=11;//使能端口2
//数字端口4与5为一组,6与7为另一组
//数字端口10 11 作为直流电机的使能端
void Motor1(boolean reverse)//电机1正转
{
if (reverse) //正转
{
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
}
else //反转
{
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
}
}
void Motor2(boolean reverse)//电机2转动
{
if (reverse) //正转
{
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
}
else //反转
{
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
}
}
void aa()//先正转1秒停1秒后反转1秒
{
//正转
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
delay(1000);
//暂停一秒
stopMotor(true);
delay(1000);
stopMotor(false);//恢复电机使能端高电平
//反转
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
delay(1000);
// 暂停
stopMotor(true);
delay(1000);
stopMotor(false);
}
void stopMotor(boolean r)//电机停转
{
if (r)
{
analogWrite(EN1,0);
analogWrite(EN2,0);
}
else
{
analogWrite(EN1,255);
analogWrite(EN2,255);
}
}
void setup()
{
int i;
for (i=4;i<=7;i++) //为Ardunio 电机驱动板
pinMode(i,OUTPUT); //设置数字端口4,5,6,7为输出模式
for (i=4;i<=7;i++)
digitalWrite(i,OUTPUT); //设置数字端口4,5,6,7为HIGH,电机保持不动
pinMode(10,OUTPUT);//设置数字端口10 11为输出模式
pinMode(11,OUTPUT);
Serial.begin(9600);
}
void loop()
{
aa();//两个直流电机正转1秒 暂停一秒 反转一秒
}
那么我们的小车出现了以下问题及解决方法(主要在出现接线上):
1.我们的小车是使能端ENA,ENB是默认使能的(戴上了“黑帽子”,芯片的的每个使能端都是有两根“针”,直接连起来就好,不知道专有名词,专业人士勿喷;程序中的EN1,EN2暂时没有用)L298N有一个7.2V的电池组供电,arduino mega 2560 用9V的电池供电,在确定程序无bug情况下,发现小车总是跑不起来,百思不得其解,后来查了很多资料后,发现了很关键的一点:
引用了淘宝的店家的话: “有个别买家拿到模块后反应模块不能正常工作的大半都是共地问题引起的,这里我们简要说明一下共地问题。注意:L298N供电的5V如果是用另外电源供电的话,(即不是和单片机的电源共用),那么需要将单片机的GND和模块上的GND连接在一起,只有这样单片机上过来的逻辑信号才有个参考0点。此点非常重要,请大家注意。”
也就是说,L298N的GND除了与7.2V电池组连在一起,还要与arduino mega 2560 的GND接在一起,后来发现然如此,小车跑起来了,后来我们决定把L298N的GND与arduino mega 2560 的GND接与不接作为暂时的“简陋版的开关”。
2.小车跑起来后,开始捣弄使能端ENA,ENB,只要我们把ENA,ENB接到Arduino mega 2560 芯片的ANALOG IN的10,11端,然后小车就跑不起来了。
后来发现,竟然被代码中的analogWrite(Pin,Mode)给迷惑了,这里的Pin端其实是数据端PWM,也就是说ENA(代码中的EN1)接PWM10,ENB(代码中的EN2)接PWM11。
下面引用了一段关于analogWrite(Pin,Value)的说明:“analogWrite(pin, value) - PWM 数字 IO 口PWM 输出函数,Arduino 数字 IO 口标注了 PWM 癿 IO 口可使用该函数,value 表示为 0~255。比如可用于电机 PWM 调速戒音乐播放”。至于芯片的PWM口暂时还没弄清楚╮(╯▽╰)╭
(注意看管脚连接)
(小车初步效果图,有点low~)