Перейти к содержанию
    

Обработка инкрементального энкодера

Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки. Двигатель работает на холостом ходусо скоростью 2 об/мин.

Энкодер обрабатывается atmegoй следующим образом:

Сигнал с канала A вызывает прерывание INT1. В зависимости от сигнала на ножке PC1 инкрементируется или декрементируется переменная pulses

/* Внешнее прерывание INT1 (счетчик импульсов энкодера) */
// На вход INT1 приходят импульсы от выхода A энкодера
// На вход PC1 приходят импульсы от выхода B энкодера
ISR(INT1_vect)
{
  if (PINC & 0x02) pulses++; else pulses--;
}

Точность ужасная. Погрешность видимо связана с высокочастотным дребезгом вала при завершении шага. Кто что может посоветывать по этому поводу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки. Двигатель работает на холостом ходусо скоростью 2 об/мин.

Энкодер обрабатывается atmegoй следующим образом:

Сигнал с канала A вызывает прерывание INT1. В зависимости от сигнала на ножке PC1 инкрементируется или декрементируется переменная pulses

/* Внешнее прерывание INT1 (счетчик импульсов энкодера) */
// На вход INT1 приходят импульсы от выхода A энкодера
// На вход PC1 приходят импульсы от выхода B энкодера
ISR(INT1_vect)
{
  if (PINC & 0x02) pulses++; else pulses--;
}

Точность ужасная. Погрешность видимо связана с высокочастотным дребезгом вала при завершении шага. Кто что может посоветывать по этому поводу?

Гм, а коим образом происходит расшифровка импульсов с двух каналов? Что-то программный код очень простой. Сигналы с каналов A и B сдвинуты на 90 градусов друг относительно друга. И нужно реагировать на изменения состояния в любой фазе! Т.е. прерываний только от канала A недостаточно. Могу порекомендовать схематехническое решение в этом посту (№99). Но все равно нужно два прерывания (или два таймера), зато вся обработка сведется к действительно инкременту/декременту переменной pulses.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гм, а коим образом происходит расшифровка импульсов с двух каналов?

Штука вся в том, что прерывание происходит по нарастающему фронту, а так как имульсы энкодеровые сдвинуты на 90 град, то на ножке PC1 будет 1 или 0 в зав. от направления вращения. Пальцами крутишь работает нормально.

Спасибо за схемку попробуем поиграться с триггерами.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Штука вся в том, что прерывание происходит по нарастающему фронту, а так как имульсы энкодеровые сдвинуты на 90 град, то на ножке PC1 будет 1 или 0 в зав. от направления вращения. Пальцами крутишь работает нормально.

Спасибо за схемку попробуем поиграться с триггерами.

ну направление отследить да, можно. Но как померить координату, что-то не могу сообразить. При обработке только одной фазы, не выходит( Может быть плохо соображаю? :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну направление отследить да, можно. Но как померить координату, что-то не могу сообразить. При обработке только одной фазы, не выходит( Может быть плохо соображаю? :(

Да почему одной-то??? прерывания по наростающему фронту с канала А.

На ножку PC1 приходят импульсы с канала B.

Энкодер один выводов у него 4:

1 +5

2 А

3 В

4 GND

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за схемку попробуем поиграться с триггерами.

Схема достаточно классическая, так что если лишние корпуса приемлимы, то все должно работать.

Привод

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Точность ужасная. Погрешность видимо связана с высокочастотным дребезгом вала при завершении шага. Кто что может посоветывать по этому поводу?

Вы точно, плз, скажите, это дребезг или оно проЁ пропускает импульсы ?

Поставьте RC цепи по входам 100 Ом 1нФ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы точно, плз, скажите, это дребезг или оно проЁ пропускает импульсы ?

Поставьте RC цепи по входам 100 Ом 1нФ

Пальцами вращается нормально. Считает как в плюс так и в минус. Так что видимо не

проЁ
. Да, можно и с фильтрами НЧ поиграться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки.

...

Ужос.

У вас нет жесткой связи между энкодером и двигателем.

Нужна правильная муфта либо сильфон.

Изменено пользователем evgeny_ch

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ужос.

У вас нет жесткой связи между энкодером и двигателем.

Нужна правильная муфта либо сильфон.

Абсолютно согласен.

Ну нету... :crying:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обработку на логике ИМХО сделать удобнее всего, если она уже стоит на борту. Не тратятся ресурсы микроконтроллера на такую пустяшную вещь. Я вот так всегда делаю. Даже на механических энкодерах работает безотказно. На выходе готовые сигналы: на прерывание и на знак.

post-18835-1226923145_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обработку на логике ИМХО сделать удобнее всего, если она уже стоит на борту. Не тратятся ресурсы микроконтроллера на такую пустяшную вещь. Я вот так всегда делаю. Даже на механических энкодерах работает безотказно. На выходе готовые сигналы: на прерывание и на знак.

post-18835-1226923145_thumb.jpg

Что-то смысла не улавливаю... С энкодера итак идет сигнал прерывания и знака (см. обработчик в 1м посте). Только вот дребезг устранить нужно. Зачем схему-то городить?

Вот у техасовских дсп на борту обработчик инкрементального энкодера есть - конфетка. Работает как счетчик, причем считает по каждому фронту каждого канала. Получается энкодер 250 имп./об имеет разрешающую способность как 1000 имп./об.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Абсолютно согласен.

Ну нету... :crying:

Дело в том, что в пределах шага ротор двигателя колеблется, даже

после снятия управляющего воздействия, что приводит к неправильной

работе ОС по положению. В таких сл. помогает тактирование по фронтам

сигналов син. и кос. более высокой синхрочастотой, а также демпфирование

колебаний самого двигателя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то смысла не улавливаю... С энкодера итак идет сигнал прерывания и знака (см. обработчик в 1м посте). Только вот дребезг устранить нужно. Зачем схему-то городить?

Для того и городить, чтобы дребезг устранить. На выходе логики сигналы чистые, готовые для инк./дек. счетчика без доп. обработки контроллером на устранение дребезга.

 

Вот у техасовских дсп на борту обработчик инкрементального энкодера есть - конфетка. Работает как счетчик, причем считает по каждому фронту каждого канала. Получается энкодер 250 имп./об имеет разрешающую способность как 1000 имп./об.

Так вариант сделать тоже самое на МК не сложно, если ресурсов хватает....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да почему одной-то??? прерывания по наростающему фронту с канала А.

На ножку PC1 приходят импульсы с канала B.

Энкодер один выводов у него 4:

1 +5

2 А

3 В

4 GND

Все понял! Спасибо за объяснение! Просто я хотел сказать, что мы не заметим промежуточных состояний энкодера: например, энкодер с 45 "лепестками" на диске, даст 45 импульсов на один оборот вала, а если отслеживать все изменения (изменение в каждой фазе), то получим 4 * 45 = 180 имп/оборот вала. Вот об этих "дополнительных" импульсах речь и шла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...