В этом примере показано, как изменить модель объекта управления Simscape™, которая является непрерывным временем и содержит нелинейные элементы, чтобы сгенерировать совместимую с HDL модель Simulink™. Можно затем сгенерировать HDL-код для этой модели Simulink.
HDL Workflow Advisor Simscape преобразует модель объекта управления Simscape в совместимую с HDL модель реализации, из которой вы генерируете HDL-код. В некоторых случаях модель объекта управления Simscape не может быть совместимой для генерации модели реализации. В таких случаях вы сначала изменяете модель объекта управления Simscape и затем запускаете Советника.
Этот пример иллюстрирует, как изменить постоянный магнит синхронная модель электродвигателя для совместимости с HDL Workflow Advisor Simscape. Модель является непрерывным временем и содержит много нелинейных компонентов. Вы изменяете эту модель к переключенной линейной модели дискретного времени и затем запустите HDL Workflow Advisor Simscape.
Постоянный магнит синхронная модель электродвигателя является физической системой в Simscape. Чтобы открыть модель, запустите эту команду:
open_system('ee_pmsm_drive')
Сохраните эту модель как ee_pmsm_drive_original.slx
open_system('ee_pmsm_drive_original') set_param('ee_pmsm_drive_original','SimulationCommand','Update')
Модель содержит Постоянный магнит синхронную машину (PMSM) и размера инвертора, который можно использовать в типичном гибридном автомобиле. Инвертор соединяется с батареей транспортного средства. Чтобы видеть, как модель работает, симулируйте модель.
sim('ee_pmsm_drive_original') open_system('ee_pmsm_drive_original/Scope')
Эта модель является непрерывной системой времени. Чтобы использовать эту модель с HDL Workflow Advisor Simscape, преобразуйте модель в дискретную систему. Затем вы изменяете модель, чтобы использовать блоки, которые совместимы для Simscape с рабочим процессом HDL.
1. Сконфигурируйте опции решателя для генерации HDL-кода при помощи блока Solver Configuration. В параметрах блоков:
Выберите Use локальный решатель.
Используйте Backward Euler
как тип Решателя.
Задайте дискретный Шаг расчета, Ts
.
2. Измените настройки Solver модели. На вкладке Modeling нажмите Model Settings. На панели Решателя:
Установите тип выбора Решателя на Fixed-Step
.
Установите решатель на discrete (no continuous states)
.
Установите размер Фиксированного шага (основной шаг расчета) к Ts
.
В разделе Tasking и опциях шага расчета, очистите Обработку каждый дискретный уровень как отдельная задача.
3. Измените настройки отображения своей модели. На вкладке Debug выберите Information Overlays> Sample Time> Colors. Рассмотрите Легенду Шага расчета для блоков, которые имеют шаг расчета кроме Ts
, или запуститесь в непрерывном масштабе времени. Дважды кликните блок Step и установите Шаг расчета на Ts
.
4. Для более быстрой симуляции проигнорируйте параметры нулевой последовательности PMSM. Дважды кликните блок Permanent Magnet Synchronous Motor и установите Нулевую Последовательность на Exclude
.
Модель является теперь фиксированным шагом дискретная система. Симулируйте модель и сравните Спрос на Крутящий момент и Моторные сигналы Крутящего момента в Инспекторе Данных моделирования. Сигналы отличаются больше, чем уровни терпимости к концу симуляции, но в приемлемых пределах.
Вы используете двухступенчатый процесс, чтобы преобразовать модель объекта управления Simscape в совместимую с HDL модель реализации:
1. Реализуйте модель Simulink, которая заменяет нелинейную часть алгоритма Simscape при помощи эквивалентных блоков Simulink.
2. Измените эту модель, чтобы использовать блоки, которые совместимы для Simscape с рабочим процессом HDL.
1. Чтобы сделать модель объекта управления 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.
2. Замените блок PMSM, блок Encoder, резистор Gmin и блок Motor & Load Inertia с блоками Simulink, которые выполняют эквивалентный алгоритм.
ee_pmsm_drive_singleSL
модель иллюстрирует, как вы изменяете Электрический Интерфейсный и Постоянный магнит Синхронный Двигатель (Simulink) подсистемы. Чтобы реализовать блок Electrical Interface, вы используете Управляемые Текущие Источники.
load_system('ee_pmsm_drive_singleSL') set_param('ee_pmsm_drive_singleSL','SimulationCommand','update') open_system('ee_pmsm_drive_singleSL/Electrical Interface')
Интерфейс к PMSM изолируется от реализации. Чтобы реализовать PMSM при помощи блоков Simulink, вы используете Электрические уравнения и Механические уравнения. В блоках Преобразования парка Transform и парка Inverse устраните блоки Синуса и Косинуса.
open_system('ee_pmsm_drive_singleSL/Permanent Magnet Synchronous Motor (Simulink)', 'force')
1. Чтобы сохранить использование ресурсов на целевом компьютере, добавьте блоки Преобразования типа данных, чтобы преобразовать модель, чтобы использовать single
типы данных.
2. Добавьте Электронные часы с Шагом расчета Ts
в верхнем уровне модели. Соедините часы с блоком Display.
3. Замените блок Three-Phase Current Sensor Simscape путем питания контроллера трехфазными токами, прибывающими из модели PMSM.
Этот рисунок иллюстрирует верхний уровень модели с вышеупомянутыми изменениями.
open_system('ee_pmsm_drive_singleSL')
4. Уменьшать место области FPGA для:
Блок парк Transform, вы добавляете Кларка Трэнсформа и Кларка с блоками парка Angle Transform.
Обратный блок Park Transform, вы добавляете парк Inverse в Кларка Энгла Трэнсформа и Инверсию блоки Кларка Трэнсформа.
open_system('ee_pmsm_drive_singleSL/Permanent Magnet Synchronous Motor (Simulink)/Park Transform')
open_system('ee_pmsm_drive_singleSL/Permanent Magnet Synchronous Motor (Simulink)/Inverse Park Transform')
Чтобы открыть HDL Workflow Advisor Simscape, запустите sschdladvisor
функционируйте для своей модели:
sschdladvisor('ee_pmsm_drive_singleSL')
Чтобы сгенерировать модель реализации, в HDL Workflow Advisor Simscape, оставляют настройки по умолчанию и затем запускают задачи. Чтобы открыть модель реализации, в Сгенерировать задаче модели реализации, щелкают по ссылке.
Сохраните эту модель как gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL
. Реконфигурировать модель реализации с одинарной точностью для генерации HDL-кода:
1. Запустите hdlsetup
функция на модели.
hdlsetup('gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL')
2. Измените размер Фиксированного шага к Ts/4
потому что Количеством по умолчанию Итераций является 4
.
3. Удалите Контроллер PMSM и Постоянный магнит Синхронный Двигатель (Simulink) подсистемы от Подсистемы, которая содержит исходную модель Simscape. Удалите эту Подсистему и поместите Подсистему контроллера PMSM с Подсистемой HDL в верхнем уровне модели.
model_name = 'gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL'; dut_name = 'gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL/HDL Subsystem'; open_system(model_name) set_param(model_name,'SimulationCommand','Update')
4. Inisde HDL Subsytem, Подсистема Алгоритма HDL имеет Допустимое, сигнализируют. Поместите Постоянный магнит Синхронный Двигатель (Simulink) подсистема в Enabled Подсистеме и соединитесь, vs_LL входной порт к Допустимому сигнализируют.
open_system(dut_name)
5. В Постоянном магните Синхронный Двигатель (Simulink) подсистема несколько блоков Интегратора Дискретного времени имеют шаг расчета как Ts
. Измените шаг расчета этих блоков к -1
. Интегратор с Перенесенным состоянием (Дискретный или Непрерывный) блок не совместим для генерации HDL-кода. Замените Интегратор на Перенесенное состояние (Дискретный или Непрерывный) с этим Wrapped State DTI
Подсистема.
open_system([dut_name,'/Enabled Subsystem/Permanent Magnet Synchronous Motor (Simulink)'],'force')
6. Симулируйте модель. Если симуляция отображает ошибки, которые указывают на несоответствие уровня, добавляют блоки Перехода Уровня между портами, которые разрешают это несоответствие. В Подсистеме Сигналов, чтобы предоставить выходные сигналы блоку Scope на том же уровне, блокам Перехода Уровня места.
open_system([model_name,'/Out Signals'])
Прежде чем вы сгенерируете HDL-код, чтобы сравнить выход сгенерированной модели после генерации кода с модифицированной моделью объекта управления Simscape, задайте генерацию модели валидации.
hdlset_param(model_name, '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-код и модель валидации в hdlsrc
папка. Сгенерированный код сохранен как HDL_Subsystem_tc.vhd
. Чтобы видеть информацию об использовании ресурсов вашего проекта, просмотрите Отчет Генерации кода.
Чтобы открыть модель валидации, после того, как вы сгенерируете HDL-код, открывают gm_gmStateSpaceHDL_ee_pmsm_drive_GenerateHDL_vnl.slx
модель.