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

Обсуждаем контроллеры компании Atmel.
Ответить
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

Здравствуйте!
Нужна небольшая дискуссия/помощь по простому но важному вопросу. Проект некомерческий но тем не менее интересный.

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

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

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

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

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

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

У кого какие идеи на этот счет? Как ловить кол-во переходов синусоиды через ноль от начала и считать не только вперед но и назад простыми средствами?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Контактная информация:
Реклама
afz
Опытный кот
Аватара пользователя
Сообщения: 744
Зарегистрирован: Сб дек 22, 2012 08:17:42
Откуда: Караганда, Казахстан

Сообщение afz »

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

По ошибке включаем громкий сигнал и делаем калибровку повторно, ничего не делать в пояснениях не нуждается, иначе просто отрабатываем +1 или -1 и переносим новое значение в старое. Потом, когда подогнали к нужному месту и снижаем скорость, т.е. доводим, можно попробовать воспользоваться АЦП и синусно-косинусными делами.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)
Реклама
Собутыльник Кота
Аватара пользователя
Сообщения: 2896
Зарегистрирован: Сб ноя 13, 2010 12:53:25
Откуда: приходит весна?

Сообщение B@R5uk »

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

Вернуться в «AVR»