L298N是目前智能小车应用很广泛的价格也比较便宜的电机驱动,用来驱动直流电机。
L298N
输出A 输出B 分别接两个直流电机,电机两根线随便接,如果发现两电机方向是反着的,就调换下接线就ok了。
12V供电 这个是外部电源为驱动板供电的接口,一般驱动电压实际可以接受的输入范围是7~12V,此时可以使能板载的5V逻辑供电。当使用大于12V的驱动电压时,为了避免稳压芯片损坏,首先要拔掉板载5V输出使能的跳线帽,然后在5V输出端口外部接入5V电压对L298N内部逻辑供电。
5V供电 引出5V电压接到Arduino板,给Arduino板供电(驱动电压7~12V)连接到UNO板的5V,同时Arduino板也要引出一条GND线,连接到L298N的GND与外部电源共地。
ENA ENB通道A使能,通道B使能,当你不用PWM时不需要拔掉跳线帽,当你需要PWM时,将需要拔掉跳线帽,接到arduino上的模拟输入输出接口。
IN1 IN2 IN3 IN4逻辑输出口,其中IN1 IN2 控制一个电机的转动,IN3 IN4 控制另一个电机的转动,只要一个置高 一个置低,就可以让电机转动起来。
Ardunio <--> L298N
5V <--> 5V供电(非必要)
GND <--> GND(非必要)
输出引脚 <--> ENA ENB IN1~4
外部电源 12V供电 GND
int input1=5; // 定义uno的pin 5 向 in1 输出
int input2=6; // 定义uno的pin 6 向 in2 输出
int input3=9; // 定义uno的pin 9 向 in3 输出
int input4=10; // 定义uno的pin 10 向 in4 输出
void setup() {
Serial.begin (9600);
//初始化各IO,模式为OUTPUT 输出模式
pinMode(input1,OUTPUT);
pinMode(input2,OUTPUT);
pinMode(input3,OUTPUT);
pinMode(input4,OUTPUT);
}
void loop(){
//forward 向前转
digitalWrite(input1,HIGH); //给高电平
digitalWrite(input2,LOW); //给低电平
digitalWrite(input3,HIGH); //给高电平
digitalWrite(input4,LOW); //给低电平
delay(1000); //延时1秒
//stop 停止
digitalWrite(input1,LOW);
digitalWrite(input2,LOW);
digitalWrite(input3,LOW);
digitalWrite(input4,LOW);
delay(500); //延时0.5秒
//back 向后转
digitalWrite(input1,LOW);
digitalWrite(input2,HIGH);
digitalWrite(input3,LOW);
digitalWrite(input4,HIGH);
delay(1000);
}
void forward();
void turnleft();
void turnright();
void stopcar();
int ENA1=5;
int ENB1=6;
int IN1=2;
int IN2=3;
int IN3=4;
int IN4=7;
int ENA2=9;
int ENB2=10;
int IN5=8;
int IN6=11;
int IN7=12;
int IN8=13;
void setup()
{
for(int i=2;i<=13;i++){
pinMode(i,OUTPUT);
}
Serial.begin(9600);
}
int x=1500;
void loop()
{
forward();
delay(x);
turnleft();
delay(x/3);
forward();
delay(x);
turnright();
delay(x/3);
stopcar();
}
void forward(){
analogWrite(ENA1,255);
analogWrite(ENB1,255);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENA2,255);
analogWrite(ENB2,255);
digitalWrite(IN5,HIGH);
digitalWrite(IN6,LOW);
digitalWrite(IN7,HIGH);
digitalWrite(IN8,LOW);
}
void turnback(){
analogWrite(ENA1,255);
analogWrite(ENB1,255);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENA2,255);
analogWrite(ENB2,255);
digitalWrite(IN5,LOW);
digitalWrite(IN6,HIGH);
digitalWrite(IN7,LOW);
digitalWrite(IN8,HIGH);
}
void stopcar(){
analogWrite(ENA1,0);
analogWrite(ENB1,0);
digitalWrite(IN1,LOW);
digitalWrite(IN2,LOW);
digitalWrite(IN3,LOW);
digitalWrite(IN4,LOW);
analogWrite(ENA2,0);
analogWrite(ENB2,0);
digitalWrite(IN5,LOW);
digitalWrite(IN6,LOW);
digitalWrite(IN7,LOW);
digitalWrite(IN8,LOW);
}
void turnleft(){
analogWrite(ENA1,255);
analogWrite(ENB1,255);
digitalWrite(IN1,HIGH);
digitalWrite(IN2,LOW);
digitalWrite(IN3,HIGH);
digitalWrite(IN4,LOW);
analogWrite(ENA2,255);
analogWrite(ENB2,255);
digitalWrite(IN5,LOW);
digitalWrite(IN6,HIGH);
digitalWrite(IN7,LOW);
digitalWrite(IN8,HIGH);
}
void turnright(){
analogWrite(ENA1,255);
analogWrite(ENB1,255);
digitalWrite(IN1,LOW);
digitalWrite(IN2,HIGH);
digitalWrite(IN3,LOW);
digitalWrite(IN4,HIGH);
analogWrite(ENA2,255);
analogWrite(ENB2,255);
digitalWrite(IN5,HIGH);
digitalWrite(IN6,LOW);
digitalWrite(IN7,HIGH);
digitalWrite(IN8,LOW);
}
(程序代码直接复制粘贴可能编译出错,因为有中文空格或者字符!尽管我是用英文输入的,但经常编译出现中文的错误。)
这样的小车只能按照写好的程序运动,如果我们用蓝牙或者红外遥控来控制小车才能使小车按照我们的想法随意运动,下次介绍。