Диагностируйте преобразование постоянного магнита Simscape™ синхронный двигатель к совместимой с HDL модели Simulink

Этот пример показывает, как изменить модель объекта управления Simscape™, чтобы сгенерировать совместимую с HDL модель Simulink™ с HDL Coder™. HDL-код затем сгенерирован из этой модели Simulink.

Введение

Модель объекта управления Simscape преобразована в модель HDL-Compatible Simulink при помощи HDL Workflow Advisor Simscape. Чтобы запустить Советника, вызовите функцию sschdladvisor для модели.

HDL Workflow Advisor Simscape генерирует модель реализации HDL, из которой можно сгенерировать HDL-код. Прежде чем вы сгенерируете модель реализации, убедитесь, что модель объекта управления Simscape совместима для генерации модели реализации при помощи HDL Workflow Advisor Simscape. Для получения дополнительной информации смотрите, Генерируют HDL-код из Моделей Simscape.

В некоторых случаях модель объекта управления Simscape не может быть совместимой для генерации модели реализации использование HDL Workflow Advisor Simscape. Для совместимости HDL можно изменить модель объекта управления Simscape и затем запустить HDL Workflow Advisor Simscape.

Этот пример иллюстрирует, как изменить Постоянный магнит Синхронная Модель электродвигателя в Simscape для совместимости HDL. Модель нелинейна и не совместима для генерации модели реализации при помощи HDL Workflow Advisor Simscape. Этот пример иллюстрирует, как можно изменить непрерывно-разовую нелинейную модель к переключенной линейной модели дискретного времени. Модель становится совместимой для генерации модели реализации, из которой можно сгенерировать HDL-код.

Постоянный магнит синхронная модель электродвигателя

Эта модель является физической системой, разработанной в Simscape. Модель содержит нелинейные элементы и нужна в модификациях для генерации модели реализации. Открыть модель. запустите эту команду:

open_system('ee_pmsm_drive')

Сохраните эту модель как ee_pmsm_drive_original.slx

open_system('ee_pmsm_drive_original')

Эта модель показывает Постоянный магнит синхронную машину (PMSM) и инвертор, измеренный для использования в типичном гибридном автомобиле. Инвертор соединяется непосредственно с батареей автомобиля. Можно использовать модель, чтобы разработать контроллер PMSM, выбирая архитектуру и усиления, чтобы достигнуть производительности, которую вы хотите. Резистор Gmin обеспечивает очень маленькую проводимость, чтобы основываться, который улучшает числовые свойства модели при использовании решателя переменного шага. Чтобы видеть, как модель работает, моделируйте модель.

sim('ee_pmsm_drive_original')

Эта модель является непрерывной системой времени. Чтобы работать с HDL Workflow Advisor Simscape, необходимо преобразовать модель в дискретную систему.

Преобразуйте непрерывно-разовую модель в Фиксированный Шаг дискретная модель

1. Сконфигурируйте опции решателя для генерации HDL-кода при помощи Блока Configuration Решателя. В параметрах блоков этого блока:

  • Выберите Use локальный решатель.

  • Используйте Backward Euler в качестве типа Решателя.

  • Задайте дискретный Шаг расчета, Ts.

2. Измените настройки Solver в диалоговом окне Configuration Parameters на панели Решателя:

  • Установите тип выбора Решателя на Fixed-Step.

  • Установите решатель на discrete (no continuous states).

  • Установите размер Фиксированного шага (основной шаг расчета) к Ts.

  • Ясная Обработка каждый дискретный уровень как отдельная задача в разделе Tasking и опциях шага расчета.

3. Измените настройки отображения своей модели в Редакторе Simulink.

  • На вкладке Display, набор Шаг расчета к All. Рассмотрите сгенерированный отчет для любых блоков, которые имеют шаг расчета кроме Ts, или которые работают на непрерывном масштабе времени.

4. Дважды кликните блок Step в модели и установите ее Шаг расчета на Ts.

5. Для более быстрой симуляции проигнорируйте параметры нулевой последовательности PMSM. Дважды кликните блок Permanent Magnet Synchronous Motor и установите Нулевую Последовательность на Exclude.

Модель является теперь фиксированным шагом дискретная система. Моделируйте модель и сравните сигналы в Инспекторе Данных моделирования.

Некоторая Модуляция ширины импульса (PWM) сигнализирует о переходе ранее или позже между симуляциями, но они хорошо в неродном размере контроллера. Единственные сигналы, которые отличаются вне допуска, являются Спросом на Крутящий момент и Моторным Крутящим моментом, к концу симуляции, в приемлемых пределах.

Сделайте три фазы диском PMSM совместимый с советником по вопросам HDL

Чтобы сделать модель объекта управления Simscape Совместимой с HDL, идентифицируйте присутствие любых нелинейных компонентов или блоков в модели. Войдите:

simscape.findNonlinearBlocks('ee_pmsm_drive_original')
Found network that contains nonlinear equations in the following blocks:
    'ee_pmsm_drive_original/Permanent Magnet Synchronous Motor'

The number of linear or switched linear networks in the model is 0.
The number of nonlinear networks in the model is 1.

ans =

  1x1 cell array

    {'ee_pmsm_drive_original/Permanent Magnet Synchronous Motor'}

Модель объекта управления Simscape имеет нелинейный блок, который является блоком PMSM.

Удалите блок PMSM, блок Encoder, резистор Gmin, и, Двигатель & загрузите блок инерции. Удалить элементы Simscape и блоки, введите:

delete_block('ee_pmsm_drive_original/Permanent Magnet Synchronous Motor')
delete_block('ee_pmsm_drive_original/Encoder')
delete_block('ee_pmsm_drive_original/Gmin')
delete_block('ee_pmsm_drive_original/Motor & load inertia')

Для простоты реализации модель объекта управления Simscape преобразована в Советника по вопросам HDL совместимая модель при помощи двухступенчатого процесса:

1. Реализуйте первоначальную нелинейную модель Simulink при помощи типа данных с двойной точностью и блоки, которые не совместимы с кодером HDL.

2. Измените эту нелинейную модель, чтобы сделать его подходящим для развертывания с HDL Coder при помощи типов данных с одинарной точностью и блоков, которые совместимы с HDL Coder для более эффективной генерации HDL-кода.

Шаг 1: преобразуйте модель объекта управления Simscape в начальную букву модель Simulink

Замените блок PMSM, блок Encoder, резистор Gmin и, Двигатель & загрузите блок инерции с Электрическим Интерфейсным блоком Simulink и Постоянным магнитом Синхронный Моторный блок Simulink.

Электрический Интерфейсный блок Simulink реализован при помощи Управляемых Текущих Источников. Интерфейс к PMSM изолируется от реализации.

load_system('ee_pmsm_drive_initialSL')
set_param('ee_pmsm_drive_initialSL','SimulationCommand','update')
open_system('ee_pmsm_drive_initialSL/Electrical Interface')

Блок Simulink PMSM реализован при помощи Электрических уравнений и Механических уравнений. Для получения дополнительной информации см. PMSM.

open_system('ee_pmsm_drive_initialSL/Permanent Magnet Synchronous Motor (Simulink)')

Сохраните обновленную модель как ee_pmsm_drive_singleSL.

Шаг 2: преобразуйте модель машины Simulink в совместимую с HDL модель Simulink с одинарной точностью

1. Обновите Output data type во вкладке Signal Attributes Усиления и блоков продукта к Single.

Искать блоки Усиления в модели Simulink, введите:

load_system('ee_pmsm_drive_singleSL')
set_param('ee_pmsm_drive_singleSL','SimulationCommand','update')
blockconstant=find_system('ee_pmsm_drive_singleSL', 'blocktype', 'Gain')
blockconstant =

  2x1 cell array

    {'ee_pmsm_drive_singleSL/PMSM controller/rpm ->...'}
    {'ee_pmsm_drive_singleSL/rad//s2rpm'               }

Массив blockconstant хранит точное местоположение блоков Усиления как переменные. В модели Simulink существует два блока Усиления.

Чтобы установить тип выходных данных этих, Усиление блокируется к синглу, введите:

set_param(blockconstant{1},'OutDataTypeStr', 'single')
set_param(blockconstant{2},'OutDataTypeStr', 'single')

Искать блоки продукта в модели Simulink, введите:

find_system('ee_pmsm_drive_singleSL', 'blocktype', 'Product')
ans =

  0x1 empty cell array

В модели Simulink нет никаких блоков продукта.

2. Блоки Преобразования парка Transform и парка Inverse в блоке Simulink PMSM изменяются, чтобы устранить 6 Синусов и 6 блоков Косинуса.

open_system('ee_pmsm_drive_singleSL/Permanent Magnet Synchronous Motor (Simulink)')

3. Уменьшайте оборудование, требуемое для блока Park Transform путем добавления Кларка Трэнсформа и Кларка к блокам парка Angle Transform.

open_system('ee_pmsm_drive_singleSL/Permanent Magnet Synchronous Motor (Simulink)/Park Transform')

4. Уменьшайте оборудование, требуемое для блока Inverse Park Transform путем добавления парка Inverse в Кларка Энгла Трэнсформа и Инверсию блоки Кларка Трэнсформа.

open_system('ee_pmsm_drive_singleSL/Permanent Magnet Synchronous Motor (Simulink)/Inverse Park Transform')

5. Замените блок Three-Phase Current Sensor Simscape путем питания контроллера трехфазными токами, прибывающими из модели PMSM.

6. Добавьте Электронные часы с Шагом расчета Ts. Соедините часы с блоком Display.

open_system('ee_pmsm_drive_singleSL')

Запустите HDL Workflow Advisor Simscape

Чтобы открыть HDL Workflow Advisor Simscape, запустите sschdladvisor для своей модели.

sschdladvisor('ee_pmsm_drive_singleSL')

Чтобы сгенерировать модель реализации, в HDL Workflow Advisor Simscape, оставляют настройки по умолчанию и затем запускают задачи. Вы видите ссылку на модель в Сгенерировать задаче модели реализации. Открыть модель реализации, введите:

load_system('gmStateSpaceHDL_ee_pmsm_drive_singleSL')
open_system('gmStateSpaceHDL_ee_pmsm_drive_singleSL')

Чтобы выполнить модель реализации, измените размер Фиксированного шага к Ts/5, когда Количеством Итераций в sschdladvisor является 5.

Реконфигурируйте модель Simulink для генерации HDL-кода

Модель реализации одинарной точности реконфигурирована для генерации HDL-кода. Чтобы реконфигурировать, поместите модель PMSM в HDL Subsystem. Сохраните модель как gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL.

Открыть реконфигурированную модель реализации, введите:

load_system('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL')
open_system('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL')

Открыть блок Subsystem HDL, введите:

open_system('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/HDL Subsystem')

Сгенерируйте модель HDL-кода и валидации

Прежде чем можно будет сгенерировать HDL-код, вы должны:

  1. Выберите Treat каждый дискретный уровень как отдельный флажок задачи.

  2. Установите Один переход уровня задачи к error.

  3. Установите Многозадачный переход уровня к error.

set_param('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL','EnableMultiTasking', 'on', ...
                                        'SingleTaskRateTransMsg', 'error')
set_param('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL','EnableMultiTasking', 'on', ...
                                        'MultitaskRateTransMsg', 'error')

Рекомендуется включить генерацию модели валидации. Модель валидации сравнивает вывод сгенерированной модели после генерации кода и измененной модели объекта управления Simscape. Чтобы узнать больше, см. Сгенерированную Модель Модели и Валидации.

Чтобы сохранить настройки генерации модели валидации на вашей модели Simulink, запустите эти команды:

modelname = 'gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL';
hdlset_param(modelname, 'TargetDirectory', 'C:/Temp/hdlsrc')
hdlset_param(modelname, 'GenerateValidationModel', 'on');

Чтобы сгенерировать HDL-код, запустите эту команду:

makehdl('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/HDL Subsystem')

По умолчанию HDL Coder генерирует код VHDL. Чтобы сгенерировать код Verilog, запустите эту команду:

makehdl('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/HDL Subsystem', 'TargetLanguage', 'Verilog')

Сгенерированный HDL-код и модель валидации сохранены в папке C:\Temp\hdlsrc. Сгенерированный код сохранен как HDL_Subsystem_tc.vhd.

Опционально, вы можете:

  1. Проверьте модель, сгенерированную после генерации HDL-кода при помощи модели валидации. Чтобы открыть модель валидации, щелкните по ссылке к gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL.slx, когда вы сгенерируете код.

  2. Разверните сгенерированный HDL-код на платах ввода-вывода FPGA Speedgoat или других целевых платформах. Для получения дополнительной информации смотрите, Развертывают модели объекта управления Simscape на FPGA Speedgoat модули IO.

Смотрите также

Функции

Похожие темы