Энкодер из переменного резистора

Есть такая прикольная штука как квадратурный энкодер. Выглядит как переменный резистор, но на выходе у него два прямоугольных сигнала, сдвинутых относительно друг друга.

По характеру сдвига можно легко судить о направлении вращения. Различаются также количеством импульсов на оборот. Применяется много где, например для определения скорости, направления и угла вращения в контурах управления скоростью/положением двигателей. В бытовой технике его любят совать в разные музыкальные центры. Помните регуляторы громкости без конечного положения? То есть ты просто крутишь его в нужную сторону, а как дойдешь до предела значений то хоть закрутись — громкость не сдвинется с места. Вот — там стоит энкодер.
Все круто, но в продаже я их не видел. А те что видел стоили каких то нереальных денег. По крайней мере платить под 300 рублей за какую то крутилку мне было глубоко западло. И в то же время хотелось иметь такую беспредельную крутилку…

И тут я подумал, а если расковырять обычный переменный резистор, да выдрать там все, что задает ему границы. Нука…

Взял вот такой же резистор, красная цена которому 12рублей.

Отогнул металлические лапки, снял стальную морду, аккуратно вытащил все потроха и вижу следующую картину, зырь на фотки… эмм… черт, фоток не будет — фотик уехал в санаторий. Ладно, хрен с ним, нарисую по быстрому в 3D.

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

Цепляю к осциллографу, в режиме обычного потенциометра — крайние выводы на +5 и на GND, а средний на осцил. И начинаю крутить:

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

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

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

80 thoughts on “Энкодер из переменного резистора”

    1. Круто. А я в каталоге то видел, но как не спрошу в ПЭ — нету. Надо бы Элемент на эту тему потрясти.

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

    1. Конструктивно он там неудачно устроен. Попробуй выдрать его из мыши и закрепить где нибудь у себя на плате. Замаешься делать все эти упоры для вала и прочее.

    2. «Все мышиные оптосенсоры также имеют квадратурные выходы.»
      Хрен там. Это только у старых, и то не у всех. Мне ни разу не попалась. Сколько я их разбирал (на работе десятками выбрасывали) — везде только шина I2C, а это уже не так просто…

  2. Задумка прикольная, но на сколько я знаю энкодэры ставят в цифровые схемки куда нельза поставить переменник ( либо отсутствует ацп либо ндо крутить его на 360градусов ,либо крутилка должна иметь больший ресурс )
    По идее это так и остается переменником .
    Единственное что смущает в этой конструкции так это то что если по крутить этот «энкодер» примерно на 30% (не важно на сколько но не на полый оборот ) то «импульса» не будет а будет только повишение или понижение потенциала на ацп . Я клоню к тому что как энкодэр эта конструкция выдает только один импульс\оборот и для измерения УГЛА поворота придется еще мерить напряжение на ацп ( тоесть поделить полный оборот на кучу положений но уже програмно ( кстати , как это приавильней сделать?).
    Задумка прикольная , но помоему от энкодера у нее только то что нет ограничение угла поворота, ну и один импульс на оборот.

    ( простите за критику , но я хоть и новичек в цифре , но имею право высказаться )

    1. Я такие резисторы ставил на выход приводов стеклоподъемников — обороты там не большие и несколько на весь ход стекла. Тоже тогда пришлость посикать как АЦП в AVR запрограммировать, наткнулся на толковое объяснение на http://pid.by.ru/z11.htm помучался всего денек и сделал. Работают с 2007 года хорошо. Поищу у себя исходнички, если найду то выложу.

    2. Без АЦП можно обойтись тут, если сделать колхозный АЦП на ШИМ+компаратор либо на емкостной цепочке. Точность, конечно, не 10 бит АЦП, но для таких целей хватит.

      Импульс тут не важен — важно приращение напряжения на выходе в ту или другую сторону, поэтому можно отследить даже 1 градус поворота. Да, потребуется АЦП(или иная конструкция замеряющая напряжение).

      » тоесть поделить полный оборот на кучу положений но уже програмно ( кстати , как это приавильней сделать?» Эм… а разве не ясно написано? Делаем два замера напряжения, сравниваем их (А-Б =?). В зависимости от угла и направления поворота зависит величина и знак.

      Единственно что все портит малину — низкий ресурс переменного резистора. Это да, от этого никуда не деться. Но на безрыбье, как говорится…

      1. Ну низкий ресурс это относительно. Вы ж писали что на мотор его ставить не надо. Скорей на отслеживание положения каких то деталей.

        Кстати шум можно не фильтровать вообще ! он может помочь увеличить виртуально разрядность АЦП за счет оверсемплинга — т.е. устреднения множествоа измерений АЦП.

  3. К мышам +1. Добавлю только, что мне встречались и мыши с механическим энкодером, без всяких там оптопар. Одна вот в столе валяется, тоже думал приспособить его куда :)

  4. «Шорох» контакта можно подавить простым RC фильтром. От «энкодера» резистор на вход АЦП а вход АЦП зашунтировать конденсатором на аналоговую землю.

    1. Проще программно это сделать. Что такое по сути дела этот «Шорох» — резкое изменение напряжения. Игнорировать слишком большие приращения и все будет путем.

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

    1. Я выше написал — у меня в автомобиле работает уже давно. А езжу я почти каждый день.

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

      Его ребристая крутилка позволяет легко соединять его с разными валами куском резинового шланга. Причем можно без хомутов.

      Отличная резинка-муфта это кусочек вакуумного белого шланга от ВАЗ который идет к вакуум-корректору или на инжекторах на регулятор давления топлива.

      1. Плавность вращения там от того, что внутри он забит какой то вязкой смазкой увеличивающей трение. Я вот пополоскал плату с двумя такими резюками в УЗ ванне — смазку смыло :( Теперь плавность на уровне обычного совкового резюка.

  6. а скролинг из мышки не подойдет ? , у тех что у меня один вал колесика весит в воздухе над кнопкой, а другой воткнут в что то похожее на подстроечный резистор вертикально стоящий, и три выхода : )

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

      1. Не во всех мышах оптический энкодер, собранный из кучи отдельных деталек. В описанной RDX — полностью готовый энкодер, только у него под крутилку не ось, а шестигранная дырка. Т.е. нужна только соответствующая ручка к нему.
        P.S. Дерьмоват честно говоря энкодер, давно думаю, как к своей мыши прикрутить нормальный оптический вместо этой хрени.

          1. Ежли кто читал раздел «Я сделал» местного форума, то там описано… А, для тех кто не читал, то вот
            В том числе, как пробовал именно механический датчик с шестигранной дыркой, а потом переехал на оптику, опять же из мыша. И софтом разрулил дребезг — после однократного срабатывания энкодер становится нечувствительным на энное время. Как недостаток этого подхода, хочу отметить невозможность вращать энкодер с большой скоростью.
            А вообще видел бомбовские энкодеры из шаговых моторчиков от дисковода.

    2. В общем то я имел ввиду оптические мыши (с красьненьким таким светодиодом)
      Оптодатчик например AH2000. Все в интегральном исполнении. Всего 4 выхода AX BX AY BY.
      Вот вам и квадратура на два направления

      1. Ну так к ней то прилагается еще диск с прорезями который в устройстве надо еще как то закрепить красиво и надежно, ручку приделать. Возни вагон.

  7. А можно расковырять советский резистор и заместо резистивной полоски вклеить туда печатную платку с контактами…

  8. Кстати промышленные датчики угла имеют такой-же квадратурный выход. Правда при разрешении 360 тыщ периодов на оборот и скорости около 3 оборотов в секунду — задача чтения угла резко усложняется… Если кому интересно — покажу кусок блок-схемы ПЛИС для этой задачи. Сам когда-то маялся…

  9. Вижу серьёзный недостаток такого АЦП-шного энкодера. Его придётся постоянно програмно опрашивать (ну в смысле постоянно читать АЦП и обрабатывать). Если ещё помножить это на програмную фильтрацию дребезга… — нафиг надо :-)
    А нормальные, с импульсами на выходе прицепил одним проводом на INT — и радуемся.

    Да и ещё, при всём конструктивном неудобстве мышиных датчиков, всё же они на порядок лучше любых механических.
    Я в своём БП завёл их тупо на микроконтроллер без всяких дополнительных формирователей (некоторые ставят триггеры шмидта и т.п.) и програмных фильтров. Работает чётко и стабильно. После попыток применения механических и на базе ШД — просто чудо.

  10. Это плата не для энкодера а просто пример переменника. А плата это наверно ШИМ регулятор на таймере 555.

        1. У меня А4 Х7. Раньше они оптику ставили :( А в этой хороший сенсор и кнопки, но косой скролл и довольно поганый корпус :(
          Ну и я имею в виду скроллы в виде готовых энкодеров. Оптические скроллы в мышах сколько видел собраны из рассыпухи.

  11. К сожалению, в большинстве переменных резисторов дорожка имеет разрыв между концами, или заклепки на концах, или всякие неровности, препятствующие нормальному круговому вращению, даже если убрать упор. Как минимум, щетка быстро сдохнет или сломается, или начнет драть дорожку… (по крайней мере, в тех резисторах, что мне доводилось вскрывать).
    А сама идея, конечно, недурна… Вот только постоянный опрос… Кстати, имеет смысл дополнить микроконтроллером PIC10F222T-I/OT, что я прикупил недавно на всяк случай.
    Корпус SOT 23 (6 ног), питание 1,8-5,5в, точный программируемый генератор до 8МГц, потребление при 8 МГц и 5v 0,5мА, 1 вход — сброс или входной порт (задается программно), 3 порта ввода — вывода, 2 канала АЦП 8бит, таймер с предделителем, 512слов память программ, 32 регистра (озу)… Совместно с таким доработанным резистором может получиться функционально законченный энкодер, хоть с квадратурным выходом, хоть 1WIRE или SPI, и с запросом прерывания при изменения положения… Стоит подумать.
    Я как раз прикидываю, куда эти клопы (PIC10F) могут пригодиться. Есть еще варианты — счетчик кулонов или ампер-часов для зарядного устройства, контроллер заряда по напряжению… Всеж 2 АЦП… Хотя туда и PIC12F675 неплохо подойдут, у них 4 10бит АЦП и нутро побогаче, и 6 портов на 8 ног. И тоже есть у меня.

    1. > К сожалению, в большинстве переменных резисторов дорожка имеет разрыв между концами, или заклепки на концах, или всякие неровности

      В этих, что на фото вверху, никаких заклёпок, всё гладко. Ну разрыв естественно есть. Кстати, по-хорошему надо вывод движка подтянуть обязательно хоть к плюсу, хоть к земле, — чтобы в момент прохождения разрыва не было «мусора». Да и есть маленькая вероятность остановки вращения именно в разрыве.

  12. что то сегодня мне в инете сплошная идиотия попадается :)
    не исключено, что причина во мне самом :)
    но…

    DI HALT, тебе не кажется, что это ну совсем уже радиолюбительство ?
    цена доступных энкодеров потихоньку приближается к цене среднего переменника.
    ну ладно бы если энкодер из шаговика (http://ru3ga.qrz.ru/UZLY/encod.htm)
    но из переменника ! с шагом в один оборот !
    это уже совсем коммунизм, ты уж извини …

    совсем что то журнал твой закисает.

    1. А что делать? Где то там они есть, а тут их нет.

      Кроме того, с чего ты взял что тут шаг в один оборот????? Тут шага вообще нет как такового, тут приращение ЛИНЕЙНОЕ. Так что шагов тут столько сколько тебе позволит твоя АЦП и качество графитовой дорожки резистора.

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

      1. в чём смысл вообще разбирать переменник, что бы дальше оцифровывать его сопротивление ?

        лучше ничего не пишите. чем такой явный маразм.

          1. что то не понятно, а что такого страшного в этих крайних положениях ?
            многооборотистый переменник возмите.

            всё равно описывать подобное радиолюбительство отдельной статьёй — не солидно.

            мда, а начало на сайте было многообещающее.
            а получилось ещё одно гавно с целью срубить аплодисментов.

            1. Разница с переменным резистором в том, что тут мы отслеживаем не сопротивление, оно тут лишь как средство измерения.
              Мы отслеживаем СКОРОСТЬ и НАПРАВЛЕНИЕ поворота. С многооборотным резистором это не прокатит, т.к. рано или поздно он упрется.

              Те же крутилки с зависимостью от ускорения, как в осциллографах цифровых — крутишь медленно — можешь хоть милливольты выставить. Но если надо много накрутить, то крутанул резко выставил на десятки вольт. Конечно, тут нужна цифровая обработка.

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

                1. Потому что, бля, его в пределах 1000км хер где найдешь тут. А под заказ тащить это +700р к его стоимости. Нахер такое счастье, я лучше из резистора сделаю.

                    1. Неа :( С бернсом переписывался черти сколько, но они захотели выслать только за мой счет. Нах такие сэмплы.

                    2. ну, обьяснять, почему так стало практически со всеми сэмплами в РСФСР, не надо. ага ? :)
                      сами себе могилу вырыли халявой. колхозьте теперь энкодеры из подстроечника.

                    3. Почему сразу могилу то?
                      Если мне под производство надо будет несколько сотен то без проблем закажу и куплю, цена доставки там не роляет уже.

                      А то что штучная халява кончилась так то пофиг. Она что была, что не было ее, так, побаловаться.

                      С твоих слов выходит чтобы брать халяву надо не брать халяву. Опять же, где логика то?

                    4. логика в том, что за разбазаривание рыбных мест рыбаки-песдоболы быстро друзей лишаются. и рыбы.

                      халявы лишаются все, потому что кое-кто не может держать язык за зубами, и хочет пропиариться.
                      DI HALT, пропиарился, срубил аплодисментов ? — примите, распишитесь :)

                    5. Халява это как общее благо. Мне не жалко. Во вторых, на каждом уважающем себя форуме есть раздел с халявой. Так что я не оригинален. В третьих не будь таких же вот «рыбаков-пиздоболов», как ты выразился, я бы так и не узнал о сэмплах и остался бы сисадмином. (именно резкое появление прикольных сэмплов несколько лет назад подвигло меня на эксперименты и вернуло в заброшенную казалось уже на всегда радиоэлектронику)

                      А то что халява кончается — да и фиг с ней! На то она и халява чтобы не жалеть о ее кончине.

                      З.Ы.
                      Возникла тут мысль — а попробую как я повыбивать халяву официально — в качестве материала для сайта ;)

                    6. Бернс, кстати, халяву никогда так просто не давал. Еще года три назад Миша у них чуть ли не с боями выбил два энкодера. Переписывался почти две недели.

                      З.Ы.
                      СТ, говорят опять раздает от широкой души. Интерсил как слал так и шлет, аналог шлет без проблем. Максим туда же. Шоу продолжается, правда мне уже особо от них ничего не надо — закрома полны. Не логику же заказывать в конце концов. Единственно кто сильно гадит в озеро — так это наша ебучая таможня. Вечно они пытаются на бабло развести.

    3. Вот пришёл NESTANDART и всё опошлил. Идея Г.., сами колхозники и т.д.
      Ну так же неинтересно. Давай аргументы, почему Г..? Так просто обозвать ума много не надо. Ксати, я вижу, поначалу-то NESTANDART и в суть идеи не въехал совершенно (а может и до сих пор не вьехал??).
      Я вот незнаю, где Вы, NESTANDART живёте, может у Вас там за 100руб можно купить путёвый оптический или магнитный энкодер.. А в нашем, извините, колхозе и простой резистор-то фик найдёшь. Так-что приходится изворачиваться.

      Вдогонку. И вообще любой механический энкодер в пределах 100-300руб — такое же Г…
      Наглядный пример: МиниДисковые плейеры (Sony, например) — этот сраный энкодер работает максимум пол-года, потом начинает глючить не по детски, пользоваться невозможно.
      Ещё пример: AV-рессивер ROTEL (модель не помню к сожалению), заметьте — бренд не самый стрёмный, а механический энкодер прожил несколько месяцев всего..

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

      1. т.е. колхозный энкодер на переменнике проживёт дольше, чем энкодеры в фирменных девайсах ?

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

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

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

        1. > т.е. колхозный энкодер на переменнике проживёт дольше, чем энкодеры в фирменных девайсах ?

          Вполне возможно! (смотря какой фирменный)

          > в суть идеи въезжать и не собирался.
          ?? Странный подход. Типа «я не понял, как оно работает, и понимать не хочу, но всё равно это фигня. Почему фигня, я правда не знаю, но всё равно фигня.»

          >есть куча фирм и частников, кто рассылает из крупных городов по всей россии
          Мдя.. «Страшно далеки Вы от народа»…

          Вот лучше бы реальные недостатки привёл, чем эти высокохудожественные сравнения про топоры и отвёртки. А, ну да, в суть-то неохота вьезжать…

          Кстати, а если приспичит, и не будет под рукой отвёртки на N км вокруг, не грех и топором шуруп завернуть.

          ps:
          Ваш подход по-моему совершенно справедлив, но только как спеца, для которого это РАБОТА. Понятно, что в случае проектирования серийного изделия закладываться на нестандартную сомнительную самоделку это нонсенс.
          Но здесь же вроде и любители обитают. И почему бы не рассмотреть нестандартную идею. Забраковать или одобрить. Но хотя бы аргументированно, а ещё лучше практически попробовав.

          1. > YurkaM июля 26, 2009 at 12:24 > И почему бы не рассмотреть нестандартную идею. Забраковать или одобрить. Но хотя бы аргументированно, а ещё лучше практически попробовав.

            Темболее выше я написал что работает уже с 2007 года в автомобиле на стеклоподъемниках.

  13. DI, там где картинка с замерами есть нереальное место :-)
    После замер Г, потом площадка =0 и потом скачок через промежуток на уровень 50%. Вот этот скачок может быть только от мин. до макс. но не как не до половины. Можно было «крутим вправо» сделать до половины, потом неподвижно и т.д. дальше.

    1. Ну… эт смотря с какой сторостью крутить… НО в целом да, чтобы так сделать надо постараться :) Ладно, потом перерисую :)

    1. Оптический квадратурный энкодер, такой, как описано в статье. Юзается как обычно, выходы оптодатчиков можно напрямую вешать на GPIO. Вот только он сделан из рассыпухи (держатели осей на корпусе, диски с прорезями отдельно, светодиоды и фототранзисторы на плате тоже отдельно). Чтобы применить у себя, потребуется очень много механической работы, по сути энкодер придется делать практически полностью.

  14. Не будит ли статьи по программной обработка валкодера.Колдую с ним уже который день
    испытал уже кучу аклго. но желаемого результата не получил.Может пример какой на ассемблере есть?

  15. А если многооборотность не нужна? Вот у меня возникла потребность в многоканальном регуляторе громкости для УНЧ. Возможно ли допустим использовать АЦП для считывания положения одинарного резистора и на основании этих данных управлять допустим темброблоком или просто цифровым потенциометром

  16. кольцевой магнит на валу и 2 геркона — самый дешёвый валкодер!
    …можно и холла датчики, но уже дороже будет

Добавить комментарий

Ваш e-mail не будет опубликован.

Перед отправкой формы:
Human test by Not Captcha