大功率 电机驱动GP36

来自YFRobotwiki
跳转至: 导航搜索
MD01-GP36

产品简介

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桥工作时有效)
  • 欠压保护:有
  • 短路保护:有


功能与接线

MotorDriver17A GP36 pinout w.png

注:模块右侧引脚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
}