Обновление

This commit is contained in:
cfif 2026-02-03 13:02:31 +03:00
parent 03621e2981
commit 9607ffe45a
2 changed files with 136 additions and 4 deletions

99
Gpios.c
View File

@ -55,9 +55,104 @@ void Gpios_Init() {
// Разрешение диагностики (1 - ВКЛ)
env->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOff_EN_Diag = vInitGpioPinPull(GPIO_A, PORT_PIN_21, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Вывод диагностики (0 - Канал 0; 1 - Канал 1)
env->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutSel_SEL_Diag = vInitGpioPinPull(GPIO_A, PORT_PIN_29, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
env->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutSel_SEL_Diag = vInitGpioPinPull(GPIO_A, PORT_PIN_23, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Канал 1 (1 - ВКЛ)
env->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOffRear_EN = vInitGpioPinPull(GPIO_A, PORT_PIN_30, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
env->power.BTS5180_2EKA_ShutOFFValveFrontRear.ShutOffRear_EN = vInitGpioPinPull(GPIO_A, PORT_PIN_24, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Резервный источник разрешение (1 - ВКЛ)
env->power.BTS4175SGAXUMA1_ReservePowerOutput.EN_ReservePower = vInitGpioPinPull(GPIO_C, PORT_PIN_28, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Резервный источник состояния состояние (1 - ошибок нет)
// Когда устройство работает нормально (нет перегрузки, перегрева, обрыва нагрузки при выключенном состоянии),
// на выводе ST поддерживается высокий уровень напряжения (через внешний подтягивающий резистор)
env->power.BTS4175SGAXUMA1_ReservePowerOutput.ST_ReservePower = vInitGpioPinPull(GPIO_C, PORT_PIN_27, GPIO_IN, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_OPEN_DRAIN, PORT_PULL_DOWN);
// Резервный источник разрешение (1 - ВКЛ)
env->power.BTS4175SGAXUMA1_ShutOFFValveBatteryChiller.EN_BATTChiller = vInitGpioPinPull(GPIO_B, PORT_PIN_3, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Резервный источник состояния состояние (1 - ошибок нет)
// Когда устройство работает нормально (нет перегрузки, перегрева, обрыва нагрузки при выключенном состоянии),
// на выводе ST поддерживается высокий уровень напряжения (через внешний подтягивающий резистор)
env->power.BTS4175SGAXUMA1_ShutOFFValveBatteryChiller.ST_BATTChiller = vInitGpioPinPull(GPIO_B, PORT_PIN_4, GPIO_IN, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_OPEN_DRAIN, PORT_PULL_DOWN);
// Основной сигнал включения/выключения силового канала (выхода OUTPUT) (1 - ВКЛ)
env->power.VN7008AJ_FrontLINActuatorPowerDriverAB.LIN_ActPower_AB = vInitGpioPinPull(GPIO_B, PORT_PIN_22, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// 1. Нормальный режим (SEn=1, INPUT=1, нет ошибок):
// Вывод работает как источник тока.
// Выдает ток (ISENSE), строго пропорциональный току через нагрузку (IOUT).
// Коэффициент K = IOUT / ISENSE задан в даташите (например, ~5890 для IOUT=6А).
// Формула для ADC: VSENSE = ISENSE * RSENSE = (IOUT / K) * RSENSE.
//2. Режим индикации неисправности (SEn=1, произошла ошибка):
// Вывод переключается в режим напряжения с ограничением тока.
// Выдает фиксированное напряжение VSENSEH (около 5-6.6В) при ограниченном токе ISENSEH (около 7-30 мА).
// Это цифровой сигнал для контроллера: "Произошла ошибка!" Конкретный тип ошибки (перегрев, перегрузка) определяется дополнительно, например, по времени возникновения.
// 3. Диагностика в выключенном состоянии (SEn=1, INPUT=0):
// Обрыв нагрузки (Open-Load): Если при выключенном выходе на нем (через внешний pull-up резистор) есть напряжение > VOL (порог ~2-4В), CS выдает VSENSEH
// Короткое замыкание на VCC: Если выход притянут к питанию, CS также выдает VSENSEH
// Если нагрузки исправна и подключена, CS выдает низкий уровень (~0В)
// VSENSE = N × (VREF / 4095) = N × (5 / 4095) ≈ N × 0.001221 В
// 1. VSENSE = N × 0.001221 В
// 2. ISENSE = VSENSE / RSENSE
// 3. IOUT = K × ISENSE = K × (VSENSE / RSENSE) = K × N × 0.001221 / RSENSE
/*
// Конфигурация
#define VREF 5.0f // Опорное напряжение АЦП
#define RSENSE 2490.0f // Сопротивление датчика, Ом
#define K_TYPICAL 5890.0f // Типичный коэффициент из даташита
#define ADC_MAX 4095 // Максимальный код АЦП
// Порог ошибки (VSENSEH - 5.5В с запасом)
#define ERROR_THRESHOLD_V 4.5f
#define ERROR_THRESHOLD_CODE (uint16_t)(ERROR_THRESHOLD_V * 4095.0f / VREF)
// Функция чтения тока
float VN7008AJ_ReadCurrent(uint16_t adc_value) {
// 1. Проверка на ошибку
if (adc_value >= ERROR_THRESHOLD_CODE) {
return -999.9f; // Код ошибки
}
// 2. Преобразование в напряжение
float vsense = (float)adc_value * VREF / 4095.0f;
// 3. Вычисление тока
float isense = vsense / RSENSE;
float iout = isense * K_TYPICAL;
return iout;
}
*/
// Fault_RSTAB: Низкий уровень (0): режим автоматического перезапуска (autorestart). При срабатывании защиты (перегрев, перегрузка) выход отключится, а затем автоматически включится, когда причина срабатывания защиты устранится.
// Fault_RSTAB: Высокий уровень (1): режим фиксации (latch-off). При срабатывании защиты выход отключается и остается выключенным до тех пор, пока не будет подан сброс (импульс низкого уровня на FaultRST) или не будет перезапущено питание.
env->power.VN7008AJ_FrontLINActuatorPowerDriverAB.Fault_RST_AB = vInitGpioPinPull(GPIO_B, PORT_PIN_23, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Разрешение диагностики
env->power.VN7008AJ_FrontLINActuatorPowerDriverAB.EN_CurrentSensing_AB = vInitGpioPinPull(GPIO_B, PORT_PIN_25, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Основной сигнал включения/выключения силового канала (выхода OUTPUT) (1 - ВКЛ)
env->power.VN7008AJ_FrontLINActuatorPowerDriverAB.LIN_ActPower_AB = vInitGpioPinPull(GPIO_B, PORT_PIN_27, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
env->power.VN7008AJ_FrontLINActuatorPowerDriverAB.Fault_RST_AB = vInitGpioPinPull(GPIO_B, PORT_PIN_28, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Разрешение диагностики
env->power.VN7008AJ_FrontLINActuatorPowerDriverAB.EN_CurrentSensing_AB = vInitGpioPinPull(GPIO_B, PORT_PIN_29, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Канал 0 (1 - ВКЛ)
env->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV1_EN = vInitGpioPinPull(GPIO_E, PORT_PIN_25, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Разрешение диагностики (1 - ВКЛ)
env->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV_EN_Diag = vInitGpioPinPull(GPIO_E, PORT_PIN_26, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Вывод диагностики (0 - Канал 0; 1 - Канал 1)
env->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutSelTXV_SEL_Diag = vInitGpioPinPull(GPIO_E, PORT_PIN_27, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
// Канал 1 (1 - ВКЛ)
env->power.BTS5120_2EKA_ShutoffValvePowerTXV.ShutOffTXV2_EN = vInitGpioPinPull(GPIO_E, PORT_PIN_29, GPIO_OUT, GPIO_PIN_NOREVERSE, GPIO_LOW, GPIO_PUSH_PULL, PORT_PULL_DOWN);
}

41
Gpios.h
View File

@ -64,14 +64,51 @@ typedef struct {
tGpioPin ShutOffRear_EN; // Канал 1 (1 - ВКЛ)
} tBTS5180_2EKA_ShutOFFValveFrontRear;
typedef struct {
tGpioPin EN_ReservePower; // Резервный источник разрешение (1 - ВКЛ)
tGpioPin ST_ReservePower; // Резервный источник состояния состояние (1 - ошибок нет)
} tBTS4175SGAXUMA1_ReservePowerOutput;
typedef struct {
tGpioPin LIN_ActPower_AB; // Основной сигнал включения/выключения силового канала (выхода OUTPUT) (1 - ВКЛ)
tGpioPin Fault_RST_AB;
tGpioPin EN_CurrentSensing_AB; // Разрешение диагностики
} tVN7008AJ_FrontLINActuatorPowerDriverAB;
typedef struct {
tGpioPin LIN_ActPower_C; // Основной сигнал включения/выключения силового канала (выхода OUTPUT) (1 - ВКЛ)
tGpioPin Fault_RST_C;
tGpioPin EN_CurrentSensing_C; // Разрешение диагностики
} tVN7008AJ_RearLINActuatorPowerDriverC;
typedef struct {
tGpioPin ShutOffTXV1_EN; // Канал 0 (1 - ВКЛ)
tGpioPin ShutOffTXV_EN_Diag; // Разрешение диагностики (1 - ВКЛ)
tGpioPin ShutSelTXV_SEL_Diag; // Вывод диагностики (0 - Канал 0; 1 - Канал 1)
tGpioPin ShutOffTXV2_EN; // Канал 1 (1 - ВКЛ)
} tBTS5120_2EKA_ShutoffValvePowerTXV;
typedef struct {
tGpioPin EN_BATTChiller; // Холодильник разрешение (1 - ВКЛ)
tGpioPin ST_BATTChiller; // Холодильник состояния (1 - ошибок нет)
} tBTS4175SGAXUMA1_ShutOFFValveBatteryChiller;
typedef struct {
tTPS7B6850QPWPRQ1 TPS7B6850QPWPRQ1;
tGpioPin PBATT_CK_EN; // Контроль напряжения борт-сети (0 - ВКЛ)
tGpioPin SW5V_EN; // Включение 5V (0 - ВКЛ)
tBTS5180_2EKA_FrontAndRearIncarMotor BTS5180_2EKA_FrontRearIncarMotor;
tBTS5180_2EKA_TwoWayValveAndReservePowerSupply BTS5180_2EKA_TwoWayValveAndReservePowerSupply;
tBTS5180_2EKA_2xChannelPTCPowerControl BTS5180_2EKA_2xChannelPTCPower;
tBTS5180_2EKA_ShutOFFValveFrontRear BTS5180_2EKA_ShutOFFValveFrontRear;
tGpioPin PBATT_CK_EN; // Контроль напряжения борт-сети (0 - ВКЛ)
tGpioPin SW5V_EN; // Включение 5V (0 - ВКЛ)
tBTS4175SGAXUMA1_ReservePowerOutput BTS4175SGAXUMA1_ReservePowerOutput;
tBTS4175SGAXUMA1_ShutOFFValveBatteryChiller BTS4175SGAXUMA1_ShutOFFValveBatteryChiller;
tVN7008AJ_FrontLINActuatorPowerDriverAB VN7008AJ_FrontLINActuatorPowerDriverAB;
tVN7008AJ_RearLINActuatorPowerDriverC VN7008AJ_RearLINActuatorPowerDriverC;
tBTS5120_2EKA_ShutoffValvePowerTXV BTS5120_2EKA_ShutoffValvePowerTXV;
} tPower;