11#ifndef STM_UTILS_INC_ADC_UTILS_HPP_
12#define STM_UTILS_INC_ADC_UTILS_HPP_
26#define ADC_RES 4095.0f
29#define INV_VOLT_DIV 11.0f
35#define INA186A2_GAIN 50.0f
38#define SHUNT_RESISTOR 0.004f
41#define VCAP_GAIN ADC_REF * INV_VOLT_DIV / ADC_RES
42#define VBAT_GAIN ADC_REF * INV_VOLT_DIV / ADC_RES
45#define IBAT_GAIN -(ADC_REF / SHUNT_RESISTOR / INA186A2_GAIN / ADC_RES)
46#define ISOURCE_GAIN -(ADC_REF / SHUNT_RESISTOR / INA186A2_GAIN / ADC_RES)
47#define ICAP_GAIN -(ADC_REF / SHUNT_RESISTOR / INA186A2_GAIN / ADC_RES)
54 #define VCAP_OFFSET 0.4914794921875f
55 #define VBAT_OFFSET 0.5060302734375f
56 #define IBAT_OFFSET 8.018306816f
57 #define ISOURCE_OFFSET 8.0183068822f
58 #define ICAP_OFFSET 7.97801410408f
60 #define VCAP_OFFSET 0.5300927721875f
61 #define VBAT_OFFSET 0.6178282734375f
62 #define IBAT_OFFSET 7.9417500291f
63 #define ISOURCE_OFFSET 7.9941314767f
64 #define ICAP_OFFSET 7.95786746968f
66 #define VCAP_OFFSET 0.5344686121875f
67 #define VBAT_OFFSET 0.5866657734375f
68 #define IBAT_OFFSET 8.018306816f
69 #define ISOURCE_OFFSET 8.0183068822f
70 #define ICAP_OFFSET 7.97801410408f
72 #define VCAP_OFFSET 0.5344686121875f
73 #define VBAT_OFFSET 0.5866657734375f
74 #define IBAT_OFFSET 8.018306816f
75 #define ISOURCE_OFFSET 8.0183068822f
76 #define ICAP_OFFSET 7.97801410408f
78 #error "WRONG BOARD ID."
85#define ADC1_CHANNELS 2
86#define ADC2_CHANNELS 3
87#define ADC_FIRST_BUFFER 0
88#define ADC_SECOND_BUFFER 1
89#define ADC_BUFFER_DEPTH 16
159 adc_manager(ADC_HandleTypeDef* adc_cap, ADC_HandleTypeDef* adc_bat, ADC_HandleTypeDef* adc_temp)
160 : adc_cap_(adc_cap), adc_bat_(adc_bat), adc_temp_(adc_temp) {}
167 HAL_StatusTypeDef
adc_init(uint8_t* filters_length);
178 void set_gains_offsets();
181 ADC_HandleTypeDef* adc_cap_;
182 ADC_HandleTypeDef* adc_bat_;
183 ADC_HandleTypeDef* adc_temp_;
186 float P_KP_chassis, P_KI_chassis, P_KD_chassis;
187 float P_KP_battery, P_KI_battery, P_KD_battery;
188 float I_KP_supercap, I_KI_supercap, I_KD_supercap;
189 float V_KP_capMax, V_KI_capMax, V_KD_capMax;
190 float V_KP_capMin, V_KI_capMin, V_KD_capMin;
207#define GET_COMPENSATED_ADC(ADC_VAL, NAME) (((float)(ADC_VAL)) * adc_gains[NAME]) + adc_offsets[NAME]
This file contains all the function prototypes for the adc.c file.
float adc_gains[5]
Gain correction per channel.
Definition adc_utils.cpp:26
uint16_t adc1_samples[2][16][2]
Raw buffer for ADC1.
Definition adc_utils.cpp:16
mov_avrg_filter filters[5]
Filter states per channel.
Definition adc_utils.cpp:20
uint16_t ADC_filtered_data[5]
Filtered data per channel.
Definition adc_utils.cpp:23
uint16_t adc2_samples[2][16][3]
Raw buffer for ADC2.
Definition adc_utils.cpp:17
float adc_offsets[5]
Offset correction per channel.
Definition adc_utils.cpp:27
pid_names
Enum for identifying PID loops.
Definition adc_utils.hpp:109
@ I_capa
Definition adc_utils.hpp:112
@ V_cap_min
Definition adc_utils.hpp:114
@ P_chassis
Definition adc_utils.hpp:111
@ V_cap_max
Definition adc_utils.hpp:113
@ P_bat
Definition adc_utils.hpp:110
adc_names
Enum for identifying ADC channels.
Definition adc_utils.hpp:98
@ I_chassis
Current flowing to chassis.
Definition adc_utils.hpp:102
@ V_cap
Voltage on supercap bank.
Definition adc_utils.hpp:100
@ I_bat
Current from PMM to board.
Definition adc_utils.hpp:103
@ I_cap
Current from capacitor side.
Definition adc_utils.hpp:99
@ V_bat
Voltage from battery input.
Definition adc_utils.hpp:101
bool calibration_ready
Optional flag for calibration flow.
Definition adc_utils.hpp:175
adc_manager(ADC_HandleTypeDef *adc_cap, ADC_HandleTypeDef *adc_bat, ADC_HandleTypeDef *adc_temp)
Constructor.
Definition adc_utils.hpp:159
HAL_StatusTypeDef adc_init(uint8_t *filters_length)
Initializes ADCs and filter states.
Definition adc_utils.cpp:38
float get_temperature()
Reads temperature using onboard NTC.
Definition adc_utils.cpp:115
This file contains all the function prototypes for the dma.c file.
: Header for main.c file. This file contains the common defines of the application.
PID loop controller structure.
Definition adc_utils.hpp:135
float OutputMin
Minimum output.
Definition adc_utils.hpp:140
float IntegMax
Maximum integral term.
Definition adc_utils.hpp:137
arm_pid_instance_f32 ArmPID_Instance
CMSIS ARM PID instance.
Definition adc_utils.hpp:136
float IntegMin
Minimum integral term.
Definition adc_utils.hpp:138
float OutputMax
Maximum output.
Definition adc_utils.hpp:139
Moving average filter structure.
Definition adc_utils.hpp:124
uint16_t window_filter[64]
Circular buffer of values.
Definition adc_utils.hpp:125
uint8_t full
True if buffer has been filled at least once.
Definition adc_utils.hpp:129
uint8_t length
Number of samples in filter.
Definition adc_utils.hpp:126
uint8_t index
Current index in circular buffer.
Definition adc_utils.hpp:127
uint32_t sum
Running sum of buffer.
Definition adc_utils.hpp:128
Configuration constants for the supercapacitor power manager firmware.