Для выполнения моделирования аппаратного обеспечения в петле (HIL) с меньшими временными интервалами и повышенной точностью следует развернуть Simscape™ модели установок на FPGA на борту модулей ввода-вывода Speedgoat.
Создайте модель реализации HDL с помощью Simscape HDL Workflow Advisor. Модель реализации представляет собой модель Simulink ®, которая заменяет компоненты Simscape блоками Simulink, совместимыми с HDL.
Создайте код HDL для модели реализации, а затем разверните созданный код в универсальных FPGA, SoC или FPGA на системных модулях ввода-вывода Speedgoat FPGA с помощью помощника по рабочему процессу HDL.
Используя эту возможность, можно моделировать и развертывать сложные физические системы в Simscape, для моделирования которых ранее требовалось много времени, используя блоки Simulink.
Для создания кода HDL можно разработать собственный алгоритм Simscape или выбрать из списка примеров моделей, созданных в Simscape. Примеры моделей включают в себя:
Повышающий преобразователь
Мостовой выпрямитель
Конвертер баков
Полуволновый выпрямитель
Трехфазный выпрямитель
Идеальный двухуровневый преобразователь
Двухуровневый преобразователь IGBT
Модель инвертора солнечной энергии
Швейцарский выпрямитель
Венский выпрямитель
Все примеры имеют префикс sschdlex и постфиксирован с помощью Example. Например, чтобы открыть модель повышающего преобразователя, в командной строке MATLAB ® введите:
load_system('sschdlexBoostConverterExample') open_system('sschdlexBoostConverterExample/Simscape_system')
Следуйте этим инструкциям при разработке алгоритма Simscape для совместимости с Simscape HDL Workflow Advisor. Чтобы заменить подсистему, использующую блоки Simscape, соответствующим алгоритмом состояния-пространства, следуйте этим дополнительным инструкциям, как описано в Руководстве по моделированию для замены подсистемы Simscape.
Создание модели Simscape с использованием линейных и коммутируемых линейных блоков. Линейные блоки - это блоки, которые определяются линейным соотношением, таким как резисторы. Коммутируемые линейные блоки представляют собой блоки, такие как диоды и переключатели. Эти блоки также определяются линейной зависимостью, такой как V = IR, где R может переключаться между двумя или более значениями в зависимости от состояния диодов или переключателей.
Нелинейные блоки не поддерживаются. Чтобы убедиться, что модель Simscape не содержит нелинейных блоков, используйте simscape.findNonlinearBlocks (Simscape) функция. Укажите путь к модели Simscape в качестве аргумента этой функции.
simscape.findNonlinearBlocks('current_model')
Кроме того, чтобы проверить, что модель не содержит нелинейных блоков, выполните задание Проверить коммутируемые линейные (Check switched linear) в Simscape HDL Workflow Advisor.
Настройте параметры решателя для генерации кода HDL с помощью блока конфигурации решателя (Simscape).
В диалоговом окне «Параметры блока» этого блока:
Выберите Использовать локальный решатель.
Использовать Backward Euler в качестве типа решателя.
Укажите время дискретной выборки, Ts.
Чтобы убедиться, что параметры решателя указаны правильно, запустите задачу проверки конфигурации решателя в Simscape HDL Workflow Advisor.
После создания модели настройте модель для генерации кода HDL, запустив hdlsetup функция. hdlsetup настраивает параметры решателя, такие как использование решателя с фиксированным шагом, задает время начала и окончания моделирования и т. д. Выполнение команды для current_model:
hdlsetup('current_model')
HDL Coder™ не поддерживает генерацию кода из сетей Simscape, содержащих:
События
Графики режимов
Задержки
Параметры среды выполнения
Периодические источники
Блоки Multibody™ Simscape
Simscape Electrical™ Блоки специализированных систем питания
Нелинейные и изменяющиеся во времени блоки Simscape. Изменяющиеся во времени блоки включают в себя блоки, такие как переменный индуктор и переменный конденсатор.
Нескалярные состояния или входы в сеть. Разбивают нескалярные входы на скалярные и уменьшают второй операнд оператора двоеточия на один для ошибки, вызванной нескалярными состояниями. Например:
% Suppose this code generates an error tmp1 = u(1:4); % Fix the error by reducing second operand by 1 tmp1 = u(1:3);