Свежие обсуждения
Источники питания

"Импульсный блок питания на базе БП ПК"

1 138 184

DWD: Пока Link-а нету, скажу, что у меня подключен энкодер и он работает как положено.

Вам повезло с производителем энкодера. Было дело я нарвался на дешёвый энкодер и он зараза начал мозги парить и мне пришлось проверять состояние второй кнопки для уменьшения ложных подрабатываний.

GM: Алгоритм там самый простой, есть перепад 1-й кнопки - даём приращение на 1, есть перепад 2-й - вычитаем 1. Но энкодер работает не так:

Вы правы. В этом алгоритме это именно так и работает. Причём занимает два прерывания в место одного, на нормальном энкодере можно сделать через одно прерывание с проверкой состояния портов, но к этому я пришёл позже, когда нарвался на дребезжащий энкодер, а тот алгоритм который у DWD был адаптирован с БП в котором стояли "хитрые" энкодеры у них был другой алгоритм работы, в тех энкодерах "дребезжала" только одна "кнопка", а вторая была постоянно нажата, при изменении направления вращения "дребезжащая кнопка" замыкалась, а замкнутая начинала выдавать импульсы. По этому более менее рабочий алгоритм я получил при тупом контроле фронта (или спада) нажатия кнопки по прерыванию. Сейчас в магазине те хитрые энкодеры закончились и мне попался нормальный но дешёвый, что заставило переписать алгоритм обработки энкодера в том устройстве куда я его поставил.

 

DWD: Ну вот - как раз подходит. В энкодере, ведь, получается так, что направление зависит от того, какой импульс пришёл первым. То есть, какая кнопка была нажата первой.

Это подходит для двух кнопок, кнопка "+" и кнопка "-". Какую кнопку нажал, то прерывание и обработается и 1 либо прибавится к результату, либо 1 вычтется.

Теперь, что касается энкодера. Если мы крутнем энкодер на один щелчок, то добавится 1, но если крутнём энкодер на два щелчка, то после одного прерывания 1 добавится к результату, а после второго прерывания - вычтется - таким образом результат будет нулевым, а должен был бы увеличиться на два. Вот я не понимаю, как работает программа энкодера, и прошу Юру объяснить, а он пишет про какие-то хитрые энкодеры. Энкодеры везде одни и те же, даже в Африке.

 

GM: Энкодеры везде одни и те же, даже в Африке.

Я тоже так думал покуда не нарвался на то что нарвался.

Касательно как работает программа - вероятней всего второе прерывание не обрабатывается когда сработало первое. Честно говоря я сам не понимаю как оно работает на самом деле на нормальном энкодере .

 

Link: Я тоже так думал покуда не нарвался на то что нарвался.

Хотелось бы посмотреть на тип такого "хитрого" энкодера, ну и неплохо бы снять и привести вид импульсов при вращении в одну сторону и в другую.

 

GM: Хотелось бы посмотреть на тип такого "хитрого" энкодера,

А на нём написано только место где он изготовлен, я сам хотел найти его тип, как то привык к ним и они достаточно надёжные и чёткие в работе, оно не удивительно т.к. изготовлены они в Японии.
Я уже эти импульсы снимал, один контакт замыкается, а на втором присутствуют импульсы, может это брак какой, а может так специально задумано. В любом случае они уже закончились в магазине, а их название я не знаю.

 

У энкодера есть точки фиксации. Между этими точками можно однозначно определить, какой контакт был замкнут первым. При вращении в одну сторону первым замыкается один контакт, а в другую сторону - второй. Переход из одной точки фиксации к другой очень короткий по времени.
Получается следующий алгоритм: первый замкнувшийся контакт блокирует отработку второго на время, немного превышающее время перехода из одной точки фиксации к другой...
Хм... Вроде и всё. А я расписывать собрался.

Получается, что если стоят кнопки, то при нажатии любой из них происходит блокировка другой на короткое время. А так как нажатая кнопка сама себя не блокирует, то происходит счёт только в одну сторону.

С энкодером получается тоже самое, с той лишь разнцей, что в одном цикле (один щелчёк) последовательно будут нажаты обе кнопки. Но так как первая нажатая блокирует отработку второй, то вторая нажимается в холостую. Программа отработает точно так же, как и с кнопками.

 

DWD, можете снять осциллом импульсы с двух каналов вашего энкодера?
Я снял импульсы со своего энкодера, результат здесь.
Поясню картинки: первая серия - поворот ротора энкодера влево на 1, 2 и 20 щелчков. Вторая серия - поворот ротора энкодера вправо на 1, 2 и 13 щелчков.
Как видите импульсы одного канала (красный цвет) и импульсы второго канала (желтый цвет) идут попеременно во времени. Поэтому, как я и говорил ранее, на один щелчок на первый фронт импульса 1-го канала к результату будет добавлена 1, а на первый фронт импульса 2-го канала будет вычтена 1. И так для всех остальных импульсов. Вращай хоть вправо, хоть влево - результат останется неизменённым.
Вот меня и одолевают непонятки - как ваше устройство работает, неужто по дребезгу?

 

Двухлучевого осциллогарфа у меня нет. Вот картинка из даташита на энкодер:

Просматривал даташиты на другие энкодеры - практически то же самое. Разница может быть только в разносе импульсов: в одних перепад импульса одной фазы происходит посередине импульса второй фазы, а у других - в первой четверти.

GM: Вот меня и одолевают непонятки - как ваше устройство работает, неужто по дребезгу?

Вот на счёт этого не скажу. В программе не разбираюсь.
Но переключение происходит чётко.
Так как при слишком быстром вращении программа перестаёт считать и сбивается, то потому и предположил, что алгоритм основан на блокировке отстающей фазы.

 

В программе никакой блокировки отстающей фазы нет.
Автор программы объясняет работоспособность программы наличием "хитрющих" энкодеров. Видимо вы их покупали в том же самом месте .
Ну что сказать, great and marvellous are thy works, Lord God Almighty - велики и чудесны деяния твои, Господи.

 

Не знаю. Я брал здесь.
Обычный энкодер.

У него там, вроде бы энкодер по прерываниям обслужтвается. Может быть такое, что после срабатывания прерывания по одному входу, прерывание по второму временно блокируется?