Автопортал || Авто - статьи

Сельскохозяйственная техника
Чтение RSS

Программирование микроконтроллеров AVR на графическом языке функциональных блоков FBD

Опубликовано: 22.08.2018

видео Программирование микроконтроллеров AVR на графическом языке функциональных блоков FBD

Проверка FBD ,блока "Таймер" (создание прошивки)
Среди многообразия средств программирования микроконтроллеров AVR не так давно появилась российская система программирования на языке функциональных блоков (Function Block Diagram) под названием Horizont-Configurator . Configurator является составной частью программного комплекса Horizont, представляющего SCADA-систему (Supervisory Control And Data Acquisition System - Система оперативного диспетчерского управления и сбора данных).


Программирование микроконтроллеров AVR на языке релейных диаграмм LD

Язык FBD очень прост в освоении и удобен как для схемотехников, не имеющих специальной подготовки в области программирования, так и для начинающих осваивать мир электроники, автоматики и робототехники. Весь процесс программирования в FBD-системе заключается в соединении линиями связи готовых элементарных блоков. Практически каждый функциональный блок в Horizont-Configurator имеет графическое изображение, принятое при разработке функциональных схем электронных устройств. Блоки представлены в виде прямоугольников, внутри которых имеется обозначение функции, и являют собой операции над входными переменными.

Линии связи, которыми соединяют функциональные блоки, указывают распространение сигнала. Функциональная диаграмма системы управления, построенная в Horizont-Configurator, имеет сходство с электрическими схемами и может быть откомпилирована в файл прошивки для микроконтроллера AVR.

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

Для того, чтобы начать работу с Horizont-Configurator, необходимо зайти на страницу Downloads на официальном сайте программы, перейти в раздел "Configurator" и скачать установочный файл setup.exe (дистрибутив программы также можно скачать с этого сайта по ссылке horizont-configurator_for_avr_setup.exe ). Также на странице Downloads находятся примеры проектов "Мигание светодиодом" и "Задержка сигнала".

Установив Configurator, можно загрузить примеры проектов, посмотреть на работу программы, откомпилировать примеры (меню "Проект" -> "Конфигурация -> "Создать файл конфигураций", затем меню "Проект" -> "Конфигурация -> "Собрать проект"). Пока среда Horizont-Configurator еще находится в стадии разработки, но уже представляет собой удобный и гибкий инструмент, с помощью которого можно создавать самые разнообразные прошивки для микроконтроллеров AVR.

Элементы, доступные в Horizont-Configurator: Порты микроконтроллера (сразу конфигурируются как входы или выходы) Логические блоки (НЕ, И, ИЛИ, Исключающее ИЛИ) Логические константы Триггеры (RS, SR, D, DC, RTRIG, FTRIG) Логический генератор Генератор импульсов Блоки для работы с числами (Арифм. операции, Сравнение и т.д.) Таймеры Счетчики Индикаторы Элементы памяти

В качестве тестового проекта попробуем создать прошивку для простого робота, описанного в статье "Робот с фотодатчиком для следования по линии" .

В меню Файл выберем "Новый проект", дадим ему название и зададим тип микроконтроллера, например, ATMega8. Нажмем несколько раз "применить" в появляющихся окнах.

После проделанных действий у нас появится поле для нашего проекта, а в левой панели необходимые элементы. Теперь перетащим элементы на рабочее поле. Нам понадобятся: Вход PinD1 из раздела "Порт D", Выходы PinC1, PinC2, Pin3, PinC4 из раздела "Порт C", две логические константы из раздела "Логические блоки" и Логическое НЕ из того же раздела. Развернуть элементы зеркально можно в правой панели "Свойства" с помощью изменения свойства "Turn" на "180 град".

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

Зададим значения для логических констант последовательно выделив их и изменив значение "Value" в правой панели "Свойства" на "true".

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

В качестве еще одного тестового примера попробуем сделать систему управления роботом для соревнований Кегельринг из статьи "Робот для соревнований" .

Нам понадобятся: Вход PinD1 из раздела "Порт D", Выходы PinC1, PinC2, Pin3, PinC4 из раздела "Порт C", два Логических НЕ и Триггер FTRIG из раздела "Логические блоки", два Таймера с задержкой отключения из раздела "Таймеры/Счетчики" и Счетчик милисекунд из того же раздела.

Счетчик милисекунд необходим для нормальной работы таймеров (он использует внутренний Timer0 микроконтроллера). Установим его "Делитель" на 1 MHz в правой панели. Триггер FTRIG отслеживает падающий фронт логического сигнала.

При изменении состояния входа "FTRIG" с 1 на 0, происходит формирование короткого импульса на его выходе. Данный импульс поступает на входы блоков Таймеров с задержкой отключения, данные блоки формируют необходимые по длительности интервалы высокого уровня на своих выходах. Сигнал с вывода первого Таймера с задержкой отключения поступает на выходы PinC1 и PinC2, управляющие первым мотором. Блок "Логическое НЕ" необходим для реализации инверсии мотора. Аналогичным образом работает другая цепь Таймера с задержкой отключения, которая управляет вторым мотором. Интервалы для таймеров можно установить изменив свойство "T" в правой панели свойств. Зададим значение равное 1800 милисекунд для первого таймера и 2400 милисекунд для второго. Таким образом, при изменении состояния входа нашей схемы с 1 на 0, в тот момент, когда робот наткнется на черную ограничительную линию, триггер сформирует короткий импульс, запускающий таймеры. Направление вращения моторов инвертируется и робот начнет двигаться назад. Когда первый таймер перестанет работать, другой таймер еще 600 милисекунд будет обеспечивать вращение второго мотора в обратном направлении и робот повернется на небольшой угол. Когда и второй таймер закончит свою работу, робот снова поедет в прямом направлении.

В завершение краткого рассказа о новой среде разработки, следует добавить, что Horizont-Configurator имеет достаточно хорошую поддержку на youtube в виде целого ряда обучающих роликов. Ссылка на youtube-канал есть на официальном сайте программы.

В текущей версии (0.3.0.60) поддерживаются следующие микроконтроллеры AVR: ATmega128, ATmega1284, ATmega1284P, ATmega128A, ATmega16, ATmega161, ATmega162, ATmega163, ATmega164A, ATmega164P, ATmega164PA, ATmega165, ATmega165A, ATmega165P, ATmega165PA, ATmega168, ATmega168A, ATmega168P, ATmega168PA, ATmega169, ATmega169A, ATmega169P, ATmega169PA, ATmega16A, ATmega16HVA, ATmega16HVA2, ATmega16HVB, ATmega16M1, ATmega32, ATmega323, ATmega324A, ATmega324P, ATmega324PA, ATmega325, ATmega3250, ATmega3250P, ATmega3250PA, ATmega325A, ATmega325P, ATmega325PA, ATmega328, ATmega328P, ATmega329, ATmega3290, ATmega3290P, ATmega3290PA, ATmega329A, ATmega329P, ATmega329PA, ATmega32A, ATmega32C1, ATmega32HVB, ATmega32M1, ATmega406, ATmega48, ATmega48A, ATmega48P, ATmega48PA, ATmega64, ATmega644, ATmega644A, ATmega644P, ATmega644PA, ATmega645, ATmega6450, ATmega6450A, ATmega645A, ATmega649, ATmega6490, ATmega6490A, ATmega649A, ATmega649P, ATmega64A, ATmega64C1, ATmega64HVE, ATmega64M1, ATmega8, ATmega8515, ATmega8535, ATmega88, ATmega88A, ATmega88P, ATmega88PA, ATmega8A, ATmega8HVA, ATtiny13, ATtiny13A, ATtiny1634, ATtiny167, ATtiny2313, ATtiny2313A, ATtiny24, ATtiny24A, ATtiny25, ATtiny261, ATtiny261A, ATtiny4313, ATtiny43U, ATtiny44, ATtiny44A, ATtiny45, ATtiny461, ATtiny461A, ATtiny48, ATtiny84, ATtiny84A, ATtiny85, ATtiny861, ATtiny861A, ATtiny87, ATtiny88.

09.05.2015

rss