

Projet_2024/2025
- Size
- 54 × 57 mm
- Copper layers
- 4
- Thickness
- 1.6 mm
- Parts
- 89
- Nets
- 80
- Pads
- 331
- Tracks, vias
- 508, 154
- Pours
- 12
- Routed
- Yes
- KiCad
- KiCad 8.0 (file 20240108)
- Created
- 11 Sep 2024
- Updated
- 15 Jan 2025
Overview
ESE AL8 is an open-source printed circuit board by Bayazid7, from the Bayazid7/Projet_git_2425_ESE_BAHL repository on GitHub. It is a 4-layer board of 54 × 57 mm with 89 parts on 80 nets, routed with 508 tracks and 154 vias.
It is built around the ZXBM5210-SP, MP1475SGJ-P and ADXL343BCC. Its parts include 32 capacitors, 17 resistors, 8 connectors, 6 ICs and 6 diodes. It belongs with the STM32 boards of this library.
Main components
3ZXBM5210-SP
SO-8-EP-40℃~+105℃ 1 1.5A 1.72Ω 32uA 3V~18V Interleaved conduction protection、Current sensing/regulation function、Active braking function Yes SO-8-EP Brushed DC Motor Drivers ROHSDiodes IncorporatedBrushed DC Motor DriversMP1475SGJ-P
TSOT-23-8-40℃~+125℃@(TJ) 1 3A 4.5V~16V 500kHz 800mV~15.2V Adjustable Buck Buck Built-in Yes TSOT-23-8 DC-DC Converters ROHSMonolithic Power SystemsDC-DC ConvertersADXL343BCC
LGA143-Axis, ±2g/±4g/±8g/±16g Digital MEMS AccelerometerAnalog DevicesUncategorised
README
README.mdProjet_git_2425_ESE
Projet_2024/2025
Membres du groupes
Bayazid BELKHIR
Hedia WERHENI
Hugo DEVAUX
Aliou LY
Introduction
Ce projet a pour objectif de développer un robot autonome utilisant un microcontrôleur STM32 pour la gestion de son comportement, tout en appliquant des principes de noyaux temps réel pour contrôler la communication entre ses composants matériels et logiciels. Ce robot sera capable de fonctionner en deux modes :
- Mode Chat :
- Mode Souris :
Le robot est alimenté par une batterie de 7.2V et comprend des composants essentiels pour son fonctionnement tels que des moteurs, un accéléromètre, et un LIDAR.
Objectifs du projet
Les principaux objectifs de ce projet sont les suivants :
- Conception du système à microcontrôleur STM32 : Intégrer un microcontrôleur pour gérer le comportement du robot.
- Implémentation d'un noyau temps réel : Utiliser un noyau temps réel pour garantir une gestion efficace des tâches .
- Contrôle des moteurs avec PWM : Piloter deux moteurs à l'aide de drivers PWM pour contrôler la vitesse et la direction.
- Détection des chocs avec l'accéléromètre ADXL343 : Détecter les collisions avec d'autres robots pour ajuster les actions du robot.
- Détection des autres robots avec LIDAR YDLIDAR X4 : Utiliser un LIDAR pour permettre au robot de connaître la position des autres robots.
Matériel utilisé
1. Microcontrôleur STM32
Le projet repose sur un STM32 qui gère l'ensemble du système.La programmation du STM32 se fait par un SW
- Modèle utilisé : STM32G431CBU6
- Fonction principale : Gestion des moteurs, communication avec l'accéléromètre et le LIDAR, traitement des données en temps réel.
- Peripherals : PWM pour le contrôle des moteurs, interfaces I2C pour l'accéléromètre et UARTpour le LIDAR et la communication avec le PC.
2. Alimentation et régulation de tension
Le robot est alimenté par une batterie NIMH 7.2V 1.3Ah. Cette tension est ensuite convertie en différentes tensions nécessaires au bon fonctionnement des différents composants :
- Convertisseur 3.3V BU33SD5WG-TR pour alimenter le STM32, l'accéléromètre, et les capteurs de position des moteurs.
- Convertisseur 5V MP1475S pour alimenter le LIDAR.
3. Drivers de moteurs PWM
Le robot est équipé de deux moteurs DC, chacun étant contrôlé par un driver PWM. Chaque driver reçoit des signaux PWM du STM32 pour réguler la vitesse et la direction des moteurs.
- Modèle des drivers : ZXBM5210-SP-13
- Fonction principale : Piloter les moteurs en avant ou en arrière grâce à des signaux PWM.
- Commandes PWM : Les signaux PWM (Forward et Reverse) contrôlent la direction des moteurs. La vitesse est ajustée en modifiant le rapport cyclique du PWM.
4. Accéléromètre ADXL343
L'accéléromètre ADXL343 est utilisé pour détecter les chocs entre les robots. Il mesure l'accélération dans les trois axes et peut détecter des variations rapides, comme celles d'une collision.
- Communication : Le module utilise le protocole I2C pour envoyer les données d'accélération au STM32.
- Fonction principale : Détecter les impacts ou les vibrations et permettre une réaction rapide du robot (comme changer de direction ou ajuster son comportement).
5. LIDAR YDLIDAR X2
Le LIDAR YDLIDAR X4 est utilisé pour scanner l'environnement autour du robot et déterminer la position des autres robots et des obstacles.
- Type de capteur : LIDAR à balayage laser.
- Portée : Jusqu'à 12 mètres.
- Communication : UART pour transmettre les données de mesure.
- Protocole : Utilise une communication série avec un format de trame spécifique (en-tête 0x55AA).
- Résolution : Distance : 0.25 mm (valeur brute divisée par 4) et Angle : 1/64° (0.015625°)
Schema de cablage
Software
Drivers de Moustache
1. Fichier Moustache.c-contient l'implémentation du pilote pour gérer les interruptions et les tâches liées à un système utilisant des capteurs "moustaches" pour détecter des bords.
**Principales fonctions et variables :
-
Variables principales :
cb_out1_task_handleetcb_out2_task_handle: Des handles pour les tâches FreeRTOS associées aux deux GPIO.exclusive_task: Variable pour enregistrer quelle tâche est en cours d'exécution, afin d'éviter que plusieurs tâches ne soient actives simultanément ( On a remarqué que lorsque l'une des deux moustaches détecte le bord, la deuxième va également interrompre après un petit moment, et cela est dû à la conception du robot ).0: Aucune tâche active.1: La tâcheCB_OUT1_Taskest active.2: La tâcheCB_OUT2_Taskest active.
robot: Variable globale externe, représentant l'état d'un robot. Elle est utilisée dans la fonctionBord.
-
Initialisation (
Moustache_Init):- Création de deux tâches FreeRTOS :
CB_OUT1_Taskpour gérer les événements associés au GPIOCB_OUT1_Pin.CB_OUT2_Taskpour gérer les événements associés au GPIOCB_OUT2_Pin.
- Création de deux tâches FreeRTOS :
-
Gestion des interruptions (
Moustache_HandleInterrupt):- Cette fonction est appelée lorsqu'une interruption GPIO est détectée.
- Vérifie si une tâche peut être exécutée (selon la valeur de
exclusive_task). - Envoie une notification à la tâche correspondante (
cb_out1_task_handleoucb_out2_task_handle) en utilisantxTaskNotifyFromISR.
-
Fonction
Bord:- Gère le comportement du robot en fonction de sa direction (
robot.direction).'A': Le robot recule.'R': Le robot avance.
- Cette fonction est appelée par les tâches pour ajuster le mouvement du robot.
- Gère le comportement du robot en fonction de sa direction (
-
Tâches
CB_OUT1_TasketCB_OUT2_Task:- Chaque tâche attend une notification via
xTaskNotifyWait. - Lorsqu'une notification est reçue :
- Elle effectue une action définie (appel de
Bord). - Réinitialise
exclusive_taskà 0 pour permettre d'autres interruptions.
- Elle effectue une action définie (appel de
- Chaque tâche attend une notification via
2. Fichier Moustache.h
Ce fichier est l'en-tête associé, qui déclare les prototypes des fonctions et les dépendances nécessaires.
Principales fonctionnalités :
-
Inclusion de bibliothèques nécessaires :
stm32g4xx_hal.h: Bibliothèque HAL pour la famille STM32G4.gpio.h: Bibliothèque pour gérer les GPIO.
-
Prototypes de fonctions :
Moustache_Init(void): Initialisation du pilote et des tâches.Moustache_HandleInterrupt(uint16_t GPIO_Pin): Gestion des interruptions GPIO.
Drivers de Moteur
1.Fichier 'MoteurPWM.c'
- La fonction Moteur_init:
Est responsable de l'initialisation d'un moteur en configurant ses paramètres de base. Elle prend en entrée un pointeur vers la structure du moteur, le timer PWM et le canal associé, initialisant la direction à l'arrêt et la vitesse à zéro.
-
Moteur_setSpeed: gère la vitesse du moteur avec une conversion d'échelle, transformant une vitesse d'entrée (±290) en valeur PWM (0-8500) et configurant la direction appropriée.
-
Moteur_setDirection:
contrôle la direction du moteur en gérant les signaux PWM complémentaires elle peut faire avancer, reculer ou arrêter le moteur en activant ou désactivant les canaux PWM appropriés.
- Moteur_start, Moteur_stop et Moteur_recule:
sont des fonctions d'aide qui simplifient le contrôle du moteur en appelant Moteur_setDirection avec les paramètres appropriés.
Du côté du robot, Robot_Start initialise le mouvement en avant avec des vitesses asymétriques (120 pour la droite, 80 pour la gauche), tandis que Robot_Stop arrête les deux moteurs.Robot_Recule fait reculer le robot avec les mêmes vitesses que l'avance mais en négatif.
2.Fichier 'MoteurPWM.h'
c'est un fichier d’en-tête conçu pour gérer le contrôle des moteurs d’un robot. Il définit deux structures principales :
-
Moteur_HandleTypeDef : utilisée pour représenter un moteur individuel, incluant ses paramètres essentiels comme le timer PWM associé (pwm_timer), le canal PWM (channel), la direction actuelle (direction) et la vitesse (vitesse).
-
h_Robot : utilisée pour représenter un robot comprenant deux moteurs (droit et gauche) et des paramètres globaux comme la vitesse linéaire, la vitesse angulaire, l’angle (theta) et le mode de fonctionnement.
pour que en peux controlé l'angle de lidar nous allons utulisé La fonction : xTaskCreate(robotAngle, "Init Task", 256, NULL, 2, &setangleTaskHandle) sert à créer une tâche dans un système RTOS. Cette tâche exécute la fonction robotAngle telque:
utilise une pile de 256 mots, et a une priorité de 2. Le nom "Init Task" est utilisé pour identifier la tâche, et le handle setangleTaskHandle permet de la contrôler ultérieurement. Cette commande initialise efficacement la tâche pour qu'elle s'exécute dans le système.
4 .Driver ADXL343 (ADXL343.c)
Introduction
Le driver ADXL343 permet de gérer un accéléromètre ADXL343 dans un système embarqué en temps réel. Ce capteur mesure l'accélération sur trois axes (X, Y, Z) et est utilisé pour détecter des événements comme les chocs. Ce driver est conçu pour intégrer les fonctionnalités du capteur avec FreeRTOS.
1. Initialisation et Configuration du Capteur
Le driver initialise le capteur ADXL343 en configurant les registres nécessaires pour le fonctionnement de l'accéléromètre. Cela inclut la configuration de la plage de mesures, des seuils de tapotement, et des interruptions.
- Initialisation de l'I2C : La fonction
ADXL343_Init()initialise la communication I2C avec le capteur, vérifie l'identifiant du dispositif et configure les registres pour la lecture des données d'accélération. - Configuration des Interrups : Le capteur est configuré pour détecter des événements sur les axes X et Y, en activant les interruptions pour ces axes.
- Configuration du Format des Données : Le capteur est configuré pour un mode de résolution complète avec une plage de ±16g, ce qui est adapté pour de nombreuses applications.
2. Réception et Traitement des Données
Une fois l'accéléromètre configuré, le driver permet de récupérer les données d'accélération en temps réel.
- Traitement des Interruptions : Le driver utilise des interruptions pour détecter des événements de tapotement (tap) sur les axes X et Y.
3. Gestion des Interruptions
- Gestion des Interruptions Tap : Le capteur est configuré pour activer les interruptions uniquement pour les axes X et Y, en désactivant l'axe Z qui peut souvent générer des interruptions indésirables.
4. Intégration en Temps Réel ⏱️
- Utilisation de FreeRTOS : Le driver fonctionne avec FreeRTOS pour gérer les tâches liées à la lecture des données du capteur et au traitement des événements. Une tâche dédiée
TapDetectedTaskest utilisée pour traiter les événements en temps réel.
5. Drivers Ylidar X2 (lidar_X2_driver.c)
Le code du dirver implémente la gestion d'un capteur LiDAR YLIDAR X2 dans un système embarqué temps réel. Ci-dessous, les principaux aspects du fonctionnement du LiDAR :
Initialisation et réception des données
La fonction lidar_init() initialise la communication UART avec le LiDAR en mode interruption. La réception des données se fait octet par octet via la fonction readTrame(), qui implémente une machine à états pour assembler les trames complètes.
Traitement des données
Une fois une trame complète reçue, lidar_process() est appelée pour extraire et traiter les données :
lidar_extractDataFromTrame()décode la structure de la trame.lidar_DataProcessing()calcule la distance et l'angle pour chaque point mesuré.lidar_calculatingDistance()etlidar_calculatingAngle()effectuent les calculs spécifiques.
Intégration temps réel
- Utilisation d'interruptions UART pour la réception asynchrone des données.
- Traitement des données dans une tâche FreeRTOS dédiée (
lidarTask). - Synchronisation avec d'autres tâches du système pour le contrôle du robot.
Pistes d'amélioration
- Implémenter la vérification du checksum pour valider l'intégrité des données.
- Optimiser le traitement des données pour réduire la charge CPU.
- Ajouter des filtres pour améliorer la précision des mesures.
- Implémenter une gestion d'erreurs plus robuste.
Datasheets et sourcing des composants
https://1drv.ms/x/s!AjphXEW6glNckYErezblGW1QHlP9SQ
Démonstrations du robot en marche:
https://github.com/user-attachments/assets/f6af12cb-7911-474c-adf0-7a1f33a06a41
https://github.com/user-attachments/assets/32c66e7f-6e20-4e83-ad37-8ae89d0b7e4e
Parts
89| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 100n | Capacitor_SMD:C_0402_1005Metric | C2, C14, C17, C18, C19, C20, C21, C24, C25, C26, C27, C201 |
| 8 | TestPoint | TestPoint:TestPoint_Pad_D1.0mm | TP1, TP2, TP3, TP4, TP5, TP6, TP7, TP8 |
| 7 | 1u | Capacitor_SMD:C_0603_1608Metric | C1, C10, C11, C15, C23, C29, C31 |
| 6 | 680 | Resistor_SMD:R_0402_1005Metric | R3, R11, R12, R13, R14, R15 |
| 4 | 1k | Resistor_SMD:R_0402_1005Metric | R1, R2, R16, R17 |
| 4 | MountingHole_Pad | MountingHole:MountingHole_3.2mm_M3_Pad_Via | H1, H2, H3, H4 |
| 3 | 0.1u | Capacitor_SMD:C_0402_1005Metric | C4, C5, C6 |
| 3 | 22u | Capacitor_SMD:C_0805_2012Metric | C3, C8, C9 |
| 3 | LED_POWER | LED_SMD:LED_0603_1608Metric | D1, D5, D6 |
| 2 | 100K | Resistor_SMD:R_0402_1005Metric | R4, R5 |
| 2 | 10p | Capacitor_SMD:C_0402_1005Metric | C12, C16 |
| 2 | 10u | Capacitor_SMD:C_0603_1608Metric | C28, C30 |
| 2 | SolderJumper_2_Open | Jumper:SolderJumper-2_P1.3mm_Open_RoundedPad1.0x1.5mm | JP1, JP2 |
| 2 | ZXBM5210-SP | STM32:Diodes_SO-8EP | U4, U5 |
| 1 | 10n | Capacitor_SMD:C_0402_1005Metric | C22 |
| 1 | 15p | Capacitor_SMD:C_0402_1005Metric | C7 |
| 1 | 16MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 16k | Resistor_SMD:R_0603_1608Metric | R7 |
| 1 | 20 | Resistor_SMD:R_0603_1608Metric | R6 |
| 1 | 20 | Resistor_SMD:R_0402_1005Metric | R10 |
| 1 | 4.7u | STM32:IND_052047_WRE | L1 |
| 1 | 4.7u | Capacitor_SMD:C_0603_1608Metric | C13 |
| 1 | 40.2k | Resistor_SMD:R_0603_1608Metric | R9 |
| 1 | 7.68k | Resistor_SMD:R_0603_1608Metric | R8 |
| 1 | ADXL343 | Package_LGA:LGA-14_3x5mm_P0.8mm_LayoutBorder1x6y | U1 |
| 1 | BUxxSD5 | Package_TO_SOT_SMD:SOT-23-5 | U2 |
| 1 | Batterie | Connector_JST:JST_XH_S2B-XH-A_1x02_P2.50mm_Horizontal | J6 |
| 1 | CB1 | Connector_JST:JST_XH_S4B-XH-A_1x04_P2.50mm_Horizontal | J1 |
| 1 | CB2 | Connector_JST:JST_XH_S4B-XH-A_1x04_P2.50mm_Horizontal | J2 |
| 1 | Conn_ST_STDC14 | Connector_PinHeader_1.27mm:PinHeader_2x07_P1.27mm_Vertical_SMD | J7 |
| 1 | ECRAN | Connector_JST:JST_XH_S4B-XH-A_1x04_P2.50mm_Horizontal | J8 |
| 1 | LED_USER1 | LED_SMD:LED_0603_1608Metric | D2 |
| 1 | LED_USER2 | LED_SMD:LED_0603_1608Metric | D3 |
| 1 | LED_USER3 | LED_SMD:LED_0603_1608Metric | D4 |
| 1 | LIDAR | Connector_JST:JST_XH_S8B-XH-A_1x08_P2.50mm_Horizontal | J3 |
| 1 | LOGO | STM32:logo | G*** |
| 1 | MP1475SGJ-P | Package_TO_SOT_SMD:TSOT-23-8 | IC1 |
| 1 | Moteur1 | Connector_JST:JST_XH_S6B-XH-A_1x06_P2.50mm_Horizontal | J4 |
| 1 | Moteur2 | Connector_JST:JST_XH_S6B-XH-A_1x06_P2.50mm_Horizontal | J5 |
| 1 | ON/OFF | Connector_JST:JST_XH_S3B-XH-A_1x03_P2.50mm_Horizontal | SW2 |
| 1 | STM32G431CBUx | STM32:QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm_AJ | U3 |
| 1 | SW_c/s | STM32:SW_Push_1P1T_NO_6x6mm_H9.5mm | SW1 |
| 1 | l | Capacitor_SMD:C_0402_1005Metric_Pad0.74x0.62mm_HandSolder | L2 |
More from Bayazid7/Projet_git_2425_ESE_BAHL
1- 4 layers60 × 60 mm

Similar boards
- 4 layers54 × 57 mm

TagBot
exysta/2425_ESE_Projet_TagBot
Vous vous trouvez actuellement dans le projet TagBot (ou robot chat), qui s'intègre à un projet de classe où chaque équipe doit concevoir un robot.
87 parts3MIT - 4 layers57 × 54 mm

Pojet V NOM KiCAD
MohamedBenabdelhadi/2425_ESE_Projet_V-NOM
Mohamed Benabdelhadi_Nouhaila Faris_Oliver Belliard_Valerian Priou
78 parts2 - 4 layers54 × 57 mm

Projet torero
Manassehalt/2425_ESE_Projet_Torero
Projet de 3ème année d'ESE réalisé par : - JACQUOT Nolan - GUIFFAULT Gabriel - BOULOT Paul - THOMAR Jean-Philippe
82 parts - 4 layers54 × 57 mm

StealthKitty.kicad pro
flexdrt/2425_ESE_Projet_StealthKitty
Ce projet est réalisé dans le cadre de la dernière année de la filière électronique et systèmes embarqués (ESE) de l'ENSEA.
82 parts - 4 layers212.5 × 152.5 mm

GaussSpeedway
mcbridejc/GaussSpeedway
PCB design for the Gauss Speedway. Designed in Kicad 6.
48 parts36 - 4 layers90 × 72 mm

- 4 layers389.9 × 88.9 mm

PCB Repetition
DBXYD/2025-CGS-ESP32-IoT
Il s'agit d'un PCB permettant de centraliser l'alimentation des appareils et de les connecter au réseau local.
101 parts - 4 layers54.1 × 57 mm

Projet Robot
ezer-soltani/HellKitty-Autonomous-Robot
Professional firmware and hardware design for an autonomous mobile robot using STM32G431 and FreeRTOS. Features Lidar perception, ToF safety algorithms, and PID motor control.
88 partsMIT
Questions
How big is the ESE AL8 PCB?
It measures 54 × 57 mm and has 4 copper layers, 1.6 mm thick.
What parts does the ESE AL8 use?
89 parts, built around the ZXBM5210-SP, MP1475SGJ-P and ADXL343BCC. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the ESE AL8 KiCad files?
From the Bayazid7/Projet_git_2425_ESE_BAHL repository on GitHub, at the commit this page was made from: the board is Schema_KICAD/ESE_AL8/ESE_AL8/ESE_AL8.kicad_pcb and its schematic Docs/Schema_KICAD/ESE_AL8/ESE_AL8/ESE_AL8.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the ESE AL8 design in my own project?
Its repository states no licence, so its author keeps all rights: ask Bayazid7 before reusing the design.