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

 
 
5 страниц V  « < 2 3 4 5 >  
Reply to this topicStart new topic
> Энкодер и дребезг, нужна помощь
_Sam_
сообщение Apr 13 2007, 19:48
Сообщение #46


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Вроде дошло. smile.gif
Попробуйте скачать какую-нибудь терминальную программку(например такую) в которой можно cts,rts дёргать или ножки лпт. Затем ножку с LPT или COM подключите вместо датчика.Нажатиями на кнопки в программе проэмитируйте работу датчика.Будет ли насчитывать?
Также можно просимулировать всё это в кейле. Там для этого какой-то скриптовый язык есть.

Более подходящая программа. Приятное доп. к вашему осциллографу smile.gif
Go to the top of the page
 
+Quote Post
Visor
сообщение Apr 13 2007, 19:51
Сообщение #47


Местный
***

Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428



'BigCoster'
Я сторонник отладки частями, и чтобы определиться где "хандрит", в железе или в софте, было бы неплохо написать совсем простенькую программку подсчета импульсов, может даже без прерываний.
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Apr 13 2007, 20:09
Сообщение #48


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009



Цитата(_Sam_ @ Apr 13 2007, 19:48) *
Вроде дошло. smile.gif
Попробуйте скачать какую-нибудь терминальную программку(например такую) в которой можно cts,rts дёргать или ножки лпт. Затем ножку с LPT или COM подключите вместо датчика.Нажатиями на кнопки в программе проэмитируйте работу датчика.Будет ли насчитывать?
Также можно просимулировать всё это в кейле. Там для этого какой-то скриптовый язык есть.

Более подходящая программа. Приятное доп. к вашему осциллографу smile.gif


Пасибки пребольшое a14.gif
smile3046.gif разберёмся...

Цитата(Visor @ Apr 13 2007, 19:51) *
'BigCoster'
Я сторонник отладки частями, и чтобы определиться где "хандрит", в железе или в софте, было бы неплохо написать совсем простенькую программку подсчета импульсов, может даже без прерываний.

Завтра приступим...

Сообщение отредактировал BigCoster - Apr 13 2007, 20:10
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 14 2007, 10:03
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(BigCoster @ Apr 13 2007, 20:09) *
smile3046.gif разберёмся...
Завтра приступим...

Мне нравится желание изобрести что-то новое, оригинальное, но не нравится упертое желание наступить на грабли.
Поскольку у меня есть определенный опыт с позиционированием (автофокус), то вынужден напомнить, что задача не имеет надежного решения с одним каналом. Быть может, если создается поделка для себя... Но ТЗ мы тут тоже не увидели.
Короче, успехов! smile.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Stas633
сообщение Apr 14 2007, 19:44
Сообщение #50


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

Группа: Свой
Сообщений: 105
Регистрация: 6-01-06
Пользователь №: 12 901



Цитата(Dog Pawlowa @ Apr 14 2007, 11:03) *
Мне нравится желание изобрести что-то новое, оригинальное, но не нравится упертое желание наступить на грабли.
Поскольку у меня есть определенный опыт с позиционированием (автофокус), то вынужден напомнить, что задача не имеет надежного решения с одним каналом. Быть может, если создается поделка для себя... Но ТЗ мы тут тоже не увидели.
Короче, успехов! smile.gif


Полностью поддерживаю!

Ув. BigCoster, уж если Вы решились на "переделку" своего устройства, то непременно воспользуйтесь приведенными в теме рекомендациями.
Go to the top of the page
 
+Quote Post
BigCoster
сообщение Apr 18 2007, 14:28
Сообщение #51


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009



Спасибо всем за ответы, многие из них очень информативные, в часности по поводу реализации
энкодеров

При частоте резонатора 12МГц один цикл равен 0,1мкс.
Уменя 6МГц значит 0,2мкс.
Померял LPT анализатором период дребезга около 0,05мкс.
Имеем апаратный фильтр, ошибка в программе.
Если ошибся поправляйте!!!

И ещё один такой вот вопрос, выходящий из всего выше сказанного :
Как (где) используется тайиер/счётчик в режиме счётчика ???
Go to the top of the page
 
+Quote Post
mandr
сообщение May 17 2007, 14:46
Сообщение #52





Группа: Новичок
Сообщений: 1
Регистрация: 12-03-05
Пользователь №: 3 275



Имею по работе проекты, в которых используются датчики импульсов типа ПДФ-3. Даже оставив датчик
без приёмной цифровой схемы, он самопроизвольно генерирует импульсы, когда берёшся за вал рукой,
при этом я нахожусь на полу из металлических плит. При коммутации какой-либо нагрузки происходит аналогичное явление. Побороть данного вида помехи позволило заземление общей точки питания самого датчика. Поэтому, считаю что Вам необходимо начать поиск в начале с самого энкодера, потом схемы, на которую он работает, а затем уже саму программу.
Go to the top of the page
 
+Quote Post
BigCoster
сообщение May 17 2007, 15:36
Сообщение #53


Участник
*

Группа: Свой
Сообщений: 71
Регистрация: 9-03-07
Из: г. Днепропетровск
Пользователь №: 26 009



Я для себя решил, что без осциллографа схему менять не буду (общая точка датчика на земле, схемы включения я приводил, сказали вроде б нормально).
Не могу понять, как правильно организовать задание расстояния, которое должен проехать моторчик.
у меня просто: пока держишь кнопку счётчик считает, а программа проверяет не отпущена ли кнопка,
бросаем кнопку, нажимаем другую и сохраняем.
после всего этого едем и видим, что не совсем так же проехали, как при настройке, а больше и тем больше проезжаем,
чем больше раз нажимали книпку задания расстояния тем .. cranky.gif cranky.gif cranky.gif
А сейчас вообще не пишет данные в EEPROM, вернее возвращает постоянно одинаковое значение.
И концевой датчик тоже сошел с ума .. cranky.gif
Go to the top of the page
 
+Quote Post
OlegIvanov
сообщение May 23 2007, 22:51
Сообщение #54


Участник
*

Группа: Новичок
Сообщений: 38
Регистрация: 12-09-05
Пользователь №: 8 464



1. Двухканальный энкодер (о чем упоминалось выше), - там максимальная абсолютная неточность в пределах импульса (и сразу защита от всяких любых дребезгов если правильно отрабатывать).
2. В прерывании переполнения таймера-счетчика организовать программный счетчик и
считать каждый импульс (событие 255 прописанных +1 пришедший).
3. Если пункт 1 не устраивает то пункт 2 + антидребезг. Как организовать антидребезг - это насколько хватит фантазии. Триггер Шмидта помогает - стандартное решение для одноканальных энкодеров. Расчитанно именно на ситуацию когда метка в слабо-определенном состоянии.

К сожалению трудно четко представить чего там у вас происходит.
Go to the top of the page
 
+Quote Post
MaslovVG
сообщение May 24 2007, 06:06
Сообщение #55


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

Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134



Просмотрел ветку. Мое мнение. Подавить дребезг при подаче импульсов прямо на T1 програмно проблематично, если вообще возможно. Нужно искать причину возниновения.
Ничего не сказано про осветитель. Возможность посторонней засветки.
Для уменьшения влияния дрожания крыльчатки увеличить размер светового пятна у увеличить гистерезис датчика. Осцилограммы мне совсем не нравятся. Лучше всего если со светодиода (перед компаратором) при вращении крыльчатки будет идти треугольник.
Go to the top of the page
 
+Quote Post
vladimir_orl
сообщение Sep 3 2013, 05:44
Сообщение #56


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

Группа: Участник
Сообщений: 191
Регистрация: 18-09-12
Из: Орёл
Пользователь №: 73 591



Тема конечно устарела, но сейчас столкнулся с тем же. Посадил выход от энкодера на внешнее прерывание на меге128 (INT2). Сразу побежал дребезг. Сделал напрямую на порт:
Код
m_value = PIND & (1 << PD2);
        if (m_value == 0){
            m_trigger = 1;
        } else {
            if (m_trigger == 1){
                ++m_counter;
            }
            m_trigger = 0;
        }


всё хорошо стало. Потому что внешнее прерывание ещё использовать уметь надо.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 4 2013, 20:02
Сообщение #57


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

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



Цитата(vladimir_orl @ Sep 3 2013, 09:44) *
.


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

Я делал обработчик в более удобной среде там было два смещенных датчика с перекрытием как синус и косинус. Правда надо было етхе регистрировать направление. Итого было четыре области, которые я мог различить. 00, 01, 11 и 10 если бит 0 еыто сигнал одного датчика, а бит 1 второго. Далее я построил машину состояний (автомат) с четырьмя состояниями и разрешил в ней переходы между состояниями, соответствующиими соседним значениям датчиков. То есть если я в состоянии 01, то переход в 11 или 00 возможен, а в 10 нет. Расстояние хемминга 1 инициирует переход. И моя модель крутилась вслед за датчиком.

Сообщение отредактировал IgorKossak - Sep 6 2013, 17:26
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Sep 9 2013, 18:13
Сообщение #58


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

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Какая скорость прихода импульсов с валкодера? Разрешение? Крутит человек или это колесо на производстве чего-то?
Дребезг давить аппаратно (с опичтеских не требуется), если быстродействие озволяет, оба сигнала завести на прерывания. Обработчик общий на двоих:


Код
static uint_fast8_t old_val;

void spool_encinterrupt(void)
{
    const uint_fast8_t new_val = hardware_get_encoder_bits();    /* Состояние фазы A - в бите с весом 2, фазы B - в бите с весом 1 */

    // dimensions are:
    // old_bits new_bits
    static const int_fast8_t graydecoder [4][4] =
    {
        {
            +0,        /* 00 -> 00 stopped                */
            -1,        /* 00 -> 01 rotate left            */
            +1,        /* 00 -> 10 rotate right        */
            +0,        /* 00 -> 11 invalid combination */        
        },
        {
            +1,        /* 01 -> 00 rotate right        */
            +0,        /* 01 -> 01 stopped                */
            +0,        /* 01 -> 10 invalid combination */
            -1,        /* 01 -> 11 rotate left            */
        },
        {
            -1,        /* 10 -> 00 rotate left            */
            +0,        /* 10 -> 01 invalid combination */
            +0,        /* 10 -> 10 stopped                */
            +1,        /* 10 -> 11 rotate right        */
        },
        {
            +0,        /* 11 -> 00 invalid combination */
            +1,        /* 11 -> 01 rotate right        */
            -1,        /* 11 -> 10 rotate left            */
            +0,        /* 11 -> 11 stopped                */
        },
    };


#if ENCODER_REVERSE
    position1 -= graydecoder [old_val][new_val];
#else
    position1 += graydecoder [old_val][new_val];
#endif
    old_val = new_val;
}


В инициализации не забыть
Код
    old_val = hardware_get_encoder_bits();    /* Состояние фазы A - в бите с весом 2, фазы B - в бите с весом 1 */

чтобы ложные шаги при ресете не проходили на стоящем валкодере.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Sep 9 2013, 19:35
Сообщение #59


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

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



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


Красиво.
Дребезг даже не подавленный не будет мешать, однако будут лишние вызовы прерываний, что не есть хорошо. Если время оборота составляет несколько миллисекунд, то возможно поллинг будет лучшим подходом.

Сообщение отредактировал IgorKossak - Sep 10 2013, 18:39
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Sep 10 2013, 01:07
Сообщение #60


Знающий
****

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



Цитата(Tarbal @ Sep 4 2013, 16:02) *
... Далее я построил машину состояний (автомат) с четырьмя состояниями и разрешил в ней переходы между состояниями, соответствующиими соседним значениям датчиков. То есть если я в состоянии 01, то переход в 11 или 00 возможен, а в 10 нет. Расстояние хемминга 1 инициирует переход. И моя модель крутилась вслед за датчиком.

Классная идея. disco.gif


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post

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

 


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


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