Go Down

Topic: Refaire l'ampli d'un servo de modélisme (Read 2242 times) previous topic - next topic

fr

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

Super_Cinci

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.

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.

Artouste

#3
Nov 22, 2012, 12:33 pm Last Edit: Nov 22, 2012, 12:35 pm by Artouste Reason: 1

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é ?

fr

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.

lacolombenoir

#5
Nov 23, 2012, 02:49 am Last Edit: Nov 23, 2012, 02:51 am by lacolombenoir Reason: 1
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 http://fr.wikipedia.org/wiki/Asservissement_(automatique)

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.

http://www.brodeurelectronique.com/index.php?2007/03/15/16-les-servomoteurs 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.
www.hatokuro.comuf.com site consacrer au rétrogaming

Super_Cinci

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...

fr

Quote
http://fr.wikipedia.org/wiki/Asservissement_(automatique)

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

Quote
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 %
Quote
http://www.brodeurelectronique.com/index.php?2007/03/15/16-les-servomoteurs 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.

lacolombenoir

Quote
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.
www.hatokuro.comuf.com site consacrer au rétrogaming

fr

Quote
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.
Quote
par contre le signal lui peu être gérée par un Arduino.
et oui, mais comment ?

Super_Cinci


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...

Artouste

#11
Nov 23, 2012, 02:18 pm Last Edit: Nov 23, 2012, 02:25 pm by Artouste Reason: 1


Quote
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







fr

Quote
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
Quote
Pour eviter la conso et le broutage en position atteinte ?

OUI
Quote
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  :)
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 ?

Quote

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.


Artouste


...
Bien, c'est cela ! On progresse, je me suis fais comprendre  :)
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  :smiley-mr-green:

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


al1fch

#14
Nov 23, 2012, 08:22 pm Last Edit: Nov 23, 2012, 08:26 pm by al1fch Reason: 1
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 !!)
- un petit bijou d'elm-chan avec un 90S2313, PID et plusieurs modes de fonctionnement dont l'asservissement de position http://elm-chan.org/works/smc/report_e.html
-encore plus ancien  : une note d'application complète de Microchip (pour un Pic obsolète, famille 17C)
http://ww1.microchip.com/downloads/cn/AppNotes/cn_00532c.pdf

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

Go Up