FLProg – Урок второй: Работа с аналоговыми сигналами

В предыдущем уроке , были рассказаны основные принципы работы с программой FLProg, а так же работы с дискретными сигналами. В этом уроке будет рассмотрены возможности FLProg в работе с аналоговыми сигналами.
В процессе урока будет создана программа управления светодиодным индикатором уровня и показана регулировка яркости светодиода с помощью выхода ШИМ.
Схема тестового стенда.

Как и в прошлом уроке, проект будем создавать на двух языках FBD и LAD. Только теперь это будет делаться параллельно.

Создаём новый проект.

Для языка LAD

  • Первый путь — перетаскиваем на схему аналоговый вход A0 из дерева установленного оборудования
  • Второй путь — перетаскиваем блок «Аналоговый вход контроллера» из библиотеки элементов, после чего сделав на новом блоке двойной клик, привязываем его к нулевому аналоговому входу платы

Для языка FBD создаём новый аналоговый вход, дважды кликнув на пункте «Добавить вход» дерева тэгов или нажав соответствующую кнопку

В открывшемся окне свойств входа ввести имя входа, выбрать аналоговый тип и номер контакта 0

После чего перетащить новый вход из дерева тэгов в область схемы.

Блоки аналогового входа в FLProg на своём выходе выдают величину пропорциональную напряжению на привязанном к ним реальном входе платы. При 0В на входе платы, на выходе блока будет значение 0, а при 5V на входе платы, на выходе блока будет значение 1023.

Затем создаём аналоговый выход.

Для языка LAD перетаскиваем блок «Аналоговый выход контроллера» из библиотеки блоков, и в редакторе свойств, блока (двойной клик на блоке) привязываем его к выходу платы D3

В языке FBD для создания аналогового выхода необходимо дважды кликнуть на пункте «Добавить выход» дерева тэгов или нажать соответствующую кнопку.

В открывшемся окне свойств выхода заполняем имя выхода, выбираем тип ШИМ, и номер выхода D3

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

Вообще-то у плат Arduino настоящих аналоговых выходов нет (не считая Arduino Duo, но пока эти платы программой FLProg не поддерживаются). Аналоговые выходы платы работают в режиме ШИМ

Широтно-импульсная модуляция (ШИМ, англ. pulse-width modulation (PWM)) — процесс управления мощностью, подводимой к нагрузке, путём изменения скважности импульсов, при постоянной частоте. Для примера можно в качестве нагрузки использовать светодиод.

Частота, это количество периодов за одну секунду. Скважность — отношение длительности импульса к длительности периода. Можно изменять и то и другое, но для управления светодиодами достаточно управлять скважностью. На картинке выше мы видим ШИМ сигнал со скважностью 50 %, так как длительность импульса (ширина импульса) ровно половина от периода. Соответственно светодиод будет ровно половину времени во включенном состоянии и половину в выключенном. Частота ШИМ очень большая и глаз не заметит мерцания светодиода из-за инерционности нашего зрения, поэтому нам будет казаться, что светодиод светится на половину яркости. Если мы изменим скважность на 75%, то яркость светодиода будет на 3 четверти от полной, а график будет выглядеть так:

Получается, что мы можем регулировать яркость светодиода от 0 до 100 %. А теперь поговорим о таком параметре ШИМ, как разрешение. Разрешение — это количество градаций (шагов) регулировки скважности. В платах Arduino разрешение составляет 256 шагов.
В программе 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
Где:

  • Q – значение на выходе блока
  • I – значение на входе блока
  • I_max – верхний предел входного значения
  • I_min – нижний предел входного значения
  • Q_max – верхний предел выходного значения
  • Q_min – нижний предел выходного значения

В результате показанной на скриншоте настройки блока при изменении значения на входе блока от 0 до 1023 значение на выходе будет пропорционально изменяться от 0 до 255, что и требуется. Теперь необходимо соединить все блоки в соответствии со схемой.

LAD

FBD

Первая плата практически готова. Назовём её «Управление яркостью» и создадим новую, сразу назвав её «Индикатор уровня»
Во второй плате нам так же нужно значение с входа контроллера. В принципе можно ещё раз вытащить вход блока на вторую плату, и использовать его. Но это приведёт к тому, что в процессе выполнения программы в контроллере будет повторно считываться значение с входа. А процедура считывания аналогового сигнала с входа достаточно ресурсоёмкая и длительная. Поэтому мы используем в случае LAD аналоговый соединитель, а в случае FBD – переменную.

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

В проекте на языке LAD перетащим блок «Вход аналогового соединителя» на ПЕРВУЮ плату проекта.

Ему автоматически присвоится имя АС1. После чего соединим его вход с выходом блока аналогового входа.

А на вторую плату перетащим блок «Выход аналогового соединителя».

Сделаем на нём двойной клик и в редакторе блока привяжем его к соединителю AC1

В проекте на языке FBD создадим новую переменную, нажав на соответствующую кнопку или сделав двойной клик на пункте «Добавить переменную» в дереве тэгов.

В открывшемся окне редактора блока заполним имя переменной, выберем тип (Integer), и установим значение по умолчанию – 0

После чего перетащим новую переменную сначала в одну плату, а затем в другую. Так же соединим в первой плате вход переменный с выходом блока аналогового входа контроллера.

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

Теперь подключим его вход в случае LAD-а к блоку выхода аналогового соединителя, а в случае FBD к выходу переменной.

LAD

FBD

Рассмотрим логику работы индикатора уровня.

  • Светодиод «Уровень 1» должен загореться, если значение сигнала больше 0
  • Светодиод «Уровень 2» должен загореться, если значение сигнала больше 1
  • Светодиод «Уровень 3» должен загореться, если значение сигнала больше 2
  • Светодиод «Уровень 4» должен загореться, если значение сигнала больше 3
  • Светодиод «Уровень 5» должен загореться, если значение сигнала больше 4
  • Светодиод «Уровень 6» должен загореться, если значение сигнала больше 5
  • Светодиод «Уровень 7» должен загореться, если значение сигнала больше 6
  • Светодиод «Уровень 8» должен загореться, если значение сигнала больше 7
  • Светодиод «Уровень 9» должен загореться, если значение сигнала больше 8
  • Светодиод «Уровень 10» должен загореться, если значение сигнала больше 9

Для реализации данной логики мы используем в случае языка LAD реле сравнения, в случае языка FBD – компаратор.

LAD

FBD

В проекте на языке LAD вытащим на вторую плату 10 реле сравнения и привяжем их выходам, к которым подключён измеритель уровня ( смотри первый урок) и выставим тип сравнения «Больше».

Кликнув правой кнопкой на входе «В» каждого блока реле сравнения вызовем контекстное меню и выберем пункт «Вставить константу». В открывшемся окне редактирования константы оставим тип “Integer” и введём для каждого выхода значение соответствующее логике работы индикатора.

Входы «А» всех блоков реле сравнения соединим с выходом блока масштабирования. Должна получится такая схема.

В проекте на языке FBD вытащим на вторую плату 10 блоков «Comparator» так же настроим на вид сравнения «Больше» (двойной клик на блоке для вызова редактора блоков). Так же как и в LAD-e вставим константы на входы I2 блоков, а входы I1 соединим с выходом блока масштабирования.

После этого создадим 10 цифровых выходов привязанных к выходам платы, к которым подключён измеритель уровня (смотри первый урок) и вытащим их на вторую плату. И соединим каждый со своим компаратором.

Всё – программы готовы, можно компилировать и заливать в контроллер (смотри первый урок)


2

Автор публикации

не в сети 2 недели

Сергей Глушенко

782
Комментарии: 15Публикации: 391Регистрация: 04-02-2018

Оставьте комментарий

Войти с помощью: