Refaire l'ampli d'un servo de modélisme

Bonjour,

Un arduino nano, un potentiomètre, un moteur brushed et une prise recevant la voie d'un récepteur RC, bref refaire l'électronique d'un servo...

Y a un bout de code quelque part ?

Merci d'avance

Salut,

C'est bien compliqué, de faire de l'asservissement... Il existe des chips qui font tout le boulot. Soit tu prends un servo tout fait, et tu récupères le circuit de commande interne, soit tu t'orientes vers un Ci dont je n'ai plus la ref, mais je l'avais trouvé dans un moteur de réglage de phare automobile, il se commande par une tension continue. Rien ne t'empêchera par la suite de mettre l'arduino entre le récepteur et le servo si tu veux modifier la courbe de réponse ou le signal servo.

Je sais bien que c'est compliqué, c'est pourquoi je ne voudrais pas recommencer de zéro.
Je ne cherche pas à faire un servo mais à faire une appli plus puissante, et pour cela le système de maintien en place des électroniques de servo ne convient pas, ils "grognent", et surtout consomment et les mosfets du pont en H chauffent.

fr:
Je sais bien que c'est compliqué, c'est pourquoi je ne voudrais pas recommencer de zéro.
Je ne cherche pas à faire un servo mais à faire une appli plus puissante, et pour cela le système de maintien en place des électroniques de servo ne convient pas, ils "grognent", et surtout consomment et les mosfets du pont en H chauffent.

bonjour
si ton servo actuel rempli déjà bien sa mission initiale de positionnement (puissance/vitesse/positionnement) et
si il "grogne" sur un stimuli "fixe" c'est souvent le signe :

  • d'un accouplement mecanique (pignonage) "elastique" (trop de jeu)
  • d'une recopie (potentiometre) de basse qualité (couche resistive)
  • pompage de puissance sur l'alim du servo entrainant une derive de la recopie, ce qui entraine une pseudo oscillation autour du point de position .

c'est un servo tout venant ou un servo reputé ?

Bin non, C'est une question de pwm...
Plus on s'approche de la position théorique et moins y a de puissance donnée, donc sous effort continu, le servo n'arrive pas à "finir" la course vers la position théorique et continue à essayer (grognement).
il faudrait modifier le programme pour que le couple (donc le pwm) soit plus fort mais moins souvent dans un premier temps au cas où la position théorique n'est pas atteinte puis au bout d'un certain temps, qu'il cesse de tenter d'atteindre cette position théorique.
Pourquoi crois-tu que les gros servos hitec possède ce type de réglage, au moins pour le maintien, mais ne réglant pas le pb de fin de course théorique ?
Problème suivant, les mosfets chauffent puisqu'ils n'arrêtent pas de changer d'état et finalement grillent.

Un servo-moteur utilise un signal qui se répété tout les 20 ms, du faite toutes les 20 ms il va corriger l'angle, s'est se qui provoque le grognement que tu entends,

j'ai trouver ce lien en rapport avec les servomoteurs Asservissement (automatique) — Wikipédia

A mon avis l'Arduino seul est pas top pour les servomoteurs,
Vaut mieux placer une puce ou carte entre ton servomoteur et ton Arduino,
Ou peu être faire en sorte qu'une fois que le servomoteur a atteint son angle ne plus donner d'ordre jusqu'au prochain changement, ou alors rende le signal très stable.

Servomoteurs - Brodeur Electronique sur se lien tu trouvera une description du signal ainsi qu'un code, mais malheureusement pour toi il a été rédiger pour l'architecture pic.

J'ai constaté que selon la période du PWM envoyé au servo, ce dernier est plus ou moins précis. J'utilise maintenant une période de 15ms, et le servo est bien plus à l'aise et consomme moins.

La librairie servo de l'arduino fournit une pwm logicielle, et peu précise (si tu utilises d'autres interruptions, la commande se met à bouger). C'est pour ça que j'ai arrêté de l'utiliser et je programme un timer 16 bits en pwm matérielle, c'est extrêmement stable et ne consomme aucune ressource logicielle.

J'ai eu le cas aussi avec un "gros" servo qui avait besoin de 3A (alors qu'il était donné pour 800mA), du coup, si l'alim ne suit pas, ça ne marche pas bien.

Sinon, en cas de puissance, il faut passer à autre chose, mais il doit y avoir une question de poids...

Asservissement (automatique) — Wikipédia

Ah Le PID qu'est-ce que j'aimerais savoir l'utiliser, mais pas trouvé de tutoriel à mon niveau.

J'ai constaté que selon la période du PWM envoyé au servo, ce dernier est plus ou moins précis. J'utilise maintenant une période de 15ms, et le servo est bien plus à l'aise et consomme moins.

On peut essayer, mais cela ne résout pas le pb du voisinage arrivée valeur théorique sous effort important, dans les Hitec on fait varier le %

Servomoteurs - Brodeur Electronique sur se lien tu trouvera une description du signal ainsi qu'un code, mais malheureusement pour toi il a été rédiger pour l'architecture pic.

C'est un point de départ pour utiliser une servo et son électronique... Pas pour mettre un moteur à une dizaine d'ampères et bien plus au démarrage.

C'est un point de départ pour utiliser une servo et son électronique... Pas pour mettre un moteur à une dizaine d'ampères et bien plus au démarrage.

Je n'ai jamais toucher a de l'électronique de puissance donc je ne peu pas t'aider sur se plant, par contre une chose est sure l'Arduino ne fournira jamais 10 ampères donc il faudra une alimentation externe par contre le signal lui peu être gérée par un Arduino.

Je n'ai jamais toucher a de l'électronique de puissance donc je ne peu pas t'aider sur se plant, par contre une chose est sure l'Arduino ne fournira jamais 10 ampères donc il faudra une alimentation externe

Il ne s'agit pas de demander 10 A à l'arduino ni de savoir comment sera l'alim externe, juste le code pour gérer la ou les commandes d'un pont en h, asservi par un signal type servo Rc et un potentiomètre.

par contre le signal lui peu être gérée par un Arduino.

et oui, mais comment ?

fr:
et oui, mais comment ?

C'est pour ça que je te propose d'utiliser une électronique toute faite d'un servo en rajoutant un pont de puissance, ça peut commander n'importe-quel moteur, et tu t'affranchis de la régulation. De plus, si tu as vraiment besoin de puissance, tu peux utiliser un moteur d'essuie-glace par exemple, la démultiplication par vis sans fin te garantie la tenue de position mécaniquement...

fr:

par contre le signal lui peu être gérée par un Arduino.

et oui, mais comment ?

Bonjour
Pour faire simple :
en fait tu veux utiliser un arduino pour gerer en entrée le stimuli servo (signal 1-2 ms)
et en consequence agir sur la commande de puissance autour du point de consigne une fois ce point atteint ?

Pour eviter la conso et le broutage en position atteinte ?
AMHA la gestion en PID "pur" serait très consommatrice, une simple gestion en boucle simple basé sur un simple hystérésis serait plus opportune.
position atteinte (lecture de la recopie) mise en CC du moteur (frein) , plus d'action de puissance si la recopie n’excède pas la valeur d’hystérésis prévu.
Mais comme toute solution, cela entraine des contraintes/conséquences, cette méthode implique des pseudos états discrets de positionnement et est au détriment de la vitesse de réaction.

Les LMD18200 ou approchant sont faciles à interfacer pour ce genre d'appli (gestion du brake) , mais je ne connais pas la puissance que tu veux commander

en fait tu veux utiliser un arduino pour gerer en entrée le stimuli servo (signal 1-2 ms)
et en consequence agir sur la commande de puissance autour du point de consigne une fois ce point atteint ?

OUI

Pour eviter la conso et le broutage en position atteinte ?

OUI

AMHA la gestion en PID "pur" serait très consommatrice, une simple gestion en boucle simple basé sur un simple hystérésis serait plus opportune.
position atteinte (lecture de la recopie) mise en CC du moteur (frein) , plus d'action de puissance si la recopie n’excède pas la valeur d’hystérésis prévu.
Mais comme toute solution, cela entraine des contraintes/conséquences, cette méthode implique des pseudos états discrets de positionnement et est au détriment de la vitesse de réaction.

Bien, c'est cela ! On progresse, je me suis fais comprendre :slight_smile:
Dans la plupart des ampli de servo, le pont n'est commandé que par 2 ports donc pas de frein moteur possible, c'est une des raisons avec celles citées ci-dessus pour lesquelles il me faut refaire une commande par microcontrôleur... Plus facile avec un arduino peut-être mais un pic avec de l'assembleur ne me gênerait pas, genre 12F675
Le code, c'est possible ?

Les LMD18200 ou approchant sont faciles à interfacer pour ce genre d'appli (gestion du brake) , mais je ne connais pas la puissance que tu veux commander

http://www.freescale.com/files/analog/doc/data_sheet/MC33486.pdf serait mieux à mon avis pour quelques Ampères
Un peu faible pour mon appli mais c'est pas mon problème, pour le pont en H j'ai une solution à base de deux MPT50P03HDL et
deux STP60NF06, faciles à trouver.

fr:
...
Bien, c'est cela ! On progresse, je me suis fais comprendre :slight_smile:
Dans la plupart des ampli de servo, le pont n'est commandé que par 2 ports donc pas de frein moteur possible, c'est une des raisons avec celles citées ci-dessus pour lesquelles il me faut refaire une commande par microcontrôleur... Plus facile avec un arduino peut-être mais un pic avec de l'assembleur ne me gênerait pas, genre 12F675
Le code, c'est possible ?
...

bonsoir
le principal, c'est finalement de bien "parler" de la meme chose :grin:

un PIC 12F675 ou un Atmel genre Attyni85 comme cible, c'est selon tes habitudes et dispo.
pas de code tout fait, mais la methodologie est globalement la meme quel que soit la cible

  • acquerir les durée des creneaux entrants par interruption
  • lecture de la recopie
  • action selon application hysteresis

un petit MCU 8 pins est surement suffisant en I/O , l'ideal (à mon sens) est de disposer aussi d'une entrée ana
permettant de "jouer" sur la profondeur de l'hysteresis

Bonsoir

je serai étonné qu'on ne trouve pas d'exemple utilisable (schéma et code) dans les notes d'application des fabricants de petits DSP . (dsPIC par exemple)

De mon côté je ne pense qu'à deux réalisations assez anciennes (on a l'âge de ses notes d'application !!)

ça permet au moins de donner des indications pour bâtir son code

J'ai tenté de me mettre au PID pour réguler ma R11, ça s'est vite révélé impossible, car pour calculer les constantes P, I et D, il faut connaître les courbes de réponse de toute la chaîne de transfert (ici, c'est rendement moteur, engrenages, potar) et biensûr, ces constantes dépendent de la charge et si cette charge est variable, alors ça se complique un peu plus...

Le coup de l'hystérésis peut être intéressant, et je me répète, un moteur d'essuie-glaces n'aura pas besoin de frein, et si on cherche plus petit, on a les moteurs de réglage des phares (toujours dans l'automobile), qui sont de petits servos analogiques, mais possèdent eux aussi une démultiplication à vis sans fin, donc tenue de position même sans courant...

Bravo à tous,
On peut constater qu'il faut persévérer...

  • acquerir les durée des creneaux entrants par interruption
  • lecture de la recopie
  • action selon application hysteresis

Les deux premiers je sais faire

C'est dans le 3ème point que c'est bien plus confus... Sans code un algo plus détaillé en organigramme me plairait bien

un petit MCU 8 pins est surement suffisant en I/O , l'ideal (à mon sens) est de disposer aussi d'une entrée ana
permettant de "jouer" sur la profondeur de l'hysteresis

Je calcule :
un entrée voie, 4 pour le pont en H, un pot de suivi, mais j'aimerais aussi une gestion tension batterie, on peut aussi mettre une gestion de l'hystérésis... Donc plus de 8 pattes si on compte les deux de l'alim. Se passer d'un quartz est un plus mais pas obligatoire.

pour

et
http://elm-chan.org/works/smc/report_e.html
voila du travail pour moi, merci

Et aussi

moteur d'essuie-glaces n'aura pas besoin de frein, et si on cherche plus petit, on a les moteurs de réglage des phares (toujours dans l'automobile)

C'est vrai que les ingé se servent beaucoup de la vis sans fin pour éviter le côté réversible ;

  • moteur de lève glace de voiture (je vous conseille Renault et ceux de Mégane dont on trouve très facilement des exemplaires dans la benne car une petite pièce dans le système cassait dans le circuit du câble),
  • les moteurs d'essuie-glace aussi, pour les phares c'est un peu fragile.
    De toutes façons on tourne assez vite en rond, les moteurs viennent de Chine et la production n'est pas très variée.
    L'ennui, cela prend beaucoup de place, et faut prendre l'ensemble car la pression axiale de la vis doit être gérée.

Y aussi les vérins électriques : un moteur DC, une transmission par courroie crantée vers une vis à billes, l'ennui c'est que la plus petite vis à billes fait 7,5 mm à ma connaissance.
Sans vis à billes : rendement médiocre par rapport aux trains d'engrenages droits. Qui sont facilement réversibles, solution : avoir une démultiplication importante pour lutter contre la réversibilité et un moteur en court-circuit qui tourne très vite.

Après on peut rêver qui me donne la solution pour faire avec un brushless, un inrunner serait parfait :wink:

fr:
Bravo à tous,
On peut constater qu'il faut persévérer...

  • acquerir les durée des creneaux entrants par interruption
  • lecture de la recopie
  • action selon application hysteresis

Les deux premiers je sais faire

C'est dans le 3ème point que c'est bien plus confus... Sans code un algo plus détaillé en organigramme me plairait bien

un petit MCU 8 pins est surement suffisant en I/O , l'ideal (à mon sens) est de disposer aussi d'une entrée ana
permettant de "jouer" sur la profondeur de l'hysteresis

Je calcule :
un entrée voie, 4 pour le pont en H, un pot de suivi, mais j'aimerais aussi une gestion tension batterie, on peut aussi mettre une gestion de l'hystérésis... Donc plus de 8 pattes si on compte les deux de l'alim. Se passer d'un quartz est un plus mais pas obligatoire.

pour
http://ww1.microchip.com/downloads/cn/AppNotes/cn_00532c.pdf
et
http://elm-chan.org/works/smc/report_e.html
voila du travail pour moi, merci

bonjour
pas necessairement besoin de 4 pin pour le pont en H si utilisation d'un driver de pont mosfet (ou demi pont à complementé)
ça se reduit ensuite à 1 pin direction, 1 pin pwm/step

pour ce qui concerne l'algo et la gestion de l'hysteresis
il faut déjà poser les relations temporelles
rapidement et en partant d'une base arduino (328)
l'acquisition par interruption (rising/falling) de la durée des creneaux entrant avec la fonction micros() ne permet sauf erreur de ma part qu'~ 250 positions pseudo discrete .

delta max 1ms/0.004(4µs)=250

micros()
...
Returns the number of microseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 70 minutes. On 16 MHz Arduino boards (e.g. Duemilanove and Nano), this function has a resolution of four microseconds (i.e. the value returned is always a multiple of four)