TestSubmodule/APP/ChargerConfig.h

139 lines
4.6 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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