- PVSM.RU - https://www.pvsm.ru -
В предыдущем уроке [1], были рассказаны основные принципы работы с программой FLProg, а так же работы с дискретными сигналами. В этом уроке будет рассмотрены возможности FLProg в работе с аналоговыми сигналами.
В процессе урока будет создана программа управления светодиодным индикатором уровня и показана регулировка яркости светодиода с помощью выхода ШИМ.
Схема тестового стенда.
Как и в прошлом уроке, проект будем создавать на двух языках FBD и LAD. Только теперь это будет делаться параллельно.
Создаём новый проект.
Для языка LAD
Для языка FBD создаём новый аналоговый вход, дважды кликнув на пункте «Добавить вход» дерева тэгов или нажав соответствующую кнопку
В открывшемся окне свойств входа ввести имя входа, выбрать аналоговый тип и номер контакта 0
После чего перетащить новый вход из дерева тэгов в область схемы.
Блоки аналогового входа в FLProg на своём выходе выдают величину пропорциональную напряжению на привязанном к ним реальном входе платы. При 0В на входе платы, на выходе блока будет значение 0, а при 5V на входе платы, на выходе блока будет значение 1023.
Затем создаём аналоговый выход.
Для языка LAD перетаскиваем блок «Аналоговый выход контроллера» из библиотеки блоков, и в редакторе свойств, блока (двойной клик на блоке) привязываем его к выходу платы D3
В языке FBD для создания аналогового выхода необходимо дважды кликнуть на пункте «Добавить выход» дерева тэгов или нажать соответствующую кнопку.
В открывшемся окне свойств выхода заполняем имя выхода, выбираем тип ШИМ, и номер выхода D3
После чего перетаскиваем новый выход в рабочую область схемы.
Вообще-то у плат Arduino настоящих аналоговых выходов не (не считая Arduino Duo, но пока эти платы программой FLProg не поддерживаются). Аналоговые выходы платы работают в режиме ШИМ
В программе FLProg блок аналогового выхода управляет скважностью ШИМ привязанного к нему выхода. При подаче на вход бока значения 0 на выходе паты скважность будет составлять 0%, а при подаче значения 255 – 100%.
Исходя из того что пределы сигнала на выходе блока аналогового входа контроллера составляет 0 — 1023 а пределы допустимого сигнала на входе блока аналогового выхода контроллера составляют 0 – 255 встает вопрос о необходимости приведения их к одним значениям. В этом поможет блок масштабирования.
В языке LAD он находится в папке «Аналоговые блоки» библиотеки элементов.
В языке FBD тот же блок находится в папке «Специальные блоки» библиотеки элементов.
Блок масштабирования пропорционально переносит значение, получаемое на вход, в другой диапазон значений и выдает это значение на выход. Параметры входного и выходного диапазонов значений задаются в свойствах блока. Дважды кликнув на блок, мы можем открыть редактор параметров блока и задать эти значения.
Расчет в блоке производится по следующей формуле
Q = (I – I_min)*(Q_max – Q_min)/(I_max – I_min)+Q_min
Где:
В результате показанной на скриншоте настройки блока при изменении значения на входе блока от 0 до 1023 значение на выходе будет пропорционально изменяться от 0 до 255, что и требуется. Теперь необходимо соединить все блоки в соответствии со схемой.
LAD
FBD
Первая плата практически готова. Назовём её «Управление яркостью» и создадим новую, сразу назвав её «Индикатор уровня»
Во второй плате нам так же нужно значение с входа контроллера. В принципе можно ещё раз вытащить вход блока на вторую плату, и использовать его. Но это приведёт к тому, что в процессе выполнения программы в контроллере будет повторно считываться значение с входа. А процедура считывания аналогового сигнала с входа достаточно ресурсоёмкая и длительная. Поэтому мы используем в случае LAD аналоговый соединитель, а в случае FBD – переменную.
В FLProg переменные и аналоговые соединители можно представить как клеммные соединения на плате. С помощью них платы обмениваются значениями и соединятся между собой.
В проекте на языке LAD перетащим блок «Вход аналогового соединителя» на ПЕРВУЮ плату проекта.
Ему автоматически присвоится имя АС1. После чего соединим его вход с выходом блока аналогового входа.
А на вторую плату перетащим блок «Выход аналогового соединителя».
Сделаем на нём двойной клик и в редакторе блока привяжем его к соединителю AC1
В проекте на языке FBD создадим новую переменную, нажав на соответствующую кнопку или сделав двойной клик на пункте «Добавить переменную» в дереве тэгов.
В открывшемся окне редактора блока заполним имя переменной, выберем тип (Integer), и установим значение по умолчанию – 0
После чего перетащим новую переменную сначала в одну плату, а затем в другую. Так же соединим в первой плате вход переменный с выходом блока аналогового входа контроллера.
Поскольку индикатор уровня на 10 значений необходимо чтобы при изменении значения от нуля до максимума, управляющее значение изменялось от нуля до 10. В этом опять поможет блок масштабирования. Вытащим его на вторую плату и настроим следующим образом.
Теперь подключим его вход в случае LAD-а к блоку выхода аналогового соединителя, а в случае FBD к выходу переменной.
LAD
FBD
Рассмотрим логику работы индикатора уровня.
Для реализации данной логики мы используем в случае языка LAD реле сравнения, в случае языка FBD – компаратор.
LAD
FBD
В проекте на языке LAD вытащим на вторую плату 10 реле сравнения и привяжем их выходам, к которым подключён измеритель уровня ( смотри первый урок [1]) и выставим тип сравнения «Больше».
Кликнув правой кнопкой на входе «В» каждого блока реле сравнения вызовем контекстное меню и выберем пункт «Вставить константу». В открывшемся окне редактирования константы оставим тип “Integer” и введём для каждого выхода значение соответствующее логике работы индикатора.
Входы «А» всех блоков реле сравнения соединим с выходом блока масштабирования. Должна получится такая схема.
В проекте на языке FBD вытащим на вторую плату 10 блоков «Comparator» так же настроим на вид сравнения «Больше» (двойной клик на блоке для вызова редактора блоков). Так же как и в LAD-e вставим константы на входы I2 блоков, а входы I1 соединим с выходом блока масштабирования.
После этого создадим 10 цифровых выходов привязанных к выходам платы, к которым подключён измеритель уровня (смотри первый урок) и вытащим их на вторую плату. И соединим каждый со своим компаратором.
Всё – программы готовы, можно компилировать и заливать в контроллер (смотри первый урок [1])
Автор: FLProg
Источник [2]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/arduino/110979
Ссылки в тексте:
[1] уроке : https://geektimes.ru/company/flprog/blog/269946/
[2] Источник: https://geektimes.ru/post/270186/
Нажмите здесь для печати.