Signal pwm pour esc moteur brushed

Bonjour à tous,

Je travaille sur un petit projet de drone avec des moteurs brushed (3.7V, 50 000 tr/min) et un ESP32-C3 SuperMini.

J'essaie de générer un signal PWM pour contrôler mes ESC, le signal doit être compris entre 1000µs et 2000µs , mais je n'arrive pas à trouver la bonne méthode sur ESP32-C3.

Voici ce que j'ai déjà essayé :

  • La bibliothèque Servo
  • La bibliothèque ESP32Servo
  • ledcAttach() + ledcWrite()
    (après peut etre j'ai fait des erreur dans le code et ses bibliothèque fonctionne pour ceci donc si c'est ça, je veux bien voir un exemple que je pourais réappliquer)

Sinon quelle est la méthode recommandée pour générer un signal PWM fiable entre 1000µs et 2000µs sur ESP32-C3 SuperMini ?

Merci d'avance !

Bonjour mat28_lbc, le PWM se contrôle sur tout les arduinos avec la commande analogWrite(). Tu peux voir des exemples pour le ESP32-C3 dans l'IDE lui-même à la section ESP32 -> AnalogOut

Edit: Je crois que c'est plutôt LEDC qui est utilisé pour l'ESP32.

Post mis dans la mauvaise section, on parle anglais dans les forums généraux, je viens de déplacer le post dans la section francophone.

Merci de prendre en compte les recommandations listées dans "Les bonnes pratiques du Forum Francophone".

Je le donne comme je l'ai compris :

LedC est de la PWM basique
Je pense que la doc arduino sur analogWrite est insuffisante et qu'il est préférable de regarder du coté d'Espressif :
LED Control (LEDC) - - — Arduino ESP32 latest documentation

Motor PWM serait disponible uniquement sur ESP-IDF. Motor PWM serait de la PWM qui délivre des sorties complémentaires avec zone morte.
C'est le type de PWM adapté à la commande sécurisée de pont en H.

Vu que je ne connais pas les ESC, je ne sais pas quels sont les réglages de la PWM.

Les ESC basiques attendent un signal de type servo.
Pour les versions plus récentes ou plus évoluées c'est un signal servo mais avec des signaux plus rapides. Il y a aussi des versions complètements numériques.

Merci.
Mais vu que je suis un vieux ***, tant que je ne connais pas la signification des lettres E, S, C, ni a quoi sert ce machin, je serais incapable de m’en rappeler.
Ce n’est pas là l’important, ce n’est que mon affaire.

Le signal est de type servo, ok mais de type ne signifie pas égalité.
Meme frequence de reference ?
Meme gamme de temps ?

C’est ce qu’il est important de maitriser.

Avec les avr 8 bits le micro était incapable de générer une PWM aux normes servos, c’est un autre moyen basé sur un timer qui a été employé.

La donne est différente avec les micro 32 bits.
C’est pour cela que j’ai renvoyé sur Espressif plutot que sur Arduino.

Electronic, Speed, Controler, mais ceci est trompeur car normalement dédié uniquement au contrôle des moteurs sans balais à 3 fils.
On pourrait donc l'assimilé à un variateur dédié au moteur sans balais.

Le signal est de type servo, ok mais de type ne signifie pas égalité.
Meme frequence de reference ?
Meme gamme de temps ?
Je ne sais pas si il y a des exceptions, mais la norme RC est un période de 20ms.

Donc comme la source du PWM peut être divers et varié, en général, les fabricants de composant de radio-modélisme, reste cette norme, pour qu'ils puisse vendre leur matériel au plus grand nombre.

Après je ne suis pas assez calé dans tous les domaines du modélisme pour dire qu'il n'y a aucune exception, mais je pense que cela doit être assez rare.

Je voulais juste attirer l'attention que la PWM se règle et que les réglages sont bien plus puissants que ce qu'arduino en fait.

Oui la norme est 20ms, comme pas du tout par hasard la période du 50 Hz :grinning_face:, la littérature sur la bibliothèque servo type avr basée sur des timers n'est peut-être pas la meilleure source d'information.

C'était mes 5 cts.

Pardon? Avec un AVR 8 bits, on peut choisir la période comme on veut. Je crois surtout que c'est un choix car le timer 0 est utilisé par l'horloge système et ils ont choisi une période de 1024µs. Ils auraient effectivement pu prendre 20ms pour les autres timers.

C'est le logiciel qui n'est pas aux normes Servo et pas le micro.

Lis la datasheet et tu verras que l'on ne peut pas obtenir une PWM avec une fréquence de récurrence de 20 ms avec des compteurs 8 bits et une horloge à 16 MHz.

Sinon bien sûr que l'on peut faire déjà beaucoup de modifications par rapport aux réglages arduino, mais on est limité par les compteurs 8 bits.

timer 8 bits non, mais 16 si : timer 1, prescaler 1/8 et top à 39999, ça laisse une belle granularité pour les réglages du temps «haut»

Ce n'est pas la puce qui ne permet pas, c'est le choix de la carte Arduino. Si on avait un quartz à une "bonne fréquence", le problème ne se serait pas posé. Mais je ne suis pas sûr que l'arduino soit destiné à avoir des signaux conçus pour des servos.

Aujourd'hui, avec le tout numérique qu'on nous impose (TV, vidéo, son...) c'est quand même un peu préhistorique d'avoir un positionnement calculé en numérique et de passer par une liaison analogique. D'autant plus que bon nombre de servos on une puce numérique intégré pour d'affranchir des 20ms.

Si on parle de la bibliothèque Servo, ils ont sans doute volontairement choisi de ne pas respecter la norme puisque si 12 servos sont branchés et ont une durée d'impulsion haute de 2ms, la période devient 24ms au lieu des 20ms.

Par défaut Servo utilise le timer 1, mais pas avec le PWM hard qui ne pourrait gérer qu'un seul servo au lieu de 12.

Ok, je n'avais pas bien compris alors ta remarque, mea-culpa :slight_smile: