В этом примере показано, как изменить модель объекта управления Simscape™, чтобы сгенерировать совместимую с HDL модель Simulink® с HDL Coder™. HDL-код затем сгенерирован из этой модели Simulink.
Модель объекта управления Simscape преобразована в совместимую с HDL модель 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. Этот пример иллюстрирует модель объекта управления Управления двигателем постоянного тока. Модель содержит нелинейный блок Friction. Можно использовать подход в этом примере, чтобы преобразовать модели Simscape с немногими нелинейными блоками к совместимой с HDL модели Simulink.
Модель управления двигателя постоянного тока является физической моделью, разработанной в Simscape. Модель содержит нелинейные элементы и должна быть изменена для генерации модели реализации.
open_system('ee_dc_motor_control')
Заключите двигатель постоянного тока и блок Friction в Подсистеме и сохраните модель как ee_dc_motor_control_original
.
open_system('ee_dc_motor_control_original') set_param('ee_dc_motor_control_original','SimulationCommand','Update')
Управление двигателем постоянного тока используется в качестве структуры регулировки скорости. Управляемый Прерыватель PWM с четырьмя квадрантами используется, чтобы питать двигатель постоянного тока. Двигатель постоянного тока состоит из Вращательного Электромеханического Конвертера, Резистора, Индуктивности, блока Friction и блока Inertia. Подсистема управления включает внешний контур регулировки скорости, внутренний контур управления током и генерацию PWM.
sim('ee_dc_motor_control_original') open_system('ee_dc_motor_control_original/Scope')
Чтобы преобразовать модель в модель, которая совместима для преобразования с HDL Workflow Advisor 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.
2. Для совместимости HDL модель не должна содержать нелинейные элементы. Удалите блок Friction из модели.
3. Чтобы симулировать модель быстрее и уменьшать время, когда HDL Workflow Advisor Simscape берет, чтобы извлечь уравнения пространства состояний, уменьшайте время остановки этой модели. В Панели инструментов Simulink, на вкладке Simulation, Времени остановки изменения к 1
.
Сохраните изменения в новую модель как ee_dc_motor_control_modified
.
open_system('ee_dc_motor_control_modified') set_param('ee_dc_motor_control_original','SimulationCommand','Update')
Чтобы видеть результаты симуляции модифицированной модели, запустите эти команды:
sim('ee_dc_motor_control_modified') open_system('ee_dc_motor_control_modified/Scope')
Чтобы открыть HDL Workflow Advisor Simscape, запустите sschdladvisor
для вашей модели.
sschdladvisor('ee_dc_motor_control_modified')
### Running Simscape HDL Workflow Advisor for <a href="matlab:(ee_dc_motor_control_modified)">ee_dc_motor_control_modified</a>
Чтобы сгенерировать модель реализации, в HDL Workflow Advisor Simscape, оставляют все задачи настройкам по умолчанию и затем запускают задачи. Вы видите ссылку на модель в Сгенерировать задаче модели реализации.
Щелкните по ссылке, чтобы открыть модель реализации.
Прежде чем можно будет сгенерировать HDL-код из модели, необходимо изменить шаг расчета и задать определенные настройки, которые делают модель совместимой для генерации HDL-кода. Шагом расчета модифицированной модели объекта управления является Ts, и количеством итераций решателя, чтобы вычислить режимы является 3
. Поэтому необходимо изменить шаг расчета модели. Задавать совместимые с HDL настройки:
В диалоговом окне Configuration Parameters:
На панели Решателя, размер Фиксированного шага набора (основной шаг расчета) к Ts/3
и выберите Treat каждый дискретный уровень как отдельная задача.
На Диагностике> панель Шага расчета, набор Многозадачный переход уровня и Один переход уровня задачи к error
.
Добавьте блок Rate Transition в своей модели Simscape, которая помещается в Subsystem
блокируйтесь в своей модели реализации, как проиллюстрировано в фигуре ниже.
Чтобы симулировать модель, запустите эту команду и затем откройте блок Scope, чтобы видеть результаты:
sim('gmStateSpaceHDL_ee_dc_motor_control_modifie')
Вы видите, что выход, сгенерированный модифицированной моделью объекта управления Simscape, совпадает с выходом, сгенерированным моделью реализации.
Прежде чем вы сгенерируете HDL-код, рекомендуется, чтобы вы включили генерацию модели валидации. Модель валидации сравнивает выход сгенерированной модели после генерации кода и модифицированной модели объекта управления Simscape. Чтобы узнать больше, см. Сгенерированную Модель Модели и Валидации.
Чтобы сохранить настройки генерации модели валидации на вашей модели Simulink, запустите эту команду:
hdlset_param('gmStateSpaceHDL_ee_dc_motor_control_modifie', 'GenerateValidationModel', 'on');
Чтобы сгенерировать HDL-код, запустите эту команду:
makehdl('gmStateSpaceHDL_ee_dc_motor_control_modified/HDL Subsystem')
По умолчанию HDL Coder генерирует код VHDL. Чтобы сгенерировать код Verilog, запустите эту команду:
makehdl('gmStateSpaceHDL_ee_dc_motor_control_modifie/HDL Subsystem', 'TargetLanguage', 'Verilog')
Сгенерированный HDL-код и модель валидации сохранены в hdlsrc
директория. Сгенерированный код сохранен как HDL_Subsystem_tc.vhd
. Можно также проверить результаты симуляции путем выполнения модели gm_gmStateSpaceHDL_ee_dc_motor_control_modifie_vnl.slx
валидации.