// // Created by villuton on 25.08.2025. // #ifndef CHARGER_CHARGERCONFIG_H #define CHARGER_CHARGERCONFIG_H /** * Нумерация каналов * для формирования массивов значений * и пинов управления */ typedef enum { CHRG_Ch1 = 0, CHRG_Ch2, CHRG_Ch3, CHRG_Ch4, CHRG_Ch5, CHRG_Ch6, CHRG_Ch7, CHRG_Ch8, CHRG_Ch9, CHRG_Ch10, }eChargerChannels; /** * Количество каналов */ #define CHARGER_CH_NUM 10 /** * ADCS */ #define ADCS_ADCx ADC1 #define ADCS_ADC_BUFF_SIZE CHARGER_CH_NUM #define ADCS_CRM_ADCx_PERIPH_CLOCK CRM_ADC1_PERIPH_CLOCK #define ADCS_ADCx_ORDINARY_TRIG_SOFTWARE ADC12_ORDINARY_TRIG_SOFTWARE #define ADCS_ADC_DMAx_CHANNELx DMA1_CHANNEL1 #define ADCS_ADC_DMAx_Channelx_IRQn DMA1_Channel1_IRQn #define ADCS_ADC_CRM_DMAx_PERIPH_CLOCK CRM_DMA1_PERIPH_CLOCK /** * GPIOS */ #define GPIOS_NUM CHARGER_CH_NUM /** * SERIAL */ /** * INDICATION */ #define INDICATION_CHANEL_NUM CHARGER_CH_NUM #define INDICATION_MOD_NUM 4 #define INDICATION_THREAD_DELAY_MS 20 /** * STORAGE FLASH AND RUNTIME VARIABLES */ /** * Про расчет напряжения аккумулятора * И приведения значения АЦП к реальному напряжению на входе * * V_in (0…4 В) ──R1──┬───R2─── GND * │ * └─── к АЦП (V_adc = 0…3,3 В) * * Приведение данных ацп к напряжению * V_adc = adc_data * 3.3f / 4095.0f * * Формула соотношения входного напряжения к выходному * на делителях * V_adc = V_in * R1 / (R1 + R2) * V_in = V_adc * (R1 + R2) / R1 * * Вариант с пересчетом коэффициента и калибровки * K = V_in_cal / ADC * V_in_cal = ADC * K * * Для расчета будут два варианта, по умолчанию * будет пересчет на делителях, для этого будем использовать посчитанный коэффициент, * в нашем случае * V_adc = adc_data * 3.3f / 4095.0f * R1 = 51KOm R2 = 51KOm => * V_in = V_adc * (51 + 51)/51 => * V_in = V_adc * 2 * То есть коэффициент на делителях будет 2 * По умолчанию будут * * Второй вариант - расчет калибровочного коэффициента * с выставленным напряжением на входе АКБ * По умолчанию будет 4 Вольта, значение * А калибровочные коэффициенты 0, чтобы брать в расчет * Соотношение делителя и приведение от данных ацп к напряжению */ /// Количество значений калибровочных коэффициентов для каналов в стореде #define STORAGE_CALIB_CHANEL_NUM CHARGER_CH_NUM /// Напряжение, которое подаем для калибровки #define STORAGE_V_REFERENCE_DEFAULT 4.0 /// Калибровочный коэффициент по умолчанию, если значение 0, то расчет ведется по соотношению делителя напряжения #define STORAGE_CALIBRATION_FACTOR_DEFAULT 0.0 /// Напряжение на входе АКБ относится как два напряжения на входе ADC #define STORAGE_V_DIVIDER_RATIO_DEFAULT 2.0 /// Напряжение, при котором считаем, что аккумулятор подключен #define STORAGE_V_BAT_CONNECT 0.5 /// Напряжение, при котором считаем, что аккумулятор заряжен #define STORAGE_V_BAT_LOADED 4.0 /// Верхнее значение напряжение на АЦП #define STORAGE_V_ADC_THRESHOLD 3.3f /// Верхнее значение 12 разрядов АЦП #define STORAGE_ADC_THRESHOLD 4095.0f /// Время проверки значения напряжения на каналах АЦП во время зарядки #define STORAGE_VERIFICATION_TIME 100 /// Время зарядки, напряжение проверяется только на факт отключения АКБ #define STORAGE_CHARGE_TIME 1000 /** * MAIN */ /// Задержка основного потока #define MAIN_THREAD_DELAY_MS 10 #endif //CHARGER_CHARGERCONFIG_H