IniSat Modèle 1 Version 2 TP 1 : Mise en oeuvre de la carte Nucléo 32 Exo 1 : Hello Word Exo 2 : Lecture vitesse de l'horloge Exo 3 : Clignotement asynchrone de 2 Dels
Revision 3:b869fd151c26, committed 2021-06-23
- Comitter:
- Giamarchi
- Date:
- Wed Jun 23 09:46:55 2021 +0000
- Parent:
- 0:f812f3896eb5
- Commit message:
- Trame
Changed in this revision
--- a/main.cpp Sun Jun 20 23:21:43 2021 +0000 +++ b/main.cpp Wed Jun 23 09:46:55 2021 +0000 @@ -1,69 +1,86 @@ -/* mbed Microcontroller Library - * Copyright (c) 2019 ARM Limited - * SPDX-License-Identifier: Apache-2.0 - */ +/******************************************************************************* + Université de Montpellier + NemoSpace IUT de Nîmes + IniSat Modèle 1 Version 2 +*******************************************************************************/ +// TP n°3 : Trame pour débuter + +// Exo 1 : Lecture tension batterie +// Exo 2 : Lecture courants faces solaires +// Exo 3 : Modes de fonctionnement #include "mbed.h" #include "platform/mbed_thread.h" - -Serial pc(USBTX, USBRX); // Dialogue UART par USB à 9600 Baud -// Initialise the digital pin LED1 as an output -DigitalOut led(LED1); // Ligne PB_3 sur carte Nucléo -DigitalOut led_r(PB_0); // Del rouge carte CPU -DigitalOut led_v(PB_1); // Del verte carte CPU -//PwmOut servo(PB_0); - -Ticker Synchro_Led_Ro; -Ticker Synchro_Led_Ve; - -uint8_t compteur; +#include "system.h" +#include "user.h" -// Blinking rate in milliseconds -#define BLINKING_RATE_MS 500 - -void Tache_Led_Ro(void) { - led_r = !led_r; -} +uint8_t etat, etat_mem; +float mes_accu; -void Tache_Led_Ve(void) { - led_v = !led_v; -} - -int main() -{ - pc.printf("\r\nIniSat V2 : TP1\r\n\n"); // Hello World - Synchro_Led_Ro.attach(&Tache_Led_Ro,1); - thread_sleep_for(150); - Synchro_Led_Ve.attach(&Tache_Led_Ve,0.33); +int main() { - // Test de l'horloge Systeme - pc.printf("CPU SystemCoreClock is %d Hz\r\n", SystemCoreClock); - compteur = 0; + Init_System(); + etat = 0; + + while (1) { + thread_sleep_for(1); // Boucle toutes les 1 milliseconde environ + +// Gestion des modes avec une machine d'états + switch (etat) + { +/******************************************************************************/ +// Mode Init : Mise sous tension +// Initialisation du µC + + case 0: + + break; +/******************************************************************************/ +// Mode Gestion : Gestion des actions +// Contrôle du système + + case 1: + + break; +/******************************************************************************/ +// Mode Mission : Acquisition de données (Mesure Courant faces solaires) +// Stockage + + case 2: + + break; +/******************************************************************************/ +// Mode Radio : Transmission de données - while (true) { - led = !led; - compteur++; - pc.printf("%d\r\n",compteur); - thread_sleep_for(BLINKING_RATE_MS); - } - -// servo.period_ms(20); //Period = 20 ms (f=50 Hz) - -/* while(true) { - for(int pw=1000; pw <= 2000; pw=pw+20) { - servo.pulsewidth_us(pw); //Set new servo position -// wait_ms(200); - thread_sleep_for(200); + case 3: + + break; +/******************************************************************************/ +// Mode Survie : Attente recharge de l'accu + + case 4: + + break; +/******************************************************************************/ +// Mode Zombie : Coupure des consommateurs +// Passage en mode faible consommation +// Diminution de la fréquence du CPU +// passage en mode Sleep + + case 5: + + break; +/******************************************************************************/ + default: + etat = 0; + break; +/******************************************************************************/ + } // end switch + if(etat != etat_mem) // Debug des états + { + pc.printf("Etat_%d\r\n",etat); + etat_mem = etat; } -// wait_ms(1000); //Wait before reverse direction - thread_sleep_for(1000); - for(int pw=2000; pw >= 1000; pw=pw-20) { - servo.pulsewidth_us(pw); //Set new servo position -// wait_ms(200); - thread_sleep_for(200); - } -// wait_ms(1000); - thread_sleep_for(1000); - } - */ -} + } // end while +} // end main +/******************************************************************************/ \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/system.h Wed Jun 23 09:46:55 2021 +0000 @@ -0,0 +1,26 @@ +/******************************************************************************* + system.h -> fichier de configuration + + Lignes en Entrées/Sorties + Lignes en Entrées analogiques + Lignes associées aux bus (série, I2C, SPI) +*******************************************************************************/ + +Serial pc(USBTX, USBRX); // Dialogue UART par USB à 9600 Baud sur carte Nucléo + +DigitalOut DEL(LED1); // Ligne PB_3 sur la carte Nucléo +DigitalOut DEL_R(PB_0); // DEL rouge sur carte CPU +DigitalOut DEL_V(PB_1); // DEL verte sur carte CPU + +DigitalOut ctrl_reg(PA_12); // Controle du régulateur 3.3V sur carte EPS + +AnalogIn batin(PA_0); // Mesure tension batterie sur carte EPS +AnalogIn sp_1in(PA_6); // Mesure courant Solar Panel 1 sur carte EPS +AnalogIn sp_2in(PA_5); // Mesure courant Solar Panel 2 sur carte EPS + +// Divers seuils pour la batterie +#define BAT_SEUIL_HAUT_2 4.2f +#define BAT_SEUIL_HAUT_1 3.9f +#define BAT_SEUIL_BAS_1 3.7f +#define BAT_SEUIL_BAS_2 3.5f +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user.h Wed Jun 23 09:46:55 2021 +0000 @@ -0,0 +1,49 @@ +/******************************************************************************* + user.h -> fichier de fonctions + + Gestion des 2 DELs de la carte CPU + Mesure tension batterie + Mesure courant panneaux solaires +*******************************************************************************/ +// Initialistion du µC, Tests divers +/** +* @param null +*/ +void Init_System(void) { +// Hello World + pc.printf("\r\nIniSat V2 : TP3\r\n\n"); + +// Test de l'horloge Systeme +// pc.printf("Horloge CPU a %d Hz\r\n", SystemCoreClock); +} +/******************************************************************************/ +// Gestion des 2 Dels de la carte CPU +Ticker Compteur_Led; +uint16_t cmpt_led; +uint8_t etat_led; +enum {Off, Ro, Ve, Ro_Ve} couleur; + +/******************************************************************************/ +// Gestion des mesures de la tension de la batterie +Ticker Synchro_Mes_Bat; +uint8_t mes_bat_etat; + +/******************************************************************************/ +// Gestion des mesures des courants sur les 2 faces solaires +Ticker Synchro_Mes_SP; +uint8_t mes_sp_etat; + +/******************************************************************************/ +// Fonction pour initialiser les fonctions précédentes + +void Init_User_Fonctions(void) { + ctrl_reg = 1; // Pour mettre sous tension le moniteur de courant des Solar Panels + +} +// Fonction pour stopper les fonctions précédentes + +void Stop_User_Fonctions(void) { + ctrl_reg = 0; + +} +/******************************************************************************/ \ No newline at end of file