IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 学习记录L298n驱动模块、麦克纳姆轮小车 -> 正文阅读

[嵌入式]学习记录L298n驱动模块、麦克纳姆轮小车

一、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);

五、成果

不能上传视频,不便展示

?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-01-17 11:38:55  更:2022-01-17 11:40:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 1:39:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码