一、L298n驱动模块

1.好处
L298N,是一款接受高电压的电机驱动器,直流电机和步进电机都可以驱动。一片驱动芯片可同时控制两个直流减速电机做不同动作,在6V到46V的电压范围内,提供2安培的电流,并且具有过热自断和反馈检测功能。
L298N可对电机进行直接控制,通过主控芯片的I/O输入对其控制电平进行设定,就可为电机进行正转反转驱动,操作简单、稳定性好,可以满足直流电机的大电流驱动条件。
2.各引脚意思,接法
MOTORA: 电机A
MOTORB: 电机B
VMS: 可接46V电源
GND :负极
5V:5v输出电压(可为arduino供电)
ENA:使能端A,可控制电机A的转速
ENB:使能端B,可控制电机B的转速
IN1、IN2:控制电机A(MOTORA)正转反转
IN3、IN4:控制电机B(MOTORB)正转反转
举个例子

二、思路
? ? ? ? 电源给驱动板供电
? ? ? ? 驱动板给arduino板供电(5V)
? ? ? ? arduino通过ENA、ENB、IN引脚发送信息给驱动板
? ? ? ? 驱动板执行
?三、接线

?四、代码
int enA = 9;//驱动模块的ENA接Arduino的9号引脚
int in1 = 8;
int in2 = 7;
int enB = 3;
int in3 = 5;
int in4 = 4;
void setup() {
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
//先给低电平,让轮子不动
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
void loop() {
//火力全开前进模式
analogWrite(enA, 255);//给电机A的电压达到最大,0电压最小,255电压最大
analogWrite(enB, 255);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
delay(2000);
//后退模式
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
delay(2000);
//制动刹车
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
delay(2000);
//匀加速前进,先让电机准备动起来
digitalWrite(in1, LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
//i逐渐加大,驱动板给的电压加大,速度逐渐加大
for (int i = 0; i < 256; i++) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
//同理,让电机匀减速
for (int i = 255; i >= 0; --i) {
analogWrite(enA, i);
analogWrite(enB, i);
delay(20);
}
//停下
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
}
analogWrite()函数产生PWM信号将两个电动机从零加速到最大速度,然后将其减速回零。最后,它关闭了电动机?
五、麦克纳姆轮
因为麦克纳姆轮子是斜的,所以受到地面的摩擦力也是斜的45°
正确装法

前进:

受力分析,将速度正交分解,左右相抵消
后退
同理
原地旋转:

?上下的速度相互抵消,前面的轮速度向右,后面的轮速度向左。
平移:

?
上下的速度相互抵消,前面的轮速度向左,后面的轮速度向左。
?斜向上:

?
错误装法?

?部分代码展示:
先写各个轮子运动的情况函数,共八种
void L1_forward(int v)//左前轮前进,输入要求的速度v(0~255)
{
digitalWrite(L1_IN1,LOW);
digitalWrite(L1_IN2,HIGH);
analogWrite(L1_ENA,v);
}
void R1_forward(int v)//右前轮前进
{
digitalWrite(R1_IN1,HIGH);
digitalWrite(R1_IN2,LOW);
analogWrite(R1_ENA,v);
}
void L2_forward(int v)//左后轮前进
{
digitalWrite(L2_IN1,HIGH);
digitalWrite(L2_IN2,LOW);
analogWrite(L2_ENA,v);
}
void R2_forward(int v)//右后轮前进
{
digitalWrite(R2_IN1,HIGH);
digitalWrite(R2_IN2,LOW);
analogWrite(R2_ENA,v);
}
void allstop()
{
digitalWrite(L1_IN1,LOW);
digitalWrite(L1_IN2,LOW);
digitalWrite(R1_IN1,LOW);
digitalWrite(R1_IN2,LOW);
digitalWrite(L2_IN1,LOW);
digitalWrite(L2_IN2,LOW);
digitalWrite(R2_IN1,LOW);
digitalWrite(R2_IN2,LOW);
}
void L1_backward(int v)//左前轮后退
{
digitalWrite(L1_IN1,HIGH);
digitalWrite(L1_IN2,LOW);
analogWrite(L1_ENA,v);
}
void R1_backward(int v)//右前轮后退
{
digitalWrite(R1_IN1,LOW);
digitalWrite(R1_IN2,HIGH);
analogWrite(R1_ENA,v);
}
void L2_backward(int v)//左后轮后退
{
digitalWrite(L2_IN1,LOW);
digitalWrite(L2_IN2,HIGH);
analogWrite(L2_ENA,v);
}
void R2_backward(int v)//右后轮后退
{
digitalWrite(R2_IN1,LOW);
digitalWrite(R2_IN2,HIGH);
analogWrite(R2_ENA,v);
}
?整体小车的运动情况代码
/*前进*/
L1_forward(100);
R1_forward(100);
L2_forward(100);
R2_forward(100);
delay(1500);
allstop();
delay(1500);
/*后退*/
L1_backward(100);
R1_backward(100);
L2_backward(100);
R2_backward(100);
delay(1500);
allstop();
delay(1500);
/*顺时针原地旋转*/
L1_forward(200);
R1_backward(200);
L2_forward(200);
R2_backward(200);
delay(1500);
allstop();
delay(1500);
/*逆时针原地旋转*/
L1_backward(200);
R1_forward(200);
L2_backward(200);
R2_forward(200);
delay(1500);
allstop();
delay(1500);
/*左边平移*/
L1_backward(150);
R1_forward(150);
L2_forward(150);
R2_backward(150);
delay(1500);
allstop();
delay(1500);
/*右边平移*/
L1_forward(150);
R1_backward(150);
L2_backward(150);
R2_forward(150);
delay(1500);
allstop();
delay(1500);
/*斜向左上方*/
R1_forward(150);
L2_forward(150);
delay(1500);
allstop();
delay(1500);
/*斜向右上方*/
L1_forward(150);
R2_forward(150);
delay(1500);
allstop();
delay(1500);
/*斜向左下方*/
L1_backward(150);
R2_backward(150);
delay(1500);
allstop();
delay(1500);
/*斜向右下方*/
R1_backward(150);
L2_backward(150);
delay(1500);
allstop();
delay(1500);
五、成果
不能上传视频,不便展示
 
?
|