Signal pwm fonctionne avec un servo mais ne fonctionne pas avec un ESC (Electric Speed Controller)

Bonjour,

Sur une arduino Mega, je génère un signal PWM en faisant varier la sortie de la pin 7 (fonction dans un timer). (via les port (PORT H4 en l'occurence)
Le signal généré permet de piloter correctement mais cela ne fonctionne pas avec un ESC.
En regardant à l'oscilloscope, on constate que le niveau haut du PWM chute à 4V (au lieu de 4.88) et que le signal n'arrive pas a descendre sous les 3V.

image

En passant par la lib Servo, le signal PWM généré permet de piloté le servo et l'ESC sans problème. Le signal n'est pas perturbé par la charge.

Je vous remercie par avance pour votre aide.

Remarque :
Avec le signal généré sans la lib, on constate que le retour à 0 n'est pas aussi net que le passage au niveau haut. Cela semble corrigé en ajoutant une resistance de 10 kohm ou plus.
En revanche, en mettant une resistance en sortie, la tension du signal chute. Pour 10 kohm la tension au niveau haut passe de 4.88V à 1.14V.
en utilisant la lib Servo. Le niveau haut du signal n'est absolument pas perturbé.

Bonjour hadri1

Pourrais tu mettre ce programme en ligne?

Cordialement
jpbbricole

Bonjour jpbbricole,

Le timer 1 est défini de manière a exécuter la fonction "pwm_generator" périodiquement.
Dans la fonction d'interruption associée, la fonction pwm_generator est executée.
la fonction récupère la largeur du pwm (en microsecondes) ainsi que la période souhaitée

ISR(TIMER1_COMPA_vect) { 
  pwm_generator(t_pwm[0], SERVO_PERIOD_MS);
}

La fonction pwm_generator génére le signal par commande des sorties:
SERVO_1_PIN_LOW et SERVO_1_PIN_HIGH défine comme cela :

#define SERVO_1_PIN_HIGH           PORTH |= 1<<4;
#define SERVO_1_PIN_LOW            PORTH &= ~(1<<4);

Le code fonctionne correctement.

Pour moi, il s'agit plutôt d'un problème d'ordre electronique plutôt que du codage. Qu'en pensez vous ?

Le signal à l'oscillo fait penser soit à un conflit sur la sortie, soit à une sortie qui n'a pas été définie en OUTPUT, soit à une écriture directe dans un mauvais registre.

Comme l'a demandé @jpbbricole ce serait bien de poster ton code et d'indiquer le nom des librairies utilisées avec un lien vers la librairie si ce n'est pas une librairie standard. Ce qui nous éviterais de spéculer sur ce que tu as pu faire.

j'ai un peu honte mais cela venait bien d'un oubli de déclaration de la pin en output.
Bien vu.

Quel charlot. :slight_smile:

Bon et bien maintenant c'est réglé. Bonne continuation.

1 Like

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