clean project
This commit is contained in:
@@ -1,5 +1,141 @@
|
||||
# GbTModuleSW
|
||||
# CCSModuleSW30Web
|
||||
|
||||
Программное обеспечение для блока управления зарядом Gb/T
|
||||
Прошивка контроллера DC-зарядного модуля на STM32F107 (STM32CubeIDE).
|
||||
Проект реализует управление зарядной сессией, обработку состояния EV по CP-линии, управление силовым блоком через CAN и обмен с верхним уровнем по UART.
|
||||
|
||||
Git-репозиторий: https://git.141922.ru/EDISON/GbTModuleSW30Web
|
||||
## Архитектура прошивки
|
||||
|
||||
Логика разделена на несколько уровней:
|
||||
|
||||
- Оркестрация и планировщик задач: `Core/Src/main.c`
|
||||
- Состояния зарядной сессии и протокол с Everest: `Core/Src/serial.c`
|
||||
- Управление силовой частью и контакторами: `Core/Src/psu_control.c`
|
||||
- Обработка CP (PWM/состояние EV): `Core/Src/cp.c`
|
||||
- Единая модель состояния коннектора: `Core/Src/charger_control.c`, `Core/Inc/charger_control.h`
|
||||
- Локальный протокол управления/мониторинга: `Core/Src/serial_control.c`, `Core/Src/serial_handler.c`
|
||||
- Низкоуровневое управление платой: `Core/Src/board.c`, `Core/Src/gpio.c`, `Core/Src/can.c`, `Core/Src/usart.c`
|
||||
|
||||
## Основной цикл и выполнение задач
|
||||
|
||||
`main()` инициализирует периферию и подсистемы (`CCS_Init`, `SC_Init`, `PSU_Init`, `CONN_Init`), после чего переходит в бесконечный цикл.
|
||||
|
||||
В основном цикле выполняются:
|
||||
|
||||
- `PSU_ReadWrite()` — цикл опроса/команд силового блока и расчёт целевых значений.
|
||||
- `PSU_Task()` — state machine силовой части, включение/выключение контакторов, контроль аварий.
|
||||
- `METER_CalculateEnergy()` — расчёт энергии.
|
||||
- `CONN_Loop()` — консолидация ошибок и общих флагов состояния сессии.
|
||||
- `LED_Write()` — применение рассчитанного состояния индикации.
|
||||
|
||||
Ключевой механизм: `ED_Delay()` используется как кооперативный мини-планировщик и внутри задержки вызывает:
|
||||
|
||||
- `CCS_SerialLoop()` — обмен с Everest и переходы состояния коннектора;
|
||||
- `StopButtonControl()` — обработка кнопки STOP/FORCE UNLOCK/RESET;
|
||||
- `CP_Loop()` — чтение и фильтрация состояния CP;
|
||||
- `CONN_Task()` — управление индикацией/сигнализацией;
|
||||
- `LED_Task()` — анимация RGB;
|
||||
- `SC_Task()` — локальный UART-протокол.
|
||||
|
||||
Таким образом, даже во время "задержек" критичные сервисные задачи продолжают выполняться.
|
||||
|
||||
## Модель управления зарядной сессией
|
||||
|
||||
Центр логики сессии находится в `CCS_SerialLoop()` (`serial.c`).
|
||||
Она работает как state machine EVSE-стороны и переводит систему между состояниями:
|
||||
|
||||
- неизвестное/инициализация,
|
||||
- отсутствие автомобиля,
|
||||
- требование авторизации,
|
||||
- подключено/заряд,
|
||||
- режим переподключения,
|
||||
- отключено по команде или по таймауту связи.
|
||||
|
||||
Переходы определяются комбинацией факторов:
|
||||
|
||||
- текущее состояние CP (автомобиль не подключен/подключен/готов),
|
||||
- команды внешней системы (`start`, `stop`, `force unlock`),
|
||||
- разрешение выдачи мощности (`EnableOutput`),
|
||||
- наличие ошибок в силовой части и контакторах,
|
||||
- состояние обмена с Everest.
|
||||
|
||||
Структура `CONN` выступает как единый контейнер рабочего состояния сессии, где сводятся:
|
||||
|
||||
- требуемые напряжение/ток,
|
||||
- разрешение на выдачу мощности,
|
||||
- команда оператора (start/stop/unlock),
|
||||
- текущая стадия сессии,
|
||||
- ошибки коннектора/силовой части.
|
||||
|
||||
## CP-линия и взаимодействие с EV
|
||||
|
||||
`cp.c` отвечает за:
|
||||
|
||||
- генерацию PWM на CP-линии (`CP_SetDuty`),
|
||||
- измерение уровня CP и преобразование в дискретное состояние EV,
|
||||
- цифровую фильтрацию переходов состояния (`CP_FilterState`) для подавления дребезга.
|
||||
|
||||
Команды верхнего уровня могут менять duty CP, что влияет на допустимый ток/режим со стороны EV.
|
||||
Результат фильтрации CP непосредственно используется в state machine сессии (`serial.c`).
|
||||
|
||||
## Силовая часть и контакторы
|
||||
|
||||
`psu_control.c` реализует state machine источника питания и цепи контакторов:
|
||||
|
||||
- инициализация и проверка готовности PSU;
|
||||
- отправка уставок напряжения/тока;
|
||||
- включение/выключение силовой части;
|
||||
- ожидание подтверждений и контроль таймаутов;
|
||||
- контроль обратной связи контактора;
|
||||
- аварийный останов при несогласованности состояния.
|
||||
|
||||
Управление силовыми выходами выполняется через реле платы (`RELAY_AC`, `RELAY_DC`), а факт замыкания контролируется входом обратной связи контактора.
|
||||
При неисправностях флаги `contactor_fault`/`psu_fault` поднимаются и транслируются в общую модель `CONN`, что блокирует дальнейшую выдачу мощности.
|
||||
|
||||
## Интерфейсы обмена
|
||||
|
||||
### UART3: канал к Everest
|
||||
|
||||
`serial.c` реализует пакетный обмен с CRC:
|
||||
|
||||
- приём команд, их валидация и применение к текущей сессии;
|
||||
- отправка телеметрии/состояния с фиксированной периодикой;
|
||||
- обработка ошибок UART и восстановление DMA-приёма.
|
||||
|
||||
Встроен watchdog канала: при потере связи сначала выдаётся предупреждение, затем выполняется защитный переход в безопасное состояние с остановкой выдачи мощности.
|
||||
|
||||
### UART2/UART5: локальное управление и мониторинг
|
||||
|
||||
`serial_control.c` и `serial_handler.c` реализуют отдельный локальный протокол:
|
||||
|
||||
- разбор пакетов и CRC32-проверка;
|
||||
- команды чтения состояния/информации;
|
||||
- команды управления (разрешение заряда, ограничение мощности, reset и т.д.);
|
||||
- публикация телеметрии.
|
||||
|
||||
### CAN2: управление силовым источником
|
||||
|
||||
`psu_control.c` использует CAN2 для обмена с PSU:
|
||||
|
||||
- передача управляющих команд и уставок;
|
||||
- запрос/получение телеметрии;
|
||||
- обработка приёмных кадров в callback и обновление внутренних переменных состояния.
|
||||
|
||||
## Защиты и отказобезопасность
|
||||
|
||||
В прошивке заложены независимые защитные механизмы:
|
||||
|
||||
- E-STOP (короткое/долгое/очень долгое удержание): stop, force unlock, reset.
|
||||
- Потеря обмена с Everest: автоматическая остановка зарядки и перевод в безопасное состояние.
|
||||
- Контроль контактора: проверка соответствия команды и физической обратной связи.
|
||||
- Таймауты включения/выключения PSU: переход в fault при отсутствии ожидаемого подтверждения.
|
||||
- Фильтрация CP-переходов: исключение ложных переключений от помех.
|
||||
|
||||
## Где смотреть ключевую логику в первую очередь
|
||||
|
||||
Для быстрого входа в проект:
|
||||
|
||||
- `Core/Src/main.c` — архитектурный "скелет" и расписание вызовов.
|
||||
- `Core/Src/serial.c` — главная state machine зарядной сессии.
|
||||
- `Core/Src/psu_control.c` — силовая логика, контакторы, fault-handling.
|
||||
- `Core/Src/cp.c` — физика CP и распознавание состояния EV.
|
||||
- `Core/Src/serial_control.c` + `Core/Src/serial_handler.c` — локальный протокол управления.
|
||||
Reference in New Issue
Block a user