Не знаю, может уже и поднимался этот вопрос, но сходу не нашёл...
В общем, все знают, что шаговый двигатель или двигатель от HDD могут работать как энкодеры. Но я, например, считал, что подключение будет несколько сложнее обычного энкодера.
Эксперимент показал, что это не так.
Двигатель взял от какого-то убитого HDD. У него оказалось всего 3 вывода. Средний я подключил на "землю", а крайние - прямо на аналоговые входы Ардуино (UNO).
Схема программной обработки такая:
Так как движок вырабатывает синусоиду, то для её преобразования в импульсы поставлены компараторы. При вращении движка больше 1,5В амплитуды я получить не смог, как ни старался. Это при резкой раскрутке.
А при медленном вращении он вырарабатывает единицы - десятки милливольт.
Выставил порог на компараторах около 100мВ.Этого оказалось достаточно, что бы при спокойном вращении получать импульсы.
Если выставить меньше, то реакция на вращение ещё лучше, но появляются "помехи" - чуть коснулся ручки и схема сработала, посчитав импульс и ещё парочку сразу. Вал-то не имеет фиксации, как у энкодера или шаговика...
В общем, подбирая порог срабатывания компаратора, можно выставить требуемую чувствительность: от "чуть коснулся" до "умаешься крутить", пока импульс выдашь.
Работает отлично - ни пропусков, ни сбоев...
Как ни старался крутить резко и быстро, сбоев не увидел. В такой же схеме настоящий энкодер даёт ложные импульсы и для него требуется фильтрация дребега. А если превысить скорость, то и тормоза начинаются.
С двигателем этого нет. Для него, ведь, такое понятие, как дребезг контактов - не существует. И помех он не ловит, так как в любом состоянии имеет омическое сопротивление, шунтируя входы при любых наводках. Хоть метровыми проводами подключайся...
Приставил к валу патрон шуруповёрта через кусок резины и включил - импульсы наращиваются плавно, быстро и без сбоев. За 4 секунды вырабатывает почти полторы сотни импульсов как с куста.
Конструкция удобная, так как вал может служить готовой ручкой энкодера - большой и удобной. Крутится легко и долго вращается по инерции - резко крутанув вал и дав ему крутиться по инерции сразу получаем прирост (или откат) на 20-25 импульсов. Это сам вал, без ручки. А если одеть большую и(или) тяжёлую ручку, то инерция будет ещё больше. Вал у этих движков на хороших подшипниках, по этому с массивной ручкой получить сотню импульсов за один толчёт, думаю, будет легко.
Работа чем-то напоминает работу с "трекболом" и "шатлом" одновременно.
Единственный недостаток, к которму, впрочем, легко привыкаешь - "трудность" получения одного импульса. Если медленно крутить, то вообще не будет считать, а быстро - сразу несколько импульсов проскочит...
По этому для получения единичнго импульса нужно, вявшись за вал двумя пальцами, резко его провернуть на некоторый угол и сразу остановить. Главное - резкость проворота. У меня стало получаться практически сразу.
В общем, подобрав индивидуально порог срабатывания компараторов, можно получить комфортную работу как при малом числе импульсов, так и при большом.
Ещё один вариант устранения этого "недостатка" - усилить импульсы перед подачей на МК. То есть, какой нибудь усилитель ограничитель с большим КУ на ОУ (LM358) или компараторе (LM393) решит проблему, так как после этого на выходе будут импульсы большой амплитуды даже при очень медленном и плавном вращении. Думаю, можно и программными средствами реализовать какой нибудь алгоритм усиления-фильтрации-фиксации. Нужно пробовать.
Но пока меня и такая работа более чем устраивает.
Жаль кнопки нет... Хотя... Есть идея!
Корпус двигателя использовать как сенсорный контакт. Сам движок прикрутить изолировано, что бы с корпусом устройства или его схемой небыло гальванического контакта, а на вал одеть пластмассовую ручку с дыркой в центре или металлическим пятчком в центре. Пятачёк соединить с корпусом движка. Корпус движка подключить на вход Ардуино и компаратор выставить на минимальное напряжение срабатывания (максимальную чувствительность).
Получится следующее...
Взявшись за пластиковую ручку, вращаем её и получаем импульсы, а коснувшись металлического пятачка на ней (или корпуса через дырку в ручке), получаем нажатие кнопки.
Ща попроообуем...
Ещё из особенностей - малое число импульсов на оборот. У меня получается 4. То есть, получая только по одному импульсу, на полный оборот ручки на 360 градусов насчитывается только 4 импульса.
Это естественно, так как движок 3-х фазный и у него идёт разбивка по 360*3=120 градусов на фазу.
Тем не менее, работь с ним куда приятнее и легче, чем с настоящим энкодером.
Мне понравилось...
Это фото макета, что бы покаать, какой именно был двигатель:
А на этом фото показано подключение двигателя (без преобразователей):
Добавлено (05.07.2016, 22:19)
---------------------------------------------
Придумал я способ реализации сенсора. Выглядит так:
Сенсорный датчик подключаем к любому аналоговому входу через резистор на 1МОм.
Резистор вместе с диодами на входах МК защищает его от статики и большого напряжения. Если максимальный ток через защитные диоды на входах принять 10мА, то получится, что напряжение на сенсоре должно превышать 10мА*1МОм=10КВ. Реальный ток диодов больше, так что пробойное напряжение будет с запасом...
При касании сенсора рукой, на входе наводится большое переменное напряжение, которое сравнивается компаратором с пороговым значением 4,88В при питании МК 5В, и так как оно превышает этот порог, то на выходе компаратора имеем импульсы частотой 50Гц. Первым же прилетевшим импульсом устанавливается RS триггер.
Он же, поступая на вход несимметричного мультивибратора с инверсией, останавливает его. На входе сброса триггера импульсы пропадают.
При отпускании сенсора импульсы на входе установки триггера пропадают, запускается генератор и на вход сброса триггера постоянно идут импульсы, сбрасывающие его.
Длительность импульсов короткая - 1мкс, а пауза междк ними довольно длинная - 50мс.
В реультате, при касании сенсора на выходе триггера устанавливается единица и стоит, пока есть касание к сенсору.
Фотку выкладывать?..
Двигатель лежит на столе, как на ранее приведенных фотках. К нему прикручен провод, подключенный ко входу Ардуино через резистор. Всё.
Отработка чёткая и только при касании пальцем. Если между пальцем и корпусом двигателя проложить тонкую бумажку, то не срабатывает.
В общем, чувствительность очень большая, по этому можно наверно делитель поставить на входе, чтобы уменьшить её.