запущен проект motor identification c терминалкой
This commit is contained in:
128
AD_Keil_Project/AD_docs/SIMULINK_INTEGRATION.md
Normal file
128
AD_Keil_Project/AD_docs/SIMULINK_INTEGRATION.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Интеграция с Simulink
|
||||
|
||||
## Где модель
|
||||
|
||||
Основная модель:
|
||||
|
||||
```text
|
||||
F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl\inu_im_1wnd_3lvl.slx
|
||||
```
|
||||
|
||||
Версия для R2021b:
|
||||
|
||||
```text
|
||||
F:\set\workspace\setcorp\set506\AD\Inu_im_1wnd_3lvl\inu_im_1wnd_3lvl_r2021b.slx
|
||||
```
|
||||
|
||||
Инструкция запуска модели находится в:
|
||||
|
||||
```text
|
||||
AD_Keil_Project\AD_docs\SIMULINK_MODEL_RUN_HELP.md
|
||||
```
|
||||
|
||||
## Что найдено
|
||||
|
||||
| Артефакт | Статус |
|
||||
|---|---|
|
||||
| `Inu_im_1wnd_3lvl/inu_im_1wnd_3lvl.slx` | найден |
|
||||
| `Inu_im_1wnd_3lvl/inu_im_1wnd_3lvl_r2021b.slx` | найден |
|
||||
| `Inu_im_1wnd_3lvl/Inu/wrapper_inu.c` | найден |
|
||||
| `Inu_im_1wnd_3lvl/Inu/controller.c` | найден |
|
||||
| сгенерированный ERT-код `model.c/.h` | не найден |
|
||||
|
||||
Сейчас Keil-проект не является прямой автогенерацией из Simulink. В нём сделан C-интерфейс, через который можно связать модель, хост или ручной код с измерениями и командами.
|
||||
|
||||
## C-интерфейс
|
||||
|
||||
Файлы:
|
||||
|
||||
- `Core/Inc/simulink_interface.h`;
|
||||
- `Core/Src/simulink_interface.c`;
|
||||
- `Core/Inc/ad_parameter_identification.h`;
|
||||
- `Core/Src/ad_parameter_identification.c`.
|
||||
|
||||
Основные функции:
|
||||
|
||||
```c
|
||||
void SimulinkInterface_Init(void);
|
||||
void SimulinkInterface_SetMeasurements(const AD_Measurements_t *meas);
|
||||
void SimulinkInterface_SetCommand(const AD_Command_t *command);
|
||||
void SimulinkInterface_StepFast(void);
|
||||
void SimulinkInterface_StepSlow(void);
|
||||
void SimulinkInterface_PackTelemetry(void);
|
||||
```
|
||||
|
||||
## Команда от модели к MCU
|
||||
|
||||
Использовать `SimulinkInterface_OutputBus_t.command`:
|
||||
|
||||
```c
|
||||
typedef struct
|
||||
{
|
||||
uint8_t enable;
|
||||
uint8_t test_mode;
|
||||
uint8_t reset_faults;
|
||||
uint16_t pwm_polarity_flags;
|
||||
uint16_t pwm_timing_mode;
|
||||
uint16_t motor_control_type;
|
||||
uint16_t rotation_ramp_time_ms;
|
||||
float pwm_duty_limit;
|
||||
float rotation_frequency_Hz;
|
||||
float rotation_modulation;
|
||||
float current_limit_A;
|
||||
float voltage_limit_V;
|
||||
float undervoltage_limit_V;
|
||||
float speed_limit_rpm;
|
||||
float temperature_limit_C;
|
||||
} AD_Command_t;
|
||||
```
|
||||
|
||||
Минимальные условия для силового режима:
|
||||
|
||||
- `enable = 1`;
|
||||
- `test_mode` равен одному из режимов `1`, `3`, `6..14`;
|
||||
- `current_limit_A > 0`;
|
||||
- `voltage_limit_V > 0`;
|
||||
- сборка с `AD_PROJECT_POWER_TEST_ENABLE=1`;
|
||||
- нет активной аварии.
|
||||
|
||||
## Режимы для модели
|
||||
|
||||
| Код | Режим |
|
||||
|---:|---|
|
||||
| 0 | `AD_PARAM_ID_MODE_IDLE` |
|
||||
| 1 | `AD_PARAM_ID_MODE_STATOR_RESISTANCE` |
|
||||
| 2 | `AD_PARAM_ID_MODE_NO_LOAD_MAGNETIZING` |
|
||||
| 3 | `AD_PARAM_ID_MODE_LOCKED_ROTOR_LEAKAGE` |
|
||||
| 4 | `AD_PARAM_ID_MODE_INERTIA_FRICTION` |
|
||||
| 5 | `AD_PARAM_ID_MODE_DATA_LOGGING` |
|
||||
| 6 | `AD_PARAM_ID_MODE_PWM_TEST_UH` |
|
||||
| 7 | `AD_PARAM_ID_MODE_PWM_TEST_UL` |
|
||||
| 8 | `AD_PARAM_ID_MODE_PWM_TEST_VH` |
|
||||
| 9 | `AD_PARAM_ID_MODE_PWM_TEST_VL` |
|
||||
| 10 | `AD_PARAM_ID_MODE_PWM_TEST_WH` |
|
||||
| 11 | `AD_PARAM_ID_MODE_PWM_TEST_WL` |
|
||||
| 12 | `AD_PARAM_ID_MODE_PWM_TEST_ALL` |
|
||||
| 13 | `AD_PARAM_ID_MODE_AUTO_IDENTIFICATION` |
|
||||
| 14 | `AD_PARAM_ID_MODE_ROTATION_3HZ` |
|
||||
|
||||
## Данные от MCU к модели
|
||||
|
||||
Использовать `SimulinkInterface_InputBus_t`:
|
||||
|
||||
- `measurements` - токи, DC-звено, скорость, температура, время;
|
||||
- `motor_parameters` - оценённые параметры двигателя;
|
||||
- `param_id_status` - флаги состояния;
|
||||
- `param_id_faults` - флаги ошибок;
|
||||
- `param_id_mode` - фактический режим.
|
||||
|
||||
Результаты измерений считаются действительными только по `motor_parameters.valid_mask`.
|
||||
|
||||
## Частоты вызова
|
||||
|
||||
В текущем Keil-проекте:
|
||||
|
||||
- `SimulinkInterface_StepFast()` вызывается на каждой итерации `AD_Project_Loop()`;
|
||||
- `SimulinkInterface_StepSlow()` вызывается раз в 10 мс.
|
||||
|
||||
Для настоящего привода быстрый шаг лучше переносить в прерывание ADC/PWM, но текущая реализация уже позволяет проверить каналы, телеметрию и начальные измерительные импульсы.
|
||||
Reference in New Issue
Block a user