Académique Documents
Professionnel Documents
Culture Documents
et de la Recherche Scientifique
Université de Carthage
جامعـة قرطاج
Figurepour
Nous proposons de vous guider 2 : Structure globale
développer des différentes
sur STM32F4, tâches
la pile à programmer
logicielle par FreeRTOS, pour la commande
de ce Kart en associant à chaque capteur utilisé une tâche permettant sa gestion.
Nous supposons que la configuration des différents périphériques est effectuée dans la fonction Config_SYS(),
appelée dans la fonction main(). La figure 2 montre un schéma simplifié des différentes tâches proposées.
Capteur de température :
Le capteur de température utilisé est un thermisteur NTC. Il délivre une tension analogique qui passe à travers un
conditionneur pour l'adapter à [0 - 3,3V], appelé Vout . La température est déduite de l'expression suivante :
1
𝛽
𝑇= 20×𝛽 1 𝑉 ×𝑅
− 273,15
𝑜𝑢𝑡 𝑇
+ ln (𝑅 ∗ 3,3−𝑉 )
5963 25 𝑜𝑢𝑡
Où 𝛽 ≈ 3550 et𝑅25 ≈ 850Ω, 𝑅𝑇 = 1000Ω.
Le rôle de cette tâche se résume à lecture de la tension Vout délivrée par le capteur toutes les 30s suivi du calcul de
la température 𝑇 qui sera envoyée vers l’écran LCD.
On suppose que le BSP suivant est prédéfinie :
typedef struct{
CaptTypedef Capt;
float Donnee;
}LCD_donnee;
float Read_Capt(CaptTypedef C);//Lit et retourne la valeur de l'un des
capteur selon le paramètre C.
double log(double x); /* Calcule le logarithme Népérien de x.
Définie dans: math.h */
1) Coder la tâche "Motor_TEMP" qui permet de lire la tension délivrée par le capteur de température, suivi du
calcul de la température en °C ensuite de l'envoyer sous la forme d'une variable de type LCD_donnee dans une
queue appelée Queue_LCD.
Capteur de tension :
Le Kart intègre un indicateur de niveau de batterie permettant de le protéger contre les surcharges. La tension
délivrée par la batterie VBAT comprise entre [0..100V] passe à travers un conditionneur pour l'adapter à [0..3,3V]
(Vout) :
𝑉𝑂𝑢𝑡 × (𝑅1 + 𝑅2 )
𝑉𝐵𝐴𝑇 = + 2𝑉𝑑
𝑅2
Où Vd=0,7V , R1=33kΩ et R2=1kΩ.
2) Coder la tâche "Battery_level" qui permet de déterminer à partir de la tension 𝑉𝑂𝑢𝑡 issue du conditionneur,
toutes les 10s, la tension réelle des batteries qui sera envoyée sous la forme d'une variable de type LCD_donnee
dans la queue appelée Queue_LCD.
Rq: La tension Vout est récupérée par l'appel de la fonction Read_Capt.
Capteur de courant :
Le kart est équipé d'un capteur de courant afin de protéger l’utilisateur et les équipements électroniques contre les
surcharges lentes et rapides. Ainsi, le capteur de courant ASC758 a été installé sur l’une des phases du moteur. Il
permet de supporter un courant Ip allant jusqu'à 50A.
L’utilisation du circuit ASC 758 simplifie énormément la tâche de programmation grâce à la relation linéaire qui lie
le courant 𝐼𝑝 à la tension𝑉𝑜𝑢𝑡 .
𝑉𝑜𝑢𝑡
𝐼𝑝 =
0,04
3) Coder la tâche "Current" qui permet de déterminer à partir de la tension 𝑉𝑂𝑢𝑡 issue du capteur ASC758, toutes
les 1s, la valeur du courant, qui sera envoyée sous la forme d'une variable de type LCD_donnee dans la queue
appelée Queue_LCD.
Capteur de vitesse
L’estimation de la vitesse est souvent basée sur le calcul du nombre de tours des roues. Nous avons équipé le kart
électrique d'un capteur infrarouge permettant de convertir le nombre de tours du moteur en nombre d’impulsions.
En effet, le Timer3 est utilisé afin de compter à chaque seconde le nombre d’impulsions n provenant du capteur
infrarouge.
𝑉 = 𝑛 × 𝜋 × 20,6
2
Avec : 𝑉 : La vitesse en (km/h) et 𝑛 : Le nombre d'impulsion par seconde.
4) Coder la tâche "Speed" , qui permet de déterminer à partir du nombre d’impulsions générées par le capteur
infrarouge, la vitesse de rotation des roues qui sera envoyée sous la forme d'une variable de type LCD_donnee dans
la queue appelée Queue_LCD.
On suppose que les BSPs suivants, permettant la manipulation du TIMER3, soient définis :
Écran LCD
La tâche "Display" reçoit la valeur des différents capteurs à partir de la queue Queue_LCD. Selon la donnée
reçue un message dédié est affiché ayant l'une des formes suivantes :
• Température moteur (°C)= 29,3
• Tension batterie (V)= 50
• Courant phase (A)= 12
• Vitesse (Km/h)=2 3
La tâche "Urgence" est la tâche la plus prioritaire. Elle permet d'arrêter les moteurs suite à l'appui du bouton arret
d'urgence. Le test de l'état de ce bouton est effectué toutes les 20ms, dans le cas où il est appuyé, la commande des
moteurs est effectuée et le message "Arrêt d'urgence" est affiché sur l'écran LCD.
uint8_t ButtonRead();//Permet de lire la valeur du bouton arret d'urgence, retourne 1, s'il est appuyé et 0
sinon
void Com_Stop_Motor();//Permet d'arrêter les moteurs
7) Coder la tâche "Urgence".