Préambule
Contexte :
L’électronique, domaine incontournable lorsqu’il s’agit d’automatiser et d’améliorer la performance d’un système, va ici nous aider à collecter les milliers de données provenant des divers capteurs de la monoplace. Aujourd’hui, nous sommes tous dépendants de cette technologie invisible et pourtant fondamentale. Fusée, téléphone, casque audio ou même voiture de course… Tous sont pilotés par des systèmes électroniques optimisés pour la mesure, l’analyse et la communication de milliers de données. Un système électronique n’est pas seulement composé d’un processeur, bien d’autres composants interviennent pour former un véritable écosystème.
Objectif :
Contrôler tous les composants électroniques de la monoplace (capteurs, lecteur SD, radio…) en concevant une carte électronique lors de la saison 2022 – 2023 du CESI RACE.
Enjeux :
Analyser un flux de milliers de données par minutes pour prévoir les défaillances et trouver des voies d'amélioration pendant la compétition.
Contraintes :
Le règlement de la Formula Student n’impose aucune règle concernant la carte mère du système embarqué des monoplaces.
Pourquoi une carte mère ?
A l’instar d’un ordinateur, nous voulons avoir un système conçu sur mesure qui répond à nos besoins. Le système électronique de base d’un ordinateur est sa carte mère. C’est elle qui lie tous les échanges entre le processeur, les mémoires, la carte graphique, les divers ports de communications (USB, carte SD, Ethernet…).
En suivant cet exemple, nous voulons concevoir une carte qui regroupera tous les éléments électroniques dont nous avons besoin. Cette article décrit et justifie le choix de chacun des composants constituant notre carte mère.
Choix des composants
Le microcontrôleur
µC = microcontrôleur
Pour gérer l’énorme flux de données, nous avons choisis d'utiliser une carte Arduino DUE. Après comparaison de plusieurs microcontrôleurs de constructeurs différents (microchip, mBed, STM…), c’est celui-ci qui a été retenu. Ce choix s’est fait sur plusieurs critères :
- Puissance de calcul : Sur un processeur, elle représente le nombre de cycle par seconde exécuté par celui-ci, c’est ce qu'on appelle la fréquence d’horloge. Chaque cycle est une série d’instructions durant lequel des millions (voir milliards) de transistors s’ouvrent et se ferment pour répondre au programme. Dans le cas de l’Arduino DUE, cette fréquence est de 84MHz. Cela signifie qu’il peut exécuter jusqu’à 84 millions de cycles en seulement une seconde. Même s’il est difficile de calculer la fréquence requise, nous avons pu cependant l’estimer. Par exemple, l’Arduino MEGA, autre concurrent dans la liste, n’affichait que 16MHz de fréquence d’horloge. D’autres µC proposaient des fréquences bien supérieures, allant jusqu’à 240MHz. A titre d’exemple, un µC de 200Mhz est plus adapté pour les calculs liés aux aides à la conduite. Cependant, notre besoin concerne principalement la collecte des données reçues des capteurs. Pour cette raison, nous considérons qu'une fréquence d'horloge de 100Mhz suffit. [1]
- Langage de programmation & IDE : La programmation d’un tel système ne peut pas être assuré par une seule personne. Les deux langages les plus connus pour la programmation des microcontrôleurs sont Python et C / C++. Le langage le plus courant est le C/C++. C’est également le plus connu de nos membres. Dans ce sens, c’est ce langage de programmation que nous avons choisi.
L’IDE est l’environnement dans lequel nous programmons le µC. C’est lui qui traduit le programme en une série d’instructions compréhensible pour le processeur. Pour simplifier la programmation et les tests, nous avons choisi d’utiliser l’IDE créé par Arduino.
- Le nombre d’entrées / sorties : Plusieurs capteurs seront utilisés pour la mesure de la température des disques de freins, la pression dans les suspensions, la pression exercée sur les pédales… De plus, il faudra avoir assez d’espace pour brancher d’autres composants tels que la radio, le lecteur de carte SD, l’écran, les boutons du volant…
La plupart des µC présentent une bonne variété de type d’entrées / sorties tel que :
E/S analogiques
PWM (Pulse With Modulation)
Port I2C
Port USB
Port série (UART)
…
Les plus importants dans notre cas sont :
Les entrées analogiques : qui permettent de lire les données fournies par la plupart des capteurs (température, pression, vitesse…).
Les entrées/sorties numériques (TOR ou PWM) : permettant de connecter la radio, le lecteur de carte SD, les boutons du volant. A noter que ces boutons renvoient un simple signal tout ou rien. Une bonne partie des µC étudiés possèdent des résistances internes de 100kΩ. Toutefois, d’après [2], cette valeur trop élevée conduit à une sensibilité trop faible qui empêche de lire la valeur. Il faudra tester par nous même pour voir si nous rencontrons le problème. Si tel est le cas, l’auteur de l’article précédent préconise de mettre en place une résistance externe de 2.2KΩ.
Ports séries : L’écran ainsi que le capteur gyroscopique choisis communiquent via un port série. Il faut donc que notre µC en possèdent au moins deux.
Interruptions : Ces entrées numériques permettent d’interrompre le programme en cours pour exécuter un autre programme plus important. Attention, une entrée numérique ne fait pas forcément office d’interruption. Il faut s’assurer sur le schéma du µC combien de pins possèdent cette fonctionnalité. Dans notre cas, les interruptions seront importantes pour les boutons du volant.
Grâce aux interruptions, on peut dire au programme de se mettre en pause dès lors qu’une d’entre elles est activée Donc, si on appuie sur un des boutons du volant, qui lui-même est relié à une interruption, alors, le programme se mettra en pause le temps d’exécuter le programme associé à un appui sur un des boutons du volant. Dès que les instructions seront terminées, le programme général reprendra la où il s’était arrêté.
En prenant compte de tous les critères cités ci-dessus, c’est finalement la carte Arduino DUE que nous avons choisie.
Extenseur d'entrées analogiques
Quel que soit le choix de microcontrôleur, aucun n’avait assez d’entrée analogique.
Pour compenser, nous allons utiliser un multiplexeur qui rajoutera 16 entrées analogiques supplémentaires.
Lecteur de carte SD
Toutes les données recueillies seront envoyées par radio pour être analysées en temps réel. Cependant, en cas de problème avec la radio, nous voulons quand même avoir une sauvegarde de ces données. Pour pallier ce problème, nous allons utiliser ce lecteur de carte SD.
Le programme sera fait de manière à organiser dans des dossiers, le stockage de chacune des données en fonction de leur provenance (capteur température frein avant droit, capteur de pression de pédale de frein…). A la fin de la session de course, nous pourrons récupérer la carte SD et ces données pour les analyser sur notre logiciel.
La Radio
· Bien connue dans la grande majeure partie des systèmes de communication, la radio s’avère être un composant important lorsqu’il s’agit d’envoyer et de recevoir un flux de données important rapidement et sur une grande distance. Selon le modèle, les chiffres sont différents. Sans antenne, le modèle NRF24L01+ propose une portée en pleine air de 50m maximum.
Cela étant insuffisant, un autre modèle doté d’une antenne permet d’obtenir une distance de 1,1km (avec une vitesse de transmission de 250Kbps) ! Même en configurant la vitesse de transmission la plus élevée (2Mbps), la distance reste tout de même de plus de 500m !
Mbps = Mega Bit Per Second
Kbps = Kilo Bit Per Second
Une vitesse de 2Mbps signifie que chaque seconde, 2 millions de bits sont envoyés.
Une trame d’échange (contenant adresse du capteur, valeur mesurée, type de variable et horodatage) mesure 144 bits.
A 2Mbps :
A cette vitesse, avec un enregistrement d’une demi-heure, un dossier contiendrait donc près de 25 millions de données !
A 250Kbps :
A cette vitesse, avec un enregistrement d’une demi-heure, un dossier contiendrait donc près de 3,1 millions de données !
Quelle que soit la vitesse de transmission que l’on choisit, les données recueillies se compteront par millions. Cependant, nous avons programmé un algorithme qui filtre toutes les données mesurées pour ne renvoyer que celles qui seront considérées comme essentielles. Ce qui réduira la taille des fichiers en supprimant les variations dues à un bruit sur le signal. Cet algorithme va décharger la radio de milliers d’envois inutiles.
Enfin, pour limiter les perturbations sur l’alimentation de la radio, il faudra rajouter un module d’alimentation supplémentaire pour stabiliser l’alimentation [4].
Capteur gyroscopique
Pour connaître les accélérations, et les inclinaisons sur les axes X, Y et Z nous allons utiliser un capteur gyroscopique WT901B. En plus de ces données, ce capteur fait aussi office de GPS, capteur barométrique (pression/altitude), et magnétomètre (champs magnétiques).
Ce capteur très précis est entre autres, utilisé pour l’asservissement des drones. L'avantage de ce capteur, qui fait sa force c’est qu’il possède un filtre de Kalman. Ce filtrage est très utilisé dans le domaine du traitement du signal et des radars.
Il a une capacité de prédiction et de rectification des erreurs impressionnante [5]. Enfin, le constructeur de ce capteur a aussi édité un logiciel pour accéder aux données sans avoir à faire de programme. Cela va nous permettre de le tester plus facilement. Par la suite, un programme sera conçu pour accéder à ces valeurs depuis l'Arduino DUE.
Ecran de bord
Toutes les données recueillies doivent pouvoir être visibles depuis un écran situé sur le tableau de bord. Lors de notre dernière saison, la taille de l’écran était de 7 pouces, un peu grand pour notre tableau de bord. La forme rectangulaire standard de l’écran pose un problème d’intégration car notre tableau de bord est en arc de cercle. La connectique utilisée était de l’HDMI. Seulement, pour cette saison, nous avons choisi d'utiliser une carte Arduino DUE, ceci implique que nous n’aurons pas de port HDMI. Enfin, la programmation de l’interface graphique en langage Python était trop complexe. Pour cette raison, nous nous sommes basés sur de nouveaux critères de choix pour pallier ces problèmes :
Taille de l’écran inférieur à 7 pouces.
Connectique en bus I2C, CAN ou UART.
Accès à des outils qui offre une diversité de programmation graphique sans trop de difficulté.
De plus, l’écran devra avoir de bonnes caractéristiques techniques :
Fréquence de rafraichissement
Fréquence de calcul
Résolution
D’après les critères précédents, nous avons trouvé l’écran NX8048P050-11R. Cet écran respecte, non seulement, les critères que nous avons fixés mais va aussi au-delà de ce que l’on attendait !
Convertisseur de tension
Après étude des courants requis pour chaque élément, nous avons répartis les sources d’alimentation. L'Arduino DUE peut fournir un maximum de 800mA pour 5V. Le courant total calculé pour le lecteur de carte SD, la radio et les différents capteurs est d’environ 600mA, suffisant donc pour alimenter tous les capteurs via une sortie 5V de l'Arduino DUE.
En revanche, l’alimentation conseillée pour l’écran est de 5V pour 1A. L'Arduino étant incapable de fournir ces paramètres, nous devons tirer cette alimentation depuis l’alimentation générale de la carte mère. C’est là que le convertisseur de tension intervient. En effet, l’alimentation de la carte mère est de 12V. Etant donné que l’écran ne prend pas plus de 5V en charge, il faut abaisser cette tension sans perdre de courant. Une autre solution en électronique pour abaisser la tension est de faire un pont diviseur de tension en utilisant des résistances. Cependant, l’utilisation de résistance baisse le courant bien en deçà de 1A. De plus, ce n'est pas un montage qui permet de fournir une alimentation stable. Pour cette raison, nous avons choisi un régulateur LM2596 :
Bien plus complexe qu’un simple pont diviseur de tension, ce circuit nous permet de gagner en précision, tout en gardant un courant de sortie stable pouvant aller jusqu’à 3A.
Le volant
Plus précisément, les éléments électriques présents sur notre volant (boutons et LEDs). Tous ces éléments seront reliés sur un seul connecteur. Pour connaître le nombre de broches de ce connecteur, il faut connaître le nombre de bouton et de LED dont nous auront besoin :
2 pour les palettes (passage des vitesse).
6 boutons pour divers contrôles (se déplacer dans la page courante, réinitialiser les données…).
2 sélecteurs 3 voies : un premier sélecteur pour switcher sur les 3 pages du volant, une voie = une page sur l’écran. Un second sélecteur pour contrôler l’enregistrement des données (Play, Pause, Stop), une voie = un mode d’enregistrement.
15 LEDs pour situer le compte tour du moteur : 9 LEDs verte pour la zone bas régime, 3 LEDs orange pour la zone mi régime, 3 LEDs rouge pour la zone haut régime.
On a donc :
Pour les palettes : 2 sorties
Pour les boutons : 6 sorties
2 sélecteurs * 3 voies : 6 sorties
Enfin, éviter d’avoir 15 fils de plus pour les LEDs, nous allons utiliser un extenseur d’entrées / sorties qui communique en I2C. Cela signifie que nous n’aurons que 2 sorties en plus (SDA et SCL).
Il faut également rajouter 2 fils d’alimentation (5V et GND) qui seront communs pour tous ces éléments.
Au total, cela nous donne un connecteur de 18 broches (2 palettes + 6 boutons + 6 voies + 2 i2c + 2 alimentations). Pour optimiser la place, nous avons choisi un connecteur 2x9 (2 rangées de 9 broches chacune).
Autres capteurs
· Pour finir, il faut prévoir de la place pour les nombreux capteurs que nous utiliserons :
Capteurs de température : pour la mesure de température des disques de freinage. 4 au total.
Capteur de température : pour la mesure de température du liquide de refroidissement. 1 seul.
Potentiomètres linéaires : pour la mesure de pression dans les suspensions, mais aussi pour la mesure de position des pédales (freinage et accélération). 6 au total.
Potentiomètre rotatif : pour la mesure de l'angle du volant. 1 seul.
D’après cette liste, nous avons besoin de 12 connecteurs pour les capteurs. D’autres capteurs seront utilisés comme les capteurs de vitesses mais seront reliés au calculateur du moteur. Chaque capteur renvoie une tension analogique entre 0V et 5V. D’après le microcontrôleur choisi, nous avons accès à 11 entrées analogiques. En rajoutant notre extenseur analogique, on obtient un total de 27 entrées analogiques. Le surplus d’entrées analogiques pourra être utilisé pour connecter des capteurs en plus si besoin, ou des signaux dérivés du calculateur du moteur. Enfin, nous pourrons aussi utiliser les entrées restantes pour récupérer les mesures de tension de la batterie ou les données d'autres points de mesures sur le faisceau de la monoplace.
A présent, vous connaissez tous les éléments qui composent la carte de mère de notre monoplace Hephais ! Dans un prochain article, nous vous expliquerons comment tous ces éléments ont été agencés. Plusieurs essais ont déjà été faits, chaque nouvelle version corrigeant les erreurs de la précédente.
A très bientôt pour un nouvel article !
L'équipe CESI RACE
Bibliographie :
Article écrit par notre responsable électronique : Maxime Villette.
Bonjour Thomas, Merci beaucoup !
Hello,
Super article ! Sujet très intéressant. Si jamais vous avez besoin de composants, n’hésitez pas me contacter