Урок 102: Использование ZK-5DA для управления двумя 4A постоянными моторами
В этом учебном курсе мы рассмотрим, как использовать модуль драйвера мотора ZK-5DA для управления двумя DC моторами по 4А. Этот модуль основан на чипе TA6586, который обеспечивает эффективное управление моторами с низким падением напряжения и теплопередачей. К концу этого учебного курса вы сможете эффективно запускать, останавливать и контролировать скорость моторов. Для дополнительной ясности не забудьте посмотреть видео (в видео на 08:55).

Объяснение аппаратного обеспечения
Основным компонентом этого проекта является модуль драйвера мотора ZK-5DA. Он использует чип TA6586, который позволяет эффективно управлять двумя постоянными моторами. Этот чип предназначен для работы с током до 4А на мотор, при этом поддерживается низкое падение напряжения, что помогает снизить выделение тепла во время работы.
В дополнение к моторному драйверу вам понадобится плата Arduino для отправки управляющих сигналов на модуль. Arduino будет определять направление и скорость моторов, используя сигналы ШИМ (широтно-импульсная модуляция). Подключение моторов к соответствующим клеммам на драйверном модуле позволяет управлять направлением и регулировать скорость.
Технические характеристики
| Производитель | RZ Полупроводник |
|---|---|
| Номер детали | ТА6586 |
| Рабочее напряжение | 3-14 В |
| Пиковый ток | 9 А |
| Постоянный ток | 5 A |
| Ток в режиме ожидания | < 2 мкА |
| Падение напряжения | 400 мВ при 4 А |
| Температурный диапазон | -25 до 85 °C |
| Пакет | Стандартный корпус ИС |
| Заметки / варианты | Тепловое отключение, защита от перегрузки по току |
- Обеспечьте правильное рассеивание тепла для непрерывной работы выше 3 А.
- Используйте выводы с поддержкой ШИМ для контроля скорости.
- Проверьте номиналы напряжения перед подключением двигателей.
- Обратите внимание на полярность проводки, чтобы избежать повреждения мотора.
- Контролируйте температуру во время работы, чтобы предотвратить перегрев.
Инструкции по подключению

Чтобы подключить модуль драйвера мотора ZK-5DA, начните с подключения источника питания. Подключите положительный вывод вашего источника питания к клемме '+' на драйвере мотора, а отрицательный вывод — к клемме '-'. Два мотора будут подключены к выходным клеммам, которые обозначены для ясности.
Для подключения к Arduino используйте пины с поддержкой ШИМ: подключите пин3к управляющему выводу для мотора 1 и выводу5ко второму контрольному выводу для мотора 1. Аналогичным образом подключите вывод6к управляющему контакту мотора 2, и контакт9ко второму контрольному пину для мотора 2. Наконец, убедитесь, что все заземления соединены вместе.
Примеры кода и пошаговое руководство
Код начинается с определения соответствующих пинов и инициализации последовательного монитора для отладки. Функции управления двигателем, такие какM1иM2, управляйте направлениями и скоростями мотора.
const int D0=9; // Motor 1 PWM pin
const int D1=6; // Motor 1 direction pin
const int D2=5; // Motor 2 PWM pin
const int D3=3; // Motor 2 direction pin
Здесь контакты настроены для управления моторами с использованием PWM-сигналов.setupфункция инициализирует эти контакты как выходы.
void loop() {
M2(CW, 80); // Motor 2 runs clockwise at 80% speed
delay(3000); // Wait for 3 seconds
brake(2); // Apply brake to motor 2
delay(1000);
}
Этот фрагмент показывает основной цикл программы, в котором мотор 2 устанавливается для работы по часовой стрелке на 80% скорости в течение 3 секунд перед применением тормоза.brakeфункция останавливает двигатель при вызове.
void M1(bool direction, int speed) {
int pwm = map(speed, 0, 100, 0, 255); // Map speed to PWM range
if (direction == CW) {
analogWrite(D0, pwm);
analogWrite(D1, LOW);
} else {
analogWrite(D1, pwm);
analogWrite(D0, LOW);
}
}
ТотM1функция принимает направление и скорость в качестве входных данных, сопоставляет скорость со значением ШИМ и устанавливает соответствующие контакты для управления направлением вращения мотора.debugPrintфункция вызывается для отображения текущего состояния в последовательном мониторе.
Для полного кода не забудьте проверить под статьей (в видео на 08:55).
Демонстрация / Что ожидать
Когда вы запустите код, ожидайте, что моторы начнут вращаться в указанных направлениях с установленными скоростями. Код включает в себя торможение и регулировку скорости, что позволяет динамически управлять процессом. Если моторы не реагируют, как ожидалось, дважды проверьте ваши соединения и убедитесь, что правильные контакты настроены в коде. Кроме того, будьте осторожны с перегревом, особенно при потреблении больших токов, как было указано во время теста (в видео на 23:23).
Временные метки видео
- 00:00 Введение
- 03:16 Просмотрен технический лист
- 06:34 Объяснение проводки
- 08:55 Объяснение кода
- 14:28 Демонстрация: Управление двигателем
- 17:22 Демонстрация: Испытание максимального тока
- 23:23 Испытание падения напряжения при 3А, 4А и 5А
- 26:28 Заключительные замечания
/*
* Lesson 102: Using ZK-5DA to control 2 DC motors, each 4A
*
* Full video details: https://youtu.be/W_Wm28nQAYA
* Video timing:
00:00 Introduction
03:16 Datasheet viewed
06:34 Wiring explained
08:55 Code explained
14:28 Demonstration: Motor control
17:22 Demonstration: Maximum current test
23:23 Voltage drop test at 3A, 4A, and 5A
26:28 Conclusion remarks
* Written by Ahmad Shamshiri for Arduino Step by Step Course by Robojax
* www.Robojax.com
* on Mar 22, 2022
*
* This code is part of Arduino Step by Step Course which starts here: https://youtu.be/-6qSrDUA5a8
*
* For the library for this code, visit http://robojax.com/
*
If you found this tutorial helpful, please support me so I can continue creating
content like this. Make a donation using PayPal or a credit card: https://bit.ly/donate-robojax
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.
* This code has been downloaded from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
//all pins must be PWM enabled pins with ~ printed beside them
const int D0=9;//~
const int D1=6;
const int D2=5;
const int D3=3;
bool CW = true;
bool CCW = false;
bool debug = false;
void setup() {
Serial.begin(9600);
Serial.println("Robojax TA6586 Motor Control");
pinMode(D0, OUTPUT);
pinMode(D1, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D3, OUTPUT);
}
void loop() {
// * Full video details: https://youtu.be/W_Wm28nQAYA
M2(CW, 80);//motor 1 runs CW at 80% speed
M1(CW, 100); //motor 1 runs CW at 100% speed
delay(3000);//wait for 3 seconds
brake (2);//apply brake to motor 2
delay(1000);
M2(CCW, 60);//motor 2 runs CCW at 60% speed
delay(3000);//wait for 3 seconds
brake (2);//apply brake to motor 2
brake (1);//apply brake to motor 1
delay(3000);//wait for 3 seconds
for(int i=0; i<=100; i++)
{
M1(CCW, i);//run motor 1 to CCW direction with i% speed
delay(100);
}
delay(2000);
brake (2);//apply brake to motor 2
delay(3000); delay(3000);//wait for 3 seconds}
}//loop ends
/*
* M1(bool direction,int speed)
* @brief runs motor 1
* @param direction is CW or CCW,
* @param speed is an integer between 0 to 100
* @return returns none
* Written by Ahmad Shamshiri for robojax.com
* on Mar 22, 2022
* Full video details: https://youtu.be/W_Wm28nQAYA
*/
void M1(bool direction,int speed)
{
int pwm=map(speed, 0, 100, 0, 255);
if(direction == CW)
{
analogWrite(D0,pwm);
analogWrite(D1,LOW);
}else{
analogWrite(D1,pwm);
analogWrite(D0,LOW);
}
debugPrint(1, direction, speed, false);
}//M1 end
/*
* M2(bool direction,int speed)
* @brief runs motor 2
* @param direction is CW or CCW,
* @param speed is an integer between 0 to 100
* @return returns none
* Written by Ahmad Shamshiri for robojax.com
* on Mar 22, 2022
* Full video details: https://youtu.be/W_Wm28nQAYA
*/
void M2(bool direction,int speed)
{
int pwm=map(speed, 0, 100, 0, 255);
if(direction == CW)
{
analogWrite(D2,pwm);
analogWrite(D3,LOW);
}else{
analogWrite(D3,pwm);
analogWrite(D2,LOW);
}
debugPrint(2, direction, speed, false);
}//M2 ends
/*
* brake(int motor)
* @brief applies brake to a motor
* @param motor is an integer (1 or 2)
* @return returns none
* Written by Ahmad Shamshiri for robojax.com
* on Mar 22, 2022
* Full video details: https://youtu.be/W_Wm28nQAYA
*/
void brake(int motor)
{
if(motor == 1)
{
analogWrite(D0,HIGH);
analogWrite(D1,HIGH);
}else{
analogWrite(D2,HIGH);
analogWrite(D3,HIGH);
}
debugPrint(motor, true, 0, true);
}//brake ends
/*
* debugPrint(int motor, bool direction, int speed, bool stop)
* @brief prints debugging information
* @param motor is an integer (1 or 2)
* @param direction is CW or CCW
* @param speed is an integer from 0 to 100
* @param stop is true or false; if true, the word "stop" is printed
* @return returns none
* Written by Ahmad Shamshiri for robojax.com
* on Mar 22, 2022
* Full video details: https://youtu.be/W_Wm28nQAYA
*/
void debugPrint(int motor, bool direction, int speed, bool stop)
{
if(debug)
{
Serial.print("Motor: ");
Serial.print(motor);
if(stop && motor>0)
{
Serial.println(" Stopped");
}else{
if(direction)
{
Serial.print(" CW at ");
}else{
Serial.print(" CCW at ");
}
Serial.print(speed);
Serial.println(" %");
}
}//debug
}
//not used but can be used to apply brake on both motors
void fullBrake()
{
brake(1);
brake(2);
}
Вещи, которые могут вам понадобиться
-
АлиЭкспрессPurchase ZK-5DA from AliExpresss.click.aliexpress.com
Ресурсы и ссылки
-
ВнешнийPurchase ZK-5DA from AliExpresss.click.aliexpress.com
-
Внешний
-
Внешний
-
ВнешнийPurchase ZK-5DA from Amazon UKamzn.to
-
ВнешнийPurchase ZK-5DA from Amazon, USAamzn.to
Файлы📁
Технический паспорт (pdf)
-
TA6586 motor Driver datasheet
TA6586_motor_Driver_datasheet.pdf0.22 MB