Энкодеры. Обработка сигналов в ПЛК

2022-08-10 Промышленное  Комментариев нет

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

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

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

Типы энкодеров

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

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

Инкрементальные энкодеры

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

Одним из основных элементов инкрементных энкодеров является диск с N-количеством меток, нанесенных по окружности через равные промежутки. Число меток равно числу импульсов, выводимых за один оборот вала. Скорость может быть вычислена путем измерения временного интервала между импульсами или путем подсчета числа импульсов в определенном временном интервале.

Для определения начального положения, на диск наносят нулевую (стартовую) метку Z, которая задает начало отсчета импульсов в цикле работы, то есть она служит точкой отсчета. Если питание пропадает, значение положения вала теряется и для нахождения нулевой метки необходимо снова повернуть вал.

Как правило, энкодер имеет два выхода А и В. Сигналы на выходах сдвинуты по отношению друг к другу на 90°, что позволяет определить направление вращения энкодера. При вращении в одну сторону один из каналов является ведущим, а при вращении в другую сторону – ведомым.

Выходной сигнал энкодера

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

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

Абсолютные энкодеры

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

Код Грея

Коды Грея – двоичные коды, служащие для обозначения чисел, причем обозначения соседних чисел различаются лишь одним кодовым символом.

Чтобы найти циклический код десятичного числа, необходимо найти его двоичный эквивалент, а затем перевести его в циклический по правилу:

Если в старшем разряде двоичного кода стоит ноль, то в данном разряде циклического кода цифра не меняется, а если единица, то  в данном разряде циклического кода цифра меняется на обратную.

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

Если при отсутствии питания провернуть вал на определенный угол, то после того, как питание восстановится, энкодер сразу выдаст фактическое угловое положение вала.

Абсолютные энкодеры, в свою очередь, разделяются на однооборотные и многооборотные.

Однооборотные выдают абсолютное значение за один оборот вращения диска, после чего код является полностью пройденным и начинается опять с начального значения.

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

Подключение энкодера к ПЛК

Понятно, что энкодеры не работают сами по себе. Информация с них должна передаваться на устройство, которое будет заниматься подсчетом импульсов. В качестве таких устройств обычно выступают ПЛК либо сервоусилители.

На примере контроллера Siemens S7-1200 покажу, как это можно реализовать.

Конфигурация высокоскоростных счетчиков

В первую очередь сконфигурируем быстрые входы ПЛК в TIA Portal.

Из дерева проекта в левой части экрана нажимаем на вкладку Device Configuration. В появившемся рабочем окне Device view выделим правой кнопкой мыши изображение контроллера и во всплывающем меню выберем пункт Properties, в результате чего в нижней части экрана появится окно инспектора свойств.

Здесь находим вкладку Digital Inputs. Мы должны установить скорость обновления наших входов, к которым подключен энкодер, таким образом, чтобы контроллер мог успевать обрабатывать импульсы. Для этого выполним небольшие расчеты.

Асинхронный двигатель имеет фактическую частоту вращения вала 2880 об/мин, что соответствует 48 об/сек.

Предположим, энкодер работает в режиме A/B counter fourfold (квадратурный A/B-счетчик 4-тактный), с разрешением 1440 импульсов на оборот. Значение такого счетчика изменяется 4 раза за период.

Таким образом, ПЛК  должен будет считать за секунду до 69120 импульсов. Разделив секунду на максимальное количество импульсов, мы получаем минимальное значение обновления, которое не позволит пропустить какой-либо импульс. В нашем случае 1/69120 ≈ 0.0000145s ≈ 14,50 мкс.

Выбираем из выпадающего списка значение на уровень выше, чем следует из наших расчетов, то есть 12,80 мкс.

Настройка быстродействующих входов ПЛК

Переходим на вкладку High speed counters (HSC).

Выбираем необходимые нам счетчики и активируем их, поставив галочку напротив Enable this high speed counter.

В разделе function устанавливаем следующие значения.

Настройка скоростных счетчиков ПЛК

В параметре Type of counting выбираем тип счетчика count, то есть подсчет импульсов. Помимо этого, также можно выбрать параметр Frequency — измерение частоты следования импульсов.

В параметре Operating phase выберем A/B counter fourfold. Также из выпадающего списка мы можем выбрать Single phase – однофазный счетчик, Two phase – двухфазный и A/B counter – квадратурный A/B-счетчик.

Параметр Initial counting direction отвечает  за начальное направление счета. Count up – счет импульсов с возрастанием и Count down – счет импульсов с убыванием.

Наконец, на вкладке hardware inputs мы указываем, к каким входам подключены каналы A и B энкодера.

В окне I/O adresses указан адрес регистра для записи значения быстрого счетчика HSC1. В нашем случае это % ID1000.

Программная часть

Переходим к написанию алгоритма, позволяющего измерять фактическую скорость вращения двигателя.

Cоздаем блок данных DB1 Encoder и добавляем три переменные типа real — Sec, Min и Imp.

Затем добавляем функциональный блок FB Encoder_FB.

В Network1 нашего функционального блока добавляем инструкцию CTRL_HSC, отвечающую за управление скоростными счетчиками.  Найти ее можно на вкладке Instructions -> Technology -> Counting.

Инструкция имеет следующие параметры:

  • HSC — Идентификатор скоростного счетчика, представляющий собой целое число, автоматически связываемое системой программирования с данным счетчиком при его конфигурации. Данное значение отображается на панели свойств ЦПУ контроллера на вкладке High speed counters (HCS) -> HSCi -> Hardware identifier.
  • DIR — Запрос нового направления счета.
  • CV — Запрос нового значения счетчика.
  • RV — Запрос установки нового опорного значения счетчика (уставки).
  • PERIOD — Запрос на установку нового интервала времени (только при измерении частоты).
  • NEW_DIR — Новое направление счета: 1 — вперед, с возрастанием; 1 = назад, с убыванием.
  • NEW_CV — Новое текущее значение счетчика.
  • NEW_RV — Новое опорное значение счетчика.
  • NEW_PERIOD — Новое значение интервала времени в миллисекундах.
  • BUSY — Функция занята.
  • STATUS — Код состояния выполнения.

Для входа HSC назначаем настроенный ранее быстрый счетчик, в нашем случае Local~HSC_1.

На вход CV, отвечающий за сброс значения счетчика, подключаем контакт с нарастающим фронтом аппаратного таймера 1Hz. Он будет сбрасывать значение нашего счетчика каждую секунду.

Инструкция CTRL_HSC

Network2 преобразовывает значения счетчика HSC1 из DInt в Real и записывает его в переменную “Encoder”.Imp.  Для этого используется блок CONV.

Преобразование значения счетчика HSC

В Network3 мы делаем расчеты, преобразующие количество импульсов в секунду в значение оборотов двигателя в минуту.

Мы добавляем блок DIV, отвечающий за деление, в котором в параметр IN1 мы вводим наше преобразованное выше значение, то есть переменную “Encoder”.Imp , а в параметр IN2 количество импульсов, генерируемых энкодером за один оборот. На вход EN подключаем контакт с нарастающим фронтом аппаратного таймера 1Hz. В результате получаем значение оборотов в секунду, которое сохраняем  в переменной “Encoder”.Sec.

Затем умножаем полученное значение на 60, при помощи блока MUL. В результате получаем обороты двигателя в минуту, это значение заносим в переменной “Encoder”.Min.

Преобразование количества импульсов

Последним шагом в нашем примере будет добавление визуализации.

Создадим два окна, в одном из которых добавим два элемента типа I/O field. SpeedSetpoint будет отображать заданную скорость в об/мин. SpeedAct  выводит значение, которое считывается с помощью датчика (переменная “Encoder”.Min).

Панель визуализации

На втором экране размещены графики заданной и текущей скорости.

Панель визуализации

Теперь мы можем загрузить наш проект в ПЛК и HMI и переходить к тестированию.

Комментарии

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>