【雕爷学编程】Arduino动手做(157)---MX1508双路电机驱动模块

news2024/11/13 9:31:50

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百五十七:MX1508 四通道双路有刷直流电机驱动模块 2路直流马达驱动模块 双H桥步进电机 正反转PWM调速

在这里插入图片描述

知识点:MX1508芯片

是专用单芯片解决方案,芯片内部集成两路 H 桥驱动电路,可同时驱动转向电机以及前进后退电机。为电池供电的玩具、低压或者电池供电的运动控制应用提供了一种集成的有刷直流马达驱动解决方案。电路内部集成了两通道采用N沟和P沟功率MOSFET设计的H桥驱动电路,适合于驱动电动玩具车的转向轮及后轮驱动,(驱动有刷直流马达或者驱动步进马达的两个绕组)。该电路具备较宽的工作电压范围(从2V到9.6V)。

在这里插入图片描述
MX1508内部结构图

在这里插入图片描述
MX1508单通道工作时,左转/右转通道用于驱动转向电机,最大持续输出电流达到 1.2A,最大峰值输出电流达到 1.5A。前进/后退通道用于驱动前进后退电机,最大持续输出电流达到 1.4A,最大峰值输出电流达到 2A;双通道同时工作时,左转/右转通道持续输出 0.8A 的情况下,前进/后退通道能持续输出 1.2A。该芯片具备较宽的工作电压范围(VM 端供电从 2V 到 8V),可覆盖 2 节干电池至 5 节干电池的应用。

该专用芯片内置过热保护电路。驱动电路的负载电流远大于电路的最大持续电流时,受封装散热能力限制,封装内部芯片的结温将会迅速升高,一旦超过设定值,内部电路将立即关断输出功率管,切断负载电流,避免温度持续升高造成塑料封装冒烟、起火等安全隐患。内置的温度迟滞电路,确保电路恢复到安全温度后,才允许重新对电路进行控制。

应用中注意采用PWM控制时,PWM频率不可太高,高了后无法响应,输出端并非PWM信号,导致控制失败,建议采用较低控制频率,两路PWM控制,注意不能采用互补控制,有效波形必须全部非高,否则电机刹车。控制电压建议小于10V,逻辑电平5V为宜。

在这里插入图片描述
主要特性
a. 低待机电流 (小于0.1uA);
b. 低静态工作电流;
c. 集成的H桥驱动电路;
d. 内置防共态导通电路;
e. 低导通内阻的功率MOSFET管;
f. 内置带迟滞效应的过热保护电路 (TSD);
g. 抗静电等级:3KV (HBM);
  h. 集成的 H 桥驱动电路;
  i. 高度集成方案,集成 RX2 芯片和两个马达驱动芯片;
  j. 内置 2.5V 稳压 LDO 电路。

典型应用
  2-5 节 AA/AAA 干电池供电的玩具马达驱动;
  2-5 节镍-氢/镍-镉充电电池供电的玩具马达驱动;
  1-2 节锂电池供电的马达驱动
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
MX1508双路马达驱动模块特点
1.采用专业电机驱动芯片,内置低导通内阻MOS开关管,发热极小,无需散热片,体积小,省电,是您电池供电的理想选择。(相比较L298N内部为晶体管开关,效率低,发热高,需散热,体积笨重,市面上的L298N极容易烧坏,都没有采用原装芯片,本模块能够完美替代)。
2.双路1.5A*2,峰值电流可到2.5A, 内置过热保护电路,不用怕电机堵转烧坏,温度下降后自动恢复(目前市面上的智能小车电压和电流都在此范围内)。
3.体积小,质量轻,0待机电流,是各种模型车载的理想选择。

在这里插入图片描述
在这里插入图片描述
MX1508双路马达驱动模块主要参数
双路H桥电机驱动,可以同时驱动两路直流电机或者1个4线两相式步进电机;
模块供电电压2V-10V;
信号端输入电压1.8-7V;
单路工作电流1.5A,峰值电流可达2.5A,低待机电流 (小于 0.1uA);
内置防共态导通电路,输入端悬空时,电机不会误动作;
内置带迟滞效应的过热保护电路 (TSD),无需担心电机堵转;
产品尺寸: 24.7215mm (长宽高),超小体积,适合组装和车载;
安装孔直径:2 mm;
重量:5g 。

在这里插入图片描述
MX1508双路马达驱动模块电原理图

在这里插入图片描述
MX1508双路马达驱动模块接脚图
在这里插入图片描述
MX1508 电机驱动逻辑真值表

在这里插入图片描述

MX1508双路电机驱动模块接线示意图
在这里插入图片描述
下载安装MX1508库

链接 https://codeload.github.com/Saeterncj/MX1508/zip/master

在这里插入图片描述
Arduino实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十七:MX1508 四通道双路有刷直流马达驱动模块

 2路直流电机驱动模块 双H桥步进电机 正反转PWM调速

 1、安装库:下载链接 https://codeload.github.com/Saeterncj/MX1508/zip/master

 2、实验接线方法

 MX1508模块  Ardunio Uno

 GND---------GND接地线

 VCC---------5V 接电源

 IN1---------D9(PWM)

 IN2 ------- D10(PWM)

 3、实验之一:简易控制电机(MOTOR-A)连续正转,

 PWM设置为180,运转电流大约70MA

*/



#include <MX1508.h>

#define PINA 9

#define PINB 10

#define NUMPWM 2

#define PWM 180

MX1508 motorA(PINA, PINB, FAST_DECAY, NUMPWM);

void setup() {}

void loop() {

 motorA.motorGo(PWM);

}

实验一场景示意图

在这里插入图片描述
Arduino实验开源代码之二

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百五十七:MX1508 四通道双路有刷直流马达驱动模块

 2路直流电机驱动模块 双H桥步进电机 正反转PWM调速

 1、安装库:下载链接 https://codeload.github.com/Saeterncj/MX1508/zip/master

 2、实验接线方法

 MX1508模块  Ardunio Uno

 GND---------GND接地线

 VCC---------5V 接电源

 IN1---------D9(PWM)

 IN2 ------- D10(PWM)

 3、实验之二:控制电机(MOTOR-A)正转与反转,

 PWM为0-180,180-0,,逐步加速然后减速,循环

*/



#include <MX1508.h>

#define PINA 9

#define PINB 10

#define NUMPWM 2

MX1508 motorA(PINA, PINB, FAST_DECAY, NUMPWM);

void setup() {

 Serial.begin(115200);

}

/*

 通过每50毫秒将pwm增加1来将斜坡增加到pwm = 180。

  然后通过每50毫秒降低pwm降低到pwm = -180。

  正值pwm表示正向。

  负值pwm的方向相反。

*/

void loop() {

 static unsigned long lastMilli = 0;

 static bool cwDirection = true; // 假设初始方向(正pwm)为顺时针

 static int pwm = 1;

 if (millis() - lastMilli > 50) { // 每50毫秒

  if (cwDirection && pwm++ > 180 ) {

   cwDirection = false;

  } else if (!cwDirection && pwm-- < -180) {

   cwDirection = true;

  }

  motorA.motorGo(pwm);

  lastMilli = millis();

  Serial.println(motorA.getPWM()); // 我们可以只打印pwm,但是仅显示成员函数getPWM()起作用。

 }

}


MX1508库的几个函数

1、motorGo(pwmVal)

这将设置PWM val(速度)其值为0-200(数值太小,电机只是抖动而无法转动,合适的数值需要通过实验来确定)

2、stopMotor()

只需停止电动机

3、setResolution(pwmResolution)

可以更改pwm的分辨率。要使用此功能,必须使用arduino nano / uno的9和10的pwm可以实现16位PWM。理论上,该值可以在0-65535之间的任何值)

说明:

MX1508电机驱动器的主要缺点之一是需要PWM引脚,每1台电机需要2 pwm引脚。通过实验发现,仅使用一个PWM和任何数字引脚,而不是使用2个不同的PWM引脚是可能的。这是一个巨大的折衷。电机转动一个方向所获得的响应不同于电机转动另一个方向所获得的响应。在一种方式中,将获得FAST_DECAY响应(线性响应,看起来像一个“ V”),然后在另一种情况下,将获得SlOW_DECAY响应(积极反应,看起来像个“ U”)。仅当绝对没有更多的PWM引脚时才应使用此功能。

实验之三:通过D9和D10的pwm引脚来实现16位PWM

使用功能setPWM16(uint8_t预分频器,unsigned int分辨率)的Arduino Nano / Uno引脚9和10的分辨率。

快速pwm频率的公式= MPU(16Mhz)/预分频器/分辨率的频率, F_PWM = 16000000 /预分频器/分辨率

预分频器参数值必须在1-5之间,分别代表1、8、64、256、1024。分辨率必须为0-65535之间的值。

MX1508(uint8_t pinIN1,uint8_t pinIN2,DecayMode衰减模式,NumOfPwmPins numPWM);

DecayMode必须为FAST_DECAY或SLOW_DECAY,NumOfPwmPins,对于setPWM16()函数,其值必须为2,PINA和PINB必须!!! 是setPWM16()函数的引脚9和10 。

示例MX1508 myMotor(10,9,FAST_DECAY,2)。

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百五十七:MX1508 四通道双路有刷直流马达驱动模块

 2路直流电机驱动模块 双H桥步进电机 正反转PWM调速

 1、安装库:下载链接 https://codeload.github.com/Saeterncj/MX1508/zip/master

 2、实验接线方法

 MX1508模块  Ardunio Uno

 GND---------GND接地线

 VCC---------5V 接电源

 IN1---------D9(PWM)

 IN2 ------- D10(PWM)

 3、实验之三:通过D9和D10的pwm引脚来实现16位PWM

*/



#include <MX1508.h>

#define PINA 9

#define PINB 10

#define NUMPWM 2

MX1508 motorA(PINA, PINB, FAST_DECAY, 2);

int resolution = 1000;

void setup() {

 Serial.begin(115200);

 motorA.setPWM16(2, resolution); // 预分频器为8,分辨率1000,PWM频率= 16Mhz / 8/1000 = 2000Hz

 // prescalar 1=1, 2=8, 3=64, 4=256, 5 =1028

 /*------------ setPWM16 Class function is defined as below-----------------

  void MX1508::setPWM16(uint8_t prescaler, unsigned int resolution){

  if(prescaler > 5 || prescaler == 0) prescaler = 3; // default to 64 if not in range.

  DDRB |= _BV(PB1) | _BV(PB2);    // set pin 9and 10 as outputs

   TCCR1A = _BV(COM1A1) | _BV(COM1B1) | _BV(WGM11);  // non-inverting PWM, mode 14 fastPWM, TOP =ICR1

  TCCR1B = _BV(WGM13) | _BV(WGM12) | prescaler ;

  ICR1 = resolution;

  _pwmResolution = resolution;

  _useAnalogWrite16 = true;

  }

 */

}

/*

 通过每50毫秒将pwm增加1,将斜率提高到pwm =分辨率/ 2。

 然后通过每50毫秒降低pwm降低到pwm = -resolution / 2。

 正值pwm表示正向。

 负值pwm的方向相反。

*/

void loop() {

 static unsigned long lastMilli = 0;

 static bool cwDirection = true; // 假设初始方向(正pwm)为顺时针

 static int pwm = 1;

 if (millis() - lastMilli > 50) { // 每50毫秒

  if (cwDirection && pwm++ > resolution / 2 ) {

   cwDirection = false;

  } else if (!cwDirection && pwm-- < -(resolution / 2)) {

   cwDirection = true;

  }

  motorA.motorGo(pwm);

  lastMilli = millis();

  Serial.println(motorA.getPWM()); // 我们可以只打印pwm,但是仅显示成员函数getPWM()起作用。

 }

}

实验开源图形编程(Mind+、编玩边学)

通过数字口12和13,简单控制电机A正转与反转

在这里插入图片描述
实验开源仿真编程(Linkboy V4.62)

使用按键控制电机1,按下正转,松开停止

在这里插入图片描述

实验仿真编程(linkboy V4.62)之二
通过设置延时器,控制电机1正转与反转

在这里插入图片描述
使用红外遥控和MX1508模块,控制二只电机正转2秒

实验开源图形编程(Mind+、编玩边学)

在这里插入图片描述

Arduino实验场景图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【花雕动手做】超迷你哦,用商徽香烟盒做个智能小车!

在这里插入图片描述
在这里插入图片描述
【花雕动手做】超迷你哦,用商徽香烟盒做个智能小车!

https://v.youku.com/v_show/id_XNTAyMzQ4MzA4OA==.html?spm=a2hzp.8253869.0.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/736747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机视觉:通过边缘检测探究卷积的特征提取功能

本文重点 在前面的课程中,我们学习了卷积核的运算,同时我们也学习了卷积核的含义,我们可以将卷积核理解为特征提取器,也就是说一个卷积核就是一个特征提取器,很多人对这种说法不了解,下面我们就通过一个边缘检测的例子来看一下卷积核是如何进行边缘特征的提取的。 什么…

[ICML 2023] Fast inference from transformers via speculative decoding

Contents IntroductionSpeculative DecodingStandardized SamplingSpeculative Sampling AnalysisNumber of Generated TokensCalculating α \alpha αWalltime ImprovementNumber of Arithmetic OperationsChoosing γ \gamma γ ExperimentsReferences Introduction 为了…

springboot+vue膳食营养健康网站零食美食品商城_4d8g9

随着社会的不断进步与发展&#xff0c;人们对生活质量要求逐步提升。如果开发一款膳食营养健康网站&#xff0c;可以让用户在最短的时间里享受到最好的服务&#xff1b;而开发本网站&#xff0c;又能够提高网站整体工作水平&#xff0c;简化工作程序&#xff0c;这对管理员和用…

北京“数据二十条”发布,筑牢数据安全根基,加速释放数据产能

要实现2000亿的目标&#xff0c;基础保障如何做好&#xff1f; 7月5日&#xff0c;中共北京市委、北京市人民政府印发《关于更好发挥数据要素作用进一步加快发展数字经济的实施意见》&#xff08;《实施意见》分为9个部分&#xff0c;共涉及20项具体任务&#xff0c;也被称作“…

TypeScript 中的 enum 枚举类型的使用解读。

前言 在 TypeScript 中&#xff0c;新增了很多具有特性的一些数据类型处理方法&#xff0c;enum 【枚举】就是其中&#xff0c;很具有代表性的一种&#xff0c;所以本章节就来聊聊 在 TypeScript 中如何去运用 enum 【枚举】。 枚举得的概念&#xff1a; 枚举&#xff08;Enum&…

Web前端工程师笔试题(合集)

Web前端开发工程师笔试题篇1 1. 在一个框架的属性面板中&#xff0c;不能设置下面哪一项。( C ) A.源文件 ; B.边框颜色 ; C.边框宽度 D.滚动条 2. CSS样式表根据所在网页的位置&#xff0c;可分为?(B ) A.行内样式表、内嵌样式表、混合样式表 B.行内样式表、内嵌样式表…

MySQL数据库——多表查询练习2

一、练习素材 创建表 --创建部门表dept create table dept ( dept1 int , dept_name varchar(11));--创建员工表emp create table emp ( sid int , name varchar(11), age int, worktime_start date, incoming int, dept2 int); 插入数据 --部门表插入数据 insert into dep…

C++ 栈和队列(stack and queue)语法使用及底层实现原理

本篇文章会对C中的容器stack和queue用法进行详解&#xff0c;也包含对优先队列&#xff08;priority_queue&#xff09;的讲解。同时会模拟实现stack、queue和priority_queue底层。希望本篇文章会对你有所帮助&#xff01; 目录 一、stack 栈 1、1 什么是适配器 1、2 stack 语法…

C++ 线程池实现

思路 创建多个工作线程同时维护一个公共的任务队列, 任务队列非空时通过信号量唤醒阻塞等待的工作线程, 工作线程通过互斥锁互斥的从任务队列中取出任务, 然后执行任务 实现 信号量类 class sem {//封装信号量类 public:sem(int num 0) {if (sem_init(&m_sem, 0, num)…

Kernel-Pwn-FGKASLR保护绕过

FGKASLR FGASLR&#xff08;Function Granular KASLR&#xff09;是KASLR的加强版&#xff0c;增加了更细粒度的地址随机化。因此在开启了FGASLR的内核中&#xff0c;即使泄露了内核的程序基地址也不能调用任意的内核函数。 layout_randomized_image 在fgkaslr.c文件中存在着…

支持中文手写和多画布的Handraw

什么是 Handraw ? Handraw 是支持中文手写和多画布的 Excalidraw 白板工具。 官网上项目名称还是 Excalidraw-CN&#xff0c;所以 Handraw 应该是基于 Excalidraw 二开的&#xff0c;特点是支持中文手写字体和多画布 官方也提供了免费使用的站点&#xff1a;https://handraw.t…

ModaHub魔搭社区:向量数据库Zilliz Cloud插入 Entity教程

目录 开始前 插入单个 Entity 批量插入 Entity 准备数据 插入数据 写入操作 本文介绍如何将 Entity 插入到 Zilliz Cloud 集群中的 Collection。 Entity 是 Collection 中的基本数据单元。同一个 Collection 中的 Entity 具有相同的属性,这些属性共同定义在 Schema 中…

低代码开发平台助力解决企业开发效率问题

编者按&#xff1a;随着企业应用需求的不断增加&#xff0c;提高企业开发效率已经成为许多企业的目标。传统的开发方法显然不适用&#xff0c;开发平台通过可视化拖拉拽搭建等易用性和高扩展性可以帮助企业解决这个问题。 关键词&#xff1a;可视化开发、私有化部署、前后端分离…

设计模式--------行为型模式

行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象行为模式&#xff0c;前者采用继承机制来在类间…

飞控学习笔记-IMU姿态算法

扩展卡尔曼滤波算法 传感器融合算法 卡尔曼滤波算法 最小二乘法 毕卡逼近法 对上式进行泰勒展开 得到四元数各阶近似算法&#xff1a; 梯度下降算法 梯度下降 互补滤波算法 chatgpt解释&#xff1a; 互补滤波&#xff08;Complementary Filter&#xff09;算法是一种常用…

zk-IMG:对抗虚假信息

1. 引言 前序博客&#xff1a; ZKP图片授权——PhotoProof&#xff1a;proofs of permissible photo edits Daniel Kang等人2022年论文《ZK-IMG: Attested Images via Zero-Knowledge Proofs to Fight Disinformation》&#xff0c;在该论文中提供了一个简单的deep fake ima…

高级编程技巧之Python装饰器详解

概要 装饰器是Python中一种强大而灵活的编程技巧&#xff0c;它可以用于修改或扩展函数的行为&#xff0c;同时又不需要修改函数的源代码。本文将介绍Python中的装饰器的基本概念、使用方法以及高级技巧&#xff0c;帮助你从入门到精通装饰器的使用。 一、基本概念 在深入学习…

【面试必考点】这一次带你彻底学会this的指向问题

文章目录 前言一、this的指向问题1.1 全局中的this1.2 普通函数中的this1.3 定时器中的this1.4 事件处理函数中的this1.5 构造函数中的this1.6 构造函数静态方法中的this1.7 箭头函数中的this 二、修改函数中的this指向2.1 call2.2 apply2.3 bind 三、 this指向练习3.1 某小游戏…

【软件分析/静态分析】chapter6 课程08 指针分析(Pointer Analysis)

&#x1f517; 课程链接&#xff1a;李樾老师和谭天老师的&#xff1a; 南京大学《软件分析》课程08&#xff08;Pointer Analysis&#xff09;_哔哩哔哩_bilibili 目录 第六章 指针分析&#xff08;Pointer Analysis&#xff09; 6.1 为什么需要指针分析 6.2 指针分析的基本…

AMAT 工业输入输出模块0100-77037

W;① ⑧ 0 ③ 0 ① 7 7 7 ⑤ 9 AMAT 工业输入输出模块0100-77037 0100-76124 0100-71313 0100-71311 0100-71309 0100-71278 0100-71267 0100-71229 0100-71224 0100-20100 IGBT 和 IGCT 是四层器件&#xff0c;乍一看并没有什么不同。但是&#xff0c;当您“ 深入了解…