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

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

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

Ну для данной задачи мне импульсов энкодера хватит вполне. А вообще в следующий раз буду выбирать МК с соответствующей переферией на борту.

 

p.s. Да, haker_fox, ваша схема также дает разрешение 1x. А зачем подтяжки 2.7К к шине питания?

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


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

Ну для данной задачи мне импульсов энкодера хватит вполне. А вообще в следующий раз буду выбирать МК с соответствующей переферией на борту.

Если есть АЦП, и энкодер синуснокосинусный, можно обрабатывать сразу, без перехода к лог. уровням.

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

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


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

Если есть АЦП, и энкодер синуснокосинусный, можно обрабатывать сразу, без перехода к лог. уровням.

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

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

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


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

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

Да, ещё есть довольно экзотические схемы, которые обрабатывают аналог, потом цифровые фронты и "0" метку. Дробят период на 2N. Раньше они назывались интерполяторы или похоже.

Исходный сигнал энкодера (от фотоприёмников) аналоговый.

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


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

Если есть АЦП, и энкодер синуснокосинусный, можно обрабатывать сразу, без перехода к лог. уровням.

Только (на сегодняшний день) лучше это не возлагать на МК (даже если он мощный), поручить более специальным микрухам.

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


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

p.s. Да, haker_fox, ваша схема также дает разрешение 1x.

Да, это так. Но на МК поступает частота в 4 раза меньшая, чем мы снимаем с любой фазы энкодера. В моем случае это было довольно существенно.

А зачем подтяжки 2.7К к шине питания?

Ну, наверно, это уже "классика", чтобы входы логики не болтались в воздухе :)

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


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

Вот еще вариант программной реализации. Код вызывается по таймеру с частотой такой, чтобы каждое состояние энкодера было хотя бы один раз прочитано. В данном случае каналы A и B считываются с младших разрядов порта E.

if((PINE & 0x3) != position)

{ // перемещение ручки

position = PINE & 0x3;

p = PINE & 0x3;

switch(StL)

{

case 0x0: if(p == 0x1) {StL = 0x1;}

else if(p == 0x2) StL = 0x12;

break;

case 0x1: if(p == 0x3) {pntL++; StL = 0x3;}

else if(p == 0x0) StL = 0x10;

break;

case 0x2: if(p == 0x0) {pntL++; StL = 0x0;}

else if(p == 0x3) StL = 0x13;

break;

case 0x3: if(p == 0x2) {StL = 0x2;}

else if(p == 0x1) StL = 0x11;

break;

case 0x10: if(p == 0x2) {StL = 0x12;}

else if(p == 0x1) StL = 0x1;

break;

case 0x11: if(p == 0x0) {pntL--; StL = 0x10;}

else if(p == 0x3) StL = 0x3;

break;

case 0x12: if(p == 0x3) {pntL--; StL = 0x13;}

else if(p == 0x0) StL = 0x0;

break;

case 0x13: if(p == 0x1) {StL = 0x11;}

else if(p == 0x2) StL = 0x2;

break;

default: StL = p;

}

}

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


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

Только (на сегодняшний день) лучше это не возлагать на МК (даже если он мощный), поручить более специальным микрухам.

у таких микрух есть ограничение по максимальной частоте выхода 500 - 1000 килогерц. Для энкодеров с большим разрешением будет заметное ограничение по максимальной скорости вращения. Например для 50000 импульсов на оборот скорость меньше 10 оборотов в секунду.

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


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

у таких микрух есть ограничение по максимальной частоте выхода 500 - 1000 килогерц. Для энкодеров с большим разрешением будет заметное ограничение по максимальной скорости вращения. Например для 50000 импульсов на оборот скорость меньше 10 оборотов в секунду.

ИМХО, это также относится и к предыдущему посту: поллить энкодеры "высокочастотные" энкодеры не есть лучшее занятие, хотя, может быть я и ошибаюсь. Интересно, как в этом случае поведет себя связка ПЛИС + МК? Просто в некотором будущем, возможно, предстоит работать с такими энкодерами. Управлять придется 6 двигателями, на каждом энкодер, ориентировочно 1000 им / об.

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


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

Any sin/cos-encoder, with analog output signals as shown in Figure 1, can be interfaced

to the TMS320F240 DSP controller as shown in Figure 5. Note that the components and

values used are applicable to an incremental encoder with a line count N = 2048 and a

maximum speed of 12000 rpm, hence the maximum frequency is fA,B,max = 410 kHz. The

main aspects of the circuit are discussed below.

TMS320F240 DSP-Solution for High Resolution Position with Sin/Cos Encoders.

Материал десятилетней давности. :biggrin:

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

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


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

Добавление НЧ фильтра не помогло. Хотя прямоугольники бегущие с энкодера сгладились по краям ошибка все равно оказывается такой же большой. :07:

Подал на двигатель импульсы высокой частоты (2кГц), при этом двигатель жужал, но не вращался. В одном случае переменная pulses иногда оставалость постоянной, а иногда начинала быстро убывать или нарастать.

Такое ощущение, что МК не успевает считать. Надо бы посмотреть продолжительность обработчика прерывания...

Код:

main.rar

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


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

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

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

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

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

У вас ошибка в алгоритме. При наличии импульсов только в канале А (Вибрация на границе сектора) и стабильного уровня на канале В будет счет в одном направлении.

Я, в свое время, Использовал прерывания по обоим фронтам канала А, А лучше по всем четырем Фронтам каналов и А и В одновременно повышается в четыре раза дскретность датчика.

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


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

У вас ошибка в алгоритме. При наличии импульсов только в канале А (Вибрация на границе сектора) и стабильного уровня на канале В будет счет в одном направлении.

Я, в свое время, Использовал прерывания по обоим фронтам канала А, А лучше по всем четырем Фронтам каналов и А и В одновременно повышается в четыре раза дскретность датчика.

Вот СПАСИБО!!!! :a14: :beer:

Как я сам не допер.

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


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

Вот СПАСИБО!!!! :a14: :beer:

Как я сам не допер.

Да уж) Значит все таки интуитивно мой совет был верным: нужно отслеживать все четыре состояния энкодера))))

Поздравляю с победой!

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


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

Да уж) Значит все таки интуитивно мой совет был верным: нужно отслеживать все четыре состояния энкодера))))

Поздравляю с победой!

И Вам СПАСИБО! И вообще Всем СПАСИБО!!!

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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