PhX 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки. Двигатель работает на холостом ходусо скоростью 2 об/мин. Энкодер обрабатывается atmegoй следующим образом: Сигнал с канала A вызывает прерывание INT1. В зависимости от сигнала на ножке PC1 инкрементируется или декрементируется переменная pulses /* Внешнее прерывание INT1 (счетчик импульсов энкодера) */ // На вход INT1 приходят импульсы от выхода A энкодера // На вход PC1 приходят импульсы от выхода B энкодера ISR(INT1_vect) { if (PINC & 0x02) pulses++; else pulses--; } Точность ужасная. Погрешность видимо связана с высокочастотным дребезгом вала при завершении шага. Кто что может посоветывать по этому поводу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки. Двигатель работает на холостом ходусо скоростью 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PhX 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Гм, а коим образом происходит расшифровка импульсов с двух каналов? Штука вся в том, что прерывание происходит по нарастающему фронту, а так как имульсы энкодеровые сдвинуты на 90 град, то на ножке PC1 будет 1 или 0 в зав. от направления вращения. Пальцами крутишь работает нормально. Спасибо за схемку попробуем поиграться с триггерами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Штука вся в том, что прерывание происходит по нарастающему фронту, а так как имульсы энкодеровые сдвинуты на 90 град, то на ножке PC1 будет 1 или 0 в зав. от направления вращения. Пальцами крутишь работает нормально. Спасибо за схемку попробуем поиграться с триггерами. ну направление отследить да, можно. Но как померить координату, что-то не могу сообразить. При обработке только одной фазы, не выходит( Может быть плохо соображаю? :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PhX 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба ну направление отследить да, можно. Но как померить координату, что-то не могу сообразить. При обработке только одной фазы, не выходит( Может быть плохо соображаю? :( Да почему одной-то??? прерывания по наростающему фронту с канала А. На ножку PC1 приходят импульсы с канала B. Энкодер один выводов у него 4: 1 +5 2 А 3 В 4 GND Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Adviser 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Спасибо за схемку попробуем поиграться с триггерами. Схема достаточно классическая, так что если лишние корпуса приемлимы, то все должно работать. Привод Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Точность ужасная. Погрешность видимо связана с высокочастотным дребезгом вала при завершении шага. Кто что может посоветывать по этому поводу? Вы точно, плз, скажите, это дребезг или оно проЁ пропускает импульсы ? Поставьте RC цепи по входам 100 Ом 1нФ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PhX 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Вы точно, плз, скажите, это дребезг или оно проЁ пропускает импульсы ? Поставьте RC цепи по входам 100 Ом 1нФ Пальцами вращается нормально. Считает как в плюс так и в минус. Так что видимо не проЁ. Да, можно и с фильтрами НЧ поиграться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgeny_ch 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 (изменено) · Жалоба Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки. ... Ужос. У вас нет жесткой связи между энкодером и двигателем. Нужна правильная муфта либо сильфон. Изменено 17 ноября, 2008 пользователем evgeny_ch Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PhX 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Ужос. У вас нет жесткой связи между энкодером и двигателем. Нужна правильная муфта либо сильфон. Абсолютно согласен. Ну нету... :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vokchap 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Обработку на логике ИМХО сделать удобнее всего, если она уже стоит на борту. Не тратятся ресурсы микроконтроллера на такую пустяшную вещь. Я вот так всегда делаю. Даже на механических энкодерах работает безотказно. На выходе готовые сигналы: на прерывание и на знак. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
PhX 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Обработку на логике ИМХО сделать удобнее всего, если она уже стоит на борту. Не тратятся ресурсы микроконтроллера на такую пустяшную вещь. Я вот так всегда делаю. Даже на механических энкодерах работает безотказно. На выходе готовые сигналы: на прерывание и на знак. Что-то смысла не улавливаю... С энкодера итак идет сигнал прерывания и знака (см. обработчик в 1м посте). Только вот дребезг устранить нужно. Зачем схему-то городить? Вот у техасовских дсп на борту обработчик инкрементального энкодера есть - конфетка. Работает как счетчик, причем считает по каждому фронту каждого канала. Получается энкодер 250 имп./об имеет разрешающую способность как 1000 имп./об. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
evgeny_ch 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Абсолютно согласен. Ну нету... :crying: Дело в том, что в пределах шага ротор двигателя колеблется, даже после снятия управляющего воздействия, что приводит к неправильной работе ОС по положению. В таких сл. помогает тактирование по фронтам сигналов син. и кос. более высокой синхрочастотой, а также демпфирование колебаний самого двигателя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vokchap 0 17 ноября, 2008 Опубликовано 17 ноября, 2008 · Жалоба Что-то смысла не улавливаю... С энкодера итак идет сигнал прерывания и знака (см. обработчик в 1м посте). Только вот дребезг устранить нужно. Зачем схему-то городить? Для того и городить, чтобы дребезг устранить. На выходе логики сигналы чистые, готовые для инк./дек. счетчика без доп. обработки контроллером на устранение дребезга. Вот у техасовских дсп на борту обработчик инкрементального энкодера есть - конфетка. Работает как счетчик, причем считает по каждому фронту каждого канала. Получается энкодер 250 имп./об имеет разрешающую способность как 1000 имп./об. Так вариант сделать тоже самое на МК не сложно, если ресурсов хватает.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 18 ноября, 2008 Опубликовано 18 ноября, 2008 · Жалоба Да почему одной-то??? прерывания по наростающему фронту с канала А. На ножку PC1 приходят импульсы с канала B. Энкодер один выводов у него 4: 1 +5 2 А 3 В 4 GND Все понял! Спасибо за объяснение! Просто я хотел сказать, что мы не заметим промежуточных состояний энкодера: например, энкодер с 45 "лепестками" на диске, даст 45 импульсов на один оборот вала, а если отслеживать все изменения (изменение в каждой фазе), то получим 4 * 45 = 180 имп/оборот вала. Вот об этих "дополнительных" импульсах речь и шла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться