Векторное управление синхронной машиной с постоянными магнитами

В этом примере вы посмотрите алгоритм векторного управления (FOC) для синхронной машины с постоянными магнитами (PMSM). Вы протестируете алгоритм управления с системной симуляцией с обратным циклом, а затем сгенерируете HDL-код для алгоритма управления. Вы также увидите, как заданы настраиваемые параметры данные и как генерируются соответствующие сущности HDL-портов.

Введение

Пример разбит так, что можно сгенерировать код для алгоритма управления, а также проверить поведение алгоритма управления с помощью испытательного стенда симуляции. Simscape (TM) Electrical (TM) требуется для запуска системной симуляции тестовой модели hdlcoderFocCurrentTestBench.slx, но не требуется для генерации кода из модели алгоритма управления hdlcoderFocCurrentFixptHdl.slx.

Проверьте поведение через симуляцию

В этом примере ФОК используется для регулирования тока фазы для управления крутящим моментом электрической машины. Можно симулировать испытательный стенд, чтобы исследовать поведение системы. Во время симуляции решатель может генерировать предупреждения, связанные с пересечением нуля, когда скоростная нагрузка резко изменяется. Можно отключить эти предупреждения во время симуляции.

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 Amp step current и изменяется скорость нагрузки между заблокированным ротором (нулем), + 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')

Исследуйте спецификацию данных

И контроллер, и объект (т.е. двигатель и нагрузка) ссылаются на данные из рабочей области MATLAB ®. Файл определения данных создает эти данные и автоматически запускается в коллбэк PreLoadFcn системной тестовой модели.

edit('hdlcoderFocCurrentFixptHdlData.m')

При просмотре этого файла заметьте, что параметры param Current Control P и param Current Control I заданы как Simulink. Parameters, чей класс памяти установлен на 'Exported Global'. Это говорит HDL Coder генерировать порты сущностей для этих параметров вместо постоянных значений.

Сгенерируйте HDL-код для алгоритма управления

Перед генерацией HDL-кода важно убедиться, что модель соответствует определенным важным настройкам для генерации HDL-кода. Ниже приведены некоторые из основных шагов:

  • Создайте подсистему DUT: Для генерации HDL-кода всегда лучше создать подсистему DUT (Design Under Test), из которой генерируется 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.

Заметьте в сгенерированном файле hdlcoder Foc Current Fixpt Hdl.vhd, что у сущности есть порты для param Current Control P и param Current Control I.