From bad2a4bd54d61afbe925a6c85e54d490e262510c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jasper=20G=C3=BCldenstein?= Date: Sun, 15 Nov 2020 17:52:12 +0100 Subject: [PATCH] move includes, center and scale accelerometer reading --- keil_project/Services/Accelerometer.c | 43 +++++++++++++++++++-------- 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/keil_project/Services/Accelerometer.c b/keil_project/Services/Accelerometer.c index ac4bcb7..a140276 100644 --- a/keil_project/Services/Accelerometer.c +++ b/keil_project/Services/Accelerometer.c @@ -1,5 +1,24 @@ #include "Accelerometer.h" +#include "stm32f103xb.h" +#include "stm32f1xx_ll_adc.h" +#include "stm32f1xx_ll_bus.h" +#include "stm32f1xx_ll_rcc.h" +#include "stm32f1xx_ll_gpio.h" +#include + +#ifndef M_PI + #define M_PI 3.14159265358979323846 +#endif + +#define ANGLE_LIMIT_DEG 40 +#define ANGLE_LIMIT_RAD ANGLE_LIMIT_DEG * (180.0 / M_PI) + +#define ZERO_G_VOLTAGE 1.65 +#define ZERO_G_READING (ZERO_G_VOLTAGE / 3.3) * 4095 + +#define VOLT_PER_G 0.48 + void ACCELEROMETER_Init(void){ RCC -> CFGR |= (0x1<<15); RCC-> CFGR &= ~ (0x1<<14); @@ -39,16 +58,16 @@ double ACCELEROMETER_GetX(void){ LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_1); LL_ADC_REG_StartConversionSWStart(ADC1); while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1); - double x= LL_ADC_REG_ReadConversionData12(ADC1); + double x= (LL_ADC_REG_ReadConversionData12(ADC1) - ZERO_G_READING) * VOLT_PER_G; return x; } double ACCELEROMETER_GetY(void){ LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_11); LL_ADC_REG_StartConversionSWStart(ADC1); - while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1); - double y = LL_ADC_REG_ReadConversionData12(ADC1); - return y; + while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1); + double y = (LL_ADC_REG_ReadConversionData12(ADC1)-ZERO_G_READING) * VOLT_PER_G; + return y; } int ACCELEROMETER_AngleGood(void){ @@ -56,12 +75,12 @@ int ACCELEROMETER_AngleGood(void){ double y = ACCELEROMETER_GetY(); double angle = x/y; - if (angle>tan(0.698132)){ - return 0; - }else { - return 1; - } - //le flag EOC n'est jamais mis à un .... - // Soit la conversion est mal faite soit on n'utilise pas bien la simulation - //soit on n'utilise pas bien isActiveFlag dans la boucle + if (angle>tan(ANGLE_LIMIT_RAD)){ + return 0; + }else { + return 1; + } + //le flag EOC n'est jamais mis à un .... + // Soit la conversion est mal faite soit on n'utilise pas bien la simulation + //soit on n'utilise pas bien isActiveFlag dans la boucle }