Mise en route du PAMI

Environnement de développement

Pour programmer vous aurez besoin :

  • D’un IDE (environnement de développement intégré), nous choisissons VS Code
  • De la chaîne de compilation de votre microcontrôleur. Nous l’installons manuellement à partir des informations présentes dans le guide officiel en anglais Getting Started. Vous trouverez des instructions en français pour Debian sur le site Poivron Robotique.

Ces étapes peuvent être complexes, dépendent de votre microcontrôleur et de votre système d’exploitation. Cet article n’a pas pour but de fournir des instructions détaillées de ces étapes.

Attention à la numérotation des broches

Il faut garder à l’esprit que le Raspberry Pi Pico est une carte électronique équipée d’un microcontrôleur RP2040, et que vous programmez le RP2040. La broche 1 du RP2040 ne correspond pas à la broche 1 du Raspberry Pi Pico. Le schéma ci-dessous donne la correspondance.

D’un côté, la broche du Raspberry Pi Pico que vous pouvez retrouver en comptant les broches à partir de la broche 1 en haut à gauche. De l’autre, la broche du RP2040, le numéro que vous devez utiliser dans le code.

Teleplot

Teleplot est le logiciel de visualisation de données que nous allons utiliser. Il présente l’avantage de directement acquérir les données du robot (par la liaison série ou par le réseau) et les présenter sous forme de graphiques.

Notre première étape, lors de la mise en route du PAMI, sera d’obtenir une communication fonctionnelle avec Teleplot.

Nous ne rentrerons pas dans les détails du module. Il s’agit principalement d’un stockage des données à envoyer dans une chaîne de caractère puis de l’envoi de ce tampon. Ceci présente un intérêt lors d’une communication réseau, le coût fixe d’envoi étant élevé. C’est moins pertinent pour un envoi par la liaison série.

Notons que pour utiliser ce code d’exemple vous devez créer le fichier « wifi_settings.h » à partir de « wifi_settings.h.example », même si vous n’utilisez pas le Wifi ! Dans le cas où vous n’utilisez pas le wifi, vous avez une ligne à commenter dans « wifi_settings.h ».

Voir la branche « Teleplot » du dépôt.

Le temps

Avoir une bonne gestion du temps est important. Ceci permet d’avoir un pas de temps fixe qui simplifie la logique ainsi que de nombreux calculs. Nous voulons une fonction qui nous renvoie le nombre de millisecondes écoulées depuis le début du programme.

Notre code se structure en 3 étapes :

  • Une fonction qui incrémente notre temps de 1.
  • Une fonction d’initialisation qui crée l’interruption qui appellera notre fonction précédente toutes les 1 millisecondes.
  • Une fonction qui renvoie le nombre de milliseconde écoulée depuis l’initialisation.

Voir la branche « Temps » du dépôt.

Valider le câblage

Partie « moteurs »

Dans un premier temps, nous allons piloter simplement les broches de sens et celle de vitesse pour chaque moteur. Pour qu’un moteur tourne, les deux broches de sens doivent avoir des valeurs opposées et la broche de vitesse doit être à 1.

Nous rajoutons à la fin de notre programme une boucle infinie un peu spéciale pour :

  • être sûr que le microcontrôleur reste dans l’état dans lequel il est programmé ;
  • pouvoir le reprogrammer. Une boucle infinie vide, sur le RP2040, semble le verrouiller et il devient impératif de le faire passer en mode « boot » pour le reprogrammer. Pour éviter ceci – et pouvoir le reprogrammer sans le manipuler, nous insérons la fonction tight_loop_contents(). Cette fonction nous vient du SDK du RP2040 et n’a pas forcément d’équivalent pour d’autres microcontrôleurs.

Le code est disponible sur la branche Valide_cablage_moteur du dépôt.

Programmez le microcontrôleur. Si les deux moteurs tournent, vous êtes bien partis. Vérifiez quand même :

  • Qu’avec le code pour seulement le moteur 1, celui-ci tourne et pas le moteur 2.
  • Qu’inversement, en pilotant le moteur 2, celui-ci tourne alors que le moteur 1 est à l’arrêt
  • Qu’avec une pile 9V et l’arrêt d’urgence levé, les moteurs tournent plus vite que seulement alimentés par l’USB.

Si c’est le cas, vous pouvez sauter la partie ci-dessous.

Contrôle du câblage

Si l’un des moteurs ne tourne pas :

  • Vérifiez que la tension entre les deux broches de sens du L293 de ce moteur est supérieure à 3.0V.
  • Si ce n’est pas le cas, vérifiez la continuité entre les broches de sens du L293 et celles du Raspberry Pi Pico (aidez-vous du schéma)
  • Vérifiez la tension entre la masse et la broche « vitesse » (ou enable) du L293. Elle doit être supérieure à 3.0V
  • Si ce n’est pas le cas, vérifiez la continuité entre le L293 et le Raspberry Pi Pico pour ce signal
  • Vérifier la présence du 5 V entre Vcc1 (broche 16) du L293 et la masse.
  • Vérifiez la continuité entre la masse du L293 et celle du Raspberry Pi Pico

Si les moteurs n’accélèrent pas avec la pile 9 V, vérifiez la présence du 9 V au niveau de Vcc2 du L293

Partie codeurs

Comme pour les moteurs, nous allons réaliser le minimum pour tester le fonctionnement des codeurs. Les quatre broches des codeurs sont configurées en entrée et les valeurs envoyées en continu par Teleplot.

Le code est disponible sur la branche Valide_cablage_codeur du dépôt.

Contrôle du câblage

Si aucune des voies d’un codeur ne répond, contrôler l’alimentation du codeur. Sinon, contrôlez la continuité du signal depuis le codeur jusqu’au microcontrôleur.