Go Down

Topic: commande externe de servomoteur (Read 4468 times) previous topic - next topic

Super_Cinci

Nouvelle question, les amis!

Voilà, toujours dans mon "régulateur de vitesse", je n'ai plus assez de ressources timer pour envoyer mes impulsions à mon servomoteur.

quelqu'un connait-il un petit composant genre NE555 programmable, qui utiliserait une entrée série et s'occuperait tout seul de la gestion du servo?

Il existe bien des potentiomètres numériques, alors pourquoi pas des générateurs d'impulsion programmables sur le même principe de commande?

Ne me parlez pas de PIC, j'abandonne cette solution, j'ai pas de quoi les programmer.

Korman

#1
May 24, 2011, 10:42 am Last Edit: May 24, 2011, 10:45 am by Korman Reason: 1
Avec un NE555 tu n'iras pas loin, tu vas avoir besoin d'un petit processeur type ATtiny or Pic pour 1 ou 2 €.

L'autre question que je me pose est si tu ne pourrais pas sérialiser les taches. Le servo doit être rafraîchit que tous les 15-20ms. Donc d'abord lis pendant environ 10ms les impulsions et prends garde à mesurer le temps au plus précis possible (avec Timer2 ou une boucle de longueur définie) et en calcule la vitesse. Ensuite génère l'impulsion pour le servo pendant 1 ou 2 milli-secondes et à la fin actualise ton écran. Puis répete.

À la limite, tu pourras même désactiver les interruptions de Timer0 pour millis avec sei()/cli() pour que tes  mesures soient plus précises. En fin de compte, ton machin ne va rien faire d'autre que ça, donc tu n'auras pas besoin de l'USB, la sérielle ou d'autre choses qui ont besoin de millis() avec précision. Pour faire clignoter une lampe, ça change pas grand choses si la seconds prends 1200 millisecondes à cause des pertes d'interruptions pendant tes mesures.

Korman

Super_Cinci

Pour continuer sur le côté "besoin", c'est que j'ai déjà testé ta proposition.

en gros, le timer1 (le plus précis) est configuré ainsi (en dur, sans passer par les sketches touts faits qui ne sont pas précis) :

RAZ du compteur timer sur OCRA,
OCRA et prescaler calés à 15ms
ORC1B contient la durée de l'imp servo, quand TCNT1 = OCR1B, on met à 0 la sortie Servo

donc toutes les 15ms :
TCNT1 se réinitialise tout seul (ça de moins à gérer),
je met à 1 la sortie Servo,
j'incrémente une variable qui quand elle arrive à 10 (donc 150ms) lit mon comptage d'impulsions pour déterminer la vitesse de mon moteur, calculs et affichages.

super, mais voilà, tant que la routine ISR correspondant à OCR1A n'est pas terminée, OCR1B est désactivée (matériellement, on ne peut rien y faire), et c'est là que ça coince, car toutes les 150ms, la routine est plus longue, et le servo "clignotte", puisque l'ISR OCR1B n'est appelée que lorsque OCR1A est terminée...

Je cherche en fait une sorte de générateur PWM programmable, ça doit bien exister en DIP8... je vais continuer à chercher...

Korman

#3
May 24, 2011, 02:19 pm Last Edit: May 24, 2011, 02:23 pm by Korman Reason: 1
Un servo n'est rien qu'un petit moteur avec un circuit qui transforme les impulsions PWM en commandes sur le pont en H. (Voir ici pour une description) Maintenant tu veux un circuit qui transforme des signaux de l'Arduino en signal PWM, qui de son tour va devenir des commandes sur le pont en H.

À ta place, j'abandonnerais  cette direction der recherche et contrôlerais un moteur pas à pas directement avec un circuit de pont en H. Ces puces sont des composant standard, la programmation est bien maîtrisée, tu n'auras pas de soucis timing pour ajuster le moteur et tu gagne un choix nettement supérieur pour le moteur commandé. Va voir ce que tu trouves au sujet de "Arduino H-Bridge" (ne pas confondre avec la recherche pour "Arduino H-Bomb", c'est quelque chose de différent).

Au sujet de la puce que tu cherches, ça existe (par exemple le FT639 Servo Controller Chip), mais ne me demande pas où trouver et à quel prix. J'en ai aucune idée.


Korman

Super_Cinci

Re-Salut

Voilà, l'idée du servo, c'est qu'il est asservi en interne, et qu'il a assez de patate, et qu'il coûte pas cher (8€).

Pour utiliser un PAP, il faudrait que je fabrique un servo-moteur pas-à-pas, car il me semble indispensable de savoir exactement quel est l'angle de la commande mécanique. un PAP, ça peut sauter un pas sans prévenir...

J'ai trouvé aussi le FT639. si on regarde la photo, on voit qu'en fait, c'est ... un PIC... mais la liaison à 2400 bauds, c'est un peu lent, car j'aimerais que mon arduino se repose de temps en temps, dès-fois que je lui trouve d'autres conneries à faire entre deux mesures...

bon, en même temps que j'écrivais le paragraphe précédent, j'ai eu une idée... inverser mes comparateurs... du coup, ça peut marcher avec le OCR1B quand même (ce n'est pas encore sur papier, mais je vais tester ça tout de suite!) je vous tiens au courant...

Snootlab

Bonjour,

Je ne sais pas quelle est la précision dont tu aurais besoin pour faire ton "régulateur de vitesse" (aurais tu un lien pour que je voie de quoi tu parles ?) et si ce que je te propose conviendrait, mais je m'étais amusé à faire ce montage  avec un ATTiny85.
J'ai utilisé la librairie "Software Servo"




Attiny85 programmé avec le GUI arduino suivant cette méthode : http://hlt.media.mit.edu/wiki/pmwiki.php?n=Main.ArduinoATtiny4585

Lionel

- Distributeur officiel Arduino - France

Super_Cinci


Je ne sais pas quelle est la précision dont tu aurais besoin pour faire ton "régulateur de vitesse" (aurais tu un lien pour que je voie de quoi tu parles ?) et si ce que je te propose conviendrait, mais je m'étais amusé à faire ce montage  avec un ATTiny85.
J'ai utilisé la librairie "Software Servo"
Lionel

Merci! j'ai fait ce premier montage via l'arduino, il marche à merveille (tout seul). C'est la raison pour laquelle je me suis inscrit ici, c'est que certaines librairies ne sont pas compatibles avec d'autres. en fait, étant donné la structure des timers de l'arduino, il devient complètement impossible de faire tourner des procs avec une stabilité temporelle irréprochable. La lib utilise un timer pour le servo, mais moi, j'ai besoin de resynchroniser les timers toutes les 150ms, donc gros risque de resynchroniser le timer du servo pendant l'impulsion de commande, donc de foirer sa valeur, c'est pour ça que je cherche un "timer" externe...

Go Up