Motion control on ArduinoMega1280.

Pour le bien de la communauté open-source, j’ai porté mon asservissement sur la carte ArduinoMEGA 1280. En effet, de plus en plus de personne utilisent cette carte car elle n’est pas très cher, est “facilement” programmable et est totalement intégrée (pas de soudages à faire).
Voici la carte en question :
Arduino MEGA 1280

Elle aura pour avantage de me permettre de ne plus utiliser la plaquette d’essai qui est assez “sale” et qui faisait que beaucoup de fils se baladaient. De plus, pour programmer le microcontrolleur, on a besoin que d’un cable USB avec cette nouvelle carte, plus besoin de retirer le microcontrolleur, de le mettre sur un programmateur et de le remettre ensuite dans le robot. Le seul inconvénient est qu’elle s’alimente en 7V+ mais bon, il doit y avoir un moyen de l’alimenter en 5V je pense.

Le portage n’a pas été forcement evident à cause du changement de processeur, du fait qu’arduino utilise certaines librairies spécifiques (UART) et se reserve des timers mais aussi car toutes les pins ne sont pas connectées (forcement les IOs d’interruption externes ne sont pas toutes branchées, juste celles dont j’avais besoin😉 ).
De plus le code pour arduino est compilé en C++ apparemment, donc les typedef ne fonctionnaient plus.
J’ai donc effectué quelques modifications :
– Changement des interruptions externes pour les entrées des odomètres (utilisation de l’INT4, INT5, PCINT4, PCINT23)
– Changement des fonctions de série par les fonctions de la bibliothèque Arduino
– Changement de l’interruption timer (on passe a l’interruption 1 car la 0 semblait réquisitionnée par Arduino)
– Changement des valeurs de l’asservissement (la fréquence du CPU n’étant pas la même, la fréquence des timers n’est pas la même non plus du coup, il faut donc changer légèrement les constantes du PID)
– Changement des typedef struct en struct
– Ré-arrangement du code avec quelques commentaires pour que ce soit un peu plus propre.

Et résultat … Ben, j’ai pas eut le temps de tester sur le robot😀

Les sources sont ICI .

Bien entendu, je suis preneur de toute remarque sur mon code, je me doute qu’il n’est ni parfait, ni optimum mais bon c’est un début si quelqu’un a besoin d’un asservissement et d’une estimation de position.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: