Ручной энкодер инкрементный, он же датчик угла поворота на 100 тактов. Недообзор.


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

 

Помаленьку готовлюсь к очередному долгострою, когда же я его доделаю большому проекту.

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

Внешний вид

Упакован герой обзора в картонную коробку.

Какая интересная коробочка

Энкодер в блистере, до стенок коробки хороший зазор, неплохо упаковано.

А вот и сам герой обзора.

Энкодер массивный, чувствуется вес — 178 г. Щелчки при повороте четкие.

Подключение проводов осуществляется клеммами под винт. У нас простой энкодер, с двумя каналами A и B. Есть аналогичные модели с 6 клеммами — в них используется дифференциальный сигнал.

Продавец заботливо предоставил все необходимые размеры:

Разборка

Приступим к разборке. Откручиваем 3 крепежных гайки,

уплотнительное кольцо и пластиковую защитную крышку, выкручиваем ручку.

Плата сидит на шпеньках, аккуратно приподнимаем.

На диске видим отпечатки пальцев сборщика.

Очевидно, что для определения угла поворота используются 2 фотодатчика.

Картинка из wikipedia, показывающая как оно работает.

Данные сигналы элементарно кодируются в бинарном виде:

Зная текущее и предыдущее значения A и B можно определить направление вращения энкодера:

По теме можно почитать Efficiently Reading Quadrature With Interrupts, Ардуино головного мозга: импульсный датчик положения, Подключение Энкодера К Arduino.

Тестирование

Подключаемся к логическому анализатору.

Крутим ручку с разной скоростью.

Смотрим левое и правое вращение.

Посмотрим фронты чем есть (DSO138).

Спад несущественно растянут.

Какие могут быть проблемы у таких датчиков? Механические загрязнения, закрывающие сенсор или прорези диска. Для того и разбирал — продул внутренности и осмотрел на явные косяки.

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

Тестирование простеньким скетчем для Arduino не выявило ложных срабатываний в обратном направлении — крутим ручку в одну сторону, счетчик идет только в одну строну. Момент смены направления обрабатывался четко.

В прямом направлении на ложные двойные срабатывания тестировал, пока было терпение. Либо мне повезло с датчиком, либо мне просто терпения не хватило.

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

Данных проблем при первоначальном тестировании выявлено не было. На этом этапе пока остановимся.

Товар приобретен самостоятельно
Планирую купить +11 Добавить в избранное +50 +66
+
avatar
-23
+
avatar
  • loole
  • 15 июня 2023, 01:52
+40
Для фотодатчиков и светика нет чипа корректора старения, а это означает нормальную работу не более одного года
Так выглядит реакция на этот бред всех оптопар, от линейных энкодеров в принтерах до мышей и валкодеров в связной аппаратуре.
+
avatar
-6
+
avatar
+14
Ну год это маловато. У меня на работе (станок заточной немецкий, ручной энкодер Autonics), светодиод в оптопаре попросился на пенсию, только через 18 лет. Заменил, работает дальше.
+
avatar
  • infino
  • 15 июня 2023, 05:23
+9
Вы как то глубоко копаете, это не лазеры где быстрая деградация кристалла.
+
avatar
  • tysem
  • 15 июня 2023, 07:38
+2
А какие проблемы с механической трещоткой. Логика все равно на оптике
+
avatar
+3
Либо криво собрано (хотя криво собрать можно что угодно), либо механический износ трущихся деталей и ослабевание пружинки — хочешь повернуть ручку на такт, а его нет. Не чувствуешь щелчка и ручка не «фиксируется».
У героя обзора никаких признаков этих проблем пока нет и при применении в любительских проектах появятся, ИМХО, не скоро.
+
avatar
+5
скроллу в моей мышке недавно исполнилось 18 лет и ничего никуда не постарело. один раз прочистил диск с прорезями от грязи, и вуаля
+
avatar
  • infino
  • 15 июня 2023, 01:41
+6
Вспомнилась
Р-314
+
avatar
  • Totka
  • 15 июня 2023, 01:58
-20
+
avatar
+11
— Бобёр, выдыхай!
© Анекдот.
+
avatar
+9
ChatGPT, перелогинься!
+
avatar
0
Такие энкодеры не (только) для сейфов — устройства ввода для пк и прочих устройств, когда хочется удобную«крутилку» с тактильной отдачей.
Хотя внешне металлический сабж действительно немного напоминает сейфовый замок
+
avatar
+2
Кстати об энкодерах. На днях пристраивал самый распространенный энкодер KY-40 к ардуинке.
Был поражен тем, что ни в одной из имеющихся библиотек, ни в одном документе на энкодер не сказано, что на 1 клик он генерирует два импульса. Что делает существующие библиотеки github.com/PaulStoffregen/Encoder и
github.com/mathertel/RotaryEncoder — бесполезными чуть более чем полностью.
WTF? Почему никто этого не замечает и почему нигде в спеках этого не сказано???
Есть одна-единственная публикация, которая дает правильный код без всяких библиотек:
www.best-microcontroller-projects.com/rotary-encoder.html
+
avatar
+5
Кодом грея воспользуйтесь с делителем или без.
Проблема ардуино в том, что библиотеки пишут школьники.

Что-то типа (пишу по памяти, надо проверять):
Что-то типа:
BYTE A = 1 или 0 от энкодера с вывода A;
BYTE B = 1 или 0 от энкодера с вывода B;

BYTE state = 0;

static BYTE prev = 0;
static BYTE dir = 0;
static BYTE ticks = 0;

BYTE t = ( A << 1 ) | B; //тут не помню, может быть ( B << 1 ) | A

t = ( t >> 1 ) ^ t;

if ( prev != t ) {
	BYTE v = ( ( prev - t ) & 3 ) - 2;
	if ( v != dir ) {
		dir = v;
		ticks = 1;
	}
	else ticks++;
	
	if ( ticks >= ENC_TICKS ) {
		if ( dir == 1 ) state = ENC_ST_CW;
		else if ( dir == -1 ) state = ENC_ST_CCW;
		
		dir = 0;
	}

	prev = t;
}

#define ENC_TICKS 4 //кол-во тиков на вращение

#define ENC_ST_CW 1 //по часовой
#define ENC_ST_CCW 2 //против часовой

//в state будет куда повернули или 0

P.S. бывает и 4 импульса и тд.
+
avatar
-4
меньше снобства. Ваш код в 4 раза больше того, который необходим:
void loop() {
static uint16_t state=0,counter=0;

    delayMicroseconds(100); // Simulate doing somehing else as well.

    state=(state<<1) | digitalRead(CLK_PIN) | 0xe000;

    if (state==0xf000){
       state=0x0000;
       if(digitalRead(DATA_PIN))
         counter++;
       else
         counter--;
       Serial.println(counter);
    }
}
+
avatar
  • ploop
  • 15 июня 2023, 09:21
0
Первая же ссылка в гугле, чтобы понять что за зверь, привела к такому описанию:
При каждом щелчке устройство выдает два логических импульса, согласно которым можно определить его состояние.
duino.ru/modul-encoder.html/
+
avatar
-2
Это написано везде. Вы не понимаете как работать с энкодером.
KY40 выдает два ФИЗИЧЕСКИХ импульса разделенных по времени. Т.е. указаные 2 логических уровня меняются ДВАЖДЫ. В начала клика и в конце его. Промежуток времени достаточный чтобы попасть в два разных цикла ардуино и вызвать срабатыванием программы дважды.
Те кто пишет вот такие тексты — duino.ru/modul-encoder.html/ — просто копируют откуда-то и сами никогда с энкодером не работали.
+
avatar
  • ploop
  • 15 июня 2023, 17:39
+1
Вы не понимаете как работать с энкодером.
Вполне понимаю, работал. Даже свой обработчик на ассемблере писал.
Я может просто не понимаю, что у вас там происходит — может он тупо глючит, дребезжит контакт или что-то типа того?
+
avatar
-11
+
avatar
  • ploop
  • 15 июня 2023, 18:50
+11
А может ты пойдёшь в известном направлении, раз общаться с людьми не умеешь? Даже тупо объяснить, в чём проблема, не в состоянии.
+
avatar
  • BARS_
  • 15 июня 2023, 11:14
-2
А написать свою либу мозгов не хватило? Ох уж эти адруйняйщики…
+
avatar
0
а эту пробовали — github.com/enjoyneering/RotaryEncoder?
+
avatar
+2
В программировании не шарю, но пытался прикрутить тот же KY-40 к ESP с прошивкой Tasmota (в ней предусмотрено подключение энкодера). Только он у меня скачет как попало то вперед, то назад. Это у меня руки кривые или с энкодером что-то не так?
+
avatar
+2
это вы конденсаторы не добавили. сморите на картинке по ссылке которую давал.

пы.сы. советую почитать про дребезг контактов
+
avatar
0
никакого особого «дребезга» у него нет.
логические уровни на двух выходных контактах при каждом «щелчке» (detent) меняются дважды:
если поворачивать _очень_ медленно то отчетливо регистрируется первая смена уровней в начале «щелчка» и вторая смена уровней когда «щелчок» оканчивается.
Это не является физическим «дребезгом», это особенность конструкции и она устраняется софтверным «дебаунсером» (debounce) из одной строчки:
state=(state<<1) | digitalRead(CLK_PIN) | 0xe000;
www.best-microcontroller-projects.com/rotary-encoder.html
+
avatar
  • ploop
  • 15 июня 2023, 09:25
+10
Я всё мечтал такую штуку к какому-нибудь лабораторному блоку питания приспособить. Один оборот = ровно 10 вольт. Не надо настроек грубо/точно, клавиатур, и всякого подобного, просто большая удобная ручка с шагом 0.1В
+
avatar
  • tuz_83
  • 15 июня 2023, 10:18
+3
Помаленьку готовлюсь к очередному долгострою, когда же я его доделаю большому проекту.
Вот самое главное — про долгострой и не написали. Хотя бы в 2-х словах что это примерно будет?
Обзор подобных энкодеров на муське уже был, так что внутрянка не особо интересна. Почему спрашиваю? — Да потому, что «для ускорения» есть готовые решения уже в сборе. У меня в хозяйстве даже 3 штуки лишних валяются:


P.S. Привычка просто всегда на запас еще один брать, а с пультом к НЦ-шке вообще неувязка вышла — третий пульт достался бесплатно. Первый пульт получил, проверил, все ОК, заказал продавцу второй, а он застрял на китайской логистике больше 3х месяцев. Написал продавцу и он без вопросов… выслал мне еще один экспресс-доставкой (дошло за пару недель) и вдруг через 4 месяца(!) приходит тот самый второй. Я в шоке был, зачем он мне…
+
avatar
  • tysem
  • 15 июня 2023, 10:43
0
Красота
+
avatar
+4
Обзор подобных энкодеров на муське уже был
Да, целый второй обзор подобного товара за 7 лет. Заполонили муську обзорами энкодеров, то ли дело USB тестеры.
внутрянка не особо интересна.
И у меня энкодер на 2 линии, собранный на рассыпухе, а там — дифференциальный сигнал на отдельном драйвере.
Готовые решения не брал — потому что повторяю чужой проект.
Вы, скорее всего, угадаете эту мелодию с двух этот долгострой по 1 фото (тут не все)
+
avatar
  • tuz_83
  • 16 июня 2023, 10:30
+1
Да, целый второй обзор подобного товара за 7 лет. Заполонили муську обзорами энкодеров, то ли дело USB тестеры.
Я вовсе не хотел Вас обидеть, а просто написал про «спортивный интерес» — типа «внутрянку видел» и не более того. И дело не в 7 годах/7 днях, а в этом «интересе», на примере контроллера DDCSV1.1 на фото Выше (которого вообще на этом сайте не было) — раз / два / три и весь интерес писать обзор пропадает если нечего добавить к тому что там написано. Но разумеется это мое имхо.
А когда товар даже старый, но в сети бардак — «кто в лес, кто по дрова», инфа разрозненна, нигде более 2х-3х фраз нет я обзор делал (типа подбить в одну папку). Но это повторяю: чисто мое имхо, к Вам никак не относится.
Вы, скорее всего, угадаете эту мелодию с двух этот долгострой по 1 фото (тут не все)
Похоже, что готовитесь собирать 3D-принтер на Arduino Mega. Но принтеры не моя тема, знаком с ней только мимолетно. Помню как они начинали с самой первой платы CNC Shield v3.0, перешли на CNC Shield V4, а потом вообще «Ramps-ы попутали». Дальше не следил, не интересно было.
+
avatar
+2
не хотел Вас обидеть
Не беспокойтесь об этом, здоровая критика всегда приветствуется. У меня сейчас бег по граблям с маленьким самодельным ЧПУ фрезером (и не только). Точнее — полусамодельным, но лучше бы я или с нуля все спроектировал сам, или полностью повторил чужой проект. А LJ12A3-4-Z в свое время мне крови попил на принтере — стоит в неотапливаемом помещении, температурный дрейф зверский.
3D-принтер на Arduino Mega
Возможностей Arduino Mega нынешним принтерам мало:
Мой принтер работает на 32-битном ARM Cortex-M3 с частотой 100 МГц, а рулит всем одноплатник с гигом оперативы.

А собираю я электронную гитару для токарного станка.
+
avatar
  • Lagros
  • 16 июня 2023, 22:40
0
А собираю я электронную гитару для токарного станка.
Судя по видео не очень удачный проект.
+
avatar
0
Заменить при необходимости шилд и плату на тот же STM32 — не такая уж большая проблема, по сравнению со всей затеей. Да и все лучше, чем покупать оригинальную гитару для моего WM210.
+
avatar
  • tuz_83
  • 17 июня 2023, 12:38
0
Мой принтер работает на 32-битном ARM Cortex-M3
Понял, видел как-то михоходом подобные платы, но это было уже после того, как решил что 3D-принтер мне дома не нужен (начальство на работе решило брать EBM или SLM точно не помню, новый участок создают, а значит… доступ будет). Дома для развлекухи только 3D-фрезер, так как на токарные станки после «смены в стойле у сбруевки» на работе глаза на них смотреть не хотят. Проблем с гитарой в той весовой категории станков (от 1 до 3 тонн) вообще нет, я за последние 10 лет только 1 раз вручную шестерню переставлял на 1 деталь (а потом вернул ее на место обратно). Все остальное щелчком рукоятки. В общем нам на участке как «плохим танцорам всегда что-то мешает» ))
Танцуем Боби-Боба

P.S. но все одно (хоть мне и не нужно), то что это будет «электронная гитара» порадовали. Пусть что-то новенькое, тем более для настольного WM210 в самый раз.
А я уж грешным делом побоялся увидев на фото всего 2шт. Nema-23(76) что это очередной дровопал будет. Потом глянул вашу фразу: «на фото не все» и решил, что потом все таки всплывет 3-я ось. ну и написал про принтер. А у самого в голове мысли были: нафига там Nema-23 у которых удержание 30 кг? там что портал 20 кг будет? Хватило бы и дешевых Nema-17 с драйверами типа A4988 или DRV8825 до 2-х ампер, а с Nema-23 уже до 4-х ампер надо… Слава богу все разъяснилось))
У меня сейчас бег по граблям с маленьким самодельным ЧПУ фрезером (и не только). Точнее — полусамодельным, но лучше бы я или с нуля все спроектировал сам, или полностью повторил чужой проект.
Будете у нас на Колыме в СПБ свистите в ЛС, поможем чем сможем.
+
avatar
0
очередной дровопал будет.
Вы меня недооцениваете. Или переоцениваете. Все детали для лазерного станка уже напечатаны/куплены. Проект 100% свой, так что — костыли и велосипеды. Но интересно.
Будете у нас на Колыме в СПБ свистите в ЛС, поможем чем сможем.
Спасибо, но — далековато.
+
avatar
+1
И вот теперь сиди и думай — куда бы это приспособить…
+
avatar
+1
Если сходу не приходит мысль «куда», значит вам оно не надо))
Я не к тому что вы не электронщик там или что-то такое, я к тому что мы часто покупаем то что круто и интересно и пригодилось бы, а потом годами валяется в ящике =)
+
avatar
+2
я вот в точности из таких — иногда покупаю то что потом годами валяется в ящике.
И вот со временем я обнаружил — это нормально. Потому что раз за разом наблюдал как то что «годами валяется в ящике» во всех смыслах — вдруг оказывается очень кстати и «играет» свою может быть единственную роль, которую оно ждало годами. Это может быть вещь, это может быть идея, это может быть проект собраный и задвинутый в ящик… и это может быть даже детское увлечение короткое, к которому потом десятилетия спустя возвращаешься… или пытаешься вернуться и проклинаешь себя за то что тогда в прошлом не делал записей или выбросил ту поделку.
Так что мальчики и девочки, совет старого и злопамятного — что-то сделали в молодости — не поленитесь, запишите, опишите, зарисуйте, сфотографируйте, не выбрасывайте и положите в долгий, долгий ящик. Как Шелдон со своей «камерой хранения». Шелдон плохого не сделает.