Rampe acceleration brushless trop longue même en réglant les paramêtres au mini

Bonjour,

Mes moteurs brushless ne répondent pas en temps réel en actionnant le potentiomètre sur l'arduino uno. ci-après mon programme:

:wink:

bonjour
tu mets ton prg en forme
dans l'ide arduino, menu "outils" puis "format"
image

puis tu fais un copié de ton prg
sur le forum, dans ton post, dans la barre de menu, tu as le mot code entre balises
image
tu cilques dessus.
apparaissent deux lignes de petits points.......................
c'est entre ces deux lignes de petits points qu'il faut coller ton code.
image

c'est mieux avec le programme :
// Broches PWM pour les moteurs
const int pwmPin1 = 9;
const int pwmPin2 = 10;
// Broche pour le potentiomètre
const int potPin = A0;

// Chaîne pour stocker les entrées série
String chaineEntree = "";
// Indicateur pour une chaîne complète
boolean stringComplete = false;
// Valeurs PWM actuelles
int valeurPwmActuelle1 = 0;
int valeurPwmActuelle2 = 0;

// Gestion des rampes
// Délai pour la rampe d'accélération en millisecondes
int rampeAcc = 30;
// Délai pour la rampe de décélération en millisecondes
int rampeDcl = 30;

// Paramètre moteur
int VitesseMax = 1800;

void setup() {
// Configuration des broches PWM comme sorties
pinMode(pwmPin1, OUTPUT);
pinMode(pwmPin2, OUTPUT);
// Initialisation de la communication série
Serial.begin(9600);
// Message d'invite
Serial.println("Entrez la vitesse du moteur en tr/min (0-" + String(VitesseMax) + "):");
}

void loop() {
// Lire la valeur du potentiomètre
int potValue = analogRead(potPin);
// Conversion en valeur PWM
int valeurPwmPot = map(potValue, 0, 1023, 0, 255);

// Régler la vitesse des moteurs en fonction du potentiomètre
analogWrite(pwmPin1, valeurPwmPot);
analogWrite(pwmPin2, valeurPwmPot);

// Afficher la vitesse actuelle basée sur le potentiomètre
int vitessePot = map(valeurPwmPot, 0, 255, 0, VitesseMax);
Serial.println("Vitesse des moteurs (potentiomètre) : " + String(vitessePot) + " tr/min");

if (stringComplete) {
// Vitesse cible en tr/min
int vitesseCible = chaineEntree.toInt();
// Conversion en valeur PWM
int valeurPwmCible = map(vitesseCible, 0, VitesseMax, 0, 255);

if (valeurPwmCible >= 0 && valeurPwmCible <= 255) {
  // Rampe d'accélération pour les deux moteurs
  while (valeurPwmActuelle1 < valeurPwmCible || valeurPwmActuelle2 < valeurPwmCible) {
    if (valeurPwmActuelle1 < valeurPwmCible) valeurPwmActuelle1++;
    if (valeurPwmActuelle2 < valeurPwmCible) valeurPwmActuelle2++;
    analogWrite(pwmPin1, valeurPwmActuelle1);
    analogWrite(pwmPin2, valeurPwmActuelle2);
    delay(rampeAcc);
  }
  // Rampe de décélération pour les deux moteurs
  while (valeurPwmActuelle1 > valeurPwmCible || valeurPwmActuelle2 > valeurPwmCible) {
    if (valeurPwmActuelle1 > valeurPwmCible) valeurPwmActuelle1--;
    if (valeurPwmActuelle2 > valeurPwmCible) valeurPwmActuelle2--;
    analogWrite(pwmPin1, valeurPwmActuelle1);
    analogWrite(pwmPin2, valeurPwmActuelle2);
    delay(rampeDcl);
  }
  // Conversion de la valeur PWM en vitesse en tr/min
  int vitesseActuelle = map(valeurPwmActuelle1, 0, 255, 0, VitesseMax);  
  Serial.println("Vitesse des moteurs réglée sur " + String(vitesseActuelle) + " tr/min, correspondant à une valeur PWM de " + String(valeurPwmActuelle1));
} else {
  Serial.println("Valeur invalide. Entrez une vitesse en tr/min entre 0 et " + String(VitesseMax) + ".");
}

Serial.println("");
// Message d'invite
Serial.println("Entrez la vitesse du moteur en tr/min (0-" + String(VitesseMax) + "):");
chaineEntree = "";
stringComplete = false;

}
}

void serialEvent() {
while (Serial.available()) {
// Lire le nouveau caractère
char inChar = (char)Serial.read();
// Ajouter le caractère à la chaîne
chaineEntree += inChar;
// Si le caractère est une nouvelle ligne, la chaîne est complète
if (inChar == '\n') {
stringComplete = true;
}
}
}

Bonjour fablabcopernic

Ton programme n'est pas entre les balises, réédites le post, sélectionne ton programme et clique sur:
image

Je n'ai pas testé ton programme, mais une chose m'étonne, tu as des moteurs brushless qui se commandent, en général avec des ESC
image
or un ESC ne se commande pas avec du PWM mais comme un servo, donc avec une bibliothèque idoine comme
image

Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.