Здравствуйте. Есть задача как-то прикрутить три энкодера на один чип. Один для ручного ввода данных, остальные два управляются механикой. Проблема в том что у чипа только один вход прерывания. Для первого энкодера точность не так уж важна, вторые два должны отрабатывать идеально бит в бит. Как это можно реализовать.
Prolog, не знаю под какой PIC контроллер вы пишите программу, но я бы под работу с энкодерами выделил бы отдельный таймер (прерывания по таймеру; приоритет выше системного; время что-то типа 20µS) и по нему опрашивал бы выводы энкодеров. Если делать программу на ASM - там получится не много строк. С INT-ами (по входу) связываться не советую, поскольку от "дребезга" избавиться не получится. Но, как говорится, у каждого свои методы решения задач...
Открыта удобная площадка с выгодными ценами, поставляющая весь ассортимент продукции, производимой компанией MEAN WELL – от завоевавших популярность и известных на рынке изделий до новинок. MEAN WELL.Market предоставляет гарантийную и сервисную поддержку, удобный подбор продукции, оперативную доставку по России.
На сайте интернет-магазина посетители смогут найти обзоры, интересные статьи о применении, максимальный объем технических сведений.
А если такой вариант: три энкодера через диоды посадить на прерывание, а каждый энкодер на отдельную ногу МК. Суть: пришло прерывание - смотрим, на какой ноге появился сигнал
Продукция MOSO предназначена в основном для индустриальных приложений, использует инновационные решения на основе более 200 собственных патентов для силовой электроники и соответствует международным стандартам. LED-драйверы MOSO применяются в системах наружного освещения разных отраслей, включая промышленность, сельское хозяйство, транспорт и железную дорогу. В ряде серий реализована возможность дистанционного контроля и программирования работы по заданному сценарию. Разберем решения MOSO
подробнее>>
Я тоже сперва хотел предложить такой вариант (с подключением ко входу внешнего прерывания через развязывающие диоды), как второй возможный, но определение направления вращения при использовании внешнего прерывания как раз завязано на опрос состояния второго пина. И получается неоднозначность. Тоесть возникло прерывание - смотрим состояние второго пина: если высокий уровень - крутится в одну сторону, если низкий - в другую. Ну так оно может быть например высоким не потому что мы 1 энкодером крутим вправо, а потому что он неподвижен, а прерывание возникло потому, что 2 энкодер мы крутим например влево)) А дребезг при использовании внешнего прерывания в принципе неплохо лечится конденсаторами. Но я это пробовал только для механического инкрементального энкодера, который крутим ручками, для всяких крутых высокооборотистых опыта приминения нет.
П.С. Насчет алгоритма без приминения внешних прерываний - поищите описание агоритма от Ридико (кажется). Краткий смысл - запоминаете состояние, и делаете опрос по таймеру, как предложил Albert_V (достаточно часто, чтобы Вам хватало, но и достаточно редко, чтобы исключить друбезг), если состояние стало другое, определяете направление вращения. Заодно отсекаете невозможные состояния (а они есть). К сожаления готового кода под ПИКи нет, игрался, когда писал под MCS-51, это сечас как то но ПИКи потянуло
Пишу под PIC16F877, тактовая 10МГц. Насколько понял алгоритм такой: срабатывает прерывание по таймеру, смотрим состояние входов, если например in1=1 AND in2=0 --> var=var+1 и наоборот in1=0 AND in2=1 --> var=var-1 , а как быть если пошло следующее прерывание а энкодер ещё не поменял значение или наоборот уже проскочил. Частота вращения постоянно меняется. Кроме того чип сильно загружен - слушает кнопки, 4 АЦП, выводит данные на экранчик, управляет 10 выходами где тоже важна точность срабатывания.
-=Vovka=- писал(а):
А если такой вариант: три энкодера через диоды посадить на прерывание
Хех, интересный вариант только не совсем понятный... В первом варианте у меня энкодер работал так: одна нога на INT вторая на ногу МК (переменная n). Срабатывает прерывание, смотрим состояние второй ноги - if n=1 прибавляем значение if n=0 отнимаем.
... а как быть если пошло следующее прерывание а энкодер ещё не поменял значение или наоборот уже проскочил...
Период опроса по таймеру должен быть меньше времени между сменой 2 ближайших состояний. А вообще, в вашем случае (2 и больше высокооборотистых энкодера), я бы повесил все 3 энкодера на 3 старших линии порта В, и насторил бы прерывание по изминению состояния. Но более опытные люди могут подсказать и чего получше.
Выберите положение энкодера "на грани щелчка" и убедитесь что не будет "лишних" импульсов....
Сам энкодер со встроенной "умной" схемой и не допускает дребезга т.е. полностью проходит цикл 00 10 11 01 00. "На грани щелчка" его трудновато выставить, всё таки 2000 импульсов на один оборот.
Сложно что-то советовать не зная полного ТЗ. Надо, вначале, определиться с напряжением питания контроллера (3,3V или 5V), расписать какая периферия (в контроллере) необходима, прикинуть какая математика (8 или 16 бит) нужна, требуется ли DMA и т.д. К тому же, я не знаю что вы можете купить в ваших магазинах (я ориентируюсь на Тритон). Если из 18-ых - рассмотрите PIC18F46K22. Хотя, если я правильно вас понял, на мой взгляд наиболее оптимальным в вашем изделии был бы PIC24FJ64GB004 (из того, что есть в наличии в Тритоне). Но, это лично моё мнение...
Попробую примерно описать ТЗ. Это будет производственная линия по изготовлению металлоизделий. Сначала сырая стальная лента заражается в прокаточные валы. Валы крутит двигатель с редуктором управляемый частотником. Тензодатчики (4 АЦП) постоянно контролируют нужную силу прокатки. Далее формованная лента проходит через вал с энкодером и отсчитывает нужную длину (погрешность +- 0.1мм), поступает в пробивной пресс. Пресс пробивает отверстия (количество отверстий и расстояние между каждым отверстием задаются в ручную). Затем срабатывает гильотина и отрубает изделие. Изделие поступает на гибочный станок где второй знкодер следит за радиусом загиба (опять-же погрешность +- 1градус). МК так-же смотрит за наличием ленты в валах, текущим состоянием пресса, гильотины и гибочного что-бы не зажевало металл, считает количество изделий и выводит все данные на экран. Если где-то происходит сбой вся линия тормозится и на экран выводится сообщение где произошла ошибка.
Здесь просто плачет для промъшленного контроллера. И цена уже не будет как для 16F877, а на порядок два-три въше. Но за то получите работающая линия, а не куча (ряд) машин.
_________________ Лом - ето город в Болгарии, а не инструмент юстировки електроники.
может имеет смысл для каждого станка свой МК, объединив их в сеть?
Думал и об этом но вопрос по поводу энкодеров всё равно остаётся. Получается к главному МК подключаются только два энкодера - ручной ввод и считывание длины ленты.
Добавлено after 3 minutes 7 seconds:
botchin писал(а):
И цена уже не будет как для 16F877, а на порядок два-три въше
Угу, 2.5 килобакса . Я уж лучше немного помучаюсь с рассыпухой.
Здраствуйте. В одном из своих древних проектов я боролся с дребезгом как во вложенной схеме. Спасало на всех мех. энкодерах. Скорость реакции регулируется RC цепочкой. Может наведет на какие мысли... ?
Это не тот случай. У меня на обычном энкодере вообще без конденсаторов дребезгов (ложных срабатываний) нет ни при каких "ручных" скоростях. Но тут станок, совсем другие скорости, я полагаю, поэтому обычные методы наверное не сработают.
_________________ Каждый имеет право на свое личное ошибочное мнение.
У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения