Драйвер/ счетчик инкрементального энкодера

Обсуждаем цифровые устройства...
Ответить
Аватара пользователя
Igor_Naum
Открыл глаза
Сообщения: 46
Зарегистрирован: Сб янв 26, 2013 21:28:58
Откуда: Москва

Драйвер/ счетчик инкрементального энкодера

Сообщение Igor_Naum »

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

Задача: Организация обратной связи для станка ЧПУ на шаговых двигателях (3 шт.) с энкодерами на валу...

Собственно управление шаговыми двигателями выглядит так: МК(PIC18f6520) - шина SPI - драйвер L6470 (SPI) - ШД. В принципе ничто не мешает выход с энкодера подавать прямо на свободные ноги МК.
Но в этом случае микроконтроллер будет все время занят во время работы ШД (а он должен еще периодически опрашивать состояния драйверов L6470 и выводить инфу на графический ЖК).
Использовать модуль встроенного счетчика не получается, т.к. процессор все равно должен отвлекаться на то чтобы определить направление "тика" и инкреминтировать или декрементировать абсолютное положение вала...

Вот есть LS7366 http://www.alldatasheet.com/datasheet-p ... S7366.html
Но его не достать... Есть ли похожие аналоги, может кто сталкивался?

Спасибо...
Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение uk8amk »

PIC18F4431
Motion Feedback Module w/ Quadrature Encoder Interface
http://www.microchip.com/wwwproducts/en/PIC18F4431

Если pic не столь принципиален, то к многие stm32 поддерживают 3-4 инкрементальных энкодера на аппаратном уровне.
Реклама
Аватара пользователя
Igor_Naum
Открыл глаза
Сообщения: 46
Зарегистрирован: Сб янв 26, 2013 21:28:58
Откуда: Москва

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Igor_Naum »

Это действительно интересно и еще одна галочка в пользу STM.
Пока с ними не сталкивался лоб в лоб...

А с PIC похоже возможно подключение только одного энкодера.
Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Аватара пользователя
wws63
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Вс май 21, 2006 16:07:59
Откуда: Алтай

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение wws63 »

Может вот это пригодится.
Как вариант обработки сигналов энкодера.
Схемка с просторов инета
Изображение
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15571
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение BOB51 »

Или соорудить собственный вариант LS7366 на каком-нибудь малолапом МК (ПИК/АВР)
:wink:
Реклама
Аватара пользователя
Igor_Naum
Открыл глаза
Сообщения: 46
Зарегистрирован: Сб янв 26, 2013 21:28:58
Откуда: Москва

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Igor_Naum »

Спасибо за советы.
Было над чем подумать...

Думаю наиболее оптимальный вариант все-таки такой, "аппаратную" часть счетчика энкодера совместить на одной плате с драйвером ШД.
Счетчик энкодера организовать на МК и возможно (пока не знаю как) обеспечить отслеживание положение вала и обратную связь внутри одного модуля ШД, не привлекая к работе МК основного контроллера...
Получается вполне логично - все транзакции между контроллером и модулями ШД происходят по SPI, а уж сами модули следят за выполнением инструкции и в крайнем случае передают ТРЕВОГУ головному МК

Почитав в очередной раз даташиты на STM заманчиво выглядит его использование в качестве основного МК (конструкция облегчается сильно), но пока боюсь его трогать - думаю освоение заберет больше времени, чем соорудить код счетчика энкодера для простенького PICа...

Станок кстати намоточный, поэтому инструкций по SPI будут в процессе работы меняться не так быстро.
Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Реклама
Аватара пользователя
Igor_Naum
Открыл глаза
Сообщения: 46
Зарегистрирован: Сб янв 26, 2013 21:28:58
Откуда: Москва

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Igor_Naum »

Вот общий вид, если кому интересно, отладочного комплекта - контроллер + 1 модуль ШД
http://img.radiokot.ru/files/84082/medium/zlbjp9fk0.jpg
Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Аватара пользователя
Jurkin
Вымогатель припоя
Сообщения: 515
Зарегистрирован: Вт янв 01, 2013 15:51:19
Откуда: Vilnius

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Jurkin »

..чёт Вы тут перегибаете ;) Задача похоже никакая, а сгородить хотите космический корабль. Вот не увидел пока сколько же импульсов на оборот даёт энкодер и с какой максимальной скоростью он будет крутится - ну в принципе нужно знать хотяб максимальную частоту идущих с энкодера импульсов которые нужно обсасывать. Одно дело сотни килогерц к примеру от датчика где 2048 имп/об и 3000 об/мин , другое, 100 имп/об при 500 об/мин. Отсюда надо и плясать - успеет один МК всё сделать или не успеет, а так Вы ведёте разговор ни о чём.
Аватара пользователя
Igor_Naum
Открыл глаза
Сообщения: 46
Зарегистрирован: Сб янв 26, 2013 21:28:58
Откуда: Москва

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Igor_Naum »

Хорошо. что спросили...
Я то по наивности даже не прикидывал максимальную частоту импульсов - думал все равно МК быстрее, особенно если освободить его от других задач.

Серия шаговиков от LeadShine со встроенным энкодером.
http://www.purelogic.ru/files/downloads ... d_V1.3.pdf
Максимальная частота энкодера указана 100Кгц.
1000 импульсов на оборот энкодер вроде выдает.

Максимальная скорость шпинделя будет 1500об/мин. (хотя это под вопросом, важнее точность позиционирования каретки - а там скорости другие совсем). Но все-таки прикинем по максимуму 1500 об/мин = 25 об/сек * 1000 импульсов = 25 Кгц. Максимальная частота между 2 мя каналами 50 Кгц получается.
20мкс на обнаружение импульса, определение его направления, инкремент или декремент счетного регистра.

Если продумать код то и 8 Мгц должно хватить
Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Аватара пользователя
Svitoglad
Открыл глаза
Сообщения: 46
Зарегистрирован: Вс авг 24, 2008 16:12:00

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Svitoglad »

Igor_Naum писал(а):Если продумать код то и 8 Мгц должно хватить
Вот вам еще немного информации.
Сообщение #160 http://www.cnczone.ru/forums/index.php? ... 334&st=150
Читайте книги. После них Вы сможете гнобить людей ещё изощреннее.
Пиво — это жидкий хлеб, водка — жидкое мясо. Бывает, как наделаю бутербродов...
Аватара пользователя
Jurkin
Вымогатель припоя
Сообщения: 515
Зарегистрирован: Вт янв 01, 2013 15:51:19
Откуда: Vilnius

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Jurkin »

Igor_Naum писал(а): Максимальная скорость шпинделя будет 1500об/мин. (хотя это под вопросом, важнее точность позиционирования каретки - а там скорости другие совсем). Но все-таки прикинем по максимуму 1500 об/мин = 25 об/сек * 1000 импульсов = 25 Кгц. Максимальная частота между 2 мя каналами 50 Кгц получается.
20мкс на обнаружение импульса, определение его направления, инкремент или декремент счетного регистра.

Если продумать код то и 8 Мгц должно хватить
...вот не понимаю, нафик намоточному станку 1000 имп/об :) , ну фигня, всё равно даж с такими временными характеристиками можно легко успеть всё обработать одним МК без особого напряга.
Вот прилагаю осцилограмку своей одной аналогичной разработки - задача стояла другая маленько но суть таже. Чтоб не потерять (или добавить) ни одного лишнего импульса во время реверса, обработку нужно делать два раза за период. Вот на моей осцилограмке как видно частота 122 kHz это с энкодера 2048 имп/об т.е. скорость получается чуть более 3500 об/мин.
И нет тут ни каких 20мкс. МК авр на 10 MHz. Импульсы на красненькой D3 как раз здесь показывают время работы кода в прерывании. Всё успевается с лихвой, и ещё один такой энкодер запросто успеет обсосать и ещё кучу всего делать.
Изображение
Аватара пользователя
Igor_Naum
Открыл глаза
Сообщения: 46
Зарегистрирован: Сб янв 26, 2013 21:28:58
Откуда: Москва

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Igor_Naum »

Просто 1000 импульсов на оборот - это характеристики тех шаговиков с энкодером, что я нашел.
И , повторюсь, скорее всего энкодер будет только на оси каретки, чтоб не сбивалась как во время намотки, так и в простое между работой. Наверно, можно было бы и концевиком обойтись, но это не устанит гуляние в процессе намотки.

Все дело в том, что я готовлю проект плат для станка (пока тестовый), и очень не плохо было бы предусмотреть использование обратной связи, хотя вероятно это и окажется излишним... Дополнительные МК на периферии - это опять же возможность "вывернутся" в случае если не получится реализовать нормальную обработку одним центральным.
Думаю можно сделать даже так, что если перефирийные МК окажутся не нужны - пару перемычек, и по линии вместо SPI пойдет сигнал с энкодера напрямую к основному МК.

Честно - не понял осциллограмму. И что делается в обработчике прерываний, и почему мы туда попадаем не сразу после импульса.
Для меня логичней было бы в обработчике //1/ регистрировать шаг // 2/ определять направление в зависимости от предыдущего состояния // 3/ ++ или -- счетной переменной // 4/ перезапись старого состояния новым // и возврат к основному циклу.
Громоздко, но по-другому не пропустить импульса я не знаю как...
Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Albert_V »

Очень желательно отрабатывать сигнал с фотодатчика по INT и по фронту и по спаду.
Дело в том, что получить "дребезг" с датчика в реальном изделии достаточно легко.
Если отрабатывать только по фронту (или спаду) - "дребезг" будет воспринят как "лишние шаги" или вращение при остановленном вале.
/я это "проходил" с оптическими валкодерами/
Аватара пользователя
Igor_Naum
Открыл глаза
Сообщения: 46
Зарегистрирован: Сб янв 26, 2013 21:28:58
Откуда: Москва

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Igor_Naum »

"Дребезг" в оптическом энкодере в большей степени зависит от фотодатчика и усилителя тока датчика, если энкодер расчитан на использование с двигателями - думаю тут проблем возникнуть не должно...
Аппаратные счетчики должны с ними хорошо работать, а на программный счетчик можно и антидребезг повесить...

Разобрался, кажется, по осциллограмме.
Там реализовано прерывание от таймера через равные промежутки времени.
Какое преимущество это дает по сравнению с прерыванием от изменения состояния на выводе?
Чтобы избавиться от всяких котов, лучше всего обзавестись своим собственным...
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Albert_V »

Igor_Naum писал(а):"Дребезг" в оптическом энкодере в большей степени зависит от фотодатчика и усилителя тока датчика, если энкодер расчитан на использование с двигателями - думаю тут проблем возникнуть не должно...
Аппаратные счетчики должны с ними хорошо работать, а на программный счетчик можно и антидребезг повесить...
Не хочу вас в чём-то убеждать. Сделаете, и если это будет устойчиво работать - отлично.
/У оптических энкодеров бывает дребезг, когда вращение остановилось на грани перекрытия фотодатчика шторкой. Проверено практикой/
Аватара пользователя
Jurkin
Вымогатель припоя
Сообщения: 515
Зарегистрирован: Вт янв 01, 2013 15:51:19
Откуда: Vilnius

Re: Драйвер/ счетчик инкрементального энкодера

Сообщение Jurkin »

Igor_Naum писал(а): Честно - не понял осциллограмму. И что делается в обработчике прерываний, и почему мы туда попадаем не сразу после импульса.
Для меня логичней было бы в обработчике //1/ регистрировать шаг // 2/ определять направление в зависимости от предыдущего состояния // 3/ ++ или -- счетной переменной // 4/ перезапись старого состояния новым // и возврат к основному циклу.
Громоздко, но по-другому не пропустить импульса я не знаю как...
...поясняю. D7 и D6 выход энкодера, D3 - пин МК переводится в 1 когда начинается обработка прерывания активируемая сменой состояния D7. И переводится в 0 когда закончена обработка прерывания. На осцилограмме отклик на событие происходит через 1 мкс. Позже я чуток оптимизировал код и это время сократил гдет до 0,5мкс. В АВР отклик на прерывание 4 машинных цикла, + переключение порта.(При 10 MHz 1 машинный цикл = 0,1 мкс)
На моей осцилограмме в первом полупериоде код выполнянтся дольше потому как там ещё выполнянтся сравнение полученного номера импульса с константой. Эт я делал виртуальный ноль датчику - нужен был для моей задачи.

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

Вернуться в «Цифровая техника»