Lektion 102: Verwendung von ZK-5DA zur Steuerung von zwei 4A Gleichstrommotoren
In diesem Tutorial werden wir erkunden, wie man das Motorsteuerungsmodul ZK-5DA verwendet, um zwei 4A-Gleichstrommotoren zu steuern. Dieses Modul basiert auf dem TA6586-Chip, der eine effiziente Motorsteuerung mit niedrigem Spannungsabfall und Wärmeabfuhr bietet. Am Ende dieses Tutorials werden Sie in der Lage sein, die Motoren effektiv zu starten, zu stoppen und die Geschwindigkeit zu steuern. Zur weiteren Klärung sollten Sie sich das Video (im Video um 08:55) ansehen.

Hardware erklärt
Die Hauptkomponente dieses Projekts ist das ZK-5DA Motorsteuerungsmodul. Es verwendet den TA6586-Chip, der eine effiziente Steuerung von zwei Gleichstrommotoren ermöglicht. Dieser Chip ist so konzipiert, dass er bis zu 4A Strom pro Motor verarbeiten kann, während er einen niedrigen Spannungsabfall aufrechterhält, was hilft, die Wärmeentwicklung während des Betriebs zu reduzieren.
Neben dem Motorantrieb benötigen Sie ein Arduino-Board, um Steuersignale an das Modul zu senden. Das Arduino wird die Richtung und Geschwindigkeit der Motoren mithilfe von PWM (Pulsweitenmodulation)-Signalen definieren. Das Anschließen der Motoren an die entsprechenden Anschlüsse des Antriebmoduls ermöglicht die Richtungssteuerung und Geschwindigkeitsanpassungen.
Datenblattdetails
| Hersteller | RZ Halbleiter |
|---|---|
| Teilenummer | TA6586 |
| Betriebsspannung | 3-14 V |
| Spitzenstrom | 9 A |
| Gleichstrom | 5 A |
| Bereitschaftsstrom | < 2 µA |
| Spannungsabfall | 400 mV bei 4 A |
| Temperaturbereich | -25 bis 85 °C |
| Paket | Standard-IC-Gehäuse |
| Hinweise / Varianten | Thermischer Abschaltschutz, Überstromschutz |
- Stellen Sie eine ordnungsgemäße Wärmeableitung für den kontinuierlichen Betrieb über 3 A sicher.
- Verwenden Sie PWM-fähige Pins zur Geschwindigkeitsregelung.
- Überprüfen Sie die Spannungswerte, bevor Sie Motoren anschließen.
- Achten Sie auf die Polarität der Verkabelung, um Motorschäden zu vermeiden.
- Überwachen Sie die Temperatur während des Betriebs, um eine Überhitzung zu verhindern.
Verdrahtungsanweisungen

Um das ZK-5DA-Motortreiber-Modul zu verdrahten, beginnen Sie mit dem Anschließen der Stromversorgung. Verbinden Sie den positiven Anschluss Ihrer Stromquelle mit dem '+'-Anschluss des Motortreibers und den negativen Anschluss mit dem '-'-Anschluss. Die beiden Motoren werden an die Ausgangsanschlüsse angeschlossen, die zur besseren Übersicht beschriftet sind.
Für die Arduino-Verbindungen verwenden Sie die PWM-fähigen Pins: verbinden Sie den Pin3zum Steuerpin für Motor 1 und Pin5zum zweiten Steuerpin für Motor 1. Schließen Sie ebenfalls den Pin an6zum Steuerpin für Motor 2 und Pin9zum zweiten Steuerpin für Motor 2. Stellen Sie schließlich sicher, dass alle Massen miteinander verbunden sind.
Codebeispiele und Anleitung
Der Code beginnt mit der Definition der relevanten Pins und der Initialisierung des seriellen Monitors zur Fehlersuche. Die Funktionen zur Motorsteuerung, wieM1undM2, steuern Sie die Motorrichtungen und -geschwindigkeiten.
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
Hier sind die Pins eingerichtet, um die Motoren mit PWM-Signalen zu steuern. DiesetupDie Funktion initialisiert diese Pins als Ausgänge.
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);
}
Dieser Auszug zeigt die Hauptschleife des Programms, in der Motor 2 auf eine Drehung im Uhrzeigersinn mit 80% Geschwindigkeit für 3 Sekunden eingestellt wird, bevor die Bremse betätigt wird.brakeDie Funktion stoppt den Motor, wenn sie aufgerufen wird.
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);
}
}
DasM1Funktion nimmt die Richtung und Geschwindigkeit als Eingaben,ordnet die Geschwindigkeit einem PWM-Wert zu und setzt die entsprechenden Pins, um die Drehrichtung des Motors zu steuern. DiedebugPrintDie Funktion wird aufgerufen, um den aktuellen Zustand im seriellen Monitor anzuzeigen.
Für den vollständigen Code denken Sie daran, unter dem Artikel nachzusehen (im Video um 08:55).
Demonstration / Was zu erwarten ist
Wenn Sie den Code ausführen, erwarten Sie, dass die Motoren in den angegebenen Richtungen mit den festgelegten Geschwindigkeiten zu rotieren beginnen. Der Code umfasst Brems- und Geschwindigkeitsanpassungen, die eine dynamische Steuerung ermöglichen. Wenn die Motoren nicht wie erwartet reagieren, überprüfen Sie Ihre Verdrahtungsverbindungen und stellen Sie sicher, dass die richtigen Pins im Code konfiguriert sind. Seien Sie außerdem vorsichtig, dass die Motoren nicht überhitzen, insbesondere bei hohen Strömen, wie im Test (im Video bei 23:23) angezeigt.
Videostempel
- 00:00 Einleitung
- 03:16 Datenblatt angesehen
- 06:34 Verdrahtung Erklärt
- 08:55 Code erklärt
- 14:28 Demonstration: Motorsteuerung
- 17:22 Demonstration: Maximale Stromprüfung
- 23:23 Spannungsabfalltest bei 3A, 4A und 5A
- 26:28 Schlussbemerkungen
/*
* 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);
}
Dinge, die Sie vielleicht brauchen
-
AliExpressKaufe ZK-5DA von AliExpresss.click.aliexpress.com
Ressourcen & Referenzen
-
ExternKaufe ZK-5DA von AliExpresss.click.aliexpress.com
-
Extern
-
Extern
-
Extern
-
ExternZK-5DA bei Amazon UK kaufenamzn.to
Dateien📁
Datenblatt (pdf)
-
TA6586 motor Driver datasheet
TA6586_motor_Driver_datasheet.pdf0.22 MB