В этом примере вы рассмотрите алгоритм Ориентированного на поле управления (FOC) для Постоянного магнита синхронной машины (PMSM). Вы протестируете алгоритм управления с системной симуляцией замкнутого цикла, затем генерируют HDL-код для алгоритма управления. Вы будете также видеть, как данные о настраиваемом параметре заданы и как сгенерированы соответствующие сущности порта HDL.
Пример разделен таким образом, что можно сгенерировать код для алгоритма управления, а также проверить поведение алгоритма управления с помощью испытательного стенда симуляции. Simscape (TM) Electrical (TM) требуется запустить тестовую модель системной симуляции hdlcoderFocCurrentTestBench.slx, но не требуется, чтобы генерировать код из модели алгоритма управления hdlcoderFocCurrentFixptHdl.slx.
В этом примере FOC используется, чтобы отрегулировать фазу, текущую, чтобы управлять крутящим моментом электрической машины. Можно симулировать испытательный стенд, чтобы исследовать поведение системы. Во время симуляции решатель может сгенерировать предупреждения, связанные с нулевым пересечением, когда скоростная загрузка изменяется резко. Можно отключить эти предупреждения во время симуляции.
hasSimPowerSystems = license ('test', 'Power_System_Blocks'); if hasSimPowerSystems open_system('hdlcoderFocCurrentTestBench') set_param('hdlcoderFocCurrentTestBench','IgnoredZcDiagnostic','none'); sim('hdlcoderFocCurrentTestBench') set_param('hdlcoderFocCurrentTestBench','IgnoredZcDiagnostic','warn'); end
Осциллограф показывает, что шаг на 1 ампер, текущую команду требуют и скорость загрузки, изменяется между заблокированным ротором (нуль), +100 рад/секунда, и-100 рад/секунда. Текущая команда представляет квадратуру текущая команда несущественному PMSM. (Контроллер регулирует постоянный ток, чтобы обнулить.) Обратите внимание на то, что для этого двигателя и контроллера, электромагнитный крутящий момент сопровождает измеренную квадратуру, текущую из двигателя.
В подсистеме Motor_And_Load вы будете видеть математическую модель компонентов, которыми управляют. Средняя модель инвертора используется, чтобы управлять постоянным параметром dq модель уравнения напряжения PMSM, который соединяется со скоростной загрузкой.
if hasSimPowerSystems open_system('hdlcoderFocCurrentTestBench/Motor_And_Load') end
FOC текущий алгоритм управления задан в отдельной модели. В алгоритме управления электрические уравнения машины спроектированы от трехфазной стационарной системы координат на две фазы, вращающие систему координат с помощью Кларка, и Парк преобразовывает. Это упрощает управление путем удаления зависимостей от положения и времени. Модуляция Вектора пробела позволяет контроллеру достигнуть большего напряжения через фазы, чем если бы только синусоидальные выходные параметры инверсии, которую преобразовывает Кларк, использовались.
load_system('hdlcoderFocCurrentFixptHdl'); open_system('hdlcoderFocCurrentFixptHdl/FOC_Current_Control')
И контроллер и объект (i.e. двигатель и загрузка) справочные данные из MATLAB ® рабочая область. Файл определения данных создает эти данные и автоматически запущен в коллбэке PreLoadFcn модели места размещения тестирования системы.
edit('hdlcoderFocCurrentFixptHdlData.m')
Когда вы рассматриваете этот файл, заметьте, что параметры paramCurrentControlP и paramCurrentControlI заданы как Simulink.Parameters, класс памяти которого установлен в 'ExportedGlobal'. Это говорит HDL Coder генерировать порты сущности для этих параметров вместо постоянных значений.
Прежде, чем сгенерировать HDL-код, важно гарантировать, что модель придерживается определенных важных настроек для генерации HDL-кода. Ниже некоторые основные шаги:
Создайте подсистему DUT: Для генерации HDL-кода всегда лучше создать DUT (Проект Под Тестом) подсистема, от которой сгенерирован HDL-код. Эта подсистема служит нескольким целям включая то, чтобы быть заполнителем для настроек оптимизации HDL.
Setup для HDL: Для того, чтобы подготовиться к генерации HDL-кода, определенные настройки решателя и настройки модели должны существовать. hdlsetup команда заботится обо всех этих настройках и должна быть запущена перед генерацией HDL-кода.
Проверка шагов расчета: Применение оптимизации HDL требует, чтобы все шаги расчета блока были выведены как дискретное. Основной тип блока, чтобы быть осторожным является константами, которые выводят 'inf' шаг расчета по умолчанию. Мы можем найти эти блоки и явным образом установить их шаги расчета на '-1', таким образом, они получают правильные распространенные спиной шаги расчета.
% You can generate and review the HDL code for the controller. makehdl('hdlcoderFocCurrentFixptHdl/FOC_Current_Control');
### Generating HDL for 'hdlcoderFocCurrentFixptHdl/FOC_Current_Control'. ### Using the config set for model <a href="matlab:configset.showParameterGroup('hdlcoderFocCurrentFixptHdl', { 'HDL Code Generation' } )">hdlcoderFocCurrentFixptHdl</a> for HDL code generation parameters. ### Running HDL checks on the model 'hdlcoderFocCurrentFixptHdl'. ### Begin compilation of the model 'hdlcoderFocCurrentFixptHdl'... ### Applying HDL optimizations on the model 'hdlcoderFocCurrentFixptHdl'... ### Begin model generation. ### Model generation complete. ### Generating new validation model: <a href="matlab:open_system('gm_hdlcoderFocCurrentFixptHdl_vnl')">gm_hdlcoderFocCurrentFixptHdl_vnl</a>. ### Validation model generation complete. ### Begin VHDL Code Generation for 'hdlcoderFocCurrentFixptHdl'. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Clarke_Transform as hdlsrc/hdlcoderFocCurrentFixptHdl/Clarke_Transform.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/DQ_Current_Control/D_Current_Control/Saturate_Output as hdlsrc/hdlcoderFocCurrentFixptHdl/Saturate_Output.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/DQ_Current_Control/D_Current_Control as hdlsrc/hdlcoderFocCurrentFixptHdl/D_Current_Control.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/DQ_Current_Control as hdlsrc/hdlcoderFocCurrentFixptHdl/DQ_Current_Control.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Inverse_Clarke_Transform as hdlsrc/hdlcoderFocCurrentFixptHdl/Inverse_Clarke_Transform.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Inverse_Park_Transform as hdlsrc/hdlcoderFocCurrentFixptHdl/Inverse_Park_Transform.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Park_Transform as hdlsrc/hdlcoderFocCurrentFixptHdl/Park_Transform.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Sine_Cosine/Sine_Cosine_LUT as hdlsrc/hdlcoderFocCurrentFixptHdl/Sine_Cosine_LUT.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Sine_Cosine as hdlsrc/hdlcoderFocCurrentFixptHdl/Sine_Cosine.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Space_Vector_Modulation/Max/Max as hdlsrc/hdlcoderFocCurrentFixptHdl/Max.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Space_Vector_Modulation/Min/Min as hdlsrc/hdlcoderFocCurrentFixptHdl/Min.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control/Space_Vector_Modulation as hdlsrc/hdlcoderFocCurrentFixptHdl/Space_Vector_Modulation.vhd. ### Working on hdlcoderFocCurrentFixptHdl/FOC_Current_Control as hdlsrc/hdlcoderFocCurrentFixptHdl/FOC_Current_Control.vhd. ### Generating package file hdlsrc/hdlcoderFocCurrentFixptHdl/FOC_Current_Control_pkg.vhd. ### Code Generation for 'hdlcoderFocCurrentFixptHdl' completed. ### Generating HTML files for code generation report at <a href="matlab:web('/tmp/BR2021ad_1584584_202060/publish_examples0/tp2ea99964/hdlsrc/hdlcoderFocCurrentFixptHdl/html/hdlcoderFocCurrentFixptHdl_codegen_rpt.html');">hdlcoderFocCurrentFixptHdl_codegen_rpt.html</a> ### Creating HDL Code Generation Check Report file:///tmp/BR2021ad_1584584_202060/publish_examples0/tp2ea99964/hdlsrc/hdlcoderFocCurrentFixptHdl/FOC_Current_Control_report.html ### HDL check for 'hdlcoderFocCurrentFixptHdl' complete with 0 errors, 0 warnings, and 0 messages. ### HDL code generation complete.
Заметьте в сгенерированном hdlcoderFocCurrentFixptHdl.vhd файле, что сущность имеет порты для paramCurrentControlP и paramCurrentControlI.