Страница 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, я смотрю ты в ардуину втягиваешься

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 можно будет так же просто программировать как Ардуину тогда я и многие бросят

Всегда было можно.