Ajout de pleins de commentaires + modifications voile
This commit is contained in:
parent
96c8eb9242
commit
cc4d4415e9
9 changed files with 223 additions and 66 deletions
|
@ -432,6 +432,54 @@
|
|||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>3</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>35</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>..\Src\Voilier.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>4</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>36</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>..\Src\Voilier.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
<Bp>
|
||||
<Number>5</Number>
|
||||
<Type>0</Type>
|
||||
<LineNumber>81</LineNumber>
|
||||
<EnabledFlag>1</EnabledFlag>
|
||||
<Address>0</Address>
|
||||
<ByteObject>0</ByteObject>
|
||||
<HtxType>0</HtxType>
|
||||
<ManyObjects>0</ManyObjects>
|
||||
<SizeOfObject>0</SizeOfObject>
|
||||
<BreakByAccess>0</BreakByAccess>
|
||||
<BreakIfRCount>0</BreakIfRCount>
|
||||
<Filename>..\Src\Voilier.c</Filename>
|
||||
<ExecCommand></ExecCommand>
|
||||
<Expression></Expression>
|
||||
</Bp>
|
||||
</Breakpoint>
|
||||
<WatchWindow1>
|
||||
<Ww>
|
||||
|
@ -514,7 +562,7 @@
|
|||
<GroupNumber>1</GroupNumber>
|
||||
<FileNumber>1</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Src\Voilier.c</PathWithFileName>
|
||||
|
@ -582,7 +630,7 @@
|
|||
<GroupNumber>2</GroupNumber>
|
||||
<FileNumber>6</FileNumber>
|
||||
<FileType>1</FileType>
|
||||
<tvExp>0</tvExp>
|
||||
<tvExp>1</tvExp>
|
||||
<tvExpOptDlg>0</tvExpOptDlg>
|
||||
<bDave2>0</bDave2>
|
||||
<PathWithFileName>..\Src\Voile.c</PathWithFileName>
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
82
Src/Voile.c
82
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) {
|
||||
|
|
41
Src/Voile.h
41
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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue