/* * charger_gbt.h * * Created on: Apr 18, 2024 * Author: colorbass */ #ifndef INC_CHARGER_GBT_H_ #define INC_CHARGER_GBT_H_ #include "main.h" #include "connector.h" #define GBT_CST_NO_REASON 0x0000F0F0 // Без причины #define GBT_CST_CONDITION_REACHED 0x0100F0F0 // Заряд завершен #define GBT_CST_SUSPENDS_ARTIFICIALLY 0x0400F0F0 // Искуственная остановка #define GBT_CST_FAULT_SUSPENSION 0x1000F0F0 // Приостановка из за неисправности #define GBT_CST_BMS_ACTIVELY_SUSPENDS 0x4000F0F0 // завершение по инициативе BMS #define GBT_CST_CONNECTOR_OVER_TEMP 0x0001F0F0 // Перегрев коннектора #define GBT_CST_INT_PART_OVER_TEMP 0x0010F0F0 // Перегрев внутренних частей #define GBT_CST_CANNOT_SUPPLY_REQ_ELQ 0x0040F0F0 // Неполучится обеспечить столько энергии #define GBT_CST_SUDDENSTOP 0x0000F1F0 // Внезапная остановка #define GBT_CST_OTHERFALUT 0x0000F4F0 // Прочая ошибка #define GBT_CST_CURRENT_MISMATCH 0x0000F0F1 // Неправильный ток #define GBT_CST_ABNORMALVOLTAGEERROR 0x0000F0F4 // Ненормальное напряжение typedef enum { GBT_STOP_EVSE = 0, GBT_STOP_EV = 1, GBT_STOP_OCPP = 2, }GBT_StopSource_t; typedef enum{ GBT_CC_UNKNOWN, GBT_CC_12V, GBT_CC_6V, GBT_CC_4V, GBT_CC_2V, }gbtCcState_t; /* Стейты GB/T со стороны EV: постоянно шлём свой пакет, ждём ответ → переход, шлём другой пакет */ typedef enum{ GBT_DISABLED = 0x10, // сессия выключена GBT_EV_CONNECTING = 0x13, // ждём CHM (ничего не шлём), получили → шлём BHM, переход GBT_EV_SEND_BHM_WAIT_CRM = 0x14, // шлём BHM, ждём CRM(0x00) GBT_EV_HANDSHAKE = 0x15, // изотест на EV не делаем → сразу дальше GBT_EV_RECOGNITION = 0x16, // шлём BRM, ждём CRM(0xAA) GBT_EV_CHARGING_PARAMETERS = 0x17, // шлём BCP, ждём CML → шлём BRO(0x00), BRO(0xAA) GBT_EV_BMS_INIT = 0x18, // пауза 1.5 с (инициализация зарядника) GBT_EV_WAIT_CHARGER_READY = 0x19, // ждём CRO(0xAA) или 500 мс → шлём BCL GBT_EV_CHARGING = 0x20, // шлём BCL (запрос U/I) → зарядка GBT_STOP = 0x30, // остановка: EV/EVSE запросили стоп GBT_STOP_CSD = 0x31, // ожидание CSD от EVSE GBT_ERROR = 0x32, // ошибка GBT_COMPLETE = 0x33, // сессия завершена }gbtState_t; #pragma pack(push, 1) typedef struct { uint16_t maxOutputVoltage; }GBT_BHM_t; typedef struct { uint8_t bmsIdentified; uint32_t chargerNumber; char chargerLocation[3]; }GBT_CRM_t; typedef struct { uint16_t maxOutputVoltage; uint16_t minOutputVoltage; uint16_t maxOutputCurrent; uint16_t minOutputCurrent; }GBT_CML_t; typedef struct{ uint8_t version[3]; //GB/T version uint8_t batteryType; //battery type uint16_t batteryCapacity; // 0.1Ah/bit uint16_t batteryVoltage; // 0.1V/bit uint8_t batteryVendor[4]; // Battery vendor (ASCII string) uint32_t batterySN; // int uint8_t batteryManuY; // year (offset 1985) uint8_t batteryManuM; // month uint8_t batteryManuD; // day uint32_t batteryCycleCount:24; //uint24_t uint8_t ownAuto; // 0 = lizing, 1 = own auto uint8_t rsvd0; uint8_t EVIN[17]; //EVIN uint8_t EV_SW_VER[8]; }GBT_BRM_t; typedef struct { uint16_t maxCellVoltage; // 0.01v/bit uint16_t maxChargingCurrent; // 0.1A/bit uint16_t totalEnergy; // 0.1kWh uint16_t maxChargingVoltage; // 0.1V/ bit uint8_t maxTemp; // 1C/bit, -50C offset uint16_t SOC; // 0.1%/bit , 0..100% uint16_t measVoltage; // 0.1V/bit }GBT_BCP_t; typedef struct { uint16_t requestedVoltage; // 0.1V/bit uint16_t requestedCurrent; // 0.1A/bit uint8_t chargingMode; // 0x01 - CV, 0x02 - CC }GBT_BCL_t; typedef struct { uint16_t measuredChargingVoltage; uint16_t measuredChargingCurrent; uint16_t highestVoltageOfBatteryCell; //uint8_t groupNrOfCellWithHighestVoltage; uint8_t currentChargeState; uint16_t estimatedRemainingChargingTime; }GBT_BCS_t; typedef struct { uint8_t singleBatteryHighestVoltageSerNo;// SINGLE_BATTERY_HIGHEST_VOLTAGE_SER_NO uint8_t batteryHighestTemp; //BATTERY_HIGHEST_TEMP uint8_t batteryHighestTempSerNo;//BATTERY_HIGHEST_TEMP_SER_NO uint8_t batteryLowestTemp;//BATTERY_LOWEST_TEMP uint8_t batteryLowestTempSerNo;//BATTERY_LOWEST_TEMP_SER_NO uint8_t batteryCellVoltageState;//BATTERY_CELL_VOLTAGE_STATE uint8_t batteryStatus;//BATTERY_STATUS[bit-mask]; }GBT_BSM_t; typedef struct { uint16_t outputVoltage; uint16_t outputCurrent; uint16_t chargingTime; uint16_t chargingPermissible; }GBT_CCS_t; typedef struct { uint16_t chargingTime; uint16_t outputEnergy; uint32_t chargerNumber; }GBT_CSD_t; // typedef struct { // uint8_t enablePSU; // uint16_t requestedVoltage; // 0.1V/bit // uint16_t requestedCurrent; // 0.1A/bit // uint8_t chargingMode; // 0x01 - CV, 0x02 - CC // uint8_t chargingPercentage; // // uint16_t chargingRemainingTimeMin; // // uint16_t chargingElapsedTimeMin; // // uint8_t chargingElapsedTimeSec; // // CONN_State_t connectorState; // CONN_Error_t outputError; // 0 if okay // uint8_t EvConnected; // }GBT_EDCAN_Output_t; // typedef struct { // uint8_t PSU_Status; // uint16_t measuredVoltage; // 0.1V/bit // uint16_t measuredCurrent; // 0.1A/bit // CONN_Control_t chargeControl; // CONN_Error_t chargingError; // 0 if okay // }GBT_EDCAN_Input_t; /* 500 - Power Supply TX * PSU_ENABLE * BMS_STATUS * BMS_ERRORS * PSU_REQUESTED_VOLTAGE[2] * PSU_REQUESTED_CURRENT[2] * BMS_CHARGE_PERCENTAGE // BMS_MIN_CURRENT * CHARGE_REMAINING_TIME_MIN * CHARGE_REMAINING_TIME_SEC * CHARGE_ELAPSED_TIME[1] RX * MEASURED_VOLTAGE[2] * MEASURED_CURRENT[2] // MAX_VOLTAGE[2] // MAX_CURRENT[2] // MAX_POWER[2] * PSU_STATUS * */ #pragma pack(pop) extern gbtState_t GBT_State; extern ADC_HandleTypeDef hadc1; extern GBT_BHM_t GBT_MaxVoltage; extern GBT_BRM_t GBT_EVInfo; extern GBT_BCP_t GBT_BATStat; extern GBT_BCS_t GBT_ChargingStatus; extern GBT_BCL_t GBT_ReqPower; extern GBT_CML_t GBT_MaxLoad; extern GBT_CCS_t GBT_ChargerCurrentStatus; extern GBT_CRM_t GBT_ChargerInfo; extern GBT_BSM_t GBT_BatteryStatus; extern GBT_CSD_t GBT_ChargerStop; extern uint8_t GBT_BRO; extern uint8_t GBT_Charger_Enable; extern GBT_StopSource_t GBT_StopSource; void GBT_Init(); void GBT_Reset(); //void GBT_Stop(uint32_t causecode); void GBT_StopEV(uint32_t causecode); void GBT_StopEVSE(uint32_t causecode); void GBT_StopOCPP(uint32_t causecode); void GBT_ForceStop(); void GBT_ChargerTask(); void GBT_Error(uint32_t errorcode); //float GBT_CC_GetAdc(); //uint8_t GBT_CC_GetState(); void GBT_SwitchState(gbtState_t state); void GBT_Delay(uint32_t delay); uint32_t GBT_StateTick(); void J_SendPacket(uint32_t PGN, uint8_t pri, uint8_t DLC, uint8_t *data); // EV-side GB/T packets (EV->EVSE) void GBT_SendBHM(void); void GBT_SendBRM(void); void GBT_SendBCP(void); void GBT_SendBRO(uint8_t state); void GBT_SendBCL(void); void GBT_SendBCS(void); void GBT_SendBSM(void); void GBT_SendBSD(void); #endif /* INC_CHARGER_GBT_H_ */