“大功率 电机驱动GP36”的版本间的差异
(→功能与接线) |
(→示例代码) |
||
第40行: | 第40行: | ||
== 示例代码 == | == 示例代码 == | ||
− | 接线说明 | + | 接线说明 : |
+ | |||
+ | SLP 连接arduino UNO数字端口2,PWM连接数字口5,DIR连接数字口4,GND连接arduino UNO的GND。 | ||
<source lang="c"> | <source lang="c"> |
2021年8月16日 (一) 17:53的最后版本
产品简介
MD01是一款由4个分立MOSFET组成的H桥高功率电机驱动器,H桥的每条支路由一个N沟道的MOSFET组成;核心的电机驱动芯片用来处理外围输入信号和控制MOSFET的打开与关闭。MD01高功率电机驱动器支持6-30V宽电压输入,较高的电压可能永久的损坏驱动器。 该驱动器适用于多种电机驱动场合,它可以提供高达17A的持续电流,而不需要额外安装散热片。模块的尺寸为4.6cm*4.6cm,支持1.8-5V范围内的控制信号,只需要控制两个IO口即可实现电机的正反转以及速度控制。电机驱动器集成了电流检测功能,IC内部集成了PWM电流调节功能,可以通过改变外部电阻值将电机电流限制在配置的阈值范围内。SLP引脚置为低电平时可以使MD01驱动模块进入低功耗模式,进而实现较低的静态电流损耗,约为9uA。
参数规格
- 工作电压:6V-30V(推荐24V以下)
- 工作电流:17A持续
- 逻辑输入:1.8V,3.3V,5V(max)
- PWM频率:100kHz
- 电流检测:50mV/A (仅在H桥工作时有效)
- 欠压保护:有
- 短路保护:有
功能与接线
注:模块右侧引脚VCC,GND,E1,E2为编码器连接转接端口,需要外接电源输入,不接编码器时不接线。多个电源时需共GND。
频率
MD01电机驱动器支持高达100KHZ的PWM频率,有一点值得注意的是,驱动电路的开关损耗也将正比PWM频率,因此建议正常的PWM频率为20KHZ左右。
PWM引脚上的脉冲信号宽度必须持续大概0.5us以上(小于0.5us的输入脉冲不会在输出端产生变化),因此较低频率的占空比在高频时不可用。如当使用100khz时,脉冲周期为10us,可实现的最小非零占空比即为0.5us/10us,也就是5%。
电流检测
MD01电机驱动器的CS引脚可用来检测输出端的工作电流。该功能仅在H桥正常工作时才有效(制动模式、缓慢衰减模式,启动、停止瞬间都是无效的),CS引脚的输出电压大概为50mV/A+50mV的偏移值。如果负载端工作电流为10A,那么CS引脚的输出电压值则为50mV/A *10A+50mV=550mV。
电机频繁的启动与停止的瞬间,电流瞬时值可达到正常工作时的5-7倍。默认状态下,电机的极限电流值设定为30A。
Arduino 扩展库
Arduino library : https://github.com/YFROBOT-TM/Yfrobot-Motor-Driver-Library
示例代码
接线说明:
SLP连接arduino UNO数字端口2,PWM连接数字口5,DIR连接数字口4,GND连接arduino UNO的GND。
/*************************************************** Motor Test - MD Motor Drive MD_01 , MD_02 , MD_03 , MD_04 , MD_GB36 motor driver library: https://github.com/YFROBOT-TM/Yfrobot-Motor-Driver-Library YFROBOT ZL 10/14/2020 ****************************************************/ #include <MotorDriver.h> #define MOTORTYPE YF_MD // these constants are used to allow you to make your motor configuration // line up with function names like forward. Value can be 1 or -1 const int offseta = 1; const int offsetb = 1; // Initializing motors. // MotorDriver motora = MotorDriver(MOTORTYPE, YF_MD04_ADIR_PIN, YF_MD04_APWM_PIN, offseta, YF_MD04_ASLP_PIN); // MotorDriver motorb = MotorDriver(MOTORTYPE, YF_MD04_BDIR_PIN, YF_MD04_BPWM_PIN, offseta, YF_MD04_BSLP_PIN); MotorDriver motora = MotorDriver(MOTORTYPE, YF_MD04_ADIR_PIN, YF_MD04_APWM_PIN, offseta, YF_MD04_ACS_PIN, YF_MD04_ASLP_PIN); MotorDriver motorb = MotorDriver(MOTORTYPE, YF_MD04_BDIR_PIN, YF_MD04_BPWM_PIN, offsetb, YF_MD04_BCS_PIN, YF_MD04_BSLP_PIN); void setup() { Serial.begin(9600); Serial.println("Motor Drive test!"); } void loop() { motora.setMotor(255); // 电机M1全速正转 motorb.setMotor(255); // 电机M2全速正转 delay(500); motora.setMotor(0); // 电机M1停止 motorb.setMotor(0); // 电机M2停止 delay(500); motora.setMotor(-127); // 电机M1 50%速度反转 motorb.setMotor(-127); // 电机M1 50%速度反转 delay(500); motora.setMotor(0); // 电机M1停止 motorb.setMotor(0); // 电机M2停止 delay(500); motora.setMotor(255); // 电机M1全速正转 motorb.setMotor(255); // 电机M2全速正转 delay(500); motora.getMotorCurrent(); // 获取电流检测口的模拟值 - 输出电压与电流电流成正比(50mV/A),电流为零时电压为0.05V }