реклама на сайте
подробности

 
 
5 страниц V  « < 3 4 5  
Reply to this topicStart new topic
> Энкодер и дребезг, нужна помощь
Tarbal
сообщение Sep 11 2013, 00:05
Сообщение #61


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(A. Fig Lee @ Sep 10 2013, 05:07) *
Классная идея. disco.gif


Я на похожем алгоритме сделал модем приемник FSK 1200-2200 на PIC16C71 с системной частотой 1 мегагерц. Подобные на DSP 40 мегагерцовых делали sm.gif

У меня дома есть действующая модель. Приходи покажу.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Sep 11 2013, 02:14
Сообщение #62


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Tarbal @ Sep 10 2013, 20:05) *
Я на похожем алгоритме сделал модем приемник FSK 1200-2200 на PIC16C71 с системной частотой 1 мегагерц. Подобные на DSP 40 мегагерцовых делали sm.gif

У меня дома есть действующая модель. Приходи покажу.

Мы в одном городе? sm.gif


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 13 2013, 13:30
Сообщение #63


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(A. Fig Lee @ Sep 11 2013, 06:14) *
Мы в одном городе? sm.gif


В разных, но нет ничего невозможного sm.gif
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Oct 3 2013, 20:53
Сообщение #64


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Genadi Zawidowski @ Sep 9 2013, 14:13) *
.


Идея красивая, но чтото я не понял как дребезг давится.
Например, у меня 11 на входе, потом я получил 0:
11-10, далее в результате дребезга 10-11, 11-10, 10-11 и так далее.

Сообщение отредактировал IgorKossak - Oct 4 2013, 11:44
Причина редактирования: избыточное цитирование


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Oct 4 2013, 19:27
Сообщение #65


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Добил.

В принципе, избавлятся от дребезга в енкодере проще, чем в кнопке.
Так как начало и конец импульса всегда отделены началом и концом другого импульса.
Типа:
Нажал1-Нажал2-Отжал1-Отжал2.
Между нажал1 и отжал1 всегда есть нажал2.

Вывод: надо играть на edges.
Не важен дребезг, сколько не дребезжи, после первого edge сигнал игнорируем
до активности на другом сигнале.
Еще мысль:
после первого edge имеем направление движения:
или 10, или 01, после второго edge фиксируем предыдущее состояние (направление).

Наваял код в Microchip X Lab xc8
для PIC18F14K50 - то, что под рукой было.

Преобразовывает в gray code - в зависимости от направления вращения состояния
меняются:

00
01
11
10
00

или
00
10
11
01
00

CODE
/*
* File: main.c
* Author: dmitriy
*
* Created on September 17, 2013, 10:55 PM
*/

#include <htc.h>
#include <stdlib.h>
#include <stdint.h> /* For uint8_t definition */

#include "config.h"

uint8_t values;

void Init()
{
// Input PB4, PB5 for encoder
// Output PC1, PC2
TRISC = 0xF1;
ANSEL = 0;
ANSELH = 0;

// Enable pullups on PORTB
INTCON2bits.NOT_RABPU = 0;

//Enable interrupt on change for PB4, PB5, PB6
IOCBbits.IOCB4 = 1;
IOCBbits.IOCB5 = 1;

//Enable interrupt on change
INTCON2bits.RABIP = 1;
INTCONbits.RBIE = 1;
INTCONbits.PEIE = 1;
INTCONbits.GIE = 1;


}

void interrupt isr(void) {
if (INTCONbits.RBIF) {
values = (PORTB & 0x30) >> 4;
INTCONbits.RBIF = 0;
}
}


/*
*
*/
int main(int argc, char** argv) {
uint8_t edges = 0;
uint8_t edge;
uint8_t old_values;
uint8_t grey = 0;
uint8_t myvalue;

Init();
old_values = (PORTB & 0x30) >> 4;

while (1) {
myvalue = values;
edge = myvalue ^ old_values;
old_values = myvalue;
if (edge) {
//activity detected
if (edge != edges) {
//activity on new edge
edges = edge;
if (!myvalue) {
//fix direction
// which depends on edge
if (edge & 0x01) {
switch (grey) {
case 00:
grey = 0x01;
break;
case 0x01:
grey = 0x03;
break;
case 0x03:
grey = 0x02;
break;
case 0x02:
grey = 0x00;
break;
} //switch
} else {
switch (grey) {
case 00:
grey = 0x02;
break;
case 0x02:
grey = 0x03;
break;
case 0x03:
grey = 0x01;
break;
case 0x01:
grey = 0x00;
break;
} //switch
} //if (edge & 0x01)
PORTC = grey << 1;
} //if (!myvalue)
} //if (edge != edges)
}
}

return (EXIT_SUCCESS);
}


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Oct 4 2013, 20:28
Сообщение #66


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Состряпал hardware схемку.
Не тестировал, правда.
Гдето так:



--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Oct 8 2013, 13:36
Сообщение #67


Профессионал
*****

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Подавитель дребезга на стейт машине не давит дребезг каждый шаг, но за оборот (4 шага в одном направлении) давит.
Идея в том, что сумму надо поделить на 4 и если она изменилась, то достоверно было событие. При целом делении эффект дребезга становится меньше одного, а значит ноль. тем он и отфильтровывается.

Сообщение отредактировал Tarbal - Oct 8 2013, 13:37
Go to the top of the page
 
+Quote Post
Линь
сообщение Apr 2 2014, 02:23
Сообщение #68


Частый гость
**

Группа: Участник
Сообщений: 189
Регистрация: 25-10-13
Пользователь №: 78 900



Цитата(Dog Pawlowa @ Apr 12 2007, 02:00) *
Обычно нужно, чтобы на счетный вход поступал практически идеальный сигнал (с крутыми фронтами).
Иначе на пологом фронте возможно срабатывание счетчика несколько раз от незначительных помех.
Простое добавление интегрирующей цепочки не помогает, естественно.
Попробуйте включить триггер Шмитта между интегрирующей цепочкой и счетным входом, или обработать сигнал программно, как Вам советовали выше.

Согласен. Можно также попробовать поиграть током через датчик (фототранзистор как правило) до пределов по даташиту.
Go to the top of the page
 
+Quote Post

5 страниц V  « < 3 4 5
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 21:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01412 секунд с 7
ELECTRONIX ©2004-2016