Например TDA7294

Форум РадиоКот • Просмотр темы - Quadrature encoder от колесика мышки
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс дек 28, 2025 10:40:33

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Quadrature encoder от колесика мышки
СообщениеДобавлено: Пн фев 10, 2014 00:00:04 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 102
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1433
Откуда: Калининград
Рейтинг сообщения: 0
Добрый день.

Пытаюсь применить колесико мышки в интерфейсе своей железки.
Подключаю энкодер как советуют - средний вывод к земле, два крайних вывода к микроконтроллеру.
Пытаюсь воспользоваться встроенным в таймеры STM32 режимом "Encoder interface mode".
Оно даже както работает, но с жутким "дребезгом" контактов.

Копипастил с такого кода.
Код инициализации таймера:
Спойлер
Код:
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
 
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_Period = 65535; // Maximal
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
 
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
 
    TIM_EncoderInterfaceConfig(TIM1, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);     
    TIM_Cmd(TIM1, ENABLE);   


"Полечил" такое поведение добавлением конденсаторов на пару десятков нанофарад на ножки энкодера. Но все равно - время от времени считает не в ту сторону. Попробовал пару энкодеров - одинаково криво считает.

Собственно вопрос - кто нить пробовал подключать такую штуковину? Как добиться четкого срабатывания?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Quadrature encoder от колесика мышки
СообщениеДобавлено: Пн фев 10, 2014 09:50:15 
Вымогатель припоя

Зарегистрирован: Ср янв 05, 2011 10:03:18
Сообщений: 581
Рейтинг сообщения: 0
balmer писал(а):
Добрый день.

Пытаюсь применить колесико мышки в интерфейсе своей железки.
Подключаю энкодер как советуют - средний вывод к земле, два крайних вывода к микроконтроллеру.
Пытаюсь воспользоваться встроенным в таймеры STM32 режимом "Encoder interface mode".
Оно даже както работает, но с жутким "дребезгом" контактов.

"Полечил" такое поведение добавлением конденсаторов на пару десятков нанофарад на ножки энкодера. Но все равно - время от времени считает не в ту сторону. Попробовал пару энкодеров - одинаково криво считает.

Собственно вопрос - кто нить пробовал подключать такую штуковину? Как добиться четкого срабатывания?
Подтяжка пинов по входу включена?
Я тоже когда-то с этим боролся. Ушел побежденным к софтовому варианту. Алгоритм от ЛИ. Сильно меня напрягало 4 импульса вместо одного.

_________________
С уважением,
Виктор.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Quadrature encoder от колесика мышки
СообщениеДобавлено: Пн фев 10, 2014 11:36:49 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 102
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1433
Откуда: Калининград
Рейтинг сообщения: 0
ut1wpr писал(а):
Подтяжка пинов по входу включена?
Я тоже когда-то с этим боролся. Ушел побежденным к софтовому варианту. Алгоритм от ЛИ. Сильно меня напрягало 4 импульса вместо одного.


Да, конечно включена. Именно через Pull Up подается напряжение на энкодер.
Причем в данных дребезг есть, но он не сильно велик. Когда просто выводишь на экран A и B каналы энкодера, то там логический уровень довольно четко сменяется.

Что ж, тогда попробую вместо полностью хардварного энкодера сделать "полухардварный", с interrupt на фронтах сигнала. Вместе со сглаживающими конденсаторами должно решить проблему.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Quadrature encoder от колесика мышки
СообщениеДобавлено: Пн фев 10, 2014 22:56:39 
Вымогатель припоя

Зарегистрирован: Ср янв 05, 2011 10:03:18
Сообщений: 581
Рейтинг сообщения: 0
balmer писал(а):
Что ж, тогда попробую вместо полностью хардварного энкодера сделать "полухардварный", с interrupt на фронтах сигнала. Вместе со сглаживающими конденсаторами должно решить проблему.
Не хочу быть назойливым, но в своих поделках всегда опирался на это:
Спойлер
Код:
//!**************************************************
//! Файл     : button_enc.h
//! Авторское право (с)  :
//! Разработка     :
//! Дата создания  :
//! Описание   
//!   
//!**************************************************
#ifndef __button_enc_H__
#define __button_enc_H__

typedef enum {NULL_ENC=0,PLUS_ENC,MINUS_ENC}REZ_ENC;
extern void Encoder_Init(void);
extern REZ_ENC  Encoder_Exe(void);
#endif // __button_enc_H__

//!**************************************************
//! Файл     : button_enc.c
//! Авторское право (с)  :
//! Разработка     : Ридико Л.И.
//! Модифицировал       :
//! Разработка     :
//! Дата создания  :
//! Описание   
//!   
//!**************************************************
#include "button_enc.h"
#include "hard_config.h"

//---------- Константы: ----------
enum { State0, StateA, StateB, StateAB }; //состояния энкодера
//---------- Переменные: ----------
static char EncPrev;      //предыдущее состояние энкодера
static char EncPrevPrev;  //пред-предыдущее состояние энкодера
//---------- Инициализация энкодера: ----------

void Encoder_Init(void)
{
 EncPrev = State0;       //инициализация предыдущего состояния
 EncPrevPrev = State0;   //инициализация пред-предыдущего состояния
}

//---------- Обработка энкодера: ----------

REZ_ENC Encoder_Exe(void)
{
 char EncCur = 0;
 
 REZ_ENC cRezEnc=NULL_ENC;
 
 if(!Pin_ENC_F1) {EncCur  = StateA;} //опрос фазы 1 энкодера
 if(!Pin_ENC_F2) {EncCur |= StateB;} //опрос фазы 2 энкодера
 if(EncCur != EncPrev)             //если состояние изменилось,
 {
   if(EncPrev == StateAB &&        //если предыдущее состояние StateAB
      EncCur != EncPrevPrev )      //и текущее и пред-предыдущее не равны,
   {
      if(EncCur == StateB) {cRezEnc=PLUS_ENC;}
      else{ cRezEnc=MINUS_ENC;}
   }
   EncPrevPrev = EncPrev;          //сохранение пред-предыдущего состояния
   EncPrev = EncCur;               //сохранение предыдущего состояния
 }
 return cRezEnc;
}

Использовать или не использовать прерывания - вам виднее. Я всегда находил в теле основной задачи вермя и место для вставки этого короткого поллинга.
Работает безукоризненно. Без конденсаторов. :)

_________________
С уважением,
Виктор.


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: Quadrature encoder от колесика мышки
СообщениеДобавлено: Вт фев 11, 2014 09:40:36 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 102
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1433
Откуда: Калининград
Рейтинг сообщения: 0
Спасибо за код. Разломал один из энкодеров. Оказывается ошибся в подключением. Думал что центральный провод это земля. Ан нет, земляной провод - это боковой :facepalm: :facepalm: .

Надо будет вечерком переподключить и проверить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Quadrature encoder от колесика мышки
СообщениеДобавлено: Вт фев 11, 2014 12:12:39 
Открыл глаза

Зарегистрирован: Пт апр 24, 2009 11:25:34
Сообщений: 71
Откуда: Rus
Рейтинг сообщения: 0
В механических контактах будет дребезг по любому.
Пробовал 2 варианта решения:
1 Капнуть в механизм силиконовое масло, но оно со временем может вытечь.
2 Ставить последовательно с контактом резистор 1-3к, а на вывод стм конденсатор 100-10н пФ.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Quadrature encoder от колесика мышки
СообщениеДобавлено: Вт фев 11, 2014 22:14:35 
Это не хвост, это антенна
Аватар пользователя

Карма: 12
Рейтинг сообщений: 102
Зарегистрирован: Вс дек 02, 2012 03:13:48
Сообщений: 1433
Откуда: Калининград
Рейтинг сообщения: 0
Припаял правильно энкодер. Код из первого поста стал работать идеально хорошо. Без всяких конденсаторов и иных ухищьрений.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Quadrature encoder от колесика мышки
СообщениеДобавлено: Вт фев 11, 2014 23:20:37 
Вымогатель припоя

Зарегистрирован: Ср янв 05, 2011 10:03:18
Сообщений: 581
Рейтинг сообщения: 0
makser писал(а):
В механических контактах будет дребезг по любому.
Дребезг будет. Но это не значит что его невозможно побороть программно.
Цитата:
Пробовал 2 варианта решения:
1 Капнуть в механизм силиконовое масло, но оно со временем может вытечь.
2 Ставить последовательно с контактом резистор 1-3к, а на вывод стм конденсатор 100-10н пФ.
Капнуть в герметезированный корпус не получится.
Резисторы и конденсаторы ухудшают скоростные свойства энкодера. А они часто очень важны, определяюще важны.
А посему - правильно созданный и выверенный алгоритм лучше костылей в виде случайных резисторов и конденсаторов. Изделия с такими костылями будут работать у одного и напрочь откажутся работать у другого.

_________________
С уважением,
Виктор.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y