大功率 電機驅動GP36

從 YFRobotwiki
在2021年8月16日 (一) 17:33由Admin對話 | 貢獻所做的修訂版本

跳到: 導覽搜尋
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
}