SE3Binome2023-8

De projets-se.plil.fr
Aller à la navigation Aller à la recherche

Préambule

Ce projet consiste à réaliser une voiture autonome propulsée par deux moteurs pilotés par un Atmega16u4 et un TB6612FNG.

Objectifs

La voiture doit respecter certains critères qui sont:

  • Posséder des LEDs en guise de clignotants.
  • Pouvoir être alimentée par port USB.
  • Pouvoir être alimenté par une batterie.
  • Avoir un mode autonome où elle exécute un programme qui la fait avancer et tourner.
  • Avoir un mode où elle est commandé par un PC.
  • Les deux modes doivent être des programmes différents qu'on téléverse selon le mode qu'on veut.

Étapes

Les différentes tâches à accomplir sont :

  • Concevoir un PCB
  • Braser les composants
  • Programmer la carte en DFU
  • Programmer la carte avec la libusb

Concevoir un PCB

KICAD

Le PCB a été conçu sur Kicad. Les schématiques qui étaient déjà fourni sont: les connecteurs USB, ISP, moteurs; l'Atmega et le chargeur. On les ai complété pour qu'ils soient connectés, rajouté les LEDs et le connecteur pour changer de mode d'alimentation.

Schématique du PCB
Fichier SVG de la couche en arrière plan
Capture d'écran du PCB
Fichier SVG de la couche en premier plan

Fichier du PCB

Le projet peut être retrouvé ici: Fichier:Kicad Voiture.zip

Brasure des composants

Pendant la brasure

La brasure s'est passée sans gros soucis, on est arrivé au bout de la brasure sans avoir à changer de PCB.

On peut toutes fois mentionner le fait d'avoir mis une résistance juste devant le connecteur batterie, ce qui réduisait la tension de délivrer, qui obstrué le connecteur. On a été contraint de souder le connecteur à l'arrière du PCB.

De même, l'empreinte de la diode D1 a été mal choisie, on a donc décidé de raccorder les deux bornes avec de l'étain en faisant attention dans le futur à ne pas brancher l'USB et la batterie en même temps.

De plus, les résistances R13 et R14 gêné le bon fonctionnement de la batterie et du chargeur Lipo, par exemple le résistance R13 réduisait la tension délivré par la batterie, qui devenait trop faible pour alimenter la carte. Pour y remédier, nous avons donc brasé des résistances de 0 ohm.

Le Label Chargement était aussi inutile et même cause de court-circuit, nous avons donc dû couper la piste.

Après la brasure

Après avoir brasé le PCB bloc par bloc en vérifiant si chaque blocs fonctionnent correctement avant de passer au suivant, on a brasé tous les composants, sauf les capacités de découplage C10 et C11, et tout fonctionne.

Photo du PCB brasé

Programmer la carte

La programmation de la carte est composée de 2 parties, la partie programmation en DFU et programmation partie la libusb.

Programmation en DFU

Pour cette partie, nous allons créer un programme qui fait 5 actions :

- Avancer

- Reculer et mettre les feux arrière ( car nous respectons les autres usagers de la route )

- Tourner à droite et mettre les clignotants ( car nous avons encore tous nos points sur nos permis de conduire )

- Tourner à gauche et mettre les clignotants ( car nous respectons le code de la route )

- Allumer toutes les LEDs ( pour savoir si on doit aller passer chez le garagiste )

Fonction d'initialisation des registres


Tout d'abord, nous avons dû initialiser nos registres, en mettant un 1 pour les Outputs et un 0 pour les Inputs, pour les Inputs on doit rajouter une résistance pour éviter un état de haut impédance en envoyant un 1 avec PORTx.

Fonction qui permet d'avancer

Ensuite nous avons coder les fonctions qui gèrent les différentes actions, en premier la fonction pour avancer en utilisant les pins In/Out et PWM des moteurs.

Fonction qui permet de reculer




Fonction qui permet d'aller à gauche

Puis viens la fonction pour reculer, nous avons juste modifier les valeurs envoyées dans les pins.


Suivi des fonctions pour aller à gauche et à droite, toujours en utilisant modifiant les valeurs dans les pins.


Fonction qui permet d'aller à droite
Fonction qui permet de remettre à l'état initial les valeurs des registres


Avant de modifier les registres, on utilise la fonction Reset() qui remet les valeurs des registres à l'état initial.



Nous avons utilisé les moteurs en tout ou rien pour simplifier cette partie et pouvoir terminer la partie libusb,

nous nous sommes servis du tableau ci-dessous qui nous donne les valeurs à envoyer dans chaque registre pour faire tourner nos moteurs.




Tableau des valeurs à envoyer sur les entrés du TB6612FNG








Programmation via libusb

Cette partie était la plus compliqué du projet, nous avons tous d'abord récupéré ( par des moyens peu conventionnels ), une base de programme utilisant la libusb que nous avons adapté.