move includes, center and scale accelerometer reading

This commit is contained in:
Jasper Güldenstein 2020-11-15 17:52:12 +01:00
parent c5f0beac0b
commit bad2a4bd54

View file

@ -1,5 +1,24 @@
#include "Accelerometer.h" #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 <math.h>
#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){ void ACCELEROMETER_Init(void){
RCC -> CFGR |= (0x1<<15); RCC -> CFGR |= (0x1<<15);
RCC-> CFGR &= ~ (0x1<<14); 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_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_1);
LL_ADC_REG_StartConversionSWStart(ADC1); LL_ADC_REG_StartConversionSWStart(ADC1);
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1); 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; return x;
} }
double ACCELEROMETER_GetY(void){ double ACCELEROMETER_GetY(void){
LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_11); LL_ADC_REG_SetSequencerRanks(ADC1, LL_ADC_REG_RANK_1, LL_ADC_CHANNEL_11);
LL_ADC_REG_StartConversionSWStart(ADC1); LL_ADC_REG_StartConversionSWStart(ADC1);
while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1); while (LL_ADC_IsActiveFlag_EOS(ADC1) != 1);
double y = LL_ADC_REG_ReadConversionData12(ADC1); double y = (LL_ADC_REG_ReadConversionData12(ADC1)-ZERO_G_READING) * VOLT_PER_G;
return y; return y;
} }
int ACCELEROMETER_AngleGood(void){ int ACCELEROMETER_AngleGood(void){
@ -56,12 +75,12 @@ int ACCELEROMETER_AngleGood(void){
double y = ACCELEROMETER_GetY(); double y = ACCELEROMETER_GetY();
double angle = x/y; double angle = x/y;
if (angle>tan(0.698132)){ if (angle>tan(ANGLE_LIMIT_RAD)){
return 0; return 0;
}else { }else {
return 1; return 1;
} }
//le flag EOC n'est jamais mis à un .... //le flag EOC n'est jamais mis à un ....
// Soit la conversion est mal faite soit on n'utilise pas bien la simulation // Soit la conversion est mal faite soit on n'utilise pas bien la simulation
//soit on n'utilise pas bien isActiveFlag dans la boucle //soit on n'utilise pas bien isActiveFlag dans la boucle
} }