Подскажите вот как логику лучше построить Есть два индуционных датчика Состояние у них, когда рядом метал 1 если нет то 0 На диске, который на валу, есть прорезь Впрочем вот так они и работают Задача определить вращение вала По часовой и против часовой У кого какие мысли по этому поводу
Комментарии: 33
Konstantin
Как это в любом энкодере делают
Egor
Я думаю так Если вращение по часовой: Допустим первый это нижний датчик Второй это тот что выше Оба датчика счас в 1 Диск вращается Первый в 0 второй в 1 потом Первый в 1 второй в 1 потом Первый в 1 второй в 0 Комбинация 01 11 10 Это и есть комбинация для вращенич по часовой стрелке Ну и как то счас надо записать состания датчико в массив что ли и сравнивать?
Alexander
а если отверстия насверлить с переменным шагом?
Evgeniy
Что это даст?
Egor
Через время наверно сранивнать как то как я понял
Alexander
в одну сторону расстояние между импульсами увеличивается, в другую - уменьшается
Evgeniy
Я бы просто еще один датчик добавил. Если после верхнего размыкается левый, то против, если правый, то по. В противном случае по двум датчикам надо к времени привязываться Потому что после верхнего левый разомкнется в любом случае, в какую сторону ни крути. Только если против часовой то он разомкнется быстрее
Egor
Так а сравнивать массив состояний двух датчиков не прокатит такое?
Evgeniy
Этот массив будет в обоих случаях вращения. Только с разной задержкой по времени
Jury
Первый датчик поднимает бит, второй сбрасывает. Далее в момент, когда есть сигналы от обоих датчиков проверяете этот бит. Если он есть - вращение в одну сторону, если нет - в другую. Маленьким куском кода отдельно контролиреуете, что врашение в принципе есть.
Evgeniy
Можно опытным путем вычислить время, через которое после одного размыкается другой, если еще и скорость регулируется, то пропорцию составить, больше скорость меньше задержка. Если условие выполняется, что за выделенное время после левого датчика правый датчик размыкается, то понимаем что вращение по часовой. Если таймер кончился а датчик не разомкнулся, значит против часовой крутится. Таймер сбрасываем, ждем размыкания левого, запускаем таймер, и так по кругу Так после первого второй и так будет размыкаться, в какую сторону ни крути
Jury
нет. Фронт первого датчика установит бит. Фронт второго сбросит. Если вращать в другую сторону, то сначала сброс, потом установка. Контроль бита после контроля фронта.
Evgeniy
Ну и он так же будет работать. Попробуйте визуализировать. По видео не понятно, при кручении по часовой, левый успевает замкнуться или нет? До размыкания верхнего
Alexander
переменный шаг надежнее, а при фиксации скачка будете знать, что оборот прошел
Egor
Да, успевает
Evgeniy
Ну тогда только таймер, потому что при кручении в любую сторону один сначала размыкается, потом замыкается. Следом за ним другой размыкается-замыкается. Следовательно если интервал пульсации больше - кручение против часовой, если интервал маленький - то по часовой
Timofey
Разница во времени сколько будет установлен бит. По сути это rs триггер и таймер
Evgeniy
Ну так про таймер вы не говорили, а я как раз и предлагал привязаться к таймеру
Yuriy
Рассчитывается математически через стробирующий импульс. То есть направление фазы
Denis
http://easyelectronics.ru/avr-uchebnyj-kurs-inkrementalnyj-enkoder.html В статье приведен код автомата для определения вращения энкодера.
Egor
Спасибо, почитаю
Sam
50 гц частота вращения будет. То есть датчик должен быть шустрее этой частоты. 50гц датчики я пока в руках не держал. Самые медленные были на 100 гц У вас там хай спид счетчика нет что ли 32 битного? Со счетом вверх или вниз
Dmitry
смотри просто как импульсы идут на какой первее приходит 1 так и направление будет в сторону него или наоборот
Evgeniy
ну так это опять же ко времени привязываться. Очевидно что после первого импульс придет на второй, в какую бы сторону он ни крутился.
Sam
Вот моя реализация счетчика импульсов оптического энкодера. Срабатывание прерывания - при любом изменении сигнала. У вас там тоже самое
Viktor
Мне кажется можно напрямую на HSC входы на 1200 контроллер подключить и соответственно настроить. Я так вижу, что в режиме энкодера всё должно взлететь без танцев с бубном. Бонусом ещё и скорость будете мерить )
Rustem
А в плк нет готового модуля энкодер? Он сам все и сделает. А так фронты надо ловить задние и передние. Кто из них раньше ловится, туда и направление. Ну и скорее всего в прерываниях это делается...
Viktor
Есть HSC, о котором я писал выше
Rustem
Так hsc сам все и высчитает, нет? Вроде он для подобных вещей норм работает.
Andrey
Цикл сработки надо анализировать. Если первый левый датчик срабатывает, то влево. Если правый, то вправо. Или наоборот. Между сработками длинная пауза, между датиками короткая. Или вообще, если два датчика отключено, начало цикла. Там же сектор вырезан.
Viktor
Если и пытаться делать без аппаратных средств, то только с фикс прерыванием и причем таким способом как на картинке
Aleksandr
Думаю можно по триггеру нижнего фронта датчика #1 проверять состояние датчика #2. По идее все будет работать.