опрос lpt, подключение энкодера
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
Такая беда: подлючил к порту status lpt два сигнала от энкодера (датчик угловых перемещений). Сигналы сдвинуты по отношению друг к другу на 90 градусов. По сдвигу определяется напровление вращения. Для опроса использую (delphi) inpout32.dll запускаю в потоке с большим приоритетом цикл который смотрит было ли изменение в порту, если было то определяет куда ведется вращение и изменяет переменную. Все работает но только на малых оборотахпри увеличении скорости пропускает (не успевает считывать) импульсы. Энкодер на 250 имп/оборот но при скорости 1 об/сек уже выдает ошибку. Читал что lpt может работать1-2 мбита тогда для него этот энкодер раз плюнуть. Что я не так делаю, подскажите новичку. Все пинают на контроллер но я даже не знаю с чего начать, мне кажется там все сложно. Если выхода с lpt нет может кто подскажет ссылку где на пальцах и примерах можно спаять контроллер. Зараннее Вам благодарен за помощь!
Последний раз редактировалось seregka74 Сб окт 20, 2012 23:49:26, всего редактировалось 2 раза.
- Реклама
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Можете поискать конструкции с энкодерами на этом ресурсе. http://bascomavr.3bb.ru/
Там найдете схемы подключения энкодера к контроллеру и прошивки. Так же найдете примеры подключения контроллера к USB порту и работа с ним со стороны компа.
Там найдете схемы подключения энкодера к контроллеру и прошивки. Так же найдете примеры подключения контроллера к USB порту и работа с ним со стороны компа.
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
Что то не нашел простенького ни чего, может плохо искал. Я тут подумал а если подключить мой энкодер к мыши usb, ведь по сути готовый контроллер с драйверами и с опросом вроде в delphi проблем не будет.
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
Все бы ни чего но я не знаю даже с какой стороны подходить к контроллеру и как его програмировать. Имею лишь небольшой опыт в delphi
- Реклама
Мегабиты через LPT получаются только при работе в режиме EPP или ECP когда идут потоковые данные. Полностью оккупировать лпт порт можно не позже чем в Win98 с соответствующим подвисанием системы. В идеале вообще поставить DOS а под него turbo pascal если с дельфи дружите. Более поздние виндоусы на основе NT предоставляют доступ к порту когда им захочется.
Вообще если эта затея с энкодером не ради того чтобы покрутить громкость музыки, а для каких то научных или измерительных целей, то с мышью связываться не стоит. Граблей там тоже хватает. Остается девайс на контроллере.
Вообще если эта затея с энкодером не ради того чтобы покрутить громкость музыки, а для каких то научных или измерительных целей, то с мышью связываться не стоит. Граблей там тоже хватает. Остается девайс на контроллере.
Еще мысль такая появилась. Если с программированием контроллеров совсем плохо то можно к лпт порту схемку на логике прикрутить.
Интерфейс квадратурного энкодера - это вентиль Исключающее ИЛИ (XOR по буржуйски), с него мы получим сигнал направления вращения. А стробирующие импульсы можно взять с самого энкодера. Далее эти сигналы заводим на реверсивный счетчик. Счетчики обычно 4-битные но их можно каскадировать, например на 8 бит. Далее эти самые 8 бит можно считать лпт портом в режиме bidirectional. Т.к. счетчик будет в себе хранить информацию о количестве поступивших импульсов то опрашивать его можно через значительно большие интервалы без потери информации. Переполнение счетчика можно обработать софтом ПК без каких либо проблем.
Интерфейс квадратурного энкодера - это вентиль Исключающее ИЛИ (XOR по буржуйски), с него мы получим сигнал направления вращения. А стробирующие импульсы можно взять с самого энкодера. Далее эти сигналы заводим на реверсивный счетчик. Счетчики обычно 4-битные но их можно каскадировать, например на 8 бит. Далее эти самые 8 бит можно считать лпт портом в режиме bidirectional. Т.к. счетчик будет в себе хранить информацию о количестве поступивших импульсов то опрашивать его можно через значительно большие интервалы без потери информации. Переполнение счетчика можно обработать софтом ПК без каких либо проблем.
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
Xor насколько я понял это к155лп5 но как башку ни ломал так и не догнал как с их помощью сделать что бы два сигнала с энкодера перешли в два сигнала один + для счетчика другой - а за сам счетчик на 8 бит я вообще молчу
Вот один из вариантов схемы подключения:
http://www.vegalab.ru/index.php?option= ... &Itemid=54
Со счетчиком поможет либо гугль либо справочник. К155ИЕ7 должна подойти.
http://www.vegalab.ru/index.php?option= ... &Itemid=54
Со счетчиком поможет либо гугль либо справочник. К155ИЕ7 должна подойти.
*55ИЕ7 не подойдёт, она не direction+clock, а clock_up+clock_down.
Её можно было бы напрямую к валкодеру, один выход на UP, другой на DOWN, если бы не одно «но» -- если покачивать вперёд-назад возле положения края шторки напротив фотодиода, то он будет считать в одну строну.
Та же беда будет при дребезге контактов для контактного кодера.
direction+clock, например 561ИЕ14
Если так годится, например, дребезга нет, а ситуация покачивания маловероятна, так как кодер с фиксатором, редкие проскоки не страшны, то тогда можно кодер напрямую на 555ИЕ7.
Её можно было бы напрямую к валкодеру, один выход на UP, другой на DOWN, если бы не одно «но» -- если покачивать вперёд-назад возле положения края шторки напротив фотодиода, то он будет считать в одну строну.
Та же беда будет при дребезге контактов для контактного кодера.
direction+clock, например 561ИЕ14
Э, у этой схемы та же беда. Если покачивать край шторки напротив верхней оптопары, то на счёт будут постоянно идти импульсы, а триггер направления менять состояние не будет.uk8amk писал(а):Вот один из вариантов схемы подключения:
http://www.vegalab.ru/index.php?option= ... &Itemid=54
Если так годится, например, дребезга нет, а ситуация покачивания маловероятна, так как кодер с фиксатором, редкие проскоки не страшны, то тогда можно кодер напрямую на 555ИЕ7.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
У меня энкодер промышленный лир 158, дребезг в нем исключен, покачиваний не будет.
Будет применятся в станке для позиционирования толкателя.
Будет применятся в станке для позиционирования толкателя.
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
Ребят если не сложно накидайте схемку, заранее спасибо за помощь!
- Сообщения: 3385
- Зарегистрирован: Пн окт 11, 2010 19:00:08
Если планируете использовать МК то схема это не главное - главное программа, зашитая в контроллер.
Вы ее сможете написать?
Вы ее сможете написать?
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
Боюсь что МК мне не под силу. Я думаю соединить два счетчика ие7. Но вот как переделать сигналы энкодера в +1 и -1 ? Нашел тут одну схемку но она на 5 микросхемах. Может что попроще есть?
Для тепличных условий отсутствия покачиваний/дребезга квадратурный кодер, как я уже писал выше, можно подключать прямо на входы +1/-1 ИЕ7-го (или 6-го, тогда будет двоично-десятичный результат).
У этих счётчиков входы +1, -1 одновремённо являются разрешениями для противоположного входа.
Когда на +1 высокий уровень, фронты на -1 уменьшают значение. Когда низкий -- игнорируются.
И наоборот, когда на -1 высокий, фронты на +1 увеличивают.
В первой половине картинки фронты на вывод4 (-1) попадают на низкий на выводе 5 и в минус счёта нет, есть только в плюс. Во второй половине счёт только в минус
Это если хотеть максимальное разрешение и работать по всем перепадам, то тогда да, простой схемкой не отделаешся.
У этих счётчиков входы +1, -1 одновремённо являются разрешениями для противоположного входа.
Когда на +1 высокий уровень, фронты на -1 уменьшают значение. Когда низкий -- игнорируются.
И наоборот, когда на -1 высокий, фронты на +1 увеличивают.
В первой половине картинки фронты на вывод4 (-1) попадают на низкий на выводе 5 и в минус счёта нет, есть только в плюс. Во второй половине счёт только в минус
Код: Выделить всё
ИЕ7 Крутим вперёд Крутим назад
вывод5 ____----____----____----________----____----____----____
вывод4 __----____----____----____________----____----____----__
^ ^ ^ ^ ^ ^
+1 +1 +1 -1 -1 -1Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
То есть выводы 12,13 подключаем к входам 4,5 второго счетчика, дабы получить байт, сбросы счетчиков соединяем и так же в лпт для программного сброса. А энкодер напрямую цеплять или через подтягивающий резистор? Да и еще у энкодера существует еще и третий сигнал на 90 градусов, то есть за оборот четыре импульса. Может сброс на него и повесить?
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
Взял старую мышку и выламал у нее колесико, подключил туда свой энкодер, в delphi на форме есть процедуры обработки на случай вращения колесика, опять все работает но только на малых оборотах. Прошу прощения за тупой вопрос но может причина в том что я не ставил подтягивающих резисторов в обеих схемах?
Это зависит от того какой выход у вашего готового энкодера. Если push-pull , то подтяжку не надо. Но подтяжка к + в пару килоом не помешает. Это при условии что энкодер замыкает сигнал на землю.
Делать программно сброс счетчика бессмысленно. Просто при включении программы вы считаете со счетчика значение, оно и будет значением смещения и программно его можно вычесть из будущей координаты.
Делать программно сброс счетчика бессмысленно. Просто при включении программы вы считаете со счетчика значение, оно и будет значением смещения и программно его можно вычесть из будущей координаты.
- Сообщения: 14
- Зарегистрирован: Сб окт 20, 2012 10:04:08
Выход как написано в инструкции TTL U1 >2.4 В при Iвых <=20 мА U0 <0.5 В при Iвых <=20 мА
Попробую собрать на двух счетчиках ИЕ7,
Заказал еще себе набор Arduino как придет еще и на нем попробую
Попробую собрать на двух счетчиках ИЕ7,
Заказал еще себе набор Arduino как придет еще и на нем попробую
Про мышь в дельфи не совсем ясно, она не сможет передавать очень быстрое движение т.к. windows на это не рассчитана. А девайс на лпт со счетчиком в любомслучае должен поднять макс. скорость хотя бы в 10-20 раз.


