139 lines
4.6 KiB
C
139 lines
4.6 KiB
C
//
|
||
// 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
|