Этот пример использует полуволновую модель выпрямителя, чтобы проиллюстрировать, как можно разработать модель объекта управления в Simscape™ и использовать HDL Workflow Advisor Simscape, чтобы сгенерировать HDL-код для модели.
Чтобы выполнить оборудование в цикле (HIL) симуляция с меньшими тактами и увеличенной точностью, можно развернуть модели объекта управления на FPGAs на борту модулей ввода-вывода Speedgoat. При помощи HDL Workflow Advisor Simscape можно сгенерировать модель реализации HDL. Можно затем сгенерировать HDL-код для модели реализации и развернуть сгенерированный код на платформы FPGA. Используя эту возможность, можно смоделировать и развернуть комплексные физические системы в Simscape, который ранее занял много времени к модели при помощи блоков Simulink™.
Для генерации HDL-кода можно разработать собственный алгоритм Simscape или выбрать из списка моделей в качестве примера, которые создаются в Simscape. Модели в качестве примера включают:
Повысьте конвертер
Мостовой выпрямитель
Понижающий конвертер
Полуволновой выпрямитель
Три выпрямителя фазы
Два идеала конвертера уровня
Два конвертера уровня Igbt
Все примеры снабжаются префиксом sschdlex
и отправляют зафиксированный с Example
. Например, чтобы открыть модель Boost Converter, в командном окне MATLAB™, введите:
load_system('sschdlexBoostConverterExample') open_system('sschdlexBoostConverterExample/Simscape_system')
HDL Coder™ не поддерживает генерацию кода от сетей Simscape, которые содержат:
События
Графики режима
Задержки
Параметры периода выполнения
Периодические источники
Блоки Simscape™ Multibody™
Simscape Electrical Специализированные блоки Энергосистем
1. Создайте модель Simscape при помощи коммутируемых линейных блоков. Добавьте блоки Конвертера PS Simulink во входных портах и блоки Конвертера Simulink PS в выходных портах.
2. Сконфигурируйте опции решателя для генерации HDL-кода при помощи Блока Configuration Решателя. В параметрах блоков этого блока:
Выберите Use локальный решатель.
Используйте Backward Euler
в качестве типа Решателя.
Задайте дискретный шаг расчета, Ts.
3. Заключите блоки в Подсистеме и обеспечьте тестовые воздействия.
4. Сконфигурируйте модель для генерации HDL-кода путем выполнения функции hdlsetup. hdlsetup конфигурирует настройки решателя, такие как использование решателя фиксированного шага, указывает, что симуляция запускается и времена остановки и так далее. Запускать команду для вашего current_model
:
hdlsetup('current_model')
5. Проверьте совместимость модели Simscape при помощи функции simscape.findNonLinearBlocks. Эта функция обнаруживает нелинейные блоки в вашей модели Simscape. Обеспечьте путь к своей модели Simscape в качестве аргумента к этой функции. Это возвращает имена нелинейных блоков.
Например: проверять присутствие нелинейных блоков в Половине Модели Выпрямителя Волны, в окне команды MATLAB, введите:
simscape.findNonlinearBlocks('sschdlexHalfWaveRectifierExample')
Открыть модель полупериодного выпрямителя, в Окне Команды MATLAB, введите:
open_system('sschdlexHalfWaveRectifierExample')
Сохраните эту модель локально как HalfWaveRectifier_HDL
, чтобы запустить рабочий процесс.
load_system('HalfWaveRectifier_HDL') open_system('HalfWaveRectifier_HDL/Simscape_system') set_param('HalfWaveRectifier_HDL', 'SimulationCommand', 'update');
Использование модели Simscape переключило линейные блоки, такие как Диод и Резистор, чтобы смоделировать проект. Модель имеет блоки Конвертера PS Simulink во входном порту и блоки конвертера Simulink PS в выходных портах. Чтобы проверить, что настройки решателя сконфигурированы правильно, откройте Блок Configuration Решателя.
В верхнем уровне модели вы видите блок Simscape_system
, который моделирует алгоритм полупериодного выпрямителя. Модель принимает вход Sine Wave, использует блок Rate Transition, чтобы дискретизировать непрерывный вход времени и имеет блок Scope, который вычисляет вывод. Чтобы видеть входной стимул и вывод из модели, соедините вход Sine Wave с блоком Scope.
open_system('HalfWaveRectifier_HDL')
Сконфигурировать модель полупериодного выпрямителя для совместимости HDL, в окне команды MATLAB, введите:
hdlsetup('HalfWaveRectifier_HDL')
Чтобы видеть результаты симуляции, моделируйте модель и затем откройте блок Scope.
sim('HalfWaveRectifier_HDL')
Эти данные показывают результаты симуляции с входом синусоиды и выходными параметрами от Simscape_system
.
Чтобы сгенерировать модель реализации HDL, из которой можно сгенерировать код, используйте HDL Workflow Advisor Simscape. Чтобы открыть Советника, запустите эту команду:
sschdladvisor('HalfWaveRectifier_HDL')
Updating Model Advisor cache… Model Advisor cache updated. For new customizations, to update the cache, use the Advisor.Manager.refresh_customizations method.
Это обновляет образцовый кэш советника и открывает HDL Workflow Advisor Simscape. Чтобы узнать больше о HDL Workflow Advisor Simscape и различных задачах, щелкните правой кнопкой по той папке или задаче, и выберите What, Это?.
См. также Задачи HDL Workflow Advisor Simscape.
Чтобы запустить рабочий процесс, в HDL Workflow Advisor Simscape, щелкают правой кнопкой по задаче модели реализации Generate и выбирают Run to Selected Task.
Если задача передает, вы видите ссылку на модель реализации.
В некоторых случаях ваш алгоритм Simscape не может быть совместимым для генерации модели реализации использование HDL Workflow Advisor Simscape. В таких случаях, запуская определенные задачи в Советнике может привести к задаче перестать работать. Чтобы изучить, как можно сделать его HDL совместимый, смотрите
Чтобы видеть модель реализации, в Сгенерировать задаче модели реализации, щелкают по ссылке.
open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL')
Модель содержит две подсистемы. Блок Subsystem содержит алгоритм Simscape, который вы смоделировали. От и блоки Goto в этой Подсистеме предоставляют тот же вход Sine Wave Подсистеме HDL.
Модели HDL Subsystem представление пространства состояний, которое вы сгенерировали из модели Simscape. Порты этой Подсистемы используют то же имя в качестве Конвертера PS Simulink и блоков Конвертера Simulink PS в вашей исходной модели Simscape. Если вы перешли в этой Подсистеме, вы видите несколько задержек, сумматоров, и Умножение матриц блоки, которые моделируют уравнения пространства состояний.
open_system('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem/HDL Algorithm')
Чтобы моделировать модель HDL Implementation, введите эту команду:
sim('gmStateSpaceHDL_HalfWaveRectifier_HDL')
Откройте блок scope, чтобы просмотреть результаты.
Результаты симуляции от соответствий модели реализации HDL та из исходной модели объекта управления. Поэтому мы можем проверить, что имитационная модель объекта правильно преобразовывается в модель реализации HDL.
HDL-код сгенерирован для блока HDL Subsystem
в этой модели.
Модель HDL и установки параметров подсистемы являются сохраненным использованием этой команды:
hdlsaveparams('gmStateSpaceHDL_HalfWaveRectifier_HDL');
%% Set Model 'gmStateSpaceHDL_HalfWaveRectifier_HDL' HDL parameters hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'FloatingPointTargetConfiguration', hdlcoder.createFloatingPointTargetConfig('NativeFloatingPoint')); hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'MaskParameterAsGeneric', 'on'); hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'Oversampling', 100); % Set SubSystem HDL parameters hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem', 'FlattenHierarchy', 'on');
Модель использует один типы данных и генерирует HDL-код в нативном режиме с плавающей точкой. Операторы с плавающей точкой могут ввести задержки. Поскольку проект содержит обратную связь для советника по вопросам преобразования моделей, чтобы выделить достаточно задержек операторов в обратной связи, модель использует конвейеризацию тактовой частоты в сочетании с большим значением для фактора Сверхдискретизации. Фактор Сверхдискретизации 100 и оптимизация конвейеризации тактовой частоты сохранен на этой модели.
Для получения дополнительной информации см.:
Прежде чем вы сгенерируете HDL-код, рекомендуется включить генерацию модели валидации. Модель валидации сравнивает вывод сгенерированной модели после генерации кода и исходной модели. Чтобы узнать больше, см. Сгенерированную Модель Модели и Валидации.
Запустите эти команды, чтобы сохранить настройки генерации модели валидации на вашей модели Simulink:
HDLmodelname = 'gmStateSpaceHDL_HalfWaveRectifier_HDL'; hdlset_param(HDLmodelname, 'TargetDirectory', 'C:/Temp/hdlsrc'); hdlset_param(HDLmodelname, 'GenerateValidationModel', 'on');
Чтобы сгенерировать HDL-код, запустите эту команду:
makehdl('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem');
Модель сгенерированного HDL-кода и валидации сохранена в директории C:/Temp/hdlsrc
. Сгенерированный код сохранен как HDL_Subsystem_tc.vhd
. Чтобы открыть модель валидации, щелкните по ссылке к gm_gmStateSpaceHDL_HalfWaveRectifier_HDL_vnl.slx
в генерации кода, входит в систему Командное окно.
Откройте блок Compare при выводе Подсистемы HDL Subsystem_vnl
модели валидации. Затем откройте блок Assert_Out1
. Чтобы видеть результаты симуляции после генерации HDL-кода, откройте блок Scope Compare: Out1
:
Главный график представляет вывод нашей сгенерированной модели, и средний график представляет вывод модели реализации. Начиная с вывода, сгенерированного обоими точно соответствуют модели, ошибка между ними является нулем, который представлен в последнем графике.
Опционально, можно развернуть HDL-код на Аппаратной платформе. Для получения дополнительной информации смотрите, Развертывают модели объекта управления Simscape на FPGA Speedgoat модули IO.