Lezione 102: Utilizzare ZK-5DA per controllare due motori DC da 4A
In questo tutorial, esploreremo come utilizzare il modulo driver per motori ZK-5DA per controllare due motori CC da 4A. Questo modulo si basa sul chip TA6586, che offre un controllo efficiente del motore con bassa caduta di tensione e dissipazione di calore. Alla fine di questo tutorial, sarai in grado di avviare, fermare e controllare efficacemente la velocità dei motori. Per ulteriori chiarimenti, assicurati di controllare il video a (nel video alle 08:55).

Hardware Spiegato
Il componente principale di questo progetto è il modulo driver per motori ZK-5DA. Utilizza il chip TA6586, che consente un controllo efficiente di due motori CC. Questo chip è progettato per gestire fino a 4A di corrente per motore, mantenendo una bassa caduta di tensione, il che aiuta a ridurre la generazione di calore durante il funzionamento.
Oltre al driver del motore, avrai bisogno di una scheda Arduino per inviare segnali di controllo al modulo. L'Arduino definirà la direzione e la velocità dei motori utilizzando segnali PWM (Modulazione di Larghezza di Impulso). Collegare i motori ai terminali appropriati sul modulo driver consente il controllo direzionale e le regolazioni di velocità.
Dettagli della scheda tecnica
| Produttore | RZ Semiconductor |
|---|---|
| Numero di parte | TA6586 |
| Tensione di esercizio | 3-14 V |
| Corrente di picco | 9 A |
| Corrente continua | 5 A |
| Corrente di standby | < 2 µA |
| Caduta di tensione | 400 mV a 4 A |
| Intervallo di temperatura | -25 a 85 °C |
| Pacchetto | Pacchetto IC standard |
| Note / varianti | Arresto termico, protezione da sovracorrente |
- Garantire una corretta dissipazione del calore per un funzionamento continuo sopra i 3 A.
- Utilizza i pin abilitati PWM per il controllo della velocità.
- Verificare le classificazioni di tensione prima di collegare i motori.
- Fai attenzione alla polarità del cablaggio per evitare danni al motore.
- Monitorare la temperatura durante il funzionamento per prevenire surriscaldamenti.
Istruzioni di cablaggio

Per collegare il modulo driver del motore ZK-5DA, inizia collegando l'alimentatore. Collega il terminale positivo della tua fonte di alimentazione al terminale '+' del driver del motore e il terminale negativo al terminale '-'. I due motori saranno collegati ai terminali di uscita, che sono etichettati per una maggiore chiarezza.
Per le connessioni Arduino, utilizza i pin abilitati PWM: collega il pin3al pin di controllo per il motore 1 e pin5al secondo pin di controllo per il motore 1. Allo stesso modo, collegare il pin6al pin di controllo per il motore 2, e pin9al secondo pin di controllo per il motore 2. Infine, assicurati che tutti i terreni siano collegati tra loro.
Esempi di codice e guida passo passo
Il codice inizia definendo i pin rilevanti e inizializzando il monitor seriale per il debug. Le funzioni di controllo del motore, comeM1eM2, gestire le direzioni e le velocità del motore.
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
Qui, i pin sono configurati per controllare i motori utilizzando segnali PWM. Ilsetupla funzione inizializza questi pin come uscite.
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);
}
Questo estratto mostra il ciclo principale del programma, in cui il motore 2 è impostato per funzionare in senso orario al 80% della velocità per 3 secondi prima di applicare il freno.brakeLa funzione ferma il motore quando viene chiamata.
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);
}
}
IlM1funzione prende la direzione e la velocità come input, mappa la velocità a un valore PWM e imposta i pin appropriati per controllare la direzione di rotazione del motore. IldebugPrintla funzione viene chiamata per mostrare lo stato attuale nel monitor seriale.
Per il codice completo, ricorda di controllare sotto l'articolo (nel video alle 08:55).
Dimostrazione / Cosa Aspettarsi
Quando esegui il codice, aspettati che i motori inizino a ruotare nelle direzioni specificate alle velocità impostate. Il codice include freni e regolazioni della velocità, consentendo un controllo dinamico. Se i motori non rispondono come previsto, controlla di nuovo le tue connessioni elettriche e assicurati che i pin corretti siano configurati nel codice. Inoltre, fai attenzione al surriscaldamento, in particolare quando si estraggono correnti elevate, come indicato durante il test (nel video alle 23:23).
Timestamp video
- 00:00 Introduzione
- 03:16 Scheda dati visualizzata
- 06:34 Spiegazione dei cablaggi
- 08:55 Codice spiegato
- 14:28 Dimostrazione: Controllo del Motore
- 17:22 Dimostrazione: Test di corrente massima
- 23:23 Test di caduta di tensione a 3A, 4A e 5A
- 26:28 Osservazioni conclusive
/*
* 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);
}
Cose di cui potresti avere bisogno
-
AliExpressAcquista ZK-5DA da AliExpresss.click.aliexpress.com
Risorse e riferimenti
-
EsternoAcquista ZK-5DA da AliExpresss.click.aliexpress.com
-
EsternoAcquista ZK-5DA da Amazon Canadaamzn.to
-
Esterno
-
EsternoAcquista ZK-5DA su Amazon UKamzn.to
-
EsternoAcquista ZK-5DA su Amazon, USAamzn.to
File📁
Scheda tecnica (pdf)
-
TA6586 motor Driver datasheet
TA6586_motor_Driver_datasheet.pdf0.22 MB