реклама на сайте
подробности

 
 
> Обработка инкрементального энкодера
PhX
сообщение Nov 17 2008, 09:15
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 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--;
}

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


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 14)
haker_fox
сообщение Nov 17 2008, 09:43
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 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.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
PhX
сообщение Nov 17 2008, 09:50
Сообщение #3


Местный
***

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



Цитата(haker_fox @ Nov 17 2008, 13:43) *
Гм, а коим образом происходит расшифровка импульсов с двух каналов?

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


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Nov 17 2008, 10:08
Сообщение #4


Познающий...
******

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



Цитата(PhX @ Nov 17 2008, 17:50) *
Штука вся в том, что прерывание происходит по нарастающему фронту, а так как имульсы энкодеровые сдвинуты на 90 град, то на ножке PC1 будет 1 или 0 в зав. от направления вращения. Пальцами крутишь работает нормально.
Спасибо за схемку попробуем поиграться с триггерами.

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
PhX
сообщение Nov 17 2008, 10:14
Сообщение #5


Местный
***

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



Цитата(haker_fox @ Nov 17 2008, 14:08) *
ну направление отследить да, можно. Но как померить координату, что-то не могу сообразить. При обработке только одной фазы, не выходит( Может быть плохо соображаю? sad.gif

Да почему одной-то??? прерывания по наростающему фронту с канала А.
На ножку PC1 приходят импульсы с канала B.
Энкодер один выводов у него 4:
1 +5
2 А
3 В
4 GND


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
Adviser
сообщение Nov 17 2008, 11:01
Сообщение #6


Частый гость
**

Группа: Новичок
Сообщений: 84
Регистрация: 22-09-05
Пользователь №: 8 854



Цитата(PhX @ Nov 17 2008, 12:50) *
Спасибо за схемку попробуем поиграться с триггерами.

Схема достаточно классическая, так что если лишние корпуса приемлимы, то все должно работать.
Привод
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Nov 17 2008, 11:22
Сообщение #7


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(PhX @ Nov 17 2008, 13:15) *
Точность ужасная. Погрешность видимо связана с высокочастотным дребезгом вала при завершении шага. Кто что может посоветывать по этому поводу?

Вы точно, плз, скажите, это дребезг или оно проЁ пропускает импульсы ?
Поставьте RC цепи по входам 100 Ом 1нФ
Go to the top of the page
 
+Quote Post
PhX
сообщение Nov 17 2008, 11:34
Сообщение #8


Местный
***

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



Цитата(_Pasha @ Nov 17 2008, 15:22) *
Вы точно, плз, скажите, это дребезг или оно проЁ пропускает импульсы ?
Поставьте RC цепи по входам 100 Ом 1нФ

Пальцами вращается нормально. Считает как в плюс так и в минус. Так что видимо не
Цитата
проЁ
. Да, можно и с фильтрами НЧ поиграться.


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение Nov 17 2008, 11:40
Сообщение #9


чукчхэшаражогрмонтажник
*****

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



Цитата(PhX @ Nov 17 2008, 13:15) *
Мат. часть: Вал шагового двигателя соединен с оптическим инкрементальным энкодером посредством эластичной трубки.
...

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

Сообщение отредактировал evgeny_ch - Nov 17 2008, 11:45


--------------------
Quo vadis?
Go to the top of the page
 
+Quote Post
PhX
сообщение Nov 17 2008, 11:56
Сообщение #10


Местный
***

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



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

Абсолютно согласен.
Ну нету... crying.gif


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
Vokchap
сообщение Nov 17 2008, 11:59
Сообщение #11


Профессионал
*****

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



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

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
PhX
сообщение Nov 17 2008, 12:51
Сообщение #12


Местный
***

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



Цитата(Vokchap @ Nov 17 2008, 15:59) *
Обработку на логике ИМХО сделать удобнее всего, если она уже стоит на борту. Не тратятся ресурсы микроконтроллера на такую пустяшную вещь. Я вот так всегда делаю. Даже на механических энкодерах работает безотказно. На выходе готовые сигналы: на прерывание и на знак.

Прикрепленное изображение

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


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
evgeny_ch
сообщение Nov 17 2008, 12:57
Сообщение #13


чукчхэшаражогрмонтажник
*****

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



Цитата(PhX @ Nov 17 2008, 15:56) *
Абсолютно согласен.
Ну нету... crying.gif

Дело в том, что в пределах шага ротор двигателя колеблется, даже
после снятия управляющего воздействия, что приводит к неправильной
работе ОС по положению. В таких сл. помогает тактирование по фронтам
сигналов син. и кос. более высокой синхрочастотой, а также демпфирование
колебаний самого двигателя.


--------------------
Quo vadis?
Go to the top of the page
 
+Quote Post
Vokchap
сообщение Nov 17 2008, 13:04
Сообщение #14


Профессионал
*****

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



Цитата(PhX @ Nov 17 2008, 15:51) *
Что-то смысла не улавливаю... С энкодера итак идет сигнал прерывания и знака (см. обработчик в 1м посте). Только вот дребезг устранить нужно. Зачем схему-то городить?

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

Цитата(PhX @ Nov 17 2008, 15:51) *
Вот у техасовских дсп на борту обработчик инкрементального энкодера есть - конфетка. Работает как счетчик, причем считает по каждому фронту каждого канала. Получается энкодер 250 имп./об имеет разрешающую способность как 1000 имп./об.

Так вариант сделать тоже самое на МК не сложно, если ресурсов хватает....
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Nov 18 2008, 03:27
Сообщение #15


Познающий...
******

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



Цитата(PhX @ Nov 17 2008, 18:14) *
Да почему одной-то??? прерывания по наростающему фронту с канала А.
На ножку PC1 приходят импульсы с канала B.
Энкодер один выводов у него 4:
1 +5
2 А
3 В
4 GND

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


--------------------
Выбор.
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 01:37
Рейтинг@Mail.ru


Страница сгенерированна за 0.01522 секунд с 7
ELECTRONIX ©2004-2016