exponenta event banner

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

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

Введение

Пример разделен таким образом, что можно создать код для алгоритма управления, а также проверить поведение алгоритма управления с помощью тестового стенда моделирования. Simscape (TM) Electrical (TM) требуется для запуска модели испытательного стенда моделирования системы hdlcoureFocCurrentStartBench.slx, но не требуется для генерации кода из модели алгоритма управления hdlcoureFocCurrentFixptHdl.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

Объем показывает, что запрашивается команда step current на 1 А и скорость нагрузки изменяется между заблокированным ротором (ноль), + 100 рад/сек и -100 рад/сек. Команда current представляет квадратурную команду тока для несущественной PMSM. (Регулятор регулирует постоянный ток до нуля.) Следует отметить, что для этого двигателя и контроллера электромагнитный момент точно соответствует измеренному квадратурному току двигателя.

Изучить технические условия на установку

В подсистеме Motor_And_Load будет показана математическая модель управляемых компонентов. Средняя модель инвертора используется для возбуждения модели уравнения напряжения постоянного параметра dq PMSM, которая соединена с нагрузкой на скорость.

if hasSimPowerSystems
   open_system('hdlcoderFocCurrentTestBench/Motor_And_Load')
end

Обзор спецификации алгоритма управления

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

load_system('hdlcoderFocCurrentFixptHdl');
open_system('hdlcoderFocCurrentFixptHdl/FOC_Current_Control')

Обзор спецификации данных

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

edit('hdlcoderFocCurrentFixptHdlData.m')

При просмотре этого файла обратите внимание на то, что параметры paramCurrentControlP и paramCurrentControlI задаются как Simulink.Parameters, класс хранения которых имеет значение «» SharingGlobal «». Это предписывает кодеру HDL генерировать порты объектов для этих параметров вместо постоянных значений.

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

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

  • Создание подсистемы DUT: Для генерации кода HDL всегда лучше создать подсистему DUT (Design Under Test), из которой генерируется код HDL. Эта подсистема служит нескольким целям, включая размещение параметров оптимизации ЛПВП.

  • Настройка для 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.

Обратите внимание в созданном файле hdlcoureFocCurrentFixptHdl.vhd, что сущность имеет порты для paramCurrentControlP и paramCurrentControlI.