В отличие от переменного резистора, положение ручки валкодера меняется дискретно, “щелчками”, при этом идет несколько коммутаций, последовательность которых зависит от выбранного пользователем направления вращения. На один полный оборот может быть разное число дискретных положений (12, 20, 24), в зависимости от типа устройства.
Принцип работы такого валкодера становится понятным из его таблицы истинности, графика и функциональной схемы:
Сигналы с этого трехконтактного датчика поворота идут со сдвигом фазы в 90 градусов. Обычно один из сигналов (А или В) используется для счёта импульсов, а другой для определения направления. Например, при вращении ручки вправо, в момент появления напряжения на А, на И оно еще отсутствует. А при вращении влево, в момент появления напряжения на В, на А оно уже есть. То есть дополнительно подключенная схема или микроконтроллер легко поймет направление вращения, как и сосчитает количество импульсов во время вращения ручки.
Как видно из временных диаграмм на рисунке выше, при повороте на одно дискретное положение (на один “щелчок”), на выводах A и B появляются импульсы отрицательной полярности, сдвинутые по фазе между собой. Сдвиг фаз зависит от выбранного направления вращения. На ВД можно обозначить четыре состояния, которые составляют период одного дискретного изменения (“щелчка”), длительность периода изменяется примерно от 2 мс до 4 мс.
На рисунке ниже показан пример схемы подключения валкодера к микроконтроллеру:
Выводы A и B нужно обязательно подтянуть к линии питания +5В с помощью подтягивающих резисторов, также необходимо установить емкости C1 и C2 которые снижают влияние дребезга контактов.
Практический пример такого подключения хорошо описан здесь:
Аналогичную схему можно легко собрать и своими руками, например на отечественной цифровой микросхеме и двух оптронах (АОТ147Б):
На логических элементах ИЛИ-НЕ DD1.1 и DD1.4 собрана схема, укорачивающая импульсы идущие с вывода VAL0, длина импульса подбирается, номиналами конденсатора C2 и резистора R4, чтобы микроконтроллер смог зафиксировать импульс. DD1.2 и DD1.3 используются в роли буферных элементов.
Валкодер — энкодер для ввода аналоговых параметров в PLC
Практически в каждой инженерной задаче, связанной с управлением техпроцессом, интерфейсом, между системой и человеком бывает необходима плавная, аналоговая регулировка того или иного параметра. Например, уставки регуляторов, уровни в резервуарах, задания скоростей приводов, температур и тому подобное. В приборостроении разработчики для таких целей давно и успешно применяют энкодеры, или еще одно название приборов — валкодеры.
Достоинства валкодера очевидны. Удобство, эргономичность, тактильный эффект, оперативное без задержки воздействие на выбранный параметр, отсутствие температурного и временного дрейфа.
Специалисты компании ООО «СП Инжиниринг» разработали универсальный валкодер для промышленных применений.
Валкодер имеет широкий диапазон питания, от 5 до 30 В. Соответственно и выходные сигналы могут иметь любой уровень в диапазоне от TTL до HTL. В прибор встроены защиты от переполюсовки питания, от короткого замыкания и от перенапряжений по выходам.
Для простоты обработки контроллером квадра-турные сигналы А и В преобразованы в сигналы направления DIR и счета ST. На выходе DIR уровень 1 соответствует вращению по часовой стрелке, уровень 0 — против часовой стрелки. Выход ST повторяет импульсы канала A энкодера. Выход DIR подключается ко входу направления счетчика, выход ST подключается к счетному входу. Такое преобразование позволяет отказаться от относительно дорогих модулей обработки квадратурного сигнала и использовать простые аппаратные или программные счетчики, которые есть в составе практически любого современного PLC.
В минимальном варианте валкодер можно опрашивать парой обычных дискретных входов PLC и простой функцией программного счетчика. Если необходимо обрабатывать одновременно несколько валкодеров, удобно использовать аппа-ратные счетчики, «привязанные» к дискретным входам, опрос большого количества энкодеров и визуализация на панели оператора происходит быстро и плавно.
В каждом энкодере встроена дополнительная кнопка — вертикальное движение маховичка. Эту кнопку удобно использовать для включения/выключения подсветки параметра, подтверждения ввода, переключения разрешающей способности, цены деления и т. п.
Немного о конструкции
Энкодер имеет пылезащитный корпус. Он выполняется либо из капролона, либо из алюминия.
Питание и выходные сигналы подключаются через клеммный разъем. В случае необходимости энкодер может быть быстро заменен. Габариты, не считая вала — ВхШхГ 35х30х18 мм (модификация EN2424-2).
Примеры применений
Энкодер может иметь самое разнообразное применение: от устройств ввода заданий, уставок различных технологических процессов до рукояток ручного перемещения манипуляторов, несложных ЧПУ станков и т. п.
Управление электроприводом
Валкодерами задается общая скорость машины и приращения по каждой приводной точке. Текущее значение параметра отображается на панели оператора в цифровом виде и в виде графической полоски. Положительное опережение — полоска зеленая, растет вверх, отрицательное опережение — полоска синяя, растет вниз.
Пульт системы управления приводом
Вертикальной кнопкой, перебором, задается величина шага (цена деления одного импульса) десятые сотые или тысячные заданной скорости. По сравнению с традиционным решением (кнопки «больше»/ «меньше») ввод скоростей и приращений энкодерами позволяет ускорить ввод параметров. Оператор получает возможность влиять не только на значение параметра, но и на характер (скорость) изменения параметра. В ряде случаев это позволяет избежать обрывов материала, лучше «чувствовать» технологический процесс.
Решение будет весьма кстати в бумажной промышленности — для управления приводами БДМ, КДМ, гофроагрегатов, ПРС. В цветной и черной металлургии — в прокатном производстве, на линиях финальной отделки листа, всевозможных линиях резки, также в производстве полимерных пленок, в производстве кабеля, в производстве нетканых материалов — практически везде, где есть многодвигательные приводные системы.
Система управления гидроприводами
Валкодер изменяет уставку пропорционального клапана, которая в свою очередь формируется контроллером и выдается в клапан, одновременно отображается на панели оператора в графической и цифровой форме. Достоинство — наглядность для персонала, эргономичность, удобство. Кроме того, применение валкодеров позволило избежать использования аналоговых вводов. Приятный бонус — подсветка.
Пульт управления гидросистемой
Применение валкодеров как приборов ручного ввода аналоговых параметров — это свежее решение, привносящее новую функциональность, эргономику, удобство и эстетику в современные системы управления.
Источник: ООО «СП Инжиниринг». Опубликовано в журнале «Электротехнический рынок» № 4-5 2019 год
Ща я вам как расскажу, как устроен валкодер. Да проще некуда. В самом простом механическом валкодере есть три контакта, один общий и два сигнальных. Валкодеры сейчас можно встретить почти повсеместно, в музыкальных центрах, автомагнитолах, и прочей бытовой мишуре.
Проще можно пояснить действие валкодера таблицей истинности:
На всякий случай приклею график:
Сигналы с валкодера поступают со сдвигом фазы в 90 градусов. То есть за один щелчок валкодер проходит все пять пунктов согласно таблице. Обычно один из сигналов (VAL0,VAL1) используется для счёта импульсов, а второй для определения направления. Например, при вращении ручки валкодера вправо, в момент появления напряжения на VAL0, на VAL1 его ещё нет. А при вращении ручки влево, в момент появления напряжения на VAL0, на VAL1 оно уже присутствует. То есть можно определить направление вращения, и сосчитать количество импульсов во время поворота ручки валкодера. Отсюда можно предложить следующую схему валкодера:
Здесь может быть использовано два щелевых оптрона, например АОТ147Б, можно использовать светодиод и сдвоенный фототранзистор из старой шариковой мышки. Оттуда же можно взять колесо со «щёлками».
А теперь о схеме подробнее. На транзисторах VT1 и VT2 собрана схема, укорачивающая импульсы VAL0, потому как самодельный оптический валкодер, как правило, не имеет фиксации в нейтральном положении, и что будет, если будет открыт верхний оптрон, программа в МК или будет бесконечно считать, или попросту зависнет, ожидая снятия напряжения с VAL0. Для этого и была введена данная укорачивающая схема, длина импульса выбирается, подборкой C1 и R5, достаточная для того, чтобы МК смог зафиксировать импульс.
В принципе данную схему можно собрать и на цифровой микросхеме, что, по-моему, даже лучше:
На элементах DD1.1 и DD1.4 собран аналог транзисторной схемы, а свободные элементы DD1.2 и DD1.3 применены в качестве буферных элементов. Это, конечно же, не универсальная схема, так что пробуйте, экспериментируйте.
Валкодер – устройство, меняющее какую-то величину в зависимости от поворота оси. Такая штука водится, например, в роликовой мыши или в музыкальном центре. Собственно, сам по себе валкодер довольно прост, но мы усложним задачу тем, что не будем использовать микроконтроллер, как это практикуется во всех промышленных образцах. Валкодер интересен тем, что в нем переплетаются очень многие приемы, применяемые в цифровой и аналоговой электронике. Итак ТЗ: разработать устройство, изменяющее выходное напряжение в диапазоне 0 – 3В, в линейной зависимости от угла поворота оси. Изменение напряжение должно быть реверсивным, с количеством градаций не менее 80. Выходной сигнал должен быть изолирован он рабочих напряжений устройства (гальваническая развязка). Полное нарастание/спад напряжения происходит при изменении угла поворота оси от 0 до 1440 градусов (4 оборота). Устройство должно сохранять работоспособность в диапазоне питающего напряжения от 8 до 15В. Предусмотреть цифровую индикацию напряжения.
1. C чего начать?
2. Теперь попробуем описать алгоритм работы:
*При включении на выходе 0.
*ЕСЛИ на выходе 0 И есть импульс с датчика И ручка поворачивается по часовой стрелке – добавить 1 в выходной код.
*ЕСЛИ на выходе 0 И есть импульс с датчика И ручка поворачивается против часовой стрелки- не выполнять никаких действий
*ЕСЛИ на выходе 1010000 И есть импульс с датчика И ручка поворачивается по часовой стрелке- не выполнять никаких действий
*ЕСЛИ на выходе 1010000 И есть импульс с датчика И ручка поворачивается против часовой стрелки- вычесть 1 из выходного кода
*ЕСЛИ на выходе число отличное от 0 и 1010000 И есть импульс с датчика И ручка поворачивается по часовой стрелке – добавить 1 в выходной код
*ЕСЛИ на выходе число отличное от 0 и 1010000 И есть импульс с датчика И ручка поворачивается против часовой стрелки – вычесть 1 из выходного кода.
*ЕСЛИ нет импульса с датчика – не выполнять никаких действий.
3. Составим блок-схему устройства:
Очевидно, что механическая часть должна сообщать как о самом вращении, так и о его направлении. Значит датчик должен выдавать 2 сигнала. В результате получается, что устройство должно состоять из реверсивного счетчика, блока согласования-развязки и цифроаналогового преобразователя.
Согласователь должен выводить сигнал о переполнении и запрещать счетчику складывать (если получен максимум) или вычитать (если получен минимум).
4. Конструируем датчик:
Воды вылито достаточно, теперь можно говорить более предметно. Механика зависит от электроники, а электроника от механики, поэтому рассмотрим датчик как единое целое. Вполне понятно, что использовать оптический датчик гораздо удобнее, нежели контактный, значит мы пришли к перфорированному колесу. Получить импульсы проще простого, осталось определить направление вращения. Есть два пути: использовать две оптопары (излучатель + приемник) расположив их таким образом, что освещается сначала один приемник, а затем второй. Либо использовать заслонку, скользящую на той же оси, что и колесо (момент, создаваемый осью, должен превышать массу заслонки и она не должна поворачиваться под собственной тяжестью). Эта заслонка поворачивается синхронно с колесом на определенный угол (не более 4,5 градусов в обе стороны) и открывает/заслоняет дополнительный (стробирующий) фотоприемник. Этот вариант сильно усложняет механику, хотя весьма прост в схемотехнической реализации (логическая схема «И»), поэтому вернемся к первому варианту. Теперь прикинем временные эпюры сигналов, создаваемых датчиком.
Как видно из рисунка, сигналы приемников смещены по фазе на 90 градусов. Этого легко добиться расположив приемники рядом в одну линию. Таким образом, когда отверстие проходит над приемниками, сначала освещается первый приемник, затем оба, затем второй.
Предположим, колесо (3) вращается по часовой стрелке вокруг оси (2). Когда отверстие (1) подходит к оптопарам, Сначала освещается правый приемник (5), затем оба, затем только левый (4). И это повторяется 20 раз за один оборот. Из приведенных эпюр видно, что на заднем фронте импульса с правого приемника формируется некий стробирующий сигнал. На нем мы и будем строить результирующий сигнал датчика: во-первых, он генерируется в единственном экземпляре при освещении приемников, во-вторых, он прекрасно характеризует направление вращения. Совпадая с импульсом левого датчика при вращении по часовой стрелке, он дает возможность выделить положительный импульс при помощи логического элемента «И». Для получения этого чудо-импульса нам понадобится одновибратор для получения нужной длительности. Исходный фронт отрицательный, поэтому его нужно инвертировать. Попробуем набросать схему: петля ООС одновибратора рассчитывается исходя из максимальной частоты вращения колеса – длительность стробирующего импульса не должна превышать 1/4 периода «правого» сигнала. Цепочка С1R4 рассчитывается исходя из того, что формируемый ею импульс должен составлять 0,1Тстр.
5. Построим самый простой блок в устройстве – счетчик.
Хотел нарисовать схему на триггерах, но это показалось мне совсем уж чудовищным глумлением над электроникой. Если интересно, схему реверсивного счетчика на триггерах можно найти в любом справочнике по цифровым микросхемам. Поэтому наша задача сводится к выбору стандартного счетчика из традиционных серий КМОП. Итак, определим требования к счетчику:
*Напряжение питания 8-15В
Таким условиям удовлетворяет К561ИЕ14
Как видно на картинке, у счетчика есть входы предустановки. При помощи этих входов мы можем быстро выставлять на выходе необходимое напряжение, вызывая из внешнего ОЗУ соответствующий код. Разумеется в ОЗУ должен быть создан некий банк сохраненных уровней. В ТЗ не оговорена такая возможность, поэтому используем входы предустановки для сброса. Так же есть вход запрещения счета (РО). Но использовать его для защиты валкодера от переполнения не получится. Дело в том, что этот вход вовсе блокирует считчик и не дает ему считать даже в свободном направлении, а нам нужно, чтобы при достижении критического уровня в одном направлении, свободное направление оставалось свободным. Поэтому сигнал переполнения мы выделим после дешифратора. Этим сигналом мы будем стробировать вход «С».
6. Теперь можно заняться сравнительно простыми, но громоздкими узлами – дешифратором и цифро-аналоговым преобразователем (ЦАП)
Вот таким, например, у меня получился дешифратор. Ничего хитрого: массовые дешифраторы и транзисторные ключи для управления оптронами и полупроводниковыми индикаторами СИД-ОА. Дешифраторы вполне традиционные: К561ИД1 – преобразователь двоичного кода в десятичный и К561ИД4 – преобразователь двоичного кода в семисегментный.
ЦАП будет построен подобным образом. Единственный тонкий момент – определение диапазонов. Сопоставление границ регулировки десяткам и единицам. У нас 7 десятков и 10 единиц. Разделим полное выходное напряжение на 80 градаций: получается 0,04. Умножим на 10 – получается 0,4. Значит, единичный разряд регулирует напряжение в пределах 400мВ. Следовательно, оставшиеся 2,6В управляются десятками. Теперь осталось только подобрать резисторы, переключаемые оптронными ключами и, с их помощью, выстроить нужную шкалу регулировки.
Это не новость и не статья. Это просто развёрнутый комментарий к датагосркой статье «Что есть валкодер?»
Я попробую «на пальцах», без привязки к конкретной реализации, рассказать алгоритм программной обработки валкодера, т.е. когда всю аппаратную обвязку мы выбросили и диаграмму работы обрабатываем микроконтроллером (раз уж он всё равно есть — пусть работает).
Содержание / Contents
↑ Схема
От приведенной там схемы оставляем только:
↑ Немного теории
Берём таблицу истинности (приведенную там же ): T — шаг состояния; VAL0 — состояние датчика №0 VAL1 — состояние датчика №1 Заметим, что эта таблица истинности описывает изменения состояний датчиков при движении диска на один зуб только в одну сторону, в реальности требуется ещё одна таблица, описывающая обратное движение. Но её можно не рисовать, просто прочесть уже имеющуюся справа-налево (от состояния 5 к состоянию 1), главное не запутаться.
Приводим таблицу истинности к линейному виду (делаем проекцию двухмерного объекта на линию), получаем: T — шаг состояния; VAL — номер датчика (№0 или №1) data — состояния датчика, или собственно таблица истинности. Поскольку движение закольцовано, два нуля в начале и конце диаграммы смыкаются и одну пару из них отбрасываем. Нужный нам байт выделен жёлтым. byte — пронумеруем биты в байте, просто что бы не запутаться.
Не забудем таблицу и для обратного движения:
Кстати, в этом месте уже можно догадаться, что будет дальше.
В программе нам потребуется переменная (один байт) для хранения текущего состояния датчиков и две константы для проверки исполнения таблицы истинности:
Реализовать алгоритм можно как обработку прерывания от таймера или в общем цикле программы (если он не слишком длинный).
↑ Теперь собственно алгоритм:
1. При входе в подпрограмму обработки валкодера первым шагом сравниваем состояние датчика VAL0 с битом diagramma.0 и датчика VAL1 с битом diagramma.1 если хоть один не совпал, то тогда идём дальше, иначе выход из прерывания (или в основной цикл программы), здесь больше ничего не делаем. Таким образом нам не страшны зависания диска в промежуточных состояниях.
2. Сдвигаем байт diagramma на два разряда в сторону старшего разряда.
3. Присваиваем двум младшим разрядам diagramma текущие значения соответствующих датчиков.
4. Сравниваем поочерёдно diagramma с константами diag_plus и diag_minus с какой совпала, на обработку того события уходим, если ни с одной не совпала — значит выход (диаграмма ещё не завершена). Таким образом нам не страшны никакие колебания диска в промежуточных состояниях — мы считаем только полные циклы прохождения зубцов перед датчиком.
↑ Вопрос быстродействия
Если для регуляторов громкости и тембра пропустить несколько зубцов диска не смертельно, то при реализации валкодером, например, счётчика ленты магнитофона, это уже критически важно и, чтобы не было пропусков в счете, потребуется считать ограничение по минимальной частоте вызова прерывания для обработки датчика (или максимальной длительности главного цикла программы, если делать без прерываний). Но этот вопрос слишком зависит от конкретной реализации и здесь рассматривать не будем. Кстати при реализации алгоритма на ассемблере он занимает считанные байты и вопрос быстродействия скорее всего не возникнет.
В общем всё заключается в том, что кому проще: распаять несколько деталей или дописать несколько строк.