Bonjour je viens d avoir un nano avec un sabertooth 2x32. Je souhaite faire un robot qui avance ou recule. Seulement voilà avec le signal pwm branché sur pin 9 et S1 je ne parviens pas a inverser le sens de rotation moteur. Est ce possible via une commande particulière ? Ajouter un pont H ? Je suis novice et j ai fait pas mal le tour sur le sujet mais je bloque sur ce point. Pour le moment le moteur ne tourne que dans un sens et j arrive à moduler la vitesse. Merci d avance pour votre retour
Bonjour benoistp
Tu ne peux pas commander un moteur, dans les 2 sens, avec seulement un fil de commande, un pont en H nécessite, au moins, 2 fils de commande.
Quel est le modèle de ton pont H?
Mets ton programme en ligne.
Cordialement
jpbbricole
Il y a une bonne doc avec ce driver de moteur, l'as-tu lue?
Il a plusieurs modes de fonctionnement avec un pilotage en tension, en mode servo, par la liaison série. Quel mode utilises-tu?
Il y a des librairies aussi.
Tout est là:
https://www.dimensionengineering.com/products/sabertooth2x32
Voici le seul code qui a fonctionné (sauf la valeur en -255 ne fonctionne pas, ca ne fonctionne que de 0 à 255)
n'ayant pas de connaissances, je pensais pouvoir m'en sortir facilement avec du PWM, mais je me rend compte qu'il y a des limites à ce que je souhaite. @fdunews, j'ai bien épluché les docs, il est compatible Analogique / RC / Série. pour le moment je suis donc en analog pour le PWM. mais j'ai le sentiment que je dois m'orienter vers du Série ? mais à premiere vu cela me semble assez complexe à coder (j'ai fais des petits tests et rien de concluant : voir 2eme code en bas de cette réponse)
Pour le pont H j'ai un L293D. (je l'ai eu avec un kit ROBOBOX pour réaliser une voiture autonome. Sauf que dans ce cas meme, je cherche à avoir de la puissance d'ou le Sabertooth)
const int pinMoteur = 9; // Broche pour le moteur
void setup() {
pinMode(pinMoteur, OUTPUT);
}
void loop() {
// Allumer le moteur à 25% pendant 6 secondes
analogWrite(pinMoteur, 125); // 25% de 255
delay(10000);
// Allumer le moteur à 100% pendant 3 secondes
//analogWrite(pinMoteur, -255); // 100% de 255
//delay(10000);
// Arrêter le moteur pendant 2 secondes
analogWrite(pinMoteur, 0);
delay(5000);
//analogWrite(pinMoteur, 255); // 100% de 255
//delay(10000);
}
///////////////////////////////////////////////////////////////////// 2eme code
#include <SoftwareSerial.h>
SoftwareSerial sabertoothSerial(2, 3); // Utilisez les broches 2 (TX) et 3 (RX) de l'Arduino Nano
void setup() {
sabertoothSerial.begin(9600); // Initialisez la communication série avec le Sabertooth à 9600 bauds
}
void loop() {
// Faire tourner le moteur dans un sens à 75% de la vitesse
controlerMoteur(75);
delay(2000);
// Faire tourner le moteur dans l'autre sens à 75% de la vitesse
controlerMoteur(-75); // Utilisez une valeur négative pour inverser la direction
delay(2000);
}
void controlerMoteur(int pourcentageVitesse) {
// Convertir le pourcentage de vitesse en plage de 0 à 127
int vitesse = map(pourcentageVitesse, -100, 100, 0, 127);
// Assurez-vous que la vitesse est dans la plage acceptée par le Sabertooth
vitesse = constrain(vitesse, 0, 127);
// Envoyer la commande série au Sabertooth
sabertoothSerial.write(0xAA); // Commande spéciale pour le Sabertooth
sabertoothSerial.write(0x01); // Adresse du moteur (adresse 1 pour S1)
sabertoothSerial.write(vitesse); // Vitesse du moteur (0 à 127)
sabertoothSerial.write((0xAA + 0x01 + vitesse) & 0x7F); // Vérification de la somme de contrôle
delay(5); // Attendez un court instant pour laisser le Sabertooth traiter la commande
}
je viens de réussir en protocole Série
Merci de prendre quelques minutes pour lire les bonnes pratiques du forum francophone et les appliquer.
En particulier, la mise en forme du code avec les balises <code/>
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.