|
Энкодер и дребезг, нужна помощь |
|
|
|
 |
Ответов
|
Oct 4 2013, 19:27
|

Знающий
   
Группа: Участник
Сообщений: 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); }
--------------------
Верить нельзя никому, даже себе. Мне - можно.
|
|
|
|
Сообщений в этой теме
BigCoster Энкодер и дребезг Apr 11 2007, 18:24 Visor Цитата(BigCoster @ Apr 11 2007, 23:24) По... Apr 11 2007, 18:44 BigCoster Цитата(Visor @ Apr 11 2007, 18:44) Ошибка... Apr 11 2007, 18:49  Visor 200Гц довольно много. Крыльчатка правильно рассчит... Apr 11 2007, 18:58 scifi Надо посмотреть осциллографом. Тогда будет понятне... Apr 11 2007, 19:21 CD_Eater Цитатадатчик положения (у меня крыльчатка + оптиче... Apr 11 2007, 19:22 Dog Pawlowa Цитата(BigCoster @ Apr 11 2007, 18:24) По... Apr 11 2007, 22:00 Линь Цитата(Dog Pawlowa @ Apr 12 2007, 02:00) ... Apr 2 2014, 02:23 Stas633 Цитата(BigCoster @ Apr 11 2007, 19:24) По... Apr 11 2007, 22:18 BigCoster Цитата(Stas633 @ Apr 11 2007, 22:18) Счит... Apr 12 2007, 10:25  Stas633 Цитата(BigCoster @ Apr 12 2007, 11:25) У ... Apr 12 2007, 13:44   BigCoster Цитата(Stas633 @ Apr 12 2007, 13:44) Наст... Apr 12 2007, 14:29    Stas633 Цитата(BigCoster @ Apr 12 2007, 15:29) Ко... Apr 12 2007, 15:13     BigCoster Цитата(Stas633 @ Apr 12 2007, 15:13) Обще... Apr 12 2007, 15:30      Dog Pawlowa Ну, если счетчик считает при остановленном двигате... Apr 12 2007, 15:44       BigCoster Цитата(Dog Pawlowa @ Apr 12 2007, 15:44) ... Apr 12 2007, 16:13        Dog Pawlowa Цитата(BigCoster @ Apr 12 2007, 16:13) Чт... Apr 12 2007, 16:51        Stas633 Цитата(BigCoster @ Apr 12 2007, 17:13) Ал... Apr 12 2007, 17:03        Visor Цитата(BigCoster @ Apr 12 2007, 21:13) РА... Apr 12 2007, 17:13         Stas633 Цитата(Visor @ Apr 12 2007, 18:13) Чтоб э... Apr 12 2007, 18:14          Visor Цитата(Stas633 @ Apr 12 2007, 23:14) Вним... Apr 12 2007, 19:08           Stas633 Цитата(Visor @ Apr 12 2007, 20:08) ....на... Apr 13 2007, 10:36            Visor Цитата(Stas633 @ Apr 13 2007, 15:36) Если... Apr 13 2007, 19:38          Dog Pawlowa Цитата(Stas633 @ Apr 12 2007, 18:14) [b].... Apr 12 2007, 19:20      Stas633 Цитата(BigCoster @ Apr 12 2007, 16:30) Пр... Apr 12 2007, 15:55     Visor Цитата(Stas633 @ Apr 12 2007, 20:13) прог... Apr 12 2007, 15:51 bgc много раз делал подобные схемы - заводил на вход т... Apr 12 2007, 09:49 ZAO Цитата(BigCoster @ Apr 11 2007, 19:24) Я ... Apr 12 2007, 10:27 BigCoster Цитата(ZAO @ Apr 12 2007, 10:27) Как раз ... Apr 12 2007, 10:40  ZAO Цитата(BigCoster @ Apr 12 2007, 11:40) Вс... Apr 12 2007, 10:46   BigCoster Цитата(ZAO @ Apr 12 2007, 10:46) А что за... Apr 12 2007, 11:00 ZAO Вы вполне можете завести одно таймерное прерывание... Apr 12 2007, 11:41 BigCoster Цитата(ZAO @ Apr 12 2007, 11:41) Вы вполн... Apr 12 2007, 11:55  ZAO Цитата(BigCoster @ Apr 12 2007, 12:55) То... Apr 12 2007, 13:05  rx3apf Цитата(BigCoster @ Apr 12 2007, 12:55) То... Apr 12 2007, 13:28 BigCoster Вот осцилограмма работы датчика, записанная в Soun... Apr 12 2007, 14:04 Stas633 Цитата(BigCoster @ Apr 12 2007, 15:04) ..... Apr 12 2007, 14:43  BigCoster Цитата(Stas633 @ Apr 12 2007, 14:43) Поло... Apr 12 2007, 15:10 _artem_ если есть механичекое дрожение крыльчатки при оста... Apr 12 2007, 14:13 _Sam_ ЦитатаВот осцилограмма работы датчика
........
Из ... Apr 12 2007, 23:03 BigCoster Цитата(_Sam_ @ Apr 12 2007, 23:03) Конечн... Apr 13 2007, 10:23 _Sam_ ЦитатаДело в том что импульсы от датчика считает с... Apr 13 2007, 11:32 BigCoster Цитата(_Sam_ @ Apr 13 2007, 11:32) Полнос... Apr 13 2007, 15:44 BigCoster ещё допишу...
отображать совсем точно значения не ... Apr 13 2007, 17:30 _Sam_ Наверное я не так понял программу.
А что вы делает... Apr 13 2007, 18:27 BigCoster Цитата(_Sam_ @ Apr 13 2007, 18:27) Наверн... Apr 13 2007, 19:14 _Sam_ Вроде дошло.
Попробуйте скачать какую-нибудь тер... Apr 13 2007, 19:48 BigCoster Цитата(_Sam_ @ Apr 13 2007, 19:48) Вроде ... Apr 13 2007, 20:09  Dog Pawlowa Цитата(BigCoster @ Apr 13 2007, 20:09) ... Apr 14 2007, 10:03   Stas633 Цитата(Dog Pawlowa @ Apr 14 2007, 11:03) ... Apr 14 2007, 19:44 Visor 'BigCoster'
Я сторонник отладки частями, и... Apr 13 2007, 19:51 BigCoster Спасибо всем за ответы, многие из них очень информ... Apr 18 2007, 14:28 mandr Имею по работе проекты, в которых используются дат... May 17 2007, 14:46 BigCoster Я для себя решил, что без осциллографа схему менят... May 17 2007, 15:36 OlegIvanov 1. Двухканальный энкодер (о чем упоминалось выше),... May 23 2007, 22:51 MaslovVG Просмотрел ветку. Мое мнение. Подавить дребезг при... May 24 2007, 06:06 vladimir_orl Тема конечно устарела, но сейчас столкнулся с тем ... Sep 3 2013, 05:44 Tarbal Цитата(vladimir_orl @ Sep 3 2013, 09:44) ... Sep 4 2013, 20:02  A. Fig Lee Цитата(Tarbal @ Sep 4 2013, 16:02) ... Да... Sep 10 2013, 01:07   Tarbal Цитата(A. Fig Lee @ Sep 10 2013, 05:07) К... Sep 11 2013, 00:05    A. Fig Lee Цитата(Tarbal @ Sep 10 2013, 20:05) Я на ... Sep 11 2013, 02:14     Tarbal Цитата(A. Fig Lee @ Sep 11 2013, 06:14) М... Sep 13 2013, 13:30 Genadi Zawidowski Какая скорость прихода импульсов с валкодера? Разр... Sep 9 2013, 18:13 Tarbal Цитата(Genadi Zawidowski @ Sep 9 2013, 22... Sep 9 2013, 19:35 A. Fig Lee Цитата(Genadi Zawidowski @ Sep 9 2013, 14... Oct 3 2013, 20:53 A. Fig Lee Состряпал hardware схемку.
Не тестировал, правда.
... Oct 4 2013, 20:28 Tarbal Подавитель дребезга на стейт машине не давит дребе... Oct 8 2013, 13:36
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|