Обзор
Описание стандарта не претендует на абсолютное соответствие официальной документации, это наша интерпретация с собственной аппаратной и программной реализацией.
Характеристики разъёма GB/T 20234.3 DC:
- Номинальное напряжение: 750 В / 1000 В DC
- Доступный ток: 80 А, 125 А, 200 А, 250 А
- Максимальная мощность: 250 кВт
- S+ / S− — Связь для зарядки CAN_H / CAN_L
- CC1 / CC2 — Подтверждение зарядки, сигнализация после вставки
- PE — Защитное заземление
- DC+ / DC- — Основное питание DC положительный / отрицательный
- A+ / A− — Вспомогательное питание DC 12В +/-5%, 10А
Аппаратная часть
Программная часть
Стандарт зарядки по кабелю GB/T 27930 основан на сетевом протоколе SAE J1939 и использует шину CAN с соединением точка-точка.
Стандарт основан на спецификации CAN 2.0 со скоростью обмена 250 кбит/с и 29-битным идентификатором.
Стандарт широко используется в современных транспортных средствах в качестве основного стандарта связи для модулей транспортного средства.
Протокол основан на системе PGN и SPN. Где PGN является частью 29-битного идентификатора, а SPN — это информация полезной нагрузки, расположенная в определённом месте в битовом поле 8-байтового сообщения.
Основным недостатком спецификации CAN 2.0 является ограниченная длина кадра, не более 8 байт.
Ограничение длины кадра в стандарте SAE J1939 было решено на программном уровне. Было введен так называемый "Транспортный Уровень" (Transport Layer).
Принцип формирования 29-битного идентификатора для CAN 2.0B:
const uint8_t addressBMS = 0xF4;
const uint8_t addressCHA = 0x56;
uint32_t id = (priority << 26) | ((pgn | (uint8_t)addressBMS) << 8) | (uint8_t)addressCHA;
/* "pgn", "priority" is specified in the tables of the GB/T 27930-2015 standard. */
Тестовый код для справки:
const uint8_t addressBMS = 0xF4;
const uint8_t addressCHA = 0x56;
const uint8_t START_FRAME_PGN = 0xEC00;
const uint8_t NEXT_FRAME_PGN = 0xEB00;
uint8_t data[8];
const uint8_t CM_RTS = 0x10;
const uint8_t CM_CTS = 0x11;
const uint8_t CM_EndOfMsgACK = 0x13;
/* For example PGN for transmit = 0xFFEB;
priority = 6;
data for transmit: payload[28] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27}
*/
uint16_t pgn = 0xFFEB;
uint8_t payload[28] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27};
const uint32_t ID_NEXT_FRAME = (priority << 26) | ((NEXT_FRAME_PGN | (uint8_t)addressBMS) << 8) | (uint8_t)addressCHA;
uint16_t size = sizeof(payload);
uint8_t num_of_packets = (size / 7) + ((size % 7) ? 1 : 0);
/* Connection Initiation STEP 1 */
const uint32_t ID_START_FRAME = (priority << 26) | ((START_FRAME_PGN | (uint8_t)addressBMS) << 8) | (uint8_t)addressCHA;
const uint32_t ID_START_FRAME_CTS = (priority << 26) | ((START_FRAME_PGN | (uint8_t)addressCHA) << 8) | (uint8_t)addressBMS;
const uint32_t ID_END_FRAME_ACK = (priority << 26) | ((START_FRAME_PGN | (uint8_t)addressCHA) << 8) | (uint8_t)addressBMS;
data[0] = CM_RTS;
data[1] = (uint8_t)size;
data[2] = (uint8_t)(size >> 8);
data[3] = num_of_packets;
data[4] = 0xFF;
data[5] = (uint8_t)pgn;
data[6] = (uint8_t)(pgn >> 8);
data[7] = 0;
sendMsg(ID_START_FRAME, data, sizeof(data)); // send message to can
/* Step by step we should send 7 bytes of payload, data[0] indicate number of packet, empty bytes we should fill by 0xFF */
/* detailed see below */
Таблица: Классификация сообщений на этапе рукопожатия зарядки
| Message code | Message description | PGN (Dec) | PGN (Hex) | Priority | Data length byte | Message period ms | Source address-destination address |
|---|---|---|---|---|---|---|---|
| CHM | Charger handshake | 9728 | 002600H | 6 | 3 | 250 | Charger → BMS |
| BHM | Vehicle handshake | 9984 | 002700H | 6 | 2 | 250 | BMS → Charger |
| CRM | Charger recognition | 256 | 000100H | 6 | 8 | 250 | Charger → BMS |
| BRM | BMS and vehicle identification message | 512 | 000200H | 7 | 41 | 250 | BMS → Charger |
Таблица: Классификация сообщений на этапе конфигурации параметров зарядки
| Код сообщения | Описание сообщения | PGN (Dec) | PGN (Hex) | Приоритет | Длина данных (байт) | Период сообщения (мс) | Адрес источника-адрес назначения |
|---|---|---|---|---|---|---|---|
| BCP | Charging parameters of power storage battery | 1536 | 000600H | 7 | 13 | 500 | BMS → Charger |
| CTS | Charger send-time synchronization information | 1792 | 000700H | 6 | 7 | 500 | Charger → BMS |
| CML | Charger's maximum output | 2048 | 000800H | 6 | 8 | 250 | Charger → BMS |