Страница 1 из 1

Подскажите с аппаратной частью оптического энкодера

Добавлено: Сб авг 27, 2016 11:17:20
clawham
Здравствуйте!
Нужна небольшая дискуссия/помощь по простому но важному вопросу. Проект некомерческий но тем не менее интересный.

Есть значиться у меня со станка оптический энкодер. он выдает аналоговый сигнал - синусоиду и косинусоиду. Один период синусоиды = 40 микронам.
Раньше там стояло два компаратора и они выдавали квадратурный сигнал как у энкодера. шаг получался 20 микрон. В контроллер я это дело завел на прерывания и если нарушалась последовательность - выдавал ошибку - слишком резко дернули энкодер или ошибка в оптической части/загрязнении ленты с рисками и так далее.

Теперь же есть задача показывать точнее положение а двигать при этом - быстрее.

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

Но я не умею плисины :) Пытался но голова повернута в микроконтроллерную сторону.
Потому завожу эти две синусоиды в атмегу328 на её ацп. Он медленный и не особо точный но мне этого пока хватит. кагбэ это все просто выводится на экран и на том все так что скорость обработки особо роли не играет.

В пределах одного периода все хорошо. отнормировал сигнал взял atan2 поделил на пи умножил на 40 микрон и вуаля. проблемы начинаются на выходе из этих 40-ка микрон ибо линейка-то длинная - полтора метра. Вот и вопрос - как красиво и быстро считать кол-во периодов? скорость перемещения максимальная поднята до 10 см в секунду - тоесть частота синусоиды будет под 250 Килогерц. Напрашивается какой-то компаратор который будет ловить переход синусоиды через ноль и счетчик реверсивный внешний который будет по состоянию косинусоиды считать или вверх или вниз. тогда я процем буду считывать состояние счетчика и доплюсовывать то что рассчитаю из данных ацп и тогда получиться полный результат.

Но тогда вопрос - как это грамотно организовать чтобы небыло дерганий когда синусоида в нуле получилась и мы там остановились - ведь у компаратона будет гистерезис когда синус уже чуток выше нуля а счетчик ещё это не посчитал - как процем это дело ловить?

У кого какие идеи на этот счет? Как ловить кол-во переходов синусоиды через ноль от начала и считать не только вперед но и назад простыми средствами?

Re: Подскажите с аппаратной частью оптического энкодера

Добавлено: Вт сен 06, 2016 20:11:32
afz
Я бы, по-простому, взял два компаратора, без хистерезиса или с минимально возможным хистерезисом (подобрать), на один подал синус, на второй - косинус и завел их на входы INT0 и INT1, настроенные на прерывание по любому изменению сигнала на входе. А далее просто: получив любое из этих двух прерываний, надо прочитать фактическое состояние этих пинов и сравнить с предыдущим их состоянием. И по таблице: было-стало-результат. А результатов всего три: +1, -1, ошибка. При сильном и быстром дребезге возможен четвертый результат: ничего не изменилось. Это когда один из INT'ов за время между началом обработки прерывания и считыванием состояния этого пина успел сменить свое состояние несколько (четное количество) раз.

По ошибке включаем громкий сигнал и делаем калибровку повторно, ничего не делать в пояснениях не нуждается, иначе просто отрабатываем +1 или -1 и переносим новое значение в старое. Потом, когда подогнали к нужному месту и снижаем скорость, т.е. доводим, можно попробовать воспользоваться АЦП и синусно-косинусными делами.

Re: Подскажите с аппаратной частью оптического энкодера

Добавлено: Ср сен 07, 2016 06:30:24
B@R5uk
clawham писал(а):Но тогда вопрос - как это грамотно организовать чтобы небыло дерганий когда синусоида в нуле получилась и мы там остановились - ведь у компаратона будет гистерезис когда синус уже чуток выше нуля а счетчик ещё это не посчитал - как процем это дело ловить?
Ловля переходов через ноль обеспечивает одну точность, а именно четверть длины периода (если два квадратурных сигнала). Если хотите большую точность, то надо подключать к делу АЦП, как вы описали с самого начала.