261 lines
7.4 KiB
C
Executable File
261 lines
7.4 KiB
C
Executable File
/*
|
||
* 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_ */
|