Contrôleur de vitesse de moteur PWM XY-1250 10-50A/60A 3000W utilisant Arduino
Dans ce tutoriel, nous allons vous montrer comment prendre un contrôleur de vitesse de moteur PWM XY-1250 courant commun (évalué pour 10-50A/60A jusqu'à 3000W) et le modifier afin que vous puissiez contrôler sa vitesse avec un Arduino au lieu de son bouton intégré. C'est une demande populaire parmi les amateurs qui souhaitent intégrer un contrôleur de moteur haute puissance dans leurs propres projets, comme construire un longboard électrique sur mesure, un contrôle de vitesse de broche CNC, un système de conduite robotique ou un système de ventilation automatisé. En remplaçant le potentiomètre manuel par un signal numérique, vous obtenez un contrôle précis et programmable de la vitesse de votre moteur, ce qui ouvre un monde de possibilités pour l'automatisation et le fonctionnement à distance.

Voici quelques projets pratiques que vous pouvez réaliser avec cette configuration :
- Construire un longboard électrique personnalisé ou un kart avec une montée de vitesse programmable.
- Création d'un contrôleur de vitesse de broche de machine CNC qui peut être ajusté via G-code.
- Construire un ventilateur de serre automatique qui ajuste sa vitesse en fonction des capteurs de température.
- Créer un robot télécommandé avec des moteurs à couple élevé.
- Développement d'un système de tapis roulant intelligent pour un atelier ou une petite usine.
Composants matériels
- Module de commande de vitesse de moteur PWM XY-1250 (10-50A/60A, 3000W)
- Arduino Uno (ou toute carte compatible)
- Moteur à courant continu (pour essai)
- Alimentation électrique en courant continu (12V-36V recommandé)
- Potentiomètre (10kΩ) - pour l'option de contrôle manuel
- Fils de connexion
- Fer à souder et fil (pour modifier le PCB)
Comment fonctionne le XY-1250
Le XY-1250 utilise un circuit intégré minuterie 555 (étiqueté "U3" sur la carte) pour générer un signal PWM. Ce signal contrôle la porte de quatre MOSFET qui commutent le circuit du moteur haute puissance. Le rapport cyclique - qui détermine la vitesse du moteur - est normalement réglé par le potentiomètre onboard connecté à la broche 3 du minuteur 555. Pour contrôler ceci avec un Arduino, nous devons déconnecter la sortie du 555 des portes des MOSFET et alimenter notre propre signal PWM à la place.
Cette modification est nécessaire car l'Arduino ne peut pas piloter directement les portes des MOSFET à fort courant. En coupant les pistes du PCB entre le minuteur 555 et les MOSFET, nous pouvons injecter en toute sécurité notre propre signal PWM basse tension depuis l'Arduino, ce qui nous donne un contrôle numérique total sur la vitesse du moteur. (dans la vidéo à 01:42)
Modification de la carte XY-1250
Avant de pouvoir connecter l'Arduino, nous devons effectuer deux découpes sur le PCB pour isoler la sortie du timer 555 des portes MOSFET. Voici comment faire :
- Localisez le circuit intégré 555 (U3) sur la carte. Il a un petit point ou une ligne indiquant la broche 1.
- Identifiez les traces du PCB provenant de la broche 3 (la sortie) qui mènent aux diodes connectées aux portes du MOSFET.
- À l'aide d'un couteau bien aiguisé ou d'un outil rotatif avec un disque de coupe, coupez soigneusement ces traces à deux endroits, un pour chaque chemin de sortie.
- Après avoir coupé, utilisez un testeur de continuité pour vérifier que la coupure est complète. Vous ne devriez entendre aucun bip entre la broche 3 du 555 et la zone de la porte du MOSFET.
Cette modification est essentielle : elle empêche le signal du timer 555 d'interférer avec le signal PWM de notre Arduino.
Guide de câblage
Le câblage pour ce projet implique de connecter l'Arduino à la carte XY-1250 modifiée. Voici le schéma de connexion :
- Alimentation pour Arduino :Le XY-1250 dispose d'un régulateur de tension qui fournit environ 8,5V. Connectez cette sortie (le fil rouge entre les deux condensateurs) au broche VIN de l'Arduino. Cela alimente l'Arduino directement à partir de l'alimentation du moteur.Important : Ne pas connecter cela au pin 5V - cela pourrait endommager l'Arduino.
- Connexion à la terre :Connectez la masse de l'XY-1250 à n'importe quelle broche GND de l'Arduino.
- Signaux PWM :Connectez la broche 5 de l'Arduino à la première trace coupée (où se trouvait la sortie du 555), et la broche 6 de l'Arduino à la deuxième trace coupée.
- Potentiomètre (optionnel) :Si vous souhaitez un contrôle manuel, connectez un potentiomètre de 10 kΩ à la pin A0 de l'Arduino, les deux autres pins à 5V et GND.
- Moteur :Connectez votre moteur à courant continu aux bornes de sortie du module XY-1250.
Une fois câblé, l'Arduino sera alimenté par la même source que le moteur, et il enverra des signaux PWM synchronisés aux deux circuits de commande de MOSFET. (dans la vidéo à 10:25)
Explication du code
Le code Arduino est simple et se concentre sur la génération des signaux PWM. Voici les principales parties configurables par l'utilisateur :
#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
pwmPin1etpwmPin2Ce sont les broches Arduino qui envoient le signal PWM aux deux circuits de porte MOSFET. Celles-ci sont définies comme les broches 5 et 6, qui sont toutes deux des broches compatibles PWM sur l'Arduino Uno.controlPinest la broche analogique connectée au potentiomètre (A0). Si vous ne souhaitez pas utiliser un potentiomètre, vous pouvez l'ignorer.
Dans leloop()fonction, le code lit la valeur du potentiomètre (0-1023), la mappe à une valeur PWM (0-255) et l'envoie aux deux broches PWM. Ledelay(500)met la fréquence de rafraîchissement à deux fois par seconde - vous pouvez réduire cela àdelay(100)pour une réponse plus fluide.
Le code inclut également un code personnalisé.toPWM()fonction qui convertit une valeur en pourcentage (0-100) en une valeur PWM (0-255). Cela est utile si vous souhaitez définir une vitesse spécifique sans potentiomètre. Par exemple, appelertoPWM(50)retournerait 127, représentant un cycle de service de 50 %. Vous pouvez utiliser cette fonction dans votre propre code pour régler la vitesse du moteur directement.
Tests et démonstrations
Après avoir téléchargé le code et connecté le tout, vous pouvez tester la configuration. Si vous utilisez un potentiomètre, en le faisant tourner, vous ajusterez en douceur la vitesse du moteur de 0 à 100 %. Le moniteur série affichera à la fois la valeur analogique brute (0-1023) et la valeur PWM mappée (0-255).
Si vous souhaitez contrôler la vitesse par programmation, vous pouvez remplacer la lecture du potentiomètre par une valeur fixe. Par exemple, en définissantint pwm = toPWM(20);fera fonctionner le moteur à 20 % de vitesse. C'est parfait pour les applications où vous souhaitez que le moteur fonctionne à une vitesse spécifique sans ajustement manuel. (dans la vidéo à 16:42)
Démonstration de projet en direct
Dans la vidéo, vous pouvez voir le contrôleur modifié XY-1250 pilotant un petit moteur à courant continu. La démonstration montre :
- Contrôler la vitesse du moteur avec un potentiomètre connecté à l'Arduino.
- Régler le moteur à une vitesse fixe de 20 % en utilisant le
toPWM()fonction. - Augmenter la vitesse à 50 % puis à 80 % pour montrer toute l'étendue du contrôle.
Les lectures de l'oscilloscope confirment que les deux signaux PWM sont parfaitement synchronisés, sans différence de phase entre les deux canaux. Cela garantit que les MOSFETs sont alimentés de manière uniforme, prévenant une usure inégale ou une surchauffe. (dans la vidéo à 14:56)
Chapitres
- [00:00] Introduction et aperçu du projet
- [01:42] Comment fonctionne le contrôleur PWM XY-1250
- [04:28] Tester le signal d'origine avec un oscilloscope
- [07:02] Couper les pistes du circuit imprimé pour isoler le timer 555
- Câblage de l'Arduino au module modifié
- [12:18] Explication du code Arduino
- [14:56] Démonstration du contrôle moteur avec un potentiomètre
- [16:42] Contrôler la vitesse par programmation avec des valeurs fixes
- [20:32] Résumé final et remarques de clôture
Images
/*
* Modify XY-1250 12-50V 60A PWM to work with Arduino.
get this code and other resouces http://robojax.com/RTJ162
If you want to control it without a potentiometer, see http://robojax.com/RTJ162
*
* Written by Ahmad Shamshiri
* on Saturday, June 15, 2019 at 16:14
* in Ajax, Ontario, Canada
* www.robojax.com
* Watch the video instruction: https://youtu.be/k13iTmvPtUU
*/
#define pwmPin1 5
#define pwmPin2 6
#define controlPin A0
void setup() {
pinMode(pwmPin1,OUTPUT);
pinMode(pwmPin2,OUTPUT);
Serial.begin(9600);
}
void loop() {
int potValue = analogRead(controlPin);
Serial.print(potValue);
int pwm =map(potValue, 0,1023, 0, 255);
analogWrite(pwmPin1,pwm);
analogWrite(pwmPin2,pwm);
Serial.print(" ");
Serial.println(pwm);
delay(500);
}
/*
* @brief Converts a percentage value from 0 to 100% to 0-255.
* @param v An integer value representing a percentage from 0-100.
* @return A value from 0 to 255.
*/
int toPWM(int v){
return map(v, 0,100,0,255);
}
/*
* file: PWM_for_XY1260_module_no_pot
* Modify XY-1250 12-50V 60A PWM to work with Arduino
* This code allows you to control the motor without a potentiometer. See video for demonstration.
* resources page for this project https://robojax.com/RTJ162
Watch the video instruction on youTube: https://youtu.be/ZLZr2AZgmPI
*
* How to use:
* To control speed at 100%
motorControl(100);
delay(3000);//keep it running for 3 seconds
* To control speed at 400%
motorControl(40);
delay(3000);//keep it running for 3 seconds
* To stop motor
motorControl(0); //set zero
delay(3000);//keep it running for 3 seconds
* Written by Ahmad Shamshiri
* on Saturday, January 30, 2021, at 12:49
* in Ajax, Ontario, Canada
* www.Robojax.com
* Watch the video instruction: https://youtu.be/ZLZr2AZgmPI
*/
#define pwmPin1 3
#define pwmPin2 6
bool defaultMotorON = false;// or set to "true" to make the motor start
unsigned int defaultSpeed= 20;//20% set it in % 0=stop, 100=full speed
int toPWM(int);//prototype
void setup() {
pinMode(pwmPin1,OUTPUT);
pinMode(pwmPin2,OUTPUT);
Serial.begin(9600);
Serial.print("Control XY-1260 without pot");
if(defaultMotorON){
analogWrite(pwmPin1,toPWM(defaultSpeed));
analogWrite(pwmPin2,toPWM(defaultSpeed));
}else{
analogWrite(pwmPin1,0);
analogWrite(pwmPin2,0);
}
}
void loop() {
motorControl(100);//set speed to 100%
delay(3000);//keep motor running at 100% for 3 seconds
motorControl(0);//stops motor
delay(4000);//keep motor stopped for 4 seconds
motorControl(45);//set speed to 45%
delay(3000);//keep motor running at 45% for 3 seconds
motorControl(0);//stops motor
delay(4000);//keep motor stopped for 4 seconds
//from 0 to 100% with 50 millisecond delay (increasing speed)
for(int i=0; i<100; i++)
{
motorControl(i);//set speed with value of i from 0 to 100
delay(50);//give motor 50 milliseconds before going to the next value
}//for loop end
motorControl(0);//stops motor
delay(4000);//keep motor stopped for 4 seconds
//from 100% to 10 with 50 millisecond delay (decreasing speed)
for(int i=100; i>0; i--)
{
motorControl(i);//set speed with value of i from 0 to 100
delay(50);//give motor 50 milliseconds before going to the next value
}//for loop end
motorControl(0);//stops motor
delay(4000);//keep motor stopped for 4 seconds
}//loop end
/*
* @brief converts % value from 0 to 100% to 0-255
* @param v is integer value representing % from 0-100
* @return will return value from 0 to 255
*/
int toPWM(int v){
return map(v, 0,100,0,255);
}//
/*
* @brief controls the speed of motor with value from 0 to 100%
* @param speed is integer value representing % from 0-100
* @return none
* written January 30, 2021 by Ahmad Shamshiri
* www.robojax.com
*
*/
void motorControl(int speed)
{
int pwm= map(speed, 0,100,0,255);
analogWrite(pwmPin1,pwm);
analogWrite(pwmPin2,pwm);
}
Ce dont vous pourriez avoir besoin
-
Amazon
-
Amazon60A 3000W PWM module on Amazonamzn.to
-
eBay
-
eBay60A 3000W PWM module on eBayebay.us
-
AliExpress60A 100A Motor Speed Controller on AliExpress-1s.click.aliexpress.com
-
AliExpress60A 100A Motor Speed Controller on AliExpress-2s.click.aliexpress.com
-
AliExpress60A 3000W PWM module on AliExpresss.click.aliexpress.com
-
Banggood60A 100A Motor Speed Controller on Banggoodbanggood.com
Ressources et références
-
Externe
-
ExterneFiche technique pour le MOSFET NCE7190A (8 pièces) (PDF)datasheet.lcsc.com
Fichiers📁
Aucun fichier disponible.