From cc4d4415e947ad1a6ca8cef8142435063d54e113 Mon Sep 17 00:00:00 2001 From: EyeXion <52245783+EyeXion@users.noreply.github.com> Date: Sun, 15 Nov 2020 23:52:35 +0100 Subject: [PATCH] Ajout de pleins de commentaires + modifications voile --- MDK-ARM/Project.uvoptx | 52 +++++++++++++++++++++++++-- Src/Allure.h | 2 ++ Src/Gouvernail.h | 3 ++ Src/Securite.c | 24 ------------- Src/Securite.h | 49 +++++++++++++------------ Src/Transmission.h | 30 ++++++++++++++++ Src/Voile.c | 82 +++++++++++++++++++++++++++++++++++------- Src/Voile.h | 41 ++++++++++++++++++--- Src/Voilier.c | 6 +++- 9 files changed, 223 insertions(+), 66 deletions(-) diff --git a/MDK-ARM/Project.uvoptx b/MDK-ARM/Project.uvoptx index 5cb1497..bb390b4 100644 --- a/MDK-ARM/Project.uvoptx +++ b/MDK-ARM/Project.uvoptx @@ -432,6 +432,54 @@ + + 3 + 0 + 35 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\Voilier.c + + +
+ + 4 + 0 + 36 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\Voilier.c + + +
+ + 5 + 0 + 81 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\Voilier.c + + +
@@ -514,7 +562,7 @@ 1 1 1 - 0 + 1 0 0 ..\Src\Voilier.c @@ -582,7 +630,7 @@ 2 6 1 - 0 + 1 0 0 ..\Src\Voile.c diff --git a/Src/Allure.h b/Src/Allure.h index 26c2f2b..7739a5f 100644 --- a/Src/Allure.h +++ b/Src/Allure.h @@ -1,6 +1,8 @@ #ifndef ALLURE_H #define ALLURE_H +/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : PAUL */ + /** * @brief Configure la girouette pour la détection de l'allure (sens du vent). * @note Configuration des ports PA6 et 7 en alternate input pour récupérer les signaux diff --git a/Src/Gouvernail.h b/Src/Gouvernail.h index 3e4bbee..dc7605c 100644 --- a/Src/Gouvernail.h +++ b/Src/Gouvernail.h @@ -1,6 +1,9 @@ #ifndef GOUVERNAIL_H #define GOUVERNAIL_H +/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : PAUL, ELISE */ + + /** * @brief Configure le récepteur de la télécommande ainsi que le plateau rotatif. * @note Configuration du port PB6 et 7 en alternate input pour récupérer les signaux de la télécommande diff --git a/Src/Securite.c b/Src/Securite.c index 1786393..6ee8a42 100644 --- a/Src/Securite.c +++ b/Src/Securite.c @@ -75,12 +75,6 @@ void ConfSecurite(){ LL_ADC_Enable(ADC1); } -/** - * @brief Recuperer le niveau de batterie - * @note ADC1 -> Channel 12 (Rang 2) - * @param None - * @retval niveau de batterie en pourcentage - */ int RecupNiveauBatterie(void){ // Lancement de la conversion LL_ADC_INJ_StartConversionSWStart(ADC1); @@ -93,12 +87,6 @@ int RecupNiveauBatterie(void){ } -/** - * @brief Met le flag de dangerBatterie à 1 si batterie faible. - * @note - * @param un entier representant le niveau de batterie en pourcentage - * @retval - */ int CalculerDangerNiveauBatterie(int niveau){ if ( niveau <= Seuil) { @@ -111,12 +99,6 @@ int CalculerDangerNiveauBatterie(int niveau){ } - /* - * @brief Mets le flag drapeauDangerRouli a 1 si l angle de rouli est mauvais - * @note Si le voilier prend un angle de roulis supe´rieur a` 40° -> MSG de danger + voiles sont imme´diatement rela^che´es - * @param un entier representant l angle de rouli - * @retval NONE - */ int CalculerDangerChavirement(int gamma){ if ( gamma >= SeuilAngle) { @@ -128,12 +110,6 @@ int CalculerDangerChavirement(int gamma){ } } -/* - * @brief Recuperer l angle de rouli - * @note ADC1 -> Channel 10 (Rang 1) - * @param None - * @retval angle de rouli - */ int RecupRouli(){ // Lancement de la conversion LL_ADC_INJ_StartConversionSWStart(ADC1); diff --git a/Src/Securite.h b/Src/Securite.h index f90a498..81921ab 100644 --- a/Src/Securite.h +++ b/Src/Securite.h @@ -1,44 +1,49 @@ #ifndef SECURITE_H #define SECURITE_H -/** - * @brief - * @note - * @param - * @retval - */ +/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : ELIES, AURIANE, ELISE */ + + + /** + * @brief Mets le flag drapeauDangerRouli a 1 si l angle de roulis est mauvais + * @note Si le voilier prend un angle de roulis supérieur à 40° -> MSG de danger + voiles sont immédiatement relâchées + * @param un entier representant l angle de roulis (entre 0 et 90 degrés) + * @retval NONE + */ int CalculerDangerChavirement(int gamma); + /** - * @brief - * @note - * @param - * @retval + * @brief Recuperer l angle de rouli + * @note ADC1 -> Channel 10 (Rang 1) + * @param None + * @retval angle de rouli (entre 0 et 90 degrès) */ int RecupRouli(void); /** - * @brief - * @note - * @param - * @retval + * @brief Recuperer le niveau de batterie + * @note ADC1 -> Channel 12 (Rang 2) + * @param None + * @retval niveau de batterie en pourcentage (entre 0 et 100) */ int RecupNiveauBatterie(void); + /** - * @brief - * @note A lancer en 1er avant tout - * @param - * @retval + * @brief Configuration de l'ADC 1 pour l'acceleromètre et le niveau de batterie + * @note Channels 10 et 12. A lancer en 1er + * @param None + * @retval None */ void ConfSecurite(void); /** - * @brief - * @note - * @param - * @retval + * @brief Met le flag de dangerBatterie à 1 si batterie faible. + * @note + * @param un entier representant le niveau de batterie en pourcentage + * @retval 1 si danger, 0 si pas de danger */ int CalculerDangerNiveauBatterie(int niveau); diff --git a/Src/Transmission.h b/Src/Transmission.h index 9b47f57..f1f2f84 100644 --- a/Src/Transmission.h +++ b/Src/Transmission.h @@ -1,12 +1,42 @@ #ifndef TRANSMISSION_H #define TRANSMISSION_H + +/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : PAUL, ELIES, AURIANE */ + + +/** + * @brief Initialiser la structure de transmission avec les chaines de caractères pour l'envoi régulier + * @note Flag d'envoi mis à 1 à la fin pour activer la transmission dans EnvoyerCaractere + * @param 2 chaines de caractères pour l'allure et la tension des voiles + * @retval None + */ void EnvoiRegulier(char * Allure, char * tension); +/** + * @brief Initialiser la structure de transmission avec les chaines de caractères pour l'envoi excptionnel + * @note Flag d'envoi mis à 1 à la fin pour activer la transmission dans EnvoyerCaractere + Envoi excpetionnel peut être un message d'alerte pour la batterie ou le roulis + * @param A chaine de caractère pour indiquer quel danger est mis en avant + * @retval None + */ void EnvoiExceptionnel(char * msgAlarme); +/** + * @brief Appelée en BG dans le while(1). Si le flag d'envoi est à 1, envoi le prochain caractère contenu dans la + structure transmission + * @note + * @param None + * @retval None + */ void EnvoyerCaractere(void); +/** + * @brief Configuration de l'USART pour les transmissions + * @note None + * @param None + * @retval None + */ void ConfTransmission(void); #endif diff --git a/Src/Voile.c b/Src/Voile.c index d03c2ec..0e779fe 100644 --- a/Src/Voile.c +++ b/Src/Voile.c @@ -15,21 +15,35 @@ #define A_BETA_TO_GAMMA ((GAMMA_90 - GAMMA_0)/90.0) //Coefficient directeur de la relation entre l'angle de voile et la PWM #define B_BETA_TO_GAMMA (GAMMA_0) //Ordonnée a l'origine +//Valeurs de CCR1 pour la PWM output +#define POSITION_00 1000 +#define POSITION_10 1100 +#define POSITION_20 1200 +#define POSITION_30 1300 +#define POSITION_40 1400 +#define POSITION_50 1500 +#define POSITION_60 1600 +#define POSITION_70 1700 +#define POSITION_80 1800 +#define POSITION_90 1900 + + int angleVoileActuel = 0; //angle de la voile. Mis à jour quans on la tend. de 0 à 45. -void ConfVoile(void){ - LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); - LL_TIM_SetAutoReload(Timer, ARR); - LL_TIM_SetPrescaler(Timer, PSC); - LL_GPIO_SetPinMode(GPIOA,LL_GPIO_PIN_8,LL_GPIO_MODE_ALTERNATE); - LL_GPIO_SetPinOutputType(GPIOA,LL_GPIO_PIN_8,LL_GPIO_OUTPUT_PUSHPULL); - LL_TIM_OC_SetMode(Timer, channel, LL_TIM_OCMODE_PWM1); - Timer->CCER |= TIM_CCER_CC1E; - Timer->BDTR |= 0x1 << 15; - Timer->CCR1 = 1500; // par defaut tendu à 1ms - LL_TIM_EnableCounter(Timer); -} + +void ConfVoile(void){ + LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_GPIOA); //Enable l'horloge du GPIOA + LL_TIM_SetAutoReload(Timer, ARR); //On règle l'ARR + LL_TIM_SetPrescaler(Timer, PSC); //On règle le PSC + LL_GPIO_SetPinMode(GPIOA,LL_GPIO_PIN_8,LL_GPIO_MODE_ALTERNATE); //Pin en mode output alternate + LL_GPIO_SetPinOutputType(GPIOA,LL_GPIO_PIN_8,LL_GPIO_OUTPUT_PUSHPULL); //Pin en mode output pushpull + LL_TIM_OC_SetMode(Timer, channel, LL_TIM_OCMODE_PWM1); //On met le timer en mode PWM1 sur le channel choisi + Timer->CCER |= TIM_CCER_CC1E; //On enable le comptage dans le timer en output + Timer->BDTR |= 0x1 << 15; //Comme on utilise le Timer1, on met le bit MOE à 1 + Timer->CCR1 = 1500; // par defaut tendu à 1ms + LL_TIM_EnableCounter(Timer); //On commence le comptage +} int RecupTensionVoile(void){ @@ -49,7 +63,49 @@ int CalculerTension(int alpha){ void TendreVoile(int theta) { - Timer->CCR1 = (int)(A_BETA_TO_GAMMA * (float)theta + B_BETA_TO_GAMMA) ; + if (theta < 5){ + Timer->CCR1 = POSITION_00; + angleVoileActuel = 0; + } + if (theta < 10){ + Timer->CCR1 = POSITION_10; + angleVoileActuel = 10; + } + else if(theta < 20){ + Timer->CCR1 = POSITION_20; + angleVoileActuel = 20; + } + else if(theta < 30){ + Timer->CCR1 = POSITION_30; + angleVoileActuel = 30; + } + else if(theta < 40){ + Timer->CCR1 = POSITION_40; + angleVoileActuel = 40; + } + else if(theta < 50){ + Timer->CCR1 = POSITION_50; + angleVoileActuel = 50; + } + else if(theta < 60){ + Timer->CCR1 = POSITION_60; + angleVoileActuel = 60; + } + else if(theta < 70){ + Timer->CCR1 = POSITION_70; + angleVoileActuel = 70; + } + else if(theta < 80){ + Timer->CCR1 = POSITION_80; + angleVoileActuel = 80; + } + else{ + Timer->CCR1 = POSITION_90; + angleVoileActuel = 90; + } + + + //Timer->CCR1 = (int)(A_BETA_TO_GAMMA * (float)theta + B_BETA_TO_GAMMA) ; } char * TensionVoileToString(int theta) { diff --git a/Src/Voile.h b/Src/Voile.h index 1e05d15..87d5ce2 100644 --- a/Src/Voile.h +++ b/Src/Voile.h @@ -1,18 +1,51 @@ #ifndef VOILE_H #define VOILE_H +/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : ELIES, AURIANE */ + +/* RESOLUTION PWM SERVOMOTEUR : 10 POSITIONS POSSIBLES*/ + + /** + * @brief Configuration du Timer en mode PWM output + * @note Timer1 en thérie + * @param + * @retval None + */ void ConfVoile(void); - -char * ToString(int theta) ; - - + /** + * @brief Retourne la valeur de l'angle de la voile actuel en degrés + * @note + * @param + * @retval Un angle compris entre 5 et 90 (en degrés) (10 valeurs possibles entre dans [5,10,20,30,40,50,60,70,80,90] + */ int RecupTensionVoile(void); + + /** + * @brief Calcule à partir de l'angle alpha (allure), l'angle theta (de la voile) à avoir + * @note Si alpha < 45, on détend la voile (theta = 90) + * @param Un entier alpha compris entre 0 et 180 + * @retval Un angle theta compris entre 0 et 90 degrés (en degrés) + */ int CalculerTension(int alpha); + + /** + * @brief Met à jour le registre CCR1 pour tendre la voile selon theta + * @note 10 niveaus possibles pour la résolution PWM. + * @param Un entier theta entre 0 et 90 + * @retval None + */ void TendreVoile(int theta); + +/** + * @brief Associe un chaine de caractère a une valeur d'angle de voile + * @note + * @param theta : un entier entre 10 valeurs possibles [5,10,20,30,40,50,60,70,80,90] + * @retval Une chaine de caractère représentant l'angle de voile + */ char * TensionVoileToString(int theta); #endif diff --git a/Src/Voilier.c b/Src/Voilier.c index 4994abf..00410b4 100644 --- a/Src/Voilier.c +++ b/Src/Voilier.c @@ -9,6 +9,10 @@ #include "stm32f1xx_ll_utils.h" // utile dans la fonction SystemClock_Config #include "stm32f1xx_ll_system.h" // utile dans la fonction SystemClock_Config + +/* PERSONNES QUI ONT TRAVAILLE SUR CE MODULE : PAUL, ELIES, AURIANE, ELIES */ + + void SystemClock_Config(void); void ConfSysTick(void){ @@ -53,7 +57,7 @@ void Envoi3s(){ */ void Task100ms(){ - int dangerRoulis = 0; //Variable qui permet de ne pas tendre les voiles si il y a trop de roulis + int dangerRoulis = 0; //Variable qui permet de ne pas tendre les voiles si il y a trop de roulis //Anti-Chavirement if(CalculerDangerChavirement(RecupRouli())){//renvoi boolean : int à 0 si faux et 1 si vrai