Подавление дребезга энкодера

Контроллеры, драйверы, датчики, управляющие устройства.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

UAVpilot писал(а):специализированных нет т.к.
примерно про такие HCTL-2000
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

Похоже заработало, на один оборот выдает 4000 импульсов. Скорости похоже хватит :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

Подключил брат осцыл, посмотрели что происходит. Припаяли резисторы на к30 + конденсаторы на несколько пф + код малость подправили.
(для просмотра содержимого нажмите на ссылку)

Код: Выделить всё

#define encoder0PinA 2
#define encoder0PinB 3
#include <ITDB02_Graph16.h>
extern uint8_t SmallFont[];
extern uint8_t BigFont[];
extern uint8_t SevenSegNumFont[];
ITDB02 myGLCD(38,39,40,41,ITDB32S);   // Задаем используемый экран

volatile unsigned int encoder0Pos = 0;
unsigned int tmp = 0;
unsigned int Aold = 0;
unsigned int Bnew = 0;
int btn_Reset=0;
int btn_Start=0;
int btn_Stop=0;
boolean fl_Start = 0; // флаг старт/пуск 



void setup() {
  pinMode(encoder0PinA, INPUT); 
  pinMode(encoder0PinB, INPUT);
// encoder pin on interrupt 0 (pin 2)
  attachInterrupt(0, doEncoderA, CHANGE);
// encoder pin on interrupt 1 (pin 3)
  attachInterrupt(1, doEncoderB, CHANGE);
  
  myGLCD.InitLCD(LANDSCAPE); // задаем экран горизонтально 
  //myGLCD.InitLCD(); // задаем экран вертикально
  myGLCD.clrScr(); // очистка экрана
  myGLCD.fillScr (0,0,0); // фон экрана 
  myGLCD.setColor(0, 255, 0); // цвет букв
  myGLCD.setBackColor(0, 0, 0); // цвет фона букв

  pinMode (A0, INPUT);
  pinMode (A1, INPUT);
  pinMode (A2, INPUT); 
  
// set up the Serial Connection 
//  Serial.begin (115200);
}

void loop(){
  //Check each changes in position
  Buttons(); // опрос кнопок
  if (tmp != encoder0Pos) {
    //Serial.println(encoder0Pos, DEC);
    //tmp = encoder0Pos;
    
    myGLCD.setFont(BigFont); // шрифт большой
    myGLCD.print("        ", 50, 100);
    myGLCD.print("        ", 50, 120);    
    myGLCD.setFont(SevenSegNumFont); // семигментные буквы
    myGLCD.printNumI(encoder0Pos, 50, 100); 
    
  }
  delay(50);
}


// Обработка прерываний
// Interrupt on A changing state
void doEncoderA(){
  Bnew^Aold ? encoder0Pos++:encoder0Pos--;
  Aold=digitalRead(encoder0PinA);
}
// Interrupt on B changing state
void doEncoderB(){
  Bnew=digitalRead(encoder0PinB);
  Bnew^Aold ? encoder0Pos++:encoder0Pos--;
}

// Опрос кнопок
void Buttons(){
myGLCD.clrScr(); // очистка экрана
myGLCD.setFont(SevenSegNumFont); // семигментные буквы
btn_Stop = analogRead (0);  
btn_Start = analogRead (1);  
btn_Reset = analogRead (2);  

// Сброс
if (btn_Reset < 10){
  encoder0Pos = 0; // сбрасываем энкодер
} 

// Пуск
if (btn_Start < 10){
   fl_Start = 1; // Пуск
} 

// Стоп
if (btn_Stop < 10){
   fl_Start = 0; // Стоп
}
}
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
AndyBig
Мастер
Сообщения: 3971
Зарегистрирован: 07 мар 2014, 04:01
Репутация: 1121
Откуда: юг России
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение AndyBig »

aftaev писал(а):Подключил брат осцыл, посмотрели что происходит
И что происходило? Звон по фронтам? :)
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение nkp »

тест энкодера(ардуино мега,энкодер 2500,выход Line Driver,lcd 12x2):

Код: Выделить всё

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);
unsigned int encoder = 0;
unsigned int zcnt = 0;
void setup() {
  lcd.begin(12, 2);
  pinMode(2, INPUT);   //заводим Z
  digitalWrite(2, HIGH); 
  pinMode(3, INPUT);  //заводим A(B)
  digitalWrite(3, HIGH);
  attachInterrupt(1, countA, RISING);
  attachInterrupt(0, Zcount, RISING);
}
void loop(){ 
  lcd.setCursor(0, 1);
  lcd.print("N = ");      
  lcd.print(encoder);    
  delay(50);
}
void countA(){
if (zcnt > 0 && zcnt < 2){
  encoder++;
 }
}
void Zcount(){
 zcnt++;
 if(zcnt > 2){
 zcnt=0;
 encoder=0;
 lcd.clear();
 }
}
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

nkp, и как оно тестируется?
У меня экран TFT, потому при тестах все в СОМ порт гнал.

Сейчас уже програмулька на 80% написана, завтра к заказчику поедим.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение nkp »

считает риски за один оборот...
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

Понял, там Z метка прописана. У меня и без этого было понятно что гнало по полной :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

nkp, я смотрю ты в ардуину втягиваешься :hehehe:
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение nkp »

unsigned int encoder0Pos = 0;
инта тебе хватает ?
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

nkp писал(а):инта тебе хватает ?
неа, уже переделал :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
NightV
Почётный участник
Почётный участник
Сообщения: 6610
Зарегистрирован: 30 дек 2011, 09:14
Репутация: 2279
Настоящее имя: Владимир Айрапетян
Откуда: Israel
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение NightV »

столкнулся позавчера с подобным, только я взял импульсы со шпинделя (10 на оборот) так как проводов не хватало взял 10в с инвертора и пустил в месу.
пляски были интересные.. на один пульс счетчик паказывал то 4 то 6 то 7 срабатываний, понял что "дребезг" но как на "открытом коллекторе" инвертора может быть дребезг?
короче проблема заключалась в том что энкодерный вход 7i76 никаким местром не связан с питанием станка, он питается от компа (кстате входа подтянуты к +, тоесть нужно что энкодер чмякал выход на -) когда протянул доп. проводок от входа энкодера (-) то все заработало. получается энкодер нужно питать именно с этого входа.
мож у тебя проблема в этом?
Всё просто! если знаешь КАК!
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

энкодер от ардуины питался, больше ему питаться просто неоткуда было
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

Появилась новая проблемка. Когда дома отлаживали все пучком работает. Притащили на производство, там начали цифры бегать при переключении электроклапанов/пускателей. Отключаем кабель энкодера - помехи не ловит, подключаем кабель энкодера(экранированный) ловит помехи. Помехи идут только при переключении пускателей.

Что лучше будет работать, поставить оптопары или дифф. сигналы?
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение nkp »

aftaev писал(а):Появилась новая проблемка. Когда дома отлаживали все пучком работает. Притащили на производство, там начали цифры бегать при переключении электроклапанов/пускателей. Отключаем кабель энкодера - помехи не ловит, подключаем кабель энкодера(экранированный) ловит помехи. Помехи идут только при переключении пускателей.

Что лучше будет работать, поставить оптопары или дифф. сигналы?
не помнишь - как избавился от помех??
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

nkp писал(а):не помнишь - как избавился от помех??
Подключили к Ардуине напрямую запитав от 5в = куча помех.
Перевели энкодер на питание 24в + на входе Ардуины поставили оптопары + RC цепочки.
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Meg@VaD
Новичок
Сообщения: 24
Зарегистрирован: 14 июн 2015, 12:03
Репутация: 3
Настоящее имя: Вадик
Откуда: Бор
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение Meg@VaD »

Arduino весьма тормозна для подобных задач. Хотя я на Uno пробовал с 5000. Если ещё и управлять чем-то надо, то фигня выходит(( А так - могу подкинуть схемку, как заведён энкодер в ЧПУ, старинная схема, годов 80х. Но попозже, сейчас нет под рукой.
isx
Опытный
Сообщения: 157
Зарегистрирован: 17 июн 2013, 14:21
Репутация: 17
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение isx »

Бросайте вы уже АВР с Адруидами (сам бывший АВР-щик :) ). STM32- недорого, стабильно, эффективно. Там и аппартные энкодеры даже на самых дешевых моделях + фигова туча прерываний, на которых можно кучу полупрограммных обработчиков наделать. Да и вообще камень супер)
aftaev
Зачётный участник
Зачётный участник
Сообщения: 34042
Зарегистрирован: 04 апр 2010, 19:22
Репутация: 6194
Откуда: Казахстан.
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение aftaev »

Когда СТМ32 можно будет так же просто программировать как Ардуину тогда я и многие бросят :)
Дилетанту сложные вещи кажутся очень простыми, и только профессионал понимает насколько сложна самая простая вещь
Кто хочет - ищет возможности, кто не хочет - ищет оправдание.
Найди работу по душе и тебе не придется работать.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5183
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Подавление дребезга энкодера

Сообщение Serg »

aftaev писал(а):Когда СТМ32 можно будет так же просто программировать как Ардуину тогда я и многие бросят :)
Всегда было можно.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Ответить

Вернуться в «Электроника»