Как определить направление вращения с помощью датчика времени энкодера (фотоэлектрический датчик скорости)?
Я делаю игровой руль своими руками и застрял. Для измерения вращения колеса я использую диск с датчиком энкодера, который обычно используется в принтерах. - https://robu.in/product/photoelectric-speed-sensor-encoder -coded-disk-code-wheel.
Эта функция используется во многих учебных пособиях на YouTube. Но я никак не могу понять, как пользоваться этим датчиком.
Пожалуйста, помогите мне разобраться: с помощью этого датчика, как -
Измерить, насколько повернулось колесо?
Узнайте, в каком направлении вращается колесо (по часовой стрелке, против часовой стрелки).
PS: я пытался использовать энкодер, но он не может определить вращение при вращении двигателя на 1000 об/мин. Хотелось бы понять почему.
Спасибо!
@Ashish Gogna, 👍0
Обсуждение1 ответ
Это похоже на кодирование A/B: если A становится выше B, это в одну сторону (например, подсчет), а если B становится выше A, это наоборот (десчет). Итак, подключаем питание и землю. Затем подключите два провода к входным контактам:
int P_A=2; int P_B=3; //Входы
long int position = 0; //Положение колеса
long int lastPosition = 0; //последняя позиция колеса: для вычисления скорости
Обратите внимание, что один контакт должен быть контактом аппаратного прерывания (Uno 2 и 3 являются контактами прерывания. Затем подключите прерывание в stup:
attachInterrupt(2, wheel, RISING); //колесо произвольное
Затем создайте код прерывания:
void wheel(){
int sB = digitalRead(P_B);
if (sA == sB) { //По часовой стрелке
position++;
}
else { // против часовой стрелки
position--;
}
Затем в своем цикле вы можете распечатать позицию, когда она изменится, чтобы прочитать текущую позицию:
if(lastPosition != position){
Serial.println(position);
}
Надеюсь, это поможет... Обратите внимание, что если вы используете оба прерывания, вы получаете лучшее разрешение, но ограничение скорости ниже.
У меня проблемы с пониманием этого. Не могли бы вы предоставить фрагмент кода?, @Ashish Gogna
- Как устранить сообщение об ошибке "assignment of function 'void digitalWrite (uint8_t, uint_8)"?
- Как сохранить данные на SD-карту с помощью модуля защиты памяти SPI
- Требуются точные значения цвета RGB с помощью датчика цвета tcs3200 RGB
- Как запрограммировать 2 ультразвуковых датчика, один на серводвигателе и один прикрепленный на передней стороне автомобиля?
- Использование значения MAX30100 SpO2 для включения светодиода
- Приоритет одного датчика
- Датчик удара не работает в файле
- avrdude ser_open() can't set com-state
Из описания товара непонятно, 1 или 2 фототранзистора у датчика. Если он имеет только 1, вы не можете почувствовать направление. Если их два, это простое кодирование A/B, как и любой поворотный энкодер. Можете ли вы предоставить более конкретную и подробную таблицу данных?, @chrisl