Датчик угла поворота вала пригодится тогда, когда вам нужно повернуть вал на заданный угол или количество оборотов, но рабочего угла серводвигателя в 180 градусов не хватает. Чаще всего энкодеры используют чтобы измерять пройденный роботом путь, крепя их напрямую к двигателям и измеряя угол, на который провернулся вал колеса.
Работа энкодера основана на следующем принципе: внутри корпуса располагается непрозрачный диск с прорезями и 2 щелевых оптических датчика. Каждый датчик имеет собственный вывод (поэтому у модуля 2 шины). В процессе вращения диск с помощью своих прорезей поочередно заставляет срабатывать тот или иной канал датчика. По взаимному состоянию каждого из каналов можно судить о направлении вращения. Подробнее об энкодерах - здесь.
Датчик использует два стандартных 3-пиновых разъема и подключается в порты IN контроллера "Трекдуино". Для подключения одного датчика требуется 2 свободных порта (по одному на каждый канал). Всего можно подключить и использовать до 4 энкодеров.
При подключении датчика следует выбрать, какой из проводов будет «каналом А», а какой - «каналом B». Соответствие каналов и проводов не фиксированное, пользователь сам должен выбрать в зависимости от ситуации, руководствуясь при это правилом: при чтении показаний датчика программа будет принимать за положительное направление вращение от «А» в сторону «В», например:
Блоки, необходимые для работы с энкодером, расположены в группе блоков «Датчики».
При использовании энкодеров первым делом необходимо выполнить установку всех подключенных энкодеров в секции «Уставнока»
(Setup())
с помощью блока «Установка энкодера»
в графическом режиме или функции setupEnc(int encoder, int chA, int chB)
в текстовом режиме.
Изменение переменных, в которых хранятся углы поворота энкодеров, происходит с помощью т.н. механизма прерываний, поэтому эти показания будут меняться даже если программа занята чем-либо, например, выполняет функцию задержки. Поэтому обращаться за показаниями энкодера можно сколь угодно редко, «срабатывания» оптических датчиков пропускаться не будут.
Точность энкодера (минимальный шаг)- 5 градусов.
Значения, возвращаемые блоком , всегда кратны 5 градусам (-20, -15, -10, -5, 0, 5, 10…)
Счетчик (переменная), в которой храниться угол поворота, переполняется при ± 2,147,483,645 градусах (около 6 миллионов оборотов). Впрочем, ресурс самого датчика гораздо меньше
Блок и генерируемая им функция |
Описание |
void setupEnc(int encoder, int chA, int chB)
|
Выполняет установку энкодера, сообщает программе, к каким портам он подключен. Необходимо вызывать в секции «Установка» для каждого подключенного энкодера.
Аргументы:
№ (int encoder) - условный номер энкодера, по которому в дальнейшем к нему будет обращаться функция опроса.
канал А (int chA) - порт IN, к которому подключен провод канала А
канал B (int chB) - порт IN, к которому подключен провод канала B |
long getEncDegrees(int encoder)
|
Возвращает угол поворота определенного энкодера в градусах.
Аргументы:
№ (int encoder) - условный номер энкодера, угол поворота которого необходимо сообщить |
void setEncToZero(int encoder)
|
Обнуляет текущие показания по определенному энкодеру, «сбрасывает» счетчик.
Аргументы:
№ (int encoder) - условный номер энкодера, показания которого необходимо обнулить |
Генерируемый код:
void setup()
{
setupEnc(1, IN1, IN2);
setupEnc(2, IN3, IN4);
Serial.begin(115200);
}
void loop()
{
Serial.print("Encoder #1:");
Serial.print(getEncDegrees(1));
Serial.println();
Serial.print("Encoder #2:");
Serial.print(getEncDegrees(2));
Serial.println();
delay( 1000 );
}