Overview
The Cytron MD20A is a bi-directional, single channel motor driver for controlling a single high-power brushed DC motor, raging from 6V to 30V and rated for 20A of continuous current and 60A of peak current without the need of a heatsink, Its NMOS H-Bridge design makes its efficient in handling high amount of current.
The motor driver accepts PWM and DIR inputs for control, and its input logic voltage range from 1.8V to 12V makes it versatile enough to work with a wide array of host controllers, such as Arduino, Raspberry Pi, and PLCs.
For ease of testing, the MD20A features onboard test buttons and motor output LEDs. These allow for quick and convenient testing of the motor driver's functionality without requiring a host controller.
Additionally, the MD20A includes several protective measures. It has overcurrent protection to safeguard the motor driver in scenarios like motor stalls or connecting a motor that is too large. In such cases, the motor's current draw is limited to prevent damage, based on a threshold that varies with the board's temperature: the higher the temperature, the lower the current limit. This feature ensures the MD20A operates at its best capacity according to real-time conditions, protecting the MOSFETs from damage.
WARNING!: The motor driver lacks reverse polarity protection, so care should be taken with the power supply input polarity.
Features
The MD20A stands out with its onboard test buttons and motor output LEDs for quick functional testing. Its protection features like overcurrent and temperature protection, along with an undervoltage shutdown, ensure safe operation under various conditions. Moreover, its compatibility with a wide range of PWM frequencies (20KHz - 40KHz) and input logic voltages (1.8V to 12V), makes it versatile for different applications.
Specifications
Key Specifications:
Input Voltage | 6V to 30V DC |
Current | 20A continuous |
Peak Current | 60A for few seconds |
Logic Level | 1.8V to 12V (compatible with wide range of host controllers) |
PWM Frequency | Standard 20KHz Extended 20KHz to 40Khz*1 *1 PWM in extended frequnecy range will reduce the continuous motor current. |
Polarity Protection | No |
Test Buttons | Yes |
LED indicators | 1 x Power LED 2 x Motor Output Status LED 1 x Overcurrent LED 1 x Error LED |
Fan | No |
Heat Sink | No |
Dimensions | 86mm x 52mm |
Pinout & Board Layout
Power Input Terminal | VB+: Positive VB-: Negative WARNING! No reverse polarity protection, reverse connection will damage the driver immediately. |
Motor Output Terminal | MA / MB Connect to motor |
Power LED | Turns ON when the driver is powered. |
Motor Status LED | Turns ON when motor is running. |
Error LED | Turns ON during undervoltage shutdown. |
Overcurrent LED | Turns ON when current limiting is active. |
MA/ MB | Test Buttons, test the motor when connected. Motor will run at full speed. MA: Forward* MB: Backward* *Depends on the poloairty of motor connection to motor output terminal. |
DIR | Direction Input |
PWM | PWM speed control input |
GND | Signal Ground |
* When operating an inductive load, such as a DC brush motor, it's important to use a battery. This is because most power supplies, particularly those with a switching design, have a protection circuit that shuts down upon detecting regenerative current from the motor. In scenarios where a switching power supply is necessary, it's still suggested to connect a battery in parallel. This battery should have the same rated voltage as the power supply to effectively absorb the regenerative current.
Truth Table
PWM | DIR | Output A (MA) | Output B (MB) | Motor |
LOW | X (Don't Care) | LOW | LOW | Brake |
HIGH | LOW | HIGH | LOW | Forward |
HIGH | HIGH | LOW | HIGH | Reverse |
Connections & Code
Power
- VB+ (Positive) / VB- (Negative): Connect it to a battery (6V to 30V DC)
- MA/ MB: Connect to Motor
Signal
Connections for Arduino UNO
- DIR: Connect it to pin D4
- PWM: Connect it to pin D3
- GND: Connect it to Arduino GND pin
Code
Before we move into coding, first we need to install the Cytron Motor Drivers Library written by Cytron Technologies in the Arduino IDE.
You can install this library by directly going to Tools > Manage Libraries which opens the Library Manager. In the library manager search for Cytron Motor Drivers Library using the search bar and click on the install button to install the latest version of the library.
After installtion go to File > Examples > Cytron Motor Drivers Library > select any one example.
We are using the example "PWM_DIR_DUAL" from the example menu for the code below.
/*******************************************************************************
* THIS SOFTWARE IS PROVIDED IN AN "AS IS" CONDITION. NO WARRANTY AND SUPPORT
* IS APPLICABLE TO THIS SOFTWARE IN ANY FORM. CYTRON TECHNOLOGIES SHALL NOT,
* IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR CONSEQUENTIAL
* DAMAGES, FOR ANY REASON WHATSOEVER.
********************************************************************************
* DESCRIPTION:
*
* This example shows how to drive a motor using the PWM and DIR pins.
* This example only shows how to drive a single motor for simplicity.
* For dual channel motor driver, both channel work the same way.
*
*
* CONNECTIONS:
*
* Arduino D3 - Motor Driver PWM Input
* Arduino D4 - Motor Driver DIR Input
* Arduino GND - Motor Driver GND
*
*
* AUTHOR : Kong Wai Weng
* COMPANY : Cytron Technologies Sdn Bhd
* WEBSITE : www.cytron.io
* EMAIL : [email protected]
*
*******************************************************************************/
#include "CytronMotorDriver.h"
// Configure the motor driver.
CytronMD motor(PWM_DIR, 3, 4); // PWM = Pin 3, DIR = Pin 4.
// The setup routine runs once when you press reset.
void setup() {
}
// The loop routine runs over and over again forever.
void loop() {
motor.setSpeed(128); // Run forward at 50% speed.
delay(1000);
motor.setSpeed(255); // Run forward at full speed.
delay(1000);
motor.setSpeed(0); // Stop.
delay(1000);
motor.setSpeed(-128); // Run backward at 50% speed.
delay(1000);
motor.setSpeed(-255); // Run backward at full speed.
delay(1000);
motor.setSpeed(0); // Stop.
delay(1000);
}
Opps
Sorry, it looks like some products are not available in selected quantity.