Инкрементальный энкодер.

Итак сегодня мы поговорим про такие замечательные устройства как энкодеры. Что же это за зверь такой?

Энкодер — это датчик угла поворота, то есть он преобразует угол поворота вала в электрические сигналы. Энкодеры можно разделить на два больших класса — абсолютные и инкрементальные. Абсолютный энкодер для каждого положения вала выдает свой уникальный код, таким образом, мы сразу же можем определить положение вала, без всяких дополнительных действий. Это, конечно, очень хорошо, но сегодня нас больше интересует другой тип, а именно, инкрементальный энкодер 😉

На выходе такого энкодера мы имеем два сигнала, а точнее две импульсные последовательности, смещенные друг относительно друга по фазе. На основе этих сигналов мы можем сделать вывод о частоте вращения вала и о направлении вращения. Как видите, здесь все не так просто, как в абсолютном энкодере =)

Итак, давайте подробнее рассмотрим сигналы, которые мы имеем на выходе энкодера. При вращении в одном направлении мы получим следующее:
Сигналы энкодера

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

Принцип работы инкрементального энкодера

Как видите, ничего сложного тут нет ) Давайте разберемся, как из этих сигналов получить полезную информацию.

Начнем с определения направления вращения. Условно будем считать, что на первой картинке показано вращение «вперед», а на второй, соответственно, вращение «назад». Подключаем канал А энкодера к любому выводу микроконтроллера, для которого можно использовать внешнее прерывание. Настраиваем прерывание таким образом, чтобы оно срабатывало во время прихода переднего фронта сигнала с канала А. А теперь обратите внимание, что при вращении вперед переднему фронту сигнала А всегда соответствует низкий уровень сигнала на выходе канала В. При вращении назад все, естественно, наоборот.

То есть мы можем повесить канал В на любой вывод микроконтроллера и просто опрашивать его состояние в прерывании. Вот и все )

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

Давайте напишем пример, обрабатывающий данные с энкодера, для микроконтроллера AVR. Повесим канал А на вход INT3, а канал В на обычную ножку РС3. Заведем специальную переменную encoderState для хранения результата вращения энкодера. Заходя в прерывание, будем анализировать вывод РС3 и в случае низкого уровня (вращение вперед) будем инкрементировать значение переменной encoderState, а в случае высокого, наоборот, декрементировать. Вот код:

/*************************************************************************************************/
#include <avr/io.h>
#include <avr/interrupt.h>
 
 
 
/*************************************************************************************************/
unsigned char encoderState;
 
 
 
/*************************************************************************************************/
void main(void)
{
    // Глобальное разрешение прерываний
    sei();
 
    // Включаем и настраиваем прерывание по
    // переднему фронту сигнала на выводе INT3
    EICRA |= ((1 << ISC31) | (1 << ISC30));
    EIMSK |= (1 << INT3);
 
    while(1)
    {
    }
}
 
 
 
/*************************************************************************************************/
ISR(INT3_vect)
{
    if (PINC & 0x08)
    {
        encoderState--;
    }
    else
    {
        encoderState++;
    }
}
 
 
 
/*************************************************************************************************/

Вот мы и разобрались с принципом работы инкрементального энкодера. Возможно, в дальнейшем в какой-нибудь устройстве он нам очень пригодится )

Понравилась статья? Поделись с друзьями!

Инкрементальный энкодер.: 6 комментариев
    • Решил для начала такой примерчик сделать, чтобы внешнее прерывание заодно охватить. Потом напишу как сделать с периодическим опросом каналов, наверное

  1. С этим датчиком можно сделать интересный проект … скорей бы каникулы кончились … (кладем его в портфель проектов). Надеемся на информацию и по другим датчикам !

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *