Этот пример показывает, как изменить модель объекта управления Simscape™, чтобы сгенерировать совместимую с HDL модель Simulink™ с HDL Coder™. HDL-код затем сгенерирован из этой модели Simulink.
Модель объекта управления Simscape преобразована в HDL совместимая модель Simulink при помощи HDL Workflow Advisor Simscape. Чтобы запустить Советника, вы вызываете функцию sschdladvisor
для модели.
HDL Workflow Advisor Simscape генерирует модель HDL Implementation, из которой можно сгенерировать HDL-код. Прежде чем вы сгенерируете модель реализации, убедитесь, убеждаются, что модель объекта управления Simscape совместима для генерации модели реализации использование HDL Workflow Advisor Simscape. Для получения дополнительной информации смотрите, Генерируют HDL-код из Моделей Simscape.
В некоторых случаях модель объекта управления Simscape не может быть совместимой для генерации модели реализации использование HDL Workflow Advisor Simscape. Для совместимости HDL можно изменить модель объекта управления Simscape и затем запустить HDL Workflow Advisor Simscape.
Этот пример иллюстрирует модель объекта управления Управления двигателем постоянного тока. Модель содержит нелинейный блок Friction. Можно использовать подход в этом примере, чтобы преобразовать модели Simscape с немногими нелинейными блоками к совместимой с HDL модели Simulink.
Это - физическая модель, разработанная в Simscape. Модель содержит нелинейные элементы и нужна в определенных модификациях для генерации модели реализации.
load('dc_motor_control_params.mat') open_system('ee_dc_motor_control_original')
Управление двигателем постоянного тока используется в качестве структуры регулировки скорости. Управляемый Прерыватель PWM с четырьмя квадрантами используется, чтобы питать двигатель постоянного тока. Двигатель постоянного тока состоит из Вращательного Электромеханического Конвертера, Резистора, Индуктивности, блока Friction и блока Inertia. Подсистема управления включает внешний контур регулировки скорости, внутренний контур управления током и генерацию PWM. Чтобы видеть, как модели работают, моделируют модель.
sim('ee_dc_motor_control_original')
Чтобы преобразовать модели объекта управления Simscape в совместимую с HDL модель реализации, убедитесь, что модель не содержит нелинейные компоненты или блоки.
Сделайте модель двигателя постоянного тока совместимой с HDL
Сделать HDL модели объекта управления Simscape совместимым:
1. Обнаружьте присутствие нелинейных компонентов или блоков в модели. Проверять присутствие нелинейных блоков в модели объекта управления Simscape, введите:
simscape.findNonlinearBlocks('ee_dc_motor_control_original')
Found network that contains nonlinear equations in the following blocks: 'ee_dc_motor_control_original/DC Motor/Friction' 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_dc_motor_control_original/DC Motor/Friction'}
Модель объекта управления Simscape имеет нелинейный блок, который является блоком Friction. Для совместимости HDL удалите блок Friction.
delete_block('ee_dc_motor_control_original/DC Motor/Friction')
2. Уменьшайте время остановки этой модели в Model configuration Parameters
к 1 с.
set_param('ee_dc_motor_control_original','Solver','ode15s','StopTime','1')
3. Исключая вводы и выводы заключите все другие блоки в верхнем уровне модели управления двигателя постоянного тока в подсистеме. Присоедините блоки Перехода Уровня во входных параметрах TLoad
и rpmReq
. Сохраните изменения в новую модель как ee_dc_motor_control_modif
.
load('dc_motor_control_params.mat') open_system('ee_dc_motor_control_modif') set_param('ee_dc_motor_control_modif','SimulationCommand','update')
4. Чтобы видеть результаты симуляции после того, как вы измените модель, запустите эти команды:
sim('ee_dc_motor_control_modif')
5. Чтобы просмотреть результаты, откройте блок Scope:
open_system('ee_dc_motor_control_modif/Visualization')
Запустите HDL Workflow Advisor Simscape и проверьте результаты симуляции
Чтобы открыть HDL Workflow Advisor Simscape, запустите sschdladvisor
для своей модели. sschdladvisor ('ee_dc_motor_control_modif')
Чтобы сгенерировать модель реализации, в HDL Workflow Advisor Simscape, оставляют все задачи настройкам по умолчанию и затем запускают задачи. Вы видите ссылку на модель в Сгенерировать задаче модели реализации. Открыть модель реализации, введите:
open_system('gmStateSpaceHDL_ee_dc_motor_control_modif')
Моделируйте модель Implementation и Сгенерируйте HDL-код
Шаг расчета модели Implementation связан с шагом расчета измененной модели объекта управления Simscape и количеством итераций, заданных в HDL Workflow Advisor Simscape. Неправильная установка шага расчета может привести к отказу моделировать модель реализации. Шагом расчета измененной модели объекта управления является Ts, и количество итераций равняется пяти. Таким образом, шаг расчета модели Implementation должен быть Ts/5. Установить шаг расчета, введите:
set_param('gmStateSpaceHDL_ee_dc_motor_control_modif','SolverType', ... 'Fixed-step','FixedStep','Ts/5')
Чтобы моделировать модель, запустите эту команду и затем откройте блок Scope, чтобы видеть результаты:
sim('gmStateSpaceHDL_ee_dc_motor_control_modif')
От блока Scope можно проверить, что вывод, сгенерированный измененной моделью объекта управления Simscape, совпадает с выводом, сгенерированным моделью реализации.
Сгенерируйте модель HDL-кода и валидации
Можно теперь сгенерировать HDL-код для модели реализации. Прежде чем можно будет сгенерировать HDL-код, необходимо выбрать Treat каждый дискретный уровень как отдельный флажок задачи и установить Один переход уровня задачи к error
.
set_param('gmStateSpaceHDL_ee_dc_motor_control_modif','EnableMultiTasking', 'on', ... 'SingleTaskRateTransMsg', 'error')
Рекомендуется включить генерацию модели валидации. Модель валидации сравнивает вывод сгенерированной модели после генерации кода и измененной модели объекта управления Simscape. Чтобы узнать больше, см. Сгенерированную Модель Модели и Валидации.
Чтобы сохранить настройки генерации модели валидации на вашей модели Simulink, запустите эти команды:
modelname = 'gmStateSpaceHDL_ee_dc_motor_control_modif'; hdlset_param(modelname, 'TargetDirectory', 'C:/Temp/hdlsrc') hdlset_param(modelname, 'GenerateValidationModel', 'on');
Чтобы сгенерировать HDL-код, запустите эту команду:
makehdl('gmStateSpaceHDL_ee_dc_motor_control_modif/HDL Subsystem')
По умолчанию HDL Coder генерирует код VHDL. Чтобы сгенерировать код Verilog, запустите эту команду:
makehdl('gmStateSpaceHDL_ee_dc_motor_control_modif/HDL Subsystem', 'TargetLanguage', 'Verilog')
Сгенерированный HDL-код и модель валидации сохранены в директории C:/Temp/hdlsrc
. Сгенерированный код сохранен как HDL_Subsystem_tc.vhd
.
Опционально, вы можете:
Проверьте модель, сгенерированную после генерации HDL-кода при помощи модели валидации. Чтобы открыть модель валидации, щелкните по ссылке к gm_gmStateSpaceHDL_ee_dc_motor_control_modif_vnl.slx. когда вы генерируете код.
Разверните сгенерированный HDL-код на платах ввода-вывода FPGA Speedgoat или других целевых платформах. Для получения дополнительной информации смотрите, Развертывают модели объекта управления Simscape на FPGA Speedgoat модули IO.