В этом примере показано, как изменить Simscape™ модель объекта управления для генерации HDL-совместимой модели Simulink ® с HDL- Coder™. HDL-код затем генерируется из этой модели Simulink.
Модель объекта управления Simscape преобразуется в HDL-совместимую модель Simulink с помощью Simscape HDL Workflow Advisor. Чтобы запустить Advisor, запустите sschdladvisor
функция для модели.
Simscape HDL Workflow Advisor генерирует модель реализации, из которой вы генерируете HDL-код. Прежде чем вы сгенерируете модель реализации, сконфигурируйте модель объекта управления Simscape для генерации модели реализации с помощью Simscape HDL Workflow Advisor. Для получения дополнительной информации см. «Генерация HDL-кода для Simscape».
В некоторых случаях модель объекта управления Simscape может быть несовместима для генерации модели реализации с помощью Simscape HDL Workflow Advisor. Для совместимости с HDL измените модель объекта управления Simscape, а затем запустите Simscape HDL Workflow Advisor. Этот пример иллюстрирует модель объекта управления двигателем постоянного тока. Модель содержит нелинейный блок Triction. Можно использовать подход в этом примере, чтобы преобразовать модели Simscape с несколькими нелинейными блоками в HDL-совместимую модель Simulink.
Модель управления двигателем постоянного тока является физической моделью, разработанной в Simscape. Модель содержит нелинейные элементы и должна быть изменена для генерации модели реализации.
open_system('ee_dc_motor_control')
Заключайте Двигатель Постоянного Тока и блок Трения в Подсистему и сохраните модель как ee_dc_motor_control_original
.
open_system('ee_dc_motor_control_original') set_param('ee_dc_motor_control_original','SimulationCommand','Update')
Управление двигателем постоянного тока используется как структура управления скорости. Для питания двигателя постоянного тока используется управляемый ШИМ четырехквадрантный Chopper. Двигатель постоянного тока состоит из Вращательного Электромеханического Преобразователя, Резистора, Индуктивности, Блока Трения и блока Инерции. Подсистема управления включает внешний контур регулировки скорости, внутренний контур управления током и генерацию ШИМ.
sim('ee_dc_motor_control_original') open_system('ee_dc_motor_control_original/Scope')
Чтобы преобразовать модель в модель, которая совместима для преобразования с Simscape HDL Workflow Advisor:
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 имеет нелинейный блок, который является блоком Фрикция.
2. Для совместимости HDL модель не должна содержать нелинейные элементы. Удалите блок Triction из модели.
3. Чтобы симулировать модель быстрее и уменьшить время, которое Simscape HDL Workflow Advisor занимает, чтобы извлечь уравнения пространства состояний, уменьшите время остановки этой модели. На панели инструментов 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')
Чтобы открыть Simscape HDL Workflow Advisor, запустите 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> Updating Model Advisor cache... Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.
Чтобы сгенерировать модель реализации, в Simscape HDL Workflow Advisor оставьте все задачи в настройках по умолчанию и затем запустите задачи. Щелкните ссылку в задаче Generate реализации model, чтобы открыть модель.
Прежде чем вы сможете сгенерировать HDL-код из модели, необходимо изменить шаг расчета и задать определенные настройки, которые делают модель совместимой для генерации HDL-кода. Шаг расчета измененной модели объекта управления - Ts, и количество итераций решателя для вычисления режимов 3
. Поэтому необходимо изменить шаг расчета модели. Чтобы задать HDL-совместимые параметры, выполните следующие действия.
В диалоговом окне Параметров конфигурации:
На панели Решателя установите значение Fixed-step size (основной шаг расчета) Ts/3
и выберите Обработать каждую дискретную скорость как отдельную задачу.
На панели Diagnostics > Шаг расчета установите Multitask rate transition и Single task rate transition на 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
.