Страница 1 из 2
Три энкодера.
Добавлено: Вт янв 31, 2017 14:44:50
Prolog
Здравствуйте. Есть задача как-то прикрутить три энкодера на один чип. Один для ручного ввода данных, остальные два управляются механикой. Проблема в том что у чипа только один вход прерывания. Для первого энкодера точность не так уж важна, вторые два должны отрабатывать идеально бит в бит. Как это можно реализовать.
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 15:11:46
Пока_без_кота
Использовать алгоритм не привязанный ко входам прерываний.
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 15:38:45
Prolog
Это как? Опишите примерно.
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 15:42:00
Albert_V
Prolog, не знаю под какой PIC контроллер вы пишите программу, но я бы под работу с энкодерами выделил бы отдельный таймер (прерывания по таймеру; приоритет выше системного; время что-то типа 20µS) и по нему опрашивал бы выводы энкодеров.
Если делать программу на ASM - там получится не много строк.
С INT-ами (по входу) связываться не советую, поскольку от "дребезга" избавиться не получится.
Но, как говорится, у каждого свои методы решения задач...
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 16:04:04
-=Vovka=-
А если такой вариант: три энкодера через диоды посадить на прерывание, а каждый энкодер на отдельную ногу МК.
Суть: пришло прерывание - смотрим, на какой ноге появился сигнал
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 16:09:25
Albert_V
-=Vovka=- писал(а):А если такой вариант:...
Два вопроса:
1. Как решите проблему с "дребезгом"?
2. Уверены что прерывания по "дребезгу" оставят время на выполнение основной программы?
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 16:23:26
Пока_без_кота
Я тоже сперва хотел предложить такой вариант (с подключением ко входу внешнего прерывания через развязывающие диоды), как второй возможный, но определение направления вращения при использовании внешнего прерывания как раз завязано на опрос состояния второго пина. И получается неоднозначность. Тоесть возникло прерывание - смотрим состояние второго пина: если высокий уровень - крутится в одну сторону, если низкий - в другую. Ну так оно может быть например высоким не потому что мы 1 энкодером крутим вправо, а потому что он неподвижен, а прерывание возникло потому, что 2 энкодер мы крутим например влево))
А дребезг при использовании внешнего прерывания в принципе неплохо лечится конденсаторами. Но я это пробовал только для механического инкрементального энкодера, который крутим ручками, для всяких крутых высокооборотистых опыта приминения нет.
П.С. Насчет алгоритма без приминения внешних прерываний - поищите описание агоритма от Ридико (кажется). Краткий смысл - запоминаете состояние, и делаете опрос по таймеру, как предложил Albert_V (достаточно часто, чтобы Вам хватало, но и достаточно редко, чтобы исключить друбезг), если состояние стало другое, определяете направление вращения. Заодно отсекаете невозможные состояния (а они есть). К сожаления готового кода под ПИКи нет, игрался, когда писал под MCS-51, это сечас как то но ПИКи потянуло

Re: Три энкодера.
Добавлено: Вт янв 31, 2017 16:39:14
Prolog
Пишу под 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 отнимаем.
Albert_V писал(а):Как решите проблему с "дребезгом"?
У меня энкодеры без дребезга.
https://ru.aliexpress.com/item/1pcs-E6B ... .10.9H01hX
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 16:44:34
Пока_без_кота
Prolog писал(а):... а как быть если пошло следующее прерывание а энкодер ещё не поменял значение или наоборот уже проскочил...
Период опроса по таймеру должен быть меньше времени между сменой 2 ближайших состояний.
А вообще, в вашем случае (2 и больше высокооборотистых энкодера), я бы повесил все 3 энкодера на 3 старших линии порта В, и насторил бы прерывание по изминению состояния. Но более опытные люди могут подсказать и чего получше.
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 16:53:44
Albert_V
Prolog писал(а):...Пишу под PIC16F877, тактовая 10МГц...
Здесь вариантов мало.
Не хотите перейти на 18-ую серию?
Prolog писал(а):...У меня энкодеры без дребезга....
Ага.
Выберите положение энкодера "на грани щелчка" и убедитесь что не будет "лишних" импульсов....
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 17:07:15
Vano79
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 17:44:24
Prolog
Albert_V писал(а):Не хотите перейти на 18-ую серию?
А что посоветуете из 18-ых?
Albert_V писал(а):Выберите положение энкодера "на грани щелчка" и убедитесь что не будет "лишних" импульсов....
Сам энкодер со встроенной "умной" схемой и не допускает дребезга т.е. полностью проходит цикл 00 10 11 01 00. "На грани щелчка" его трудновато выставить, всё таки 2000 импульсов на один оборот.
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 18:21:52
Albert_V
Prolog писал(а):А что посоветуете из 18-ых?...
Сложно что-то советовать не зная полного ТЗ.
Надо, вначале, определиться с напряжением питания контроллера (3,3V или 5V), расписать какая периферия (в контроллере) необходима, прикинуть какая математика (8 или 16 бит) нужна, требуется ли DMA и т.д.
К тому же, я не знаю что вы можете купить в ваших магазинах (я ориентируюсь на Тритон).
Если из 18-ых - рассмотрите PIC18F46K22.
Хотя, если я правильно вас понял, на мой взгляд наиболее оптимальным в вашем изделии был бы PIC24FJ64GB004 (из того, что есть в наличии в Тритоне).
Но, это лично моё мнение...
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 19:15:55
Prolog
Попробую примерно описать ТЗ. Это будет производственная линия по изготовлению металлоизделий. Сначала сырая стальная лента заражается в прокаточные валы. Валы крутит двигатель с редуктором управляемый частотником. Тензодатчики (4 АЦП) постоянно контролируют нужную силу прокатки. Далее формованная лента проходит через вал с энкодером и отсчитывает нужную длину (погрешность +- 0.1мм), поступает в пробивной пресс. Пресс пробивает отверстия (количество отверстий и расстояние между каждым отверстием задаются в ручную). Затем срабатывает гильотина и отрубает изделие. Изделие поступает на гибочный станок где второй знкодер следит за радиусом загиба (опять-же погрешность +- 1градус). МК так-же смотрит за наличием ленты в валах, текущим состоянием пресса, гильотины и гибочного что-бы не зажевало металл, считает количество изделий и выводит все данные на экран. Если где-то происходит сбой вся линия тормозится и на экран выводится сообщение где произошла ошибка.
Re: Три энкодера.
Добавлено: Вт янв 31, 2017 19:24:00
Albert_V
Выкладывайте блок-схему (с разрисовкой линий входов и управления) но, чую, что "подходим" к PIC24 (16bit).
Re: Три энкодера.
Добавлено: Ср фев 01, 2017 08:48:04
-=Vovka=-
Prolog, может имеет смысл для каждого станка свой МК, объединив их в сеть?
Re: Три энкодера.
Добавлено: Ср фев 01, 2017 11:01:52
botchin
Здесь просто плачет для промъшленного контроллера. И цена уже не будет как для 16F877, а на порядок два-три въше. Но за то получите работающая линия, а не куча (ряд) машин.
Re: Три энкодера.
Добавлено: Ср фев 01, 2017 14:18:38
Prolog
-=Vovka=- писал(а):может имеет смысл для каждого станка свой МК, объединив их в сеть?
Думал и об этом но вопрос по поводу энкодеров всё равно остаётся. Получается к главному МК подключаются только два энкодера - ручной ввод и считывание длины ленты.
Добавлено after 3 minutes 7 seconds:
botchin писал(а):И цена уже не будет как для 16F877, а на порядок два-три въше
Угу, 2.5 килобакса

. Я уж лучше немного помучаюсь с рассыпухой.
Re: Три энкодера.
Добавлено: Пн фев 06, 2017 20:31:29
maxlab
Здраствуйте. В одном из своих древних проектов я боролся с дребезгом как во вложенной схеме. Спасало на всех мех. энкодерах.
Скорость реакции регулируется RC цепочкой. Может наведет на какие мысли... ?
Re: Три энкодера.
Добавлено: Пн фев 06, 2017 21:27:57
Zhuk72
Это не тот случай. У меня на обычном энкодере вообще без конденсаторов дребезгов (ложных срабатываний) нет ни при каких "ручных" скоростях.
Но тут станок, совсем другие скорости, я полагаю, поэтому обычные методы наверное не сработают.