|
Обработка инкрементального энкодера |
|
|
|
Nov 17 2008, 09:15
|

Местный
  
Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249

|
Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки. Двигатель работает на холостом ходусо скоростью 2 об/мин. Энкодер обрабатывается atmegoй следующим образом: Сигнал с канала A вызывает прерывание INT1. В зависимости от сигнала на ножке PC1 инкрементируется или декрементируется переменная pulses Код /* Внешнее прерывание INT1 (счетчик импульсов энкодера) */ // На вход INT1 приходят импульсы от выхода A энкодера // На вход PC1 приходят импульсы от выхода B энкодера ISR(INT1_vect) { if (PINC & 0x02) pulses++; else pulses--; } Точность ужасная. Погрешность видимо связана с высокочастотным дребезгом вала при завершении шага. Кто что может посоветывать по этому поводу?
--------------------
Если все, то не я...
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 14)
|
Nov 17 2008, 09:43
|

Познающий...
     
Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125

|
Цитата(PhX @ Nov 17 2008, 17:15)  Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки. Двигатель работает на холостом ходусо скоростью 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.
--------------------
Выбор.
|
|
|
|
|
Nov 17 2008, 09:50
|

Местный
  
Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249

|
Цитата(haker_fox @ Nov 17 2008, 13:43)  Гм, а коим образом происходит расшифровка импульсов с двух каналов? Штука вся в том, что прерывание происходит по нарастающему фронту, а так как имульсы энкодеровые сдвинуты на 90 град, то на ножке PC1 будет 1 или 0 в зав. от направления вращения. Пальцами крутишь работает нормально. Спасибо за схемку попробуем поиграться с триггерами.
--------------------
Если все, то не я...
|
|
|
|
|
Nov 17 2008, 10:14
|

Местный
  
Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249

|
Цитата(haker_fox @ Nov 17 2008, 14:08)  ну направление отследить да, можно. Но как померить координату, что-то не могу сообразить. При обработке только одной фазы, не выходит( Может быть плохо соображаю?  Да почему одной-то??? прерывания по наростающему фронту с канала А. На ножку PC1 приходят импульсы с канала B. Энкодер один выводов у него 4: 1 +5 2 А 3 В 4 GND
--------------------
Если все, то не я...
|
|
|
|
|
Nov 17 2008, 11:01
|
Частый гость
 
Группа: Новичок
Сообщений: 84
Регистрация: 22-09-05
Пользователь №: 8 854

|
Цитата(PhX @ Nov 17 2008, 12:50)  Спасибо за схемку попробуем поиграться с триггерами. Схема достаточно классическая, так что если лишние корпуса приемлимы, то все должно работать. Привод
|
|
|
|
|
Nov 17 2008, 11:34
|

Местный
  
Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249

|
Цитата(_Pasha @ Nov 17 2008, 15:22)  Вы точно, плз, скажите, это дребезг или оно проЁ пропускает импульсы ? Поставьте RC цепи по входам 100 Ом 1нФ Пальцами вращается нормально. Считает как в плюс так и в минус. Так что видимо не Цитата проЁ
. Да, можно и с фильтрами НЧ поиграться.
--------------------
Если все, то не я...
|
|
|
|
|
Nov 17 2008, 11:40
|

чукчхэшаражогрмонтажник
    
Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094

|
Цитата(PhX @ Nov 17 2008, 13:15)  Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки. ... Ужос. У вас нет жесткой связи между энкодером и двигателем. Нужна правильная муфта либо сильфон.
Сообщение отредактировал evgeny_ch - Nov 17 2008, 11:45
--------------------
Quo vadis?
|
|
|
|
|
Nov 17 2008, 11:56
|

Местный
  
Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249

|
Цитата(evgeny_ch @ Nov 17 2008, 15:40)  Ужос. У вас нет жесткой связи между энкодером и двигателем. Нужна правильная муфта либо сильфон. Абсолютно согласен. Ну нету...
--------------------
Если все, то не я...
|
|
|
|
|
Nov 17 2008, 12:51
|

Местный
  
Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249

|
Цитата(Vokchap @ Nov 17 2008, 15:59)  Обработку на логике ИМХО сделать удобнее всего, если она уже стоит на борту. Не тратятся ресурсы микроконтроллера на такую пустяшную вещь. Я вот так всегда делаю. Даже на механических энкодерах работает безотказно. На выходе готовые сигналы: на прерывание и на знак.
Что-то смысла не улавливаю... С энкодера итак идет сигнал прерывания и знака (см. обработчик в 1м посте). Только вот дребезг устранить нужно. Зачем схему-то городить? Вот у техасовских дсп на борту обработчик инкрементального энкодера есть - конфетка. Работает как счетчик, причем считает по каждому фронту каждого канала. Получается энкодер 250 имп./об имеет разрешающую способность как 1000 имп./об.
--------------------
Если все, то не я...
|
|
|
|
|
Nov 17 2008, 12:57
|

чукчхэшаражогрмонтажник
    
Группа: Участник
Сообщений: 1 852
Регистрация: 13-07-07
Из: Minsk
Пользователь №: 29 094

|
Цитата(PhX @ Nov 17 2008, 15:56)  Абсолютно согласен. Ну нету...  Дело в том, что в пределах шага ротор двигателя колеблется, даже после снятия управляющего воздействия, что приводит к неправильной работе ОС по положению. В таких сл. помогает тактирование по фронтам сигналов син. и кос. более высокой синхрочастотой, а также демпфирование колебаний самого двигателя.
--------------------
Quo vadis?
|
|
|
|
|
Nov 17 2008, 13:04
|

Профессионал
    
Группа: Админы
Сообщений: 1 884
Регистрация: 15-07-06
Из: Новосибирск, Россия
Пользователь №: 18 835

|
Цитата(PhX @ Nov 17 2008, 15:51)  Что-то смысла не улавливаю... С энкодера итак идет сигнал прерывания и знака (см. обработчик в 1м посте). Только вот дребезг устранить нужно. Зачем схему-то городить? Для того и городить, чтобы дребезг устранить. На выходе логики сигналы чистые, готовые для инк./дек. счетчика без доп. обработки контроллером на устранение дребезга. Цитата(PhX @ Nov 17 2008, 15:51)  Вот у техасовских дсп на борту обработчик инкрементального энкодера есть - конфетка. Работает как счетчик, причем считает по каждому фронту каждого канала. Получается энкодер 250 имп./об имеет разрешающую способность как 1000 имп./об. Так вариант сделать тоже самое на МК не сложно, если ресурсов хватает....
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|