Страница 2 из 5

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

Добавлено: 14 мар 2014, 12:50
aftaev
UAVpilot писал(а):специализированных нет т.к.
примерно про такие HCTL-2000

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

Добавлено: 14 мар 2014, 12:51
aftaev
Похоже заработало, на один оборот выдает 4000 импульсов. Скорости похоже хватит :)

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

Добавлено: 14 мар 2014, 12:58
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; // Стоп
}
}

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

Добавлено: 15 мар 2014, 15:30
AndyBig
aftaev писал(а):Подключил брат осцыл, посмотрели что происходит
И что происходило? Звон по фронтам? :)

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

Добавлено: 16 мар 2014, 21:39
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();
 }
}

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

Добавлено: 16 мар 2014, 22:12
aftaev
nkp, и как оно тестируется?
У меня экран TFT, потому при тестах все в СОМ порт гнал.

Сейчас уже програмулька на 80% написана, завтра к заказчику поедим.

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

Добавлено: 16 мар 2014, 22:15
nkp
считает риски за один оборот...

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

Добавлено: 16 мар 2014, 22:40
aftaev
Понял, там Z метка прописана. У меня и без этого было понятно что гнало по полной :)

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

Добавлено: 16 мар 2014, 22:42
aftaev
nkp, я смотрю ты в ардуину втягиваешься :hehehe:

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

Добавлено: 16 мар 2014, 23:09
nkp
unsigned int encoder0Pos = 0;
инта тебе хватает ?

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

Добавлено: 16 мар 2014, 23:46
aftaev
nkp писал(а):инта тебе хватает ?
неа, уже переделал :)

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

Добавлено: 17 мар 2014, 11:24
NightV
столкнулся позавчера с подобным, только я взял импульсы со шпинделя (10 на оборот) так как проводов не хватало взял 10в с инвертора и пустил в месу.
пляски были интересные.. на один пульс счетчик паказывал то 4 то 6 то 7 срабатываний, понял что "дребезг" но как на "открытом коллекторе" инвертора может быть дребезг?
короче проблема заключалась в том что энкодерный вход 7i76 никаким местром не связан с питанием станка, он питается от компа (кстате входа подтянуты к +, тоесть нужно что энкодер чмякал выход на -) когда протянул доп. проводок от входа энкодера (-) то все заработало. получается энкодер нужно питать именно с этого входа.
мож у тебя проблема в этом?

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

Добавлено: 17 мар 2014, 12:27
aftaev
энкодер от ардуины питался, больше ему питаться просто неоткуда было

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

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

Что лучше будет работать, поставить оптопары или дифф. сигналы?

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

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

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

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

Добавлено: 11 июл 2015, 18:28
aftaev
nkp писал(а):не помнишь - как избавился от помех??
Подключили к Ардуине напрямую запитав от 5в = куча помех.
Перевели энкодер на питание 24в + на входе Ардуины поставили оптопары + RC цепочки.

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

Добавлено: 12 июл 2015, 15:34
Meg@VaD
Arduino весьма тормозна для подобных задач. Хотя я на Uno пробовал с 5000. Если ещё и управлять чем-то надо, то фигня выходит(( А так - могу подкинуть схемку, как заведён энкодер в ЧПУ, старинная схема, годов 80х. Но попозже, сейчас нет под рукой.

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

Добавлено: 30 июл 2015, 23:34
isx
Бросайте вы уже АВР с Адруидами (сам бывший АВР-щик :) ). STM32- недорого, стабильно, эффективно. Там и аппартные энкодеры даже на самых дешевых моделях + фигова туча прерываний, на которых можно кучу полупрограммных обработчиков наделать. Да и вообще камень супер)

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

Добавлено: 30 июл 2015, 23:43
aftaev
Когда СТМ32 можно будет так же просто программировать как Ардуину тогда я и многие бросят :)

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

Добавлено: 31 июл 2015, 01:25
Serg
aftaev писал(а):Когда СТМ32 можно будет так же просто программировать как Ардуину тогда я и многие бросят :)
Всегда было можно.