Version Fonctionnelle : Girouette + Voiles + Main OK PARFAIT (TAF -> check bornes du servo en réel)

This commit is contained in:
Paul Faure 2020-11-12 10:09:09 +01:00
parent b0f9aa410b
commit 034c5c44bf
2 changed files with 21 additions and 16 deletions

View file

@ -59,9 +59,14 @@ void ConfAllure(void) {
int RecupAllure(void) { int RecupAllure(void) {
if (!initialized) { if (!initialized) {
return 10000; return 180; //Si jamais la girouette n'est pas initialisée, on relache les voiles (comme en cas d'alerte dee chavirement)
} else { } else {
return ((int)LL_TIM_GetCounter(TIM3)) * 50; int retourCapteur = (int)LL_TIM_GetCounter(TIM3);
if (retourCapteur < 180) {
return retourCapteur;
} else {
return retourCapteur - 360;
}
} }
} }

View file

@ -12,10 +12,12 @@
#define PSC (71) #define PSC (71)
#define Timer (TIM1) #define Timer (TIM1)
#define channel (1) #define channel (1)
#define coefa (1) #define A_ALPHA_TO_BETA (2.0/3.0) //Coefficient directeur de la partie linéaire de la fonction transformant l'allure en angle de voile
#define coefb (0) #define B_ALPHA_TO_BETA (-30.0) //Ordonnée a l'origine de cette même fonction
#define coefc (1) #define GAMMA_90 (19900) //Valeur du registre commandant la largeur de la PWM pour les voiles lachées
#define coefd (0) #define GAMMA_0 (100) //Valeur du registre commandant la largeur de la PWM pour les voiles bordées au maximum
#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
int angleVoileActuel = 0; //angle de la voile. Mis à jour quans on la tend. de 0 à 45. int angleVoileActuel = 0; //angle de la voile. Mis à jour quans on la tend. de 0 à 45.
@ -28,29 +30,27 @@ void ConfVoile(void){
Timer->CCER |= TIM_CCER_CC1E; Timer->CCER |= TIM_CCER_CC1E;
Timer->BDTR |= 0x1 << 15; Timer->BDTR |= 0x1 << 15;
Timer->CCR1 = 1500; // par defaut tendu à 1ms Timer->CCR1 = 1500; // par defaut tendu à 1ms
MyTimer_Start(Timer); MyTimer_Start(Timer);
} }
int RecupTension(void){ int RecupTension(void){
return angleVoileActuel; return angleVoileActuel;
} }
int CalculerTension(int alpha){ int CalculerTension(int alpha){
return alpha; if (abs(alpha) < 45){
/*if (abs(alpha) > 45){
return 0; return 0;
} else {
float res = A_ALPHA_TO_BETA * (float)abs(alpha) + B_ALPHA_TO_BETA;
return (int)res;
} }
else {
int res = alpha * coefa + coefb;
return res;
}*/
} }
void TendreVoile(int theta) void TendreVoile(int theta)
{ {
Timer->CCR1 = coefc * theta + coefd ; Timer->CCR1 = (int)(A_BETA_TO_GAMMA * (float)theta + B_BETA_TO_GAMMA) ;
} }