Использование энкодера

Мобильная робототехника

В этом уроке мы познакомимся с инкрементальным магнитным энкодером, который поставляется в комплекте оборудования WorldskillsMobile Robotic Collection, а также с программируемой логической интегральной схемой ПЛИС. Совместим полученные знания и напишем код на ПЛИС, интегрируем его в наше устройство и запустим все в реальном времени. Начнем.
Глоссарий
Для успешного освоения материала рекомендуем вам изучить следующие понятия:
Wordskills Mobile Robotic Collection
Официальный соревновательный набор чемпионата WorldSkills International по компетенции «Мобильная Робототехника»
ПЛИС
Программируемая Логическая Интегральная Схема
Энкодер
Устройство подсчета угла поворота оси
FPJA
Field-Programmable Gate Array, разновидность ПЛИС, конфигурация которой может быть загружена после включения питания
Видеолекция
Конспект

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

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

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

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

В нашем микроконтроллере используется вид ПЛИС под FPGA. Микросхема FPGA — это заказная микросхема ASIC, состоящая из таких же транзисторов, из которых собираются триггеры, регистры, мультиплексоры и другие логические элементы для обычных схем.
Возможности
1
Можно изменять коммутацию сигналов между более крупными блоками (CLB — программируемые логические блоки)
2
Можно изменять логическую функцию, которую выполняет CLB
3
Можно обеспечить разную коммутацию сигналов между CLB, так как блоки CLB находятся в коммутационной матрице, которая задает соединение входов и выходов блоков CLB. На каждом пересечении проводников находятся 6 переключающих ключей, управляемых своими ячейками конфигурационной памяти
Практика
Создадим VI для написания кодов FPGA.

1. Откроем проект и перейдем к устройству Mario Chassis.

2. Создадим новую VI и разделим фронт панели блока диаграмм пополам.
Принцип работы энкодера
Когда вал энкодера вращается, на выходах контроллера появляются два прямоугольных сигнала, сдвинутых относительно друг друга. От направления вращения вала энкодера зависит, какой из сигналов будет опережать другой.
На рисунке представлены возможные варианты сигналов для идеального случая. Чтобы написать код, воспользуемся картинкой ниже.
1. Перепишем этот код на нашу блок-диаграмму и создадим 2 контроля Source А и Source В.

2. Нажмем правой кнопкой мыши на передней панели. Boolean и Push-button. Source A и Source B

3. На блок-диаграмме находим элемент Exclusive Or. Делаем три его копии.

4. На рисунке видим, что от Source A создается ссылка в конце итерации считывания этих данных.

5. Сделаем так, чтобы этот индикатор был значением предыдущей итерации цикла нашего Source A. Воспользуемся элементом Feedback node. Нам необходимо передавать предыдущее значение Source A в Y нашего Exclusive for.
Для этого:
  • нажмем правой кнопкой мыши по Feedback Node'у
  • нажмем кнопочку change Direction.
Теперь с выхода Source A на X будет подаваться свежее значение Feedback Node'а. На Y будет подаваться значение с предыдущей операции, делаем то же самое для Source B и второго Exclusive for.

6. Подключаем к X значение Source A, к Y — последнее значение Source B.

7. Выполняем логическое сложение двух верхних элементов.

8.
Следующим элементом будет Node Exclusive Or.
Важно
Обратите внимание, что эти элементы почти никак друг от друга не отличаются, кроме точки на конце этого элемента
9. Воспользуемся функцией Select для прибавления или вычитания 1 от позиции нашего энкодера.

10. Создадим константу единицы. Зайдем в Numeric — Numeric constant, на True подключаем 1; с помощью зажатой клавиши Ctrl делаем копию и указываем на этой копии -1.

11.
Результат селекта складываем и данный результат с помощью Selecta обрабатываем.
Обработка результата
В случае, если True, то мы будем добавлять или уменьшать какое-либо значение. Данный select будет отвечать за то, двигается ли наш энкодер, т. е. вращается ли вал. Нижнее значение будет проходить дальше на итоговое значение, которое будет выдаваться в нашем реалтайме, с которым в дальнейшем мы будем работать. На False выдается результат вычисления, на True — ноль. Ноль, потому что с помощью данного selecta мы будем обновлять значение энкодера.
Зададим с последнего селекта индикатор, назовем его Position.
Упрощение кода
Чтобы упростить код, можно удалить Direction и изменить направление считывания в реалтайме.
1. Удалим данный элемент и подключим Exclusive or к нашему селектору.

2. Вместо плюса воспользуемся элементами Increment и Decrement

3. К нашему +1 и -1 необходимо передать значения с нашей позиции. Делаем это с помощью Feedback Node.

4. Удалим константы +1 и -1, подключим на True.

5. На False подключаем значение с Feedback node'a.
Важно
Если наш вал вращается, выполняется условие и определяется, в какую сторону необходимо вращение. Соответственно, прибавляется единица или вычитается. Если у нас вал не вращается, то позиция не изменяется и передается такой же, которая была на предыдущей итерации цикла
Теперь необходимо узнать, куда подключены выходы нашего энкодера. Для этого подключим его к myRIO и посмотрим с помощью IO монитора. Подключаем энкодер и элемент питания к драйверу.
Запуск
1. Подключимся к RIO и запустим утилиту.

2. Переходим во вкладку с цифровыми Digital Input / Output (цифровые входы и выходы).

3. Выберем доступные всем цифровые входы и выходы и посмотрим, что будет изменяться.

4.
Определим, к каким входам подключен энкодер.

5. Возьмем мотор и покрутим колесо. Результат: DIO-3 и DIO-4 меняются. Соответственно, два DIO выхода — это DIO-3 и DIO-4.

6. Перейдем в LabVIEW и напишем для этого код.

7. Добавим вместо Source А и Source B наш вход с коннектора А, диапазон DIO-7 DIO-0, и найдем DIO-3 и DIO-4.
8. Перенесем их на нашу блок-диаграмму и подключим соответственно.

9. Поместим написанный код в структуру While loop, чтобы данные операции выполнялись постоянно.
Важно
В отличие от real-time, на ПЛИС не нужно указывать задержку, так как ПЛИС является довольно высокоскоростным устройством, и задержка нам будет только мешать
10. Запустим нашу программку, сохраним ее, назовем энкодер FPGA и укажем Use the local compile server.

11. Нажимаем OK и ожидаем окончание компиляции FPGA-файла.

12. Покрутим наше колесо против часовой стрелки. Position считается в отрицательную сторону. Вращаем по часовой, Position считается в положительную сторону. Нажимаем Reset — позиция обнуляется.
Перенос ПЛИС на Real-time
1. В проекте под myRIO создаем новую VI.

2. Делим экран.

3. Обращаемся в библиотеку FPGA-interface и берем первый элемент — Open FPGA Reference.

4. Заходим в данный блок и указываем, например, с помощью бит-файла, который находится в папочке FPGA bit-files.

5. Указываем Resource name, наше устройство FPGA target RIO.
Важно
Есть два выхода: кластер ошибки и FPGA Reference out. По данному проводу будет идти информация, к которой мы будем обращаться в нашем цикле для считывания, например, значений с энкодера
6. Подключаем в цикл, затем оттуда же из FPGA interface возьмем элемент Read write control, подключим его на FPGA VI Reference, и в этом элементе появляются те названия контрольных индикаторов, которые мы создали в нашем ПЛИСе. К примеру, Reset, я растяну его чуть ниже — Position. На Reset создаю Control, на Position создаю Indicator. Указываю условие остановки цикла и ставлю задержку в этом цикле 10 мс. Запускаем и сохраняем.
В этом уроке мы узнали, что такое энкодер, что такое ПЛИС, написали код для энкодера на ПЛИС и воспользовались сконфигурированным ПЛИС на устройстве в real-time. Предлагаем вам проверить полученные знания!
Интерактивное задание
Тест
Для закрепления полученных знаний пройдите тест
Стартуем!
Что такое ПЛИС?
Дальше
Проверить
Узнать результат
На основе какого эффекта работает инкрементальный энкодер, представленный в уроке?
Дальше
Проверить
Узнать результат
Что нельзя делать при программировании ПЛИС?
Дальше
Проверить
Узнать результат
К сожалению, вы ответили неправильно
Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Неплохо!
Но можно лучше. Прочитайте лекцию и посмотрите видео еще раз
Пройти еще раз
Отлично!
Вы отлично справились. Теперь можете ознакомиться с другими компетенциями
Пройти еще раз