» » Преобразователь сигналов для механического энкодера

 
 
 
10

Преобразователь сигналов для механического энкодера

Разместил dedmazay 16 апреля 2010. Просмотров: 24 095

При использовании механического энкодера в своих разработках возникают некоторые проблемы, так как надо регулярно опрашивать два входа и определять разницу во времени прихода сигналов, плюс подавление дребезга контатов. В результате такое удобное средство ввода, мало используется в радиолюбительской практике.
Собрав небольшую схемку на PIC12C508A или PIC12C509A или любом другом микроконтроллере (исходный текст программы прилагается) и одном конденсаторе можно сильно облегчить использование энкодера в своей конструкции. Устройство формирует на выходе два сигнала, один тактовый соответствующий приходу пары импульсов от энкодера и второй направления, который устанавливается в 0 или 1 в зависимости от того с какого входа сигнал пришёл раньше.
Данное устройство можно использовать не только в конструкциях содержащих микроконтроллер, им также можно легко управлять реверсным счётчиком.
Ломая очередной раз голову, как подключить механический декодер к микроконтроллеру, наконец-то, дозрела мысль вынести схему формирования управляющих сигналов, очищенных от дребезга, в отдельную схему. Выходные сигналы решил формировать два, один тактовый (сигнал направления устанавливается за 100мкс до переднего фронта тактового импульса, другой направления. Решил использовать оставшиеся со старых времён PIC12C508A, впрочем программу на си можно переделать под любой имеющийся контроллер. Чтобы сделать устройство более универсальным, сделал время подавления дребезга и длительность формируемого импульса переменной, в зависимости от наличия перемычек на землю на входах S0 и S1. Для удобства длительность формируемого импульса и время подавления дребезга приравнял.
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.

Зависимость длительности формируемого тактового импульса и длительности подавления дребезга контактов от перемычек S0 и S1:
S0-свободен,S1-свободен, длительность формируемого импульса и время подавления дребезга = 2мс;
S0-замкнут на землю,S1-свободен, длительность - 4мс;
S0-свободен,S1-замкнут на землю, длительность - 8мс;
S0-замкнут на землю,S1-замкнут на землю, длительность - 16мс;

Назначение выводов микроконтроллера
2 - GP5 Выход, сигнал направления, при вращении в одну сторону равен 0, в другую 1.
3 - GP4 Выход, тактовый сигнала.
4 - GP3 Вход S1 - задаёт длительность формируемого импульса и время подавления дребезга.
5 - GP2 Вход S0 - задаёт длительность формируемого импульса и время подавления дребезга.
6 - GP1 К этому выводу подсоединяется один из сигнальных выходов механического энкодера.
7 - GP0 К этому выводу подсоединяется другой сигнальный выход механического энкодера.

В настройке не нуждается, при исправных деталях и безошибочном монтаже начинает работать сразу.
Данное устройство можно подключить как к микроконтроллеру, причем программа получается очень простой. Можно сделать опрос тактового сигнала раз в 1мс и при его наличие считывание сигнала направления, или сделать обработку прерывания, им также можно легко управлять реверсным счётчиком.
Программа разработана в среде CCS 4.104

Исходники и HEX файлы для 12C508A и 12C509A
encoder.zip | Файл 93,02 Kb загружен 184 раз.
Алексей Ермаков (dedmazay)
Нижний Новгород
Профиль dedmazay
С паяльником с 5 класса.
Спаял много, две конструкции опубликованы в журнале Радио:
прибор IR-master для анализа сигналов пультов ИК диапазона
опубликован в Радио №8 за 2008 год и экономичный таймер №5 за 2004 год.
Пришёл пообщаться.
 

Понравилось? Палец вверх!

  • всего лайков: 16

22 сентября 2014 изменил Datagor. Исправлена схема, обновлена прошивка

Поделись с друзьями!

Связанные материалы:


Схема на Датагоре. Новая статья Стрелочный частотомер 5 Гц – 30 мГц на микроконтроллере PIC16F628A... Этот частотомер не требует цифрового индикатора и, из-за отсутствии динамической индикации, намного...
Схема на Датагоре. Новая статья Регулятор мощности на полевых транзисторах с ШИ-управлением + устройство для питания 110-вольтовой аппаратуры от 220 Вольт... Привет всем датагорцам и гостям Датагории! Предлагаю схемку простого в изготовлении и наладке...
Схема на Датагоре. Новая статья Универсальная "прозвонка" на замыкание и размыкание с памятью, звуковой и световой сигнализацией... Известно, что радиотехника – наука о контактах. Неисправность – это наличие контакта там, где его...
Схема на Датагоре. Новая статья Сделай сам преобразователь сигналов для механического энкодера, v.2... Хотелось бы дополнить и продолжить мою статью про энкодер «Преобразователь сигналов...
Схема на Датагоре. Новая статья Определитель насыщения сердечников из феррита или как сделать дроссель для импульсного источника питания... «Делай с нами, делай как мы, делай лучше нас!» Предлагаю вашему вниманию простой прибор, который...
Схема на Датагоре. Новая статья Автомобильный бестрансформаторный DC/AC конвертор: получаем 50Гц в автомобиле... Несмотря на огромный арсенал всевозможных аналогов бытовых устройств, предназначенных для работы от...
Схема на Датагоре. Новая статья Портативный анализатор ИК сигналов «IR-master»... Каждый радиолюбитель сталкивающийся с применением в своих конструкциях дистанционных пультов...
Схема на Датагоре. Новая статья Таймер "Незабудка" - устройство предупреждения и отключения... Человеку свойственна забывчивость. И с этим ничего нельзя сделать – в силу каких-либо причин любой...
Схема на Датагоре. Новая статья Минисумо робот... И опять роботы... На этот раз Я расскажу, как сделать простой робот для соревнований по мини сумо....
Схема на Датагоре. Новая статья Что есть валкодер...... Приветик! Ща я вам как расскажу, как устроен валкодер. Да проще некуда. В самом простом...
Схема на Датагоре. Новая статья VB-Audio Generator 2. Генератор ЗЧ... Генератор ЗЧ. Работает сам по себе. Много настроек. Позволяет на слух проверить возможности аудио...
Схема на Датагоре. Новая статья Автомобильный преобразователь DC/DC TL594 для усилителя, 12V -> ± 32V... Решил собрать ради «спортивного» интереса преобразователь 12V -> ± 32V который предназначен для...
<
  • Главный редактор
16 апреля 2010 13:22

Игорь Петрович Котов / Datagor

Цитата
  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 648 комментариев
  • 261 публикация
 
  • 0
Алексей, добрый день!
С почином, статья получилась полезная и без воды.
Ждем новых публикаций.

<
  • Гражданин
16 апреля 2010 23:35

Алексей Ермаков / dedmazay

Цитата
  • С нами с 8.10.2009
  • Ушёл в реал Пользователь offline
  • 17 комментариев
  • 5 публикаций
 
  • 0
Спасибо на добром слове.
Кстати глянул в архивный файл к статье, в файле "Encoder.c" компилятор автомитически проставил полный путь к файлу "Encoder.h":
#include "F:\1_work\my_project\Magnit\HDD_driver\Encoder\Encoder.h"
Соответственно если кто захочет пересобрать файл под другой контроллер вместо этой строчки надо написать:
#include "Encoder.h"
В самом файле Encoder.h
вместо:
#include <12C508A.h>
Вставить:
#include <используемый контроллер.h>
Используемые фузы тоже должны соответствовать контроллеру
#FUSES WDT //WDT включен
#FUSES INTRC //Используется внутренний RC генератор
#FUSES NOPROTECT //Нет защиты кода ПЗУ
#FUSES NOMCLR //Вывод сброса используется как ввод вывод
#FUSES RESERVED //
У более современных контроллеров могут быть дополнительные фузы, к ним никаких особых требований нет. Всю защиту ЕЕPROM и FLASH лучше отключить.

Частота внутреннего RC генератора у PIC12C508A и PIC12C509A равна 4МГц, если у используемого контроллера она другая для корректной работы задержек в эту строчку нужно вписать соответствующее значение.
#use delay(clock=4000000,RESTART_WDT)
#use fast_io(B)
Здесь идет определение какому выводу соответствует какой сигнал, менять надо с осторожностью, корректируя сразу в файле "Encoder.c" строчку: set_tris_b(0x0F);
Чтобы вывод микроконтроллера используемый как вход или выход был соответственно сконфигурирован.
#define E0 PIN_B0
#define E1 PIN_B1
#define clk PIN_B4
#define direction PIN_B5
#define S0 PIN_B2
#define S1 PIN_B3



<
  • Кандидат
17 апреля 2010 02:27

Игорь / Igr44

Цитата
  • С нами с 6.11.2008
  • Ушёл в реал Пользователь offline
  • 16 комментариев
  • 0 публикаций
 
  • 0
Все вроде правильно, но где пуш кнопка энкодера? Почему бы ее сразу не обрабатывать и на выходе выдавать защелкой или импульсом заданной длительности.

<
  • Гражданин
17 апреля 2010 14:44

Алексей Ермаков / dedmazay

Цитата
  • С нами с 8.10.2009
  • Ушёл в реал Пользователь offline
  • 17 комментариев
  • 5 публикаций
 
  • 0
Обычно в конструкции помимо кнопки "ПУШ" от энкодера есть ещё кнопки. И я не видел смысла встраивать в программу основного контроллера две разные процедуры обработки этих кнопок, одна для кнопки от энкодера, вторая для "простых смертных" кнопок.

Переписал последние три строчки программы:
if((EM0!=1)||(EM1!=1)){EC=0;continue;}
if(EC==0) {EMM0=EM0;EMM1=EM1;EC=1;delay_ms( time_delay );continue;}
else{EC=0;if((EM0==EMM0)&&(EM1==EMM1))break;else continue;}}}}
Теперь они выглядят так:
if((EM0!=1)||(EM1!=1)){EC=0;continue;}
if(EC==0) {EC=1;delay_ms( time_delay );continue;}
else break;}}}
Улучшилась обработка коротких импульсов, устранена возможность ложных срабатываний на заднем фронте входных импульсов.
Новые исходники и HEX файлы отправил.

---------------------------------------------------------------------------
После долгого вглядывания в осциллограф и измывательст над энкодером, пришел к выводу что чтобы отслеживать быстрое вращение нужно установить время подавления дребезга равной 1мс. Соответственной, изменил в программе устанавливаемые перемычками задержки:
S0-свободен,S1-свободен, длительность формируемого импульса и время подавления дребезга = 1мс;
S0-замкнут на землю,S1-свободен, длительность - 2мс;
S0-свободен,S1-замкнут на землю, длительность - 4мс;
S0-замкнут на землю,S1-замкнут на землю, длительность - 8мс;
Попутно обнаружил, что у входа GP2 не работает внутренний подтягивающий резистор, поэтому Вывод 5 микроконтреллера, если он не соединён с землёй необходимо через резистор 10к соединить с напряжением питания.

<
  • Прохожий
18 апреля 2010 05:20

/ bidavova

Цитата
  • С нами с --
  • 0 комментариев
  • 0 публикаций
 
  • 0
здравствуйте, меня интереасует такой вопрос - можна ли заменить енкодер обычными кнопками ?

<
  • Гражданин
18 апреля 2010 09:19

Алексей Ермаков / dedmazay

Цитата
  • С нами с 8.10.2009
  • Ушёл в реал Пользователь offline
  • 17 комментариев
  • 5 публикаций
 
  • 0
Простой вопрос, а ставит меня в тупик wink
Может лучше опишите что вы хотите получить в конечном счёте, тогда я смогу что то посоветовать.

<
  • Главный редактор
18 апреля 2010 20:19

Игорь Петрович Котов / Datagor

Цитата
  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 648 комментариев
  • 261 публикация
 
  • 0
bidavova,
с такими вопросами - на форум!
Какое отношение Ваш вопрос имеет к данной статье?

Исправлена схема, обновлен архив с файлами.

<
  • Кандидат
20 апреля 2010 18:25

Дмитрий / Supercontick

Цитата
  • С нами с 27.03.2010
  • Ушёл в реал Пользователь offline
  • 22 комментария
  • 0 публикаций
 
  • 0
классная статья-у меня как рас есть типа энкодера с "мышки", вот только поставил на звуковой регулятор для контроллера , а он не хочет нормально регулировать параметры!
А с этой схемкой на ура!!!!

Респект! wink

<
  • Гражданин
24 апреля 2010 01:55

Алексей Ермаков / dedmazay

Цитата
  • С нами с 8.10.2009
  • Ушёл в реал Пользователь offline
  • 17 комментариев
  • 5 публикаций
 
  • 0
В описании к устройству указаны старые тайминги (на схеме они правильные). В новой прошивке:
S0-свободен,S1-свободен, длительность 1мс;
S0-замкнут на землю,S1-свободен, длительность - 2мс;
S0-свободен,S1-замкнут на землю, длительность - 4мс;
S0-замкнут на землю,S1-замкнут на землю, длительность - 8мс;

<
  • Гражданин
27 апреля 2010 15:28

Андрей / Дракон

Цитата
  • С нами с 7.03.2009
  • Ушёл в реал Пользователь offline
  • 7 комментариев
  • 1 публикация
 
  • 0
To dedmazay
Спасибо за статью - многим будет полезен вот такой небольшой узел обработки энкодера в своих конструкциях.

To bidavova
По поводу
Цитата: bidavova
можна ли заменить енкодер обычными кнопками ?

на сайте была моя статья (не сочтите за рекламу) //datagor.ru/practice/diy-tech/1070-gibridnyjj-reguljator.html
Если проект действительно вынуждает использовать что-то с большими возможностями, чем энкодер, вышеуказанный переключатель может стать одним из возможных вариантов. В противном случае не вижу смысла "городить огород" - гораздо проще будет использовать энкодер. Или же банально разместить кнопки фигурно, в виде джойстика, например.

Добавление комментария


Налетай! Паяльники, станции, жала с доставкой
  • smilelolbyewinkyahoocoollaughing
    crazybadcryingsadirefulsickstraight
    ballooncakegooddrinksmailbombsun
    nightrainstarscolddashguitar-manhandshake
    musicnegativenopardonshoksleepunknown
    wackoyawnblushbullyhashsmokingwhew
Скопируйте текст вашего комментария на случай неверного ответа на контрольный вопрос.