Top.Mail.Ru

Микроконтроллер AVR и инкрементальный энкодер.

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

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

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

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

Сигналы энкодера

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

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

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

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

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

Идем дальше. Из документации на каждый конкретный инкрементальный энкодер мы можем узнать какое количество импульсов приходится на один полный оборот, то есть на 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++;
	}
}


/***************************************************************************************/

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

Подписаться
Уведомить о
guest

6 комментариев
Старые
Новые
Межтекстовые Отзывы
Посмотреть все комментарии
Рома
Рома
10 лет назад

А дребезг?

Сергей
Сергей
10 лет назад

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

Сергей
Сергей
Ответ на комментарий  Aveal
10 лет назад

Вот слышал еще о
датчиках электрического поля серии EPIC. " Видят сквозь стену ".

6
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x