latest version

This commit is contained in:
2026-03-10 13:17:00 +03:00
parent 5ea401f34d
commit f410ea90aa
179 changed files with 151928 additions and 110001 deletions

196
Core/Inc/psu_control.h Executable file
View File

@@ -0,0 +1,196 @@
/*
* ccs_control.h
*
* Created on: 19 авг. 2024 г.
* Author: colorbass
*/
#ifndef INC_PSU_CONTROL_H_
#define INC_PSU_CONTROL_H_
#include "main.h"
#include "charger_config.h"
void PSU_Init();
void PSU_Enable(uint8_t addr, uint8_t enable);
void PSU_Loop();
void CONT_Loop();
// --- Состояние силового модуля (DC30, один PSU) ---
typedef enum{
PSU_UNREADY, // отключен, не готов к использованию
PSU_INITIALIZING, // инициализация модуля
PSU_READY, // отключен, готов к использованию
PSU_WAIT_ACK_ON, // ждём подтверждение включения модуля (напряжение выше порога)
PSU_CONT_WAIT_ACK_ON, // включаем DC-контактор и ждём подтверждение
PSU_CONNECTED, // модуль включён, DC-контактор замкнут
PSU_CURRENT_DROP, // снижение тока перед отключением
PSU_WAIT_ACK_OFF, // ждём подтверждение выключения модуля (напряжение ниже порога)
PSU_CONT_WAIT_ACK_OFF, // выключаем DC-контактор и ждём подтверждение
PSU_OFF_PAUSE, // пауза после выключения модуля
} PSU_State_t;
/* Status0 (состояние модуля N, таблица 0 — modularForm0) */
typedef struct{
/* Bit0 */ uint8_t shortCircuitFault:1; /* 1: короткое замыкание на выходе */
/* Bit1 */ uint8_t unevenFlowAlarm:1; /* 1: перекос/неравномерность распределения тока между модулями */
/* Bit2 */ uint8_t internalCommunicationFault:1; /* 1: внутренняя ошибка связи модуля */
/* Bit3 */ uint8_t inputBusLineFault:1; /* 1: авария по входу или по шине постоянного тока */
/* Bit4 */ uint8_t lockProtection:1; /* 1: защита с защёлкой (латч, блокировка до сброса) */
/* Bit5 */ uint8_t dischargeFault:1; /* 1: неисправность цепи разряда (bleeder/разрядный резистор) */
/* Bit6 */ uint8_t eepromFault:1; /* 1: ошибка/неисправность EEPROM */
/* Bit7 */ uint8_t rsvd_s0:1; /* зарезервировано */
} PSU_Status0_t;
/* Status1 (состояние модуля N, таблица 1 — modularForm1) */
typedef struct{
/* Bit0 */ uint8_t dcSideOffStatus:1; /* 1: отключена сторона постоянного тока (DC-выход) */
/* Bit1 */ uint8_t moduleFaultAlarm:1; /* 1: общая авария модуля */
/* Bit2 */ uint8_t moduleProtectionAlarm:1; /* 1: сработала защита модуля */
/* Bit3 */ uint8_t fanFaultAlarm:1; /* 1: авария вентилятора */
/* Bit4 */ uint8_t overTempAlarm:1; /* 1: перегрев модуля */
/* Bit5 */ uint8_t outputOverVoltageAlarm:1; /* 1: перенапряжение на выходе */
/* Bit6 */ uint8_t outputOverCurrentAlarm:1; /* 1: сверхток на выходе */
/* Bit7 */ uint8_t canCommunicationInterruptAlarm:1; /* 1: нарушение связи по CAN */
} PSU_Status1_t;
/* Status2 (состояние модуля N, таблица 2 — modularForm2) */
typedef struct{
/* Bit0 */ uint8_t powerLimitStatus:1; /* 1: активен режим ограничения мощности */
/* Bit1 */ uint8_t moduleAddressDuplicate:1; /* 1: дублирование адреса модуля */
/* Bit2 */ uint8_t severeUnevenFlowFault:1; /* 1: сильный перекос токораспределения между модулями */
/* Bit3 */ uint8_t threePhaseInputPhaseLossAlarm:1; /* 1: авария по пропаданию фазы трёхфазного входа */
/* Bit4 */ uint8_t threePhaseInputUnbalanceAlarm:1; /* 1: авария по разбалансу трёхфазного входа */
/* Bit5 */ uint8_t inputUnderVoltageAlarm:1; /* 1: пониженное напряжение на входе */
/* Bit6 */ uint8_t inputOverVoltageAlarm:1; /* 1: повышенное напряжение на входе */
/* Bit7 */ uint8_t pfcSideOffStatus:1; /* 1: отключена сторона PFC */
} PSU_Status2_t;
typedef struct {
uint8_t enableAC; // состояние AC-контактора (желание)
uint8_t enableOutput; // разрешение выхода модуля (желание)
uint16_t outputVoltage; // измеренное выходное напряжение [В]
int16_t outputCurrent; // измеренный выходной ток [0.1 А]
uint8_t temperature; // температура модуля
PSU_State_t state; // состояние силового модуля и контакторов
uint8_t online; // модуль в сети (есть телеметрия)
uint8_t ready; // модуль готов к работе (online && нет ошибок)
uint8_t PSU_enabled; // на выходе есть напряжение (> порога)
uint8_t CONT_enabled; // DC-контактор замкнут (по обратной связи)
uint8_t cont_fault; // внутренняя ошибка контакторов
uint8_t psu_fault; // внутренняя ошибка силового модуля
uint32_t statetick; // время входа в состояние
// Дополнительные параметры для одного модуля DC30
uint32_t power_limit; // лимит мощности [кВт]
uint8_t hv_mode; // HV-режим (ограничение напряжения)
uint32_t tempAmbient; // температура окружающего воздуха (из PSU_04)
union { uint8_t raw; PSU_Status0_t bits; } status0; // modularForm0
union { uint8_t raw; PSU_Status1_t bits; } status1; // modularForm1
union { uint8_t raw; PSU_Status2_t bits; } status2; // modularForm2
} PSU_t;
extern PSU_t PSU0;
void PSU_Task(void);
#pragma pack(push, 1)
typedef struct{
uint8_t source:8;
uint8_t destination:8;
uint8_t command:6;
uint8_t device:4;
uint8_t error:3;
}CanId_t;
typedef struct{
uint8_t rsvd0[2];
uint16_t moduleNumber;
uint8_t rsvd1[5];
}PSU_02_t;
typedef struct{
uint8_t rsvd0[2];
uint16_t moduleGroupNumber;
uint8_t moduleTemperature;
uint8_t rsvd1;
uint8_t modularForm2;
uint8_t modularForm1;
uint8_t modularForm0;
}PSU_04_t;
typedef struct{
uint8_t VABHi;
uint8_t VABLo;
uint8_t VBCHi;
uint8_t VBCLo;
uint8_t VCAHi;
uint8_t VCALo;
uint8_t rsvd1[2];
uint32_t VAB;
uint32_t VBC;
uint32_t VCA;
}PSU_06_t;
typedef struct{
uint32_t totalSystemVoltage;
uint32_t totalSystemCurrent;
}PSU_08_t;
typedef struct{
uint8_t moduleNVoltage_[4];
uint8_t moduleNCurrent_[4];
uint32_t moduleNVoltage;
uint32_t moduleNCurrent;
}PSU_09_t;
// setup
typedef struct{
uint8_t enable;
uint8_t rsvd1[7];
}PSU_1A_t;
typedef struct{
uint8_t moduleVoltage[4];
uint8_t moduleCurrentTotal[4];
}PSU_1B_t;
//typedef struct{
// uint32_t moduleVoltage;
// uint32_t moduleCurrentTotal;
//}PSU_1B_t;
typedef struct{
uint8_t moduleVoltage[4];
uint8_t moduleCurrentTotal[4];
}PSU_1C_t;
typedef struct{
uint8_t enable;
uint8_t rsvd1[7];
}PSU_1D_t;
extern PSU_02_t PSU_02;
extern PSU_04_t PSU_04;
extern PSU_06_t PSU_06;
extern PSU_08_t PSU_08;
extern PSU_09_t PSU_09;
extern PSU_1A_t PSU_1A;
extern PSU_1B_t PSU_1B;
extern PSU_1C_t PSU_1C;
#pragma pack(pop)
#endif /* INC_PSU_CONTROL_H_ */