« SE3Binome2023-8 » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(72 versions intermédiaires par 2 utilisateurs non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
= Préambule = | = Préambule = | ||
Ce projet consiste à réaliser une voiture autonome propulsée par deux moteurs pilotés par un Atmega16u4 et un | Ce projet consiste à réaliser une voiture autonome propulsée par deux moteurs pilotés par un Atmega16u4 et un TB6612FNG. | ||
=== Objectifs === | === Objectifs === | ||
Ligne 13 : | Ligne 13 : | ||
=== Étapes === | === Étapes === | ||
Les différentes tâches à accomplir sont: | Les différentes tâches à accomplir sont : | ||
* Concevoir un PCB | * Concevoir un PCB | ||
* | * Braser les composants | ||
* Programmer la carte | * Programmer la carte en DFU | ||
* Programmer la carte avec la libusb | |||
= Concevoir un PCB = | = 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.[[Fichier:Schematique_voiture.png|vignette|Schématique du PCB|gauche]][[Fichier:Projet Voiture Autonome-B Cu.svg.svg|vignette|Fichier SVG de la couche en arrière plan|gauche]][[Fichier:Capture d'écran 2024-05-07 153358.png|vignette|Capture d'écran du PCB|centré]][[Fichier:Routage voitureTEPWAC.svg|vignette|Fichier SVG de la couche en premier plan|centré]] | |||
=== 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, qui obstruait 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ênaient le bon fonctionnement de la batterie et du chargeur Lipo, par exemple le résistance R13 réduisait la tension délivrée 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.[[Fichier:PCB Fini.jpg|vignette|Photo du PCB brasé|gauche]][[Fichier:Image 20240612141907.jpg|vignette|Photo de la carte lors du chargement de la batterie]] | |||
Nous avons vérifié que la batterie ne chauffe pas lors de la charge et que la LED de charge s'allumait bien | |||
et que la tension à ses bornes avait bien augmenté après la charge. | |||
La charge est très rapide car alimentée avec du 5V pour un batterie de 3,7 V et avec une petite capacité de stockage. | |||
= 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 ) | |||
[[Fichier:Capture d'écran 2024-06-12 224905.png|gauche|vignette|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 haute impédance en envoyant un 1 avec PORTx. | |||
[[Fichier:Capture d'écran 2024-06-12 224922.png|vignette|Fonction qui permet d'avancer]] | |||
Ensuite nous avons codé 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. | |||
[[Fichier:Capture d'écran 2024-06-12 224936.png|gauche|vignette|Fonction qui permet de reculer]] | |||
[[Fichier:Capture d'écran 2024-06-12 224948.png|vignette|Fonction qui permet d'aller à gauche]] | |||
Puis vient la fonction pour reculer, nous avons juste modifié les valeurs envoyées dans les pins. | |||
Suivi des fonctions pour aller à gauche et à droite, toujours en utilisant et modifiant les valeurs dans les pins. | |||
[[Fichier:Capture d'écran 2024-06-12 224953.png|gauche|vignette|Fonction qui permet d'aller à droite]] | |||
[[Fichier:Capture d'écran 2024-06-12 231325.png|vignette|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. | |||
Nous utilisons un bouton Start pour démarrer le programme, on vérifie sa valeur avec PINC>>7 | |||
[[Fichier:Capture d'écran 2024-06-12 230927.png|vignette|Tableau des valeurs à envoyer sur les entrés du TB6612FNG|centré|600x600px]]Voici en action les différents programmes dans la voiture : [[Fichier:Video paysage.mov|vignette|Video de la voiture|centré]] | |||
Et un gros plan sur les LEDs : | |||
[[Fichier:Focus carte.mov|vignette|Focus carte|centré]] | |||
=== Programmation via libusb === | |||
= | |||
Cette partie était la plus compliquée du projet, nous avons tout d'abord récupéré ( par des moyens peu conventionnels ), une base de programme utilisant la libusb que nous avons adapté. | |||
Nous avons inclus nos fichiers de programmation en DFU pour conserver les mêmes fonctions. | |||
Nous avons réutilisé les Descriptor.* de la manette en les réadaptant. | |||
[[Fichier:Capture d'écran 2024-06-12 234721.png|gauche|vignette|Fonction d'envoi de données]]Cette fonction envoie au EndPoint définit les données que l'on veut envoyer jusqu'à 100 envois. | |||
Et d'afficher si le message a bien était reçu. | |||
Dans un premier temps, nous avons décidé de contrôler les moteurs juste avec les données envoyées, puis de rajouter la partie DFU et enfin de stocker les commandes envoyées puis les exécuter lorsque la bonne commande est entrée. | |||
Vidéo de la partie contrôle par commande :[[Fichier:Video portrait.mov|vignette|Video portrait de la voiture|centré]] | |||
[[Fichier:Capture d'écran 2024-06-13 000048.png|vignette|Programme qui stocke les commandes envoyé par USB|gauche]] | |||
Cette fonction permet lorsqu'une information USB est reçue au EndPoint de la traiter et d'envoyer le morceau de code associé à la donnée reçue dans une liste d'exécution. | |||
Lorsqu'une instruction est envoyé dans la liste, les LEDs s'allument pour le signaler. | |||
Lorsque l'information envoyée contient une valeur supérieure à 4, les commandes de la liste sont exécutées dans l'ordre d'arrivée dans cette dernière. | |||
[[Fichier:Capture d'écran 2024-06-13 001016.png|vignette|Fonction contenant la partie DFU]] | |||
Dans le cas où aucune information n'est envoyée et le bouton Start est pressé, le programme installé en DFU se lance. | |||
Malheureusement, à cause de notre erreur de conception avec D1, nous ne pouvons pas brancher la batterie et l'USB en même temps, donc nous n'avons pas pu tester cette partie en mode autonome. | |||
Vidéo finale du projet ( en première partie le code DFU et en deuxième partie la partie libusb ) | |||
[[Fichier:Video voiture 2.mov|vignette|Vidéo pc 2|centré]] | |||
=Git= | |||
Git :https://archives.plil.fr/itepeli/Premier_systeme_embarque.git | |||
=Conclusion du projet= | |||
Ce projet nous a permis de consolider ce que nous avons appris du projet manette : | |||
- Conception Kicad | |||
- Brasure | |||
- Programmation par registre | |||
- Programmation par libusb | |||
Finalement, nous avons réussi à concevoir, braser la voiture, ainsi que la programmer par DFU, par libusb, la rendre autonome avec une batterie et intégrer un chargeur pour la batterie. |
Version actuelle datée du 13 juin 2024 à 11:00
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.
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, qui obstruait 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ênaient le bon fonctionnement de la batterie et du chargeur Lipo, par exemple le résistance R13 réduisait la tension délivrée 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.
Nous avons vérifié que la batterie ne chauffe pas lors de la charge et que la LED de charge s'allumait bien
et que la tension à ses bornes avait bien augmenté après la charge.
La charge est très rapide car alimentée avec du 5V pour un batterie de 3,7 V et avec une petite capacité de stockage.
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 )
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 haute impédance en envoyant un 1 avec PORTx.
Ensuite nous avons codé 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.
Puis vient la fonction pour reculer, nous avons juste modifié les valeurs envoyées dans les pins.
Suivi des fonctions pour aller à gauche et à droite, toujours en utilisant et modifiant les valeurs dans les pins.
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.
Nous utilisons un bouton Start pour démarrer le programme, on vérifie sa valeur avec PINC>>7
Voici en action les différents programmes dans la voiture :
Et un gros plan sur les LEDs :
Programmation via libusb
Cette partie était la plus compliquée du projet, nous avons tout d'abord récupéré ( par des moyens peu conventionnels ), une base de programme utilisant la libusb que nous avons adapté.
Nous avons inclus nos fichiers de programmation en DFU pour conserver les mêmes fonctions.
Nous avons réutilisé les Descriptor.* de la manette en les réadaptant.
Cette fonction envoie au EndPoint définit les données que l'on veut envoyer jusqu'à 100 envois.
Et d'afficher si le message a bien était reçu.
Dans un premier temps, nous avons décidé de contrôler les moteurs juste avec les données envoyées, puis de rajouter la partie DFU et enfin de stocker les commandes envoyées puis les exécuter lorsque la bonne commande est entrée.
Vidéo de la partie contrôle par commande :
Cette fonction permet lorsqu'une information USB est reçue au EndPoint de la traiter et d'envoyer le morceau de code associé à la donnée reçue dans une liste d'exécution.
Lorsqu'une instruction est envoyé dans la liste, les LEDs s'allument pour le signaler.
Lorsque l'information envoyée contient une valeur supérieure à 4, les commandes de la liste sont exécutées dans l'ordre d'arrivée dans cette dernière.
Dans le cas où aucune information n'est envoyée et le bouton Start est pressé, le programme installé en DFU se lance.
Malheureusement, à cause de notre erreur de conception avec D1, nous ne pouvons pas brancher la batterie et l'USB en même temps, donc nous n'avons pas pu tester cette partie en mode autonome.
Vidéo finale du projet ( en première partie le code DFU et en deuxième partie la partie libusb )
Git
Git :https://archives.plil.fr/itepeli/Premier_systeme_embarque.git
Conclusion du projet
Ce projet nous a permis de consolider ce que nous avons appris du projet manette :
- Conception Kicad
- Brasure
- Programmation par registre
- Programmation par libusb
Finalement, nous avons réussi à concevoir, braser la voiture, ainsi que la programmer par DFU, par libusb, la rendre autonome avec une batterie et intégrer un chargeur pour la batterie.