Здравствуйте!
Нужна небольшая дискуссия/помощь по простому но важному вопросу. Проект некомерческий но тем не менее интересный.
Есть значиться у меня со станка оптический энкодер. он выдает аналоговый сигнал - синусоиду и косинусоиду. Один период синусоиды = 40 микронам.
Раньше там стояло два компаратора и они выдавали квадратурный сигнал как у энкодера. шаг получался 20 микрон. В контроллер я это дело завел на прерывания и если нарушалась последовательность - выдавал ошибку - слишком резко дернули энкодер или ошибка в оптической части/загрязнении ленты с рисками и так далее.
Теперь же есть задача показывать точнее положение а двигать при этом - быстрее.
Понятное дело что в идеальном варианте это все заводится на гигагерцовый ацп, оттуда в плисину а там простой таблицей нормируются синусоиды к -1...+1 ну а дальше арктангенс и готово. Крути на любой скорости и в любую сторону
Но я не умею плисины
Пытался но голова повернута в микроконтроллерную сторону.
Потому завожу эти две синусоиды в атмегу328 на её ацп. Он медленный и не особо точный но мне этого пока хватит. кагбэ это все просто выводится на экран и на том все так что скорость обработки особо роли не играет.
В пределах одного периода все хорошо. отнормировал сигнал взял atan2 поделил на пи умножил на 40 микрон и вуаля. проблемы начинаются на выходе из этих 40-ка микрон ибо линейка-то длинная - полтора метра. Вот и вопрос - как красиво и быстро считать кол-во периодов? скорость перемещения максимальная поднята до 10 см в секунду - тоесть частота синусоиды будет под 250 Килогерц. Напрашивается какой-то компаратор который будет ловить переход синусоиды через ноль и счетчик реверсивный внешний который будет по состоянию косинусоиды считать или вверх или вниз. тогда я процем буду считывать состояние счетчика и доплюсовывать то что рассчитаю из данных ацп и тогда получиться полный результат.
Но тогда вопрос - как это грамотно организовать чтобы небыло дерганий когда синусоида в нуле получилась и мы там остановились - ведь у компаратона будет гистерезис когда синус уже чуток выше нуля а счетчик ещё это не посчитал - как процем это дело ловить?
У кого какие идеи на этот счет? Как ловить кол-во переходов синусоиды через ноль от начала и считать не только вперед но и назад простыми средствами?
Нужна небольшая дискуссия/помощь по простому но важному вопросу. Проект некомерческий но тем не менее интересный.
Есть значиться у меня со станка оптический энкодер. он выдает аналоговый сигнал - синусоиду и косинусоиду. Один период синусоиды = 40 микронам.
Раньше там стояло два компаратора и они выдавали квадратурный сигнал как у энкодера. шаг получался 20 микрон. В контроллер я это дело завел на прерывания и если нарушалась последовательность - выдавал ошибку - слишком резко дернули энкодер или ошибка в оптической части/загрязнении ленты с рисками и так далее.
Теперь же есть задача показывать точнее положение а двигать при этом - быстрее.
Понятное дело что в идеальном варианте это все заводится на гигагерцовый ацп, оттуда в плисину а там простой таблицей нормируются синусоиды к -1...+1 ну а дальше арктангенс и готово. Крути на любой скорости и в любую сторону
Но я не умею плисины
Потому завожу эти две синусоиды в атмегу328 на её ацп. Он медленный и не особо точный но мне этого пока хватит. кагбэ это все просто выводится на экран и на том все так что скорость обработки особо роли не играет.
В пределах одного периода все хорошо. отнормировал сигнал взял atan2 поделил на пи умножил на 40 микрон и вуаля. проблемы начинаются на выходе из этих 40-ка микрон ибо линейка-то длинная - полтора метра. Вот и вопрос - как красиво и быстро считать кол-во периодов? скорость перемещения максимальная поднята до 10 см в секунду - тоесть частота синусоиды будет под 250 Килогерц. Напрашивается какой-то компаратор который будет ловить переход синусоиды через ноль и счетчик реверсивный внешний который будет по состоянию косинусоиды считать или вверх или вниз. тогда я процем буду считывать состояние счетчика и доплюсовывать то что рассчитаю из данных ацп и тогда получиться полный результат.
Но тогда вопрос - как это грамотно организовать чтобы небыло дерганий когда синусоида в нуле получилась и мы там остановились - ведь у компаратона будет гистерезис когда синус уже чуток выше нуля а счетчик ещё это не посчитал - как процем это дело ловить?
У кого какие идеи на этот счет? Как ловить кол-во переходов синусоиды через ноль от начала и считать не только вперед но и назад простыми средствами?
Что нас не убило сделало нас осторожней
Не доверяйте русским лужам - это может быть вход в метро.
Не доверяйте русским лужам - это может быть вход в метро.
