Arduino nano Sabertooth et pwm

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 :slight_smile:

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.