Энкодер считает через 4

Monday
Offline
Зарегистрирован: 01.07.2017

Энкодер считает за 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);
}
Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

currPos = Enc.read() / 4;

у меня такие энкодеры есть - там не дребезг, а механическая фиксация через четыре импульса.

попробуй плавно крутить и заметишь, что таки оно считает по 1-му но фиксируется на 4

Monday
Offline
Зарегистрирован: 01.07.2017

Клапауций 112 пишет:
currPos = Enc.read() / 4;

у меня такие энкодеры есть - там не дребезг, а механическая фиксация через четыре импульса.

попробуй плавно крутить и заметишь, что таки оно считает по 1-му но фиксируется на 4

Спасибо,  заметил.

Добавил деление << 2, но пока энкодер механически не разболтался и  может удерживаться в  промежуточных положениях между фиксациями и  после такого изменения если его крутить очень медленно, то на 1 щелчок выдает 2 импульса - издержки целочисленнного деления нечетных чисел.

Но в принципе терпимо.

renoshnik
Offline
Зарегистрирован: 11.04.2013

Вполне нормально отрабатывается каждое изменение... 80 значений за оборот...

https://www.youtube.com/watch?v=QvOp7hDItw8

 

Monday
Offline
Зарегистрирован: 01.07.2017

renoshnik пишет:
Вполне нормально отрабатывается каждое изменение... 80 значений за оборот... https://www.youtube.com/watch?v=QvOp7hDItw8

предполагаю, Вы :

1) не прочли пост Клапауцего про механическую фиксацию на каждом 4 импульсе

2) или используете другой энкодер, иную версию библиотеки и тд.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

renoshnik пишет:

80 значений за оборот...

сколько значений на один щелчок?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Monday, это нормально. 80 отсчетов на оборот - это максимальное разрешение данного вида энкодера.

Собственно, за один оборот каждый из контактов (А и В) совершает по 20 циклов замыкание/размыкание. В зависимости от того, как настроить прерывания можно получать 20, 40 или 80 отсчетов на оборот.

80 отсчетов реализуется при использовании двух прерываний по любому изменению уровня входного сигнала.

40 отсчетов реализуется либо по одному прерыванию (как описано выше), либо при настройке двух преоываний на срабатывание только по переднему или только по заднему фронту.

20 отсчетов реализуется при помощи одного прерывания при настройке только по переднему или только по заднему фронту.

В общем, от режима 80 отсчетов имеет смысл отказываться, чтобы сэкономить одно прерывание. Что, в принципе, не так уж и нужно: можно настроить энкодер на PCINT, а они у Uno есть на каждой ноге.

А делать меньше 40 отсчетов IMHO вообще смысла нет - загрубить показания проще программно, еси такая необходимость вдруг возникнет (делением на 2 или 4).

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

andriano пишет:

Monday, это нормально. 80 отсчетов на оборот - это максимальное разрешение данного вида энкодера.

ещё один коматоз...

12 механических щелчков за 1 оборот даёт энкодер - меньше 4-х отсчётов сделать в принципе можно, но физически - нет.

*следующим ползателям, читайте тему, прежде чем въезжать на тупом бульдозере.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Клоп, похоже, не воткнул, ну да это его проблемы.

Monday пишет:

Дребезга видимо нет тк импульсами не чудит и направление не путает. На каждый выход энкодера поставил по конденсатору с маркировкой 102 (0,01 или 0,1 мкф ?)  из того что было  и по резистору 1 кОм.

Вы поставили конденсатор на 0.001 мкФ. Вместе с резистором на 1кОм получается, Вы занизили постоянную времени RC цепи в 100 раз. Пока энкодер новый, это пройдет, но по мере износа и увеличения дребезга таких номиналов может оказаться недостаточно.