# Проект AD для Keil Это единая папка проекта для Keil uVision и стендовой проверки IHM08M1. Открывать: ```text F:\set\workspace\setcorp\set506\AD\AD_Keil_Project\MDK-ARM\IHM08M.uvprojx ``` Основная Simulink-модель лежит отдельно от Keil-проекта: ```text F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl\inu_im_1wnd_3lvl.slx ``` ## Что внутри | Папка или файл | Назначение | |---|---| | `Core/Inc`, `Core/Src` | прикладной код STM32 и добавленные модули AD | | `Drivers` | STM32G4 HAL/CMSIS | | `MDK-ARM` | Keil-проект, scatter-файл, результаты сборки | | `IHM08M.ioc` | CubeMX-конфигурация проекта | | `AD_docs` | русская документация по запуску, распиновке, структурам и Simulink | Главные модули: - `ad_project.h/.c` - общий старт `AD_Project_Init()` и цикл `AD_Project_Loop()`; - `ad_board.h/.c` - ADC, кнопка, board loop и удобные функции запуска тестов; - `ad_inverter.h/.c` - управление TIM1, PWM-тесты каналов, начальное измерение `Rs/Ls/Ll`; - `ad_parameter_identification.h/.c` - режимы, команды, safety limits, fault/status; - `simulink_interface.h/.c` - структуры обмена и телеметрия; - `ad_debug.h` - глобальная структура `g_ad_debug` для Keil Watch. ## Текущее состояние Проект собирается в Keil без ошибок и предупреждений. Распиновка IHM08M1 учтена: - `PA0/PhA`, `PC1/PhB`, `PC0/PhC`, `PA1/BUSV` для ADC; - `PA8/UH`, `PA7/UL`, `PA9/VH`, `PB0/VL`, `PA10/WH`, `PB1/WL` для TIM1 PWM; - `PA6/BKIN` для аппаратной аварии; - `PA5/LD2` по умолчанию не используется из-за конфликта с `PA5 - DAC`. DC-звено пересчитывается с учётом реального измерения `10.0 В -> 0.618 В` на ADC и дополнительно усредняется. ## Безопасность По умолчанию физические PWM-выходы запрещены: ```text AD_PROJECT_POWER_TEST_ENABLE=0 ``` Для стендового включения после проверки железа добавить в Keil `C/C++ -> Define`: ```text AD_PROJECT_POWER_TEST_ENABLE=1 ``` Этот макрос включает `AD_PARAM_ID_ENABLE_POWER_TESTS=1` и `AD_INVERTER_ENABLE_OUTPUTS=1`. При `Stop`, fault, блокировке или `enable=0` TIM1 гасится аппаратным hook `AD_ParamID_HardwareDisable()`. ## Быстрый запуск Безопасное логирование: ```c AD_Board_StartDataLogging(); AD_Board_StopParamTest(); ``` PWM-тест одного канала: ```c AD_Board_StartParamTestWithDuty(AD_PARAM_ID_MODE_PWM_TEST_UH, 0.08f); AD_Board_StopParamTest(); ``` Автоизмерение текущего уровня: ```c AD_Board_StartParamTestWithDuty(AD_PARAM_ID_MODE_AUTO_IDENTIFICATION, 0.08f); ``` Результаты смотреть в `g_ad_debug.motor_parameters` и `g_ad_debug.motor_parameters.valid_mask`. ## Документация - `AD_docs/BUILD_AND_RUN.md` - сборка, запуск и включение силовых тестов. - `AD_docs/HOW_TO_START_TEST_AND_WATCH.md` - какие режимы запускать и что смотреть в Keil. - `AD_docs/PINOUT_MEASUREMENTS_TEST_CONTROL.md` - распиновка, измеряемые параметры и команды. - `AD_docs/DATA_STRUCTURES.md` - структуры данных и флаги. - `AD_docs/MD_DRIVER_MAP.md` - карта слоя TIM1/inverter. - `AD_docs/ADC_CURRENT_SENSORS.md` - где читаются токи и DC-звено. - `AD_docs/PIN_USAGE_IHM08M1_COMPARE.md` - сверка пинов с IHM08M1. - `AD_docs/MODBUS_REGISTERS.md` - карта Modbus RTU регистров для управления режимами и чтения статусов. - `AD_docs/SIMULINK_MODEL_RUN_HELP.md` - где находится модель и как её открыть. ## Ограничение текущей идентификации Автоидентификация последовательно измеряет `Rs_ohm`, `Ll_H`, `Rr_ohm`, `Lm_H` и пересчитывает `Ls_H/Lr_H`. Параметры `J_kg_m2` и `B_Nm_s` помечаются действительными только при наличии ненулевого сигнала `speed_rpm` во время разгона и выбега.