一、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);
五、成果
不能上傳視頻,不便展示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413620.html
標籤:其他
上一篇:QT基礎學習筆記 Demo04


