Трех-контактный энкодер
Трех-контактный энкодер
Здравствуйте уважаемые форумчане и знатоки программы Flprog. Появилась необходимость подключить вот такой [spoiler]
[/spoiler] подрулевой джойстик от рено к ардуино, ну с кнопками то все понятно, а вот с энкодером нет. Как определить направление вращения, ни как не могу сообразить, рассчитываю на вашу помощь. Буду благодарен в том числе и материально.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Трех-контактный энкодер
Энкодер, но факту при каждом щелчке переключается на следующий контакт и в покое остается замкнутый. Фото в разобранном виде[spoiler]
[/spoiler]

-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
Трех-контактный энкодер
На какой угол поворачивается колесо при одном щелчке?
Если схема типичная как для энкодера, то блок есть соответствующий.
Если схема типичная как для энкодера, то блок есть соответствующий.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось Serg_Grn 26 май 2018, 22:18, всего редактировалось 1 раз.
Трех-контактный энкодер
Схема фото соответствует. На какой угол поворачивается при одном щелчке, не знаю, но можно посчитать. Перепрыгивает с контакта на контакт.
Отправлено спустя 4 минуты 21 секунду:
Полный оборот 12 щелчков. Соответственно один щелчек 30 градусов. При вращении просто переключается с контакта на контакт, один щелчек один контакт. Перещелкнулся и остается замкнутым.
Отправлено спустя 4 минуты 21 секунду:
Полный оборот 12 щелчков. Соответственно один щелчек 30 градусов. При вращении просто переключается с контакта на контакт, один щелчек один контакт. Перещелкнулся и остается замкнутым.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
Трех-контактный энкодер
Похоже общий (brown) при вращении в одну сторону замыкается в поледовательности 1-3-2 (и так по кругу), а в другую сторону 2-3-1 соответственно. Думаю если точки 1,2,3 подать на три входа ардуины и построить логическую цепь в соответствии с такими вариантами, то можно определять направление вращения.
Трех-контактный энкодер
Сейчас в моей программке используется блок матричной клавиатуры. Линии джойстика 2, 3, 1 подключены к выходам контроллера. Линии 5, 4, 6 к входам. На входа подключенных к линиям 4, 5, мы понимаем какая из кнопок нажата. На входе подключенной к линии 6 понимаем какой из контактов энкодера замкнут. В программе условно принято обозначение контактов ABC. При вращении колесика влево идет перебор ABC ABC ABC и т.д.. В право CBA CBA CBA и т.д..
Последний раз редактировалось demid34 26 май 2018, 22:33, всего редактировалось 1 раз.
Трех-контактный энкодер
[ref]Serg_Grn[/ref], Вы все правильно поняли, но вот у меня затык я никак не могу построить соответствующую логическую цепочку что бы определить направление вращения.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
Трех-контактный энкодер
Попробовал собрать что-то похожее... Знаю что использование строк - не лучшее решение, но как иначе сравнивать комбинации придумать не смог...
Задумка такая: контакт замыкается, при этом запоминается соответствующая цифра, дальше этот контакт размыкается и вместо него замыкается другой, при этом прежняя цифра запоминается на 1 мс., в течение этого времени анализируется комбинация двух цифр и результат подается на один из выходов. Через 1 мс. "старая" цифра сбрасывается и может быть замкнут следующий контакт для сравнения.
Ну и получается, что на одном из выходов сигнал будет в течение 1 мс. после замыкания очередного контакта.
(Номера входов "1","2","3" соответствуют номерам проводов в схеме, на которые замыкается общий).
Данный вариант не рабочий.
Задумка такая: контакт замыкается, при этом запоминается соответствующая цифра, дальше этот контакт размыкается и вместо него замыкается другой, при этом прежняя цифра запоминается на 1 мс., в течение этого времени анализируется комбинация двух цифр и результат подается на один из выходов. Через 1 мс. "старая" цифра сбрасывается и может быть замкнут следующий контакт для сравнения.
Ну и получается, что на одном из выходов сигнал будет в течение 1 мс. после замыкания очередного контакта.
(Номера входов "1","2","3" соответствуют номерам проводов в схеме, на которые замыкается общий).
Данный вариант не рабочий.
Последний раз редактировалось Serg_Grn 27 май 2018, 15:11, всего редактировалось 2 раза.
Трех-контактный энкодер
Проверил, не работает как надо. Крутишь влево идут импульсы больше, больше, меньше. Вправо также больше, больше, меньше.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
Трех-контактный энкодер
Входы 1,2,3 ардуины нужно замыкать на Gnd, т.е. общий (brown) - это минус питания ардуины.
Возможно, защиту от дребезга нужно отключить, поиграться надо.
Возможно, защиту от дребезга нужно отключить, поиграться надо.
Последний раз редактировалось Serg_Grn 27 май 2018, 13:36, всего редактировалось 1 раз.
Трех-контактный энкодер
[ref]Serg_Grn[/ref], все так же, к сожалению.
Отправлено спустя 2 часа 14 минут 38 секунд:
Вот нашел скетч в котором есть обработка сигналов такого энкодера. Но как это делается мне непонятно.
Отправлено спустя 2 часа 14 минут 38 секунд:
Вот нашел скетч в котором есть обработка сигналов такого энкодера. Но как это делается мне непонятно.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
Трех-контактный энкодер
Вот вариант набросал, визуально вроде должно работать, к сожалению не могу проверить на железе.
При переключении на следующий контакт, должна на 10 мс. появляться "1" на выходе "больше" или "меньше", в зависимости от того, куда переключилось.
Проверьте и скажите выходит или нет, а то самому интересно

У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Лейтенант
- Сообщения: 305
- Зарегистрирован: 18 сен 2015, 14:00
- Откуда: Саратов
- Имя: Сергей
- Поблагодарили: 1 раз
Трех-контактный энкодер
Я правильно понял, что 6 контакт всегда остается замкнутым либо с 1 либо со 2 контактом в зависимости от щелчка. Или он остается замкнутым с 3?demid34 писал(а): 26 май 2018, 21:42Энкодер, но факту при каждом щелчке переключается на следующий контакт и в покое остается замкнутый.
S
Трех-контактный энкодер
[ref]KSP[/ref], контакт 6 замыкается и остается замкнутым либо с 1 либо с 2 либо с 3. Один щелчек один контакт.
Отправлено спустя 5 часов 1 минуту 57 секунд:
Отправлено спустя 5 часов 1 минуту 57 секунд:
Все отлично! Премного благодарен! Сам бы ни за что не додумался. Блок-схема получилась весьма насыщенная.Serg_Grn писал(а): 27 май 2018, 13:06Вот вариант набросал, визуально вроде должно работать, к сожалению не могу проверить на железе.
При переключении на следующий контакт, должна на 10 мс. появляться "1" на выходе "больше" или "меньше", в зависимости от того, куда переключилось.
Проверьте и скажите выходит или нет, а то самому интересно![]()
Определение напр. вращения.flp
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
Трех-контактный энкодер
Кстати надо заметить, что это не энкодер как таковой, а просто круговой переключатель с тремя контактами.
Не мешало бы схему эту в пользовательский блок впихнуть, может пригодиться в будущем.
Не мешало бы схему эту в пользовательский блок впихнуть, может пригодиться в будущем.
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Трех-контактный энкодер
Можно проще сделать.
На выходах 1 на один цикл.
На второй плате счётчик, для теста, как и переменная дельта.
Переменная chislo - обязательна, так как явно указывает на размерность числа - байт.
Проверен.
[spoiler=Код]
Код: Выделить всё
byte new_chislo, old_chislo, chislo;
bool Down = 0, Up = 0 ; // выходы
bool Input_1, Input_2, Input_3; // входы
void setup(){}
void loop()
{
if (Input_1) {new_chislo = 1;}
if (Input_2) {new_chislo = 2;}
if (Input_3) {new_chislo = 3;}
chislo = old_chislo - new_chislo;
Down = ( (chislo == (1) || (chislo == 254) );
Up = ( (chislo == 2) || (chislo == 255) );
old_chislo = new_chislo;
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
-
- Лейтенант
- Сообщения: 338
- Зарегистрирован: 11 фев 2018, 13:07
- Имя: Сергей
- Благодарил (а): 5 раз
- Поблагодарили: 1 раз
Трех-контактный энкодер
Не могу понять: если цифра предыдущая 2, новая 3, то 2-3= -1. В переменную "число" что -1 запишется? Там ведь числа от 0 до 255.
И вообще непонятно как при этом формируется импульс "больше", в общем не могу понять как работает схема...
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Трех-контактный энкодер
У байта нет отрицательных чисел, всё "по кругу" - в сторону уменьшения 2, 1, 0, 255, 244....Serg_Grn писал(а): 28 май 2018, 19:53Не могу понять: если цифра предыдущая 2, новая 3, то 2-3= -1. В переменную "число" что -1 запишется? Там ведь числа от 0 до 255.
И вообще непонятно как при этом формируется импульс "больше", в общем не могу понять как работает схема...
Поэтому приходится явно указывать - результат должен быть байтом, переменная "число".
Всё работает - проверенно в железе. Проект приложен.

мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей