пятница, 22 апреля 2011 г.

Реализация систем управления на микроконтроллерах

MATLAB/Simulink является не только средством моделирования систем управления, но и самой настоящей системой проектирования. Модель Simulink, состоящая из типовых блоков библиотеки или компонентов, реализованных на подмножестве скриптового языка MATLAB, может быть автоматически транслирована в C/С++ исходный код, который дальше применяется при создании программ для компьютеров или микроконтроллеров. Все это делается через Real-Time Workshop/Simulink Coder.
Презентация лекции, посвященной общей информации по сабжу.

В качестве иллюстрации рассмотрим реализацию ПИД-регулятора на микроконтроллере STM32. Для этого воспользуемся отладочной платой STM32 Value Line Discovery Kit и библиотекой RapidSTM32 (соответственно вот и вот информация).

Задача: управлять яркостью лампочки с помощью широтно-импульсной модуляции (ШИМ), измерять и стабилизировать температуру ее поверхности с помощью пропорционально-интегрально-дифференциального регулятора (ПИД). Все это можно сделать, не написав ни одной строчки кода!

Установив RapidSTM32 (следуя инструкциям из файла how_to_setup.txt), получаем в библиотеке Simulink новый блоксет:


Соберем следующую схему на основе nonfio_bland_template_demo.mdl, в которой используются специальные компоненты для доступа к ресурсам микроконтроллера из библиотеки RapidSTM32 (ШИМ, АЦП, порты ввода-вывода) так и стандартные из библиотеки Simulink (PID Controller, Saturation, Gain)


Настроим необходимые параметры модели для генерации кода, а именно выберем в окне Configuration parameters, в группе параметров Real-Time Workshop/RapidSTM32 Options из списка RapidSTM32Board: STM32VLDISCOVERY.

Разными цветами на схеме показаны сигналы с разной частотой квантования, которую можно посмотреть нажав Ctrl+J:


Из меню Tools/Real time workshop/Build model вызовем генерацию кода, в результате чего будет получен C/C++ код для компилятора Keil.
Создадим проект в Keil RealView MDK, добавив в него все полученные .c и .s файлы, откомпилируем и загрузим в микроконтроллер

Соберем следующую схему к платке STM32 Value Line Discovery Kit:

Переменный резистор R1 предназначен для задания поддерживаемой температуры, U1 -- датчик температуры, находящийся в непосредственном контакте с лампочкой-нагревателем

Все это в сборе и работает:


Дополнительные материалы:
Модель Simulink и проект Keil от рассмотренного примера
Видео, где показан процесс настройки модели и генерации кода

2 комментария:

  1. Пробую сделать аналогичный проект.
    При генерации кода выскакивает ошибка

    ### Successful completion of Real-Time Workshop build procedure for model: non_fio_pwm_demo
    Warning: During the 'exit' hook call to 'rapidstm32_make_rtw_hook', pwd was changed
    to:
    'D:\stm32\non_fio_pwm_demo'
    Changing folders is not allowed. The pwd will be reset to:
    'D:\stm32\non_fio_pwm_demo\non_fio_pwm_demo_rapidstm32'
    ### Real-Time Workshop build procedure for model: 'non_fio_pwm_demo' aborted due to an error.

    В действительности эта папка существует.
    Не подскажите, что я делаю не так?

    ОтветитьУдалить
  2. Скажите, пожалуйста, есть ли подобные решения (возможно ли)на AVR и PIC?
    Если да, то направите на необходимые ресурсы.

    ОтветитьУдалить