Этот пример использует полуволновую модель выпрямителя, чтобы проиллюстрировать, как можно разработать модель объекта управления в 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 при помощи коммутируемых линейных блоков. Коммутируемые линейные блоки являются блоками, такими как диоды и переключатели. Эти блоки заданы линейным соотношением такой как V = IR, где R может переключиться между двумя или больше значениями в зависимости от состояния диодов или переключателей. Добавьте блоки Simulink-PS Converter во входных портах и блоки PS-Simulink Converter в выходных портах.
2. Сконфигурируйте опции решателя для генерации HDL-кода при помощи блока Solver 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 переключило линейные блоки, такие как Диоды и Резисторы, чтобы смоделировать проект. Модель имеет блоки Simulink-PS Converter во входном порту и блоки конвертера Simulink PS в выходных портах. Чтобы проверить, что вы сконфигурировали настройки решателя правильно, откройте блок Solver 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')
Эта команда обновляет кэш советника модели и открывает 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') set_param('gmStateSpaceHDL_HalfWaveRectifier_HDL','SimulationCommand','Update')
Модель содержит две подсистемы. Блок Subsystem содержит алгоритм Simscape, который вы смоделировали. От и блоки Goto в этой Подсистеме предоставляют тот же вход Sine Wave Подсистеме HDL.
Модели HDL Subsystem представление пространства состояний, которое вы сгенерировали из модели Simscape. Порты этой Подсистемы используют то же имя в качестве Simulink-PS Converter и блоков PS-Simulink Converter в вашей исходной модели 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' ... , 'LatencyStrategy', 'MIN') ... ); hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'MaskParameterAsGeneric', 'on'); hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL', 'Oversampling', 60); % Set SubSystem HDL parameters hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem', 'FlattenHierarchy', 'on'); hdlset_param('gmStateSpaceHDL_HalfWaveRectifier_HDL/HDL Subsystem/HDL Algorithm/Mode Selection/Generate Mode Vector', 'Architecture', 'MATLAB Datapath');
Модель использует один типы данных и генерирует 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-кода, откройте Compare: Out1
Блок Scope:
Главный график представляет выход сгенерированной модели, и средний график представляет выход модели реализации. Начиная с выхода, сгенерированного обоими точно соответствуют модели, ошибка между ними является нулем, который представлен в последнем графике.
Опционально, можно развернуть HDL-код на Аппаратной платформе. Для получения дополнительной информации смотрите, Развертывают модели объекта управления Simscape в FPGA Speedgoat модули IO.