Энкодер считает через 4
- Войдите на сайт для отправки комментариев
Сб, 01/07/2017 - 18:43
Энкодер считает за 1 его щелчок (один оборот 20 щелчков) на плюс или минус 4. Если остановить ручку в промежуточном положении между щелчками, то может нормально считать с шагом 1, но эти положения не фиксируются и неудобно.
Как поправить шаг счета ?
Дребезга видимо нет тк импульсами не чудит и направление не путает. На каждый выход энкодера поставил по конденсатору с маркировкой 102 (0,01 или 0,1 мкф ?) из того что было и по резистору 1 кОм.
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C LCD(0x27,16,2); #include <Encoder.h> // https://github.com/PaulStoffregen/Encoder Encoder Enc(3,4); long currPos; //------------------------------------------------------------ void setup(void) { Serial.begin(115200); Serial.println(""); LCD.init(); LCD.backlight(); } //------------------------------------------------------------ void loop(void) { currPos = Enc.read(); LCD.setCursor(0, 0); LCD.print("POS "); LCD.print((int)currPos); LCD.print(" "); Serial.print("POS "); Serial.println((int)currPos); }
currPos = Enc.read() / 4;
у меня такие энкодеры есть - там не дребезг, а механическая фиксация через четыре импульса.
попробуй плавно крутить и заметишь, что таки оно считает по 1-му но фиксируется на 4
у меня такие энкодеры есть - там не дребезг, а механическая фиксация через четыре импульса.
попробуй плавно крутить и заметишь, что таки оно считает по 1-му но фиксируется на 4
Добавил деление << 2, но пока энкодер механически не разболтался и может удерживаться в промежуточных положениях между фиксациями и после такого изменения если его крутить очень медленно, то на 1 щелчок выдает 2 импульса - издержки целочисленнного деления нечетных чисел.
Но в принципе терпимо.
Вполне нормально отрабатывается каждое изменение... 80 значений за оборот...
https://www.youtube.com/watch?v=QvOp7hDItw8
предполагаю, Вы :
1) не прочли пост Клапауцего про механическую фиксацию на каждом 4 импульсе
2) или используете другой энкодер, иную версию библиотеки и тд.
80 значений за оборот...
сколько значений на один щелчок?
Monday, это нормально. 80 отсчетов на оборот - это максимальное разрешение данного вида энкодера.
Собственно, за один оборот каждый из контактов (А и В) совершает по 20 циклов замыкание/размыкание. В зависимости от того, как настроить прерывания можно получать 20, 40 или 80 отсчетов на оборот.
80 отсчетов реализуется при использовании двух прерываний по любому изменению уровня входного сигнала.
40 отсчетов реализуется либо по одному прерыванию (как описано выше), либо при настройке двух преоываний на срабатывание только по переднему или только по заднему фронту.
20 отсчетов реализуется при помощи одного прерывания при настройке только по переднему или только по заднему фронту.
В общем, от режима 80 отсчетов имеет смысл отказываться, чтобы сэкономить одно прерывание. Что, в принципе, не так уж и нужно: можно настроить энкодер на PCINT, а они у Uno есть на каждой ноге.
А делать меньше 40 отсчетов IMHO вообще смысла нет - загрубить показания проще программно, еси такая необходимость вдруг возникнет (делением на 2 или 4).
Monday, это нормально. 80 отсчетов на оборот - это максимальное разрешение данного вида энкодера.
ещё один коматоз...
12 механических щелчков за 1 оборот даёт энкодер - меньше 4-х отсчётов сделать в принципе можно, но физически - нет.
*следующим ползателям, читайте тему, прежде чем въезжать на тупом бульдозере.
Клоп, похоже, не воткнул, ну да это его проблемы.
Дребезга видимо нет тк импульсами не чудит и направление не путает. На каждый выход энкодера поставил по конденсатору с маркировкой 102 (0,01 или 0,1 мкф ?) из того что было и по резистору 1 кОм.
Вы поставили конденсатор на 0.001 мкФ. Вместе с резистором на 1кОм получается, Вы занизили постоянную времени RC цепи в 100 раз. Пока энкодер новый, это пройдет, но по мере износа и увеличения дребезга таких номиналов может оказаться недостаточно.