
Довольно часто при создании робототехнических конструкций, и в техническом творчестве вообще, требуется решать задачу определения скорости вращения вала электродвигателя, или констатации факта наличия самого вращения вообще.
В связи с вышесказанным, посмотрим, какие интересные возможности в этой области существуют, для чего рассмотрим наиболее очевидные и наименее очевидные подходы, где ниже мы сконцентрируемся на рассмотрении коллекторных и бесколлекторных двигателей.
Энкодер
Наиболее очевидным способом, как определения самого факта наличия вращения, так и скорости вращения вала, является установка на двигатель разнообразных «энкодеров» (или «шифраторов», если другим словом) — специальных устройств, где одна часть устройства устанавливается стационарно, а вторая, закрепляется на вращающийся вал.
Таким образом, при вращении вала, происходит некоторое циклическое действие, которое может отличаться, в зависимости от реализации конкретного энкодера, и может детектироваться управляющей электроникой:
пересечение оптического луча (например, лазерный/или инфракрасный луч + колесо со спицами);
отражение луча (такой же оптический луч, как правило, инфракрасного диапазона), отражающийся от колеса, на который нанесены полярного цвета сектора, например, чёрные и белые, где инфракрасный луч будет отражаться от белых секторов;
самый простой вариант: использование цифрового датчика Холла, установленного стационарно, и неодимового небольшого магнитика, установленного на вал.
и т.д.
Кстати говоря, так как мы говорим больше о хобби-техническом творчестве, то, в качестве одного из вариантов, в нём имеет смысл использовать уже готовую сборку достаточно мощного (за счёт применённого металлического редуктора) и компактного коллекторного электродвигателя, типа N20, с уже интегрированным энкодером на базе датчика Холла (см. картинку в шапке статьи).
Кому интересно, то вот здесь я немного более подробно расписал о том, как работать с его энкодером.
Причём, что интересно, на этом готовом варианте стоят целых два датчика Холла, суммарно дающие достаточно большое количество импульсов на один оборот вала (там же по ссылке выше есть таблица и методика расчёта).
Таким образом, установка энкодера, вне зависимости от его конкретной физической реализации, позволяет решить, как задачу определения наличия факта вращения, так и скорости вращения вала.
Однако, это самые очевидные варианты...
Тем не менее, вызывает интерес сама возможность — а нельзя ли осуществить контроль вращения, без использования датчиков как таковых?!
Ведь, в рамках движения к наиболее надёжной в системе, следует уменьшать количество компонентов в ней!
К тому же, это имеет смысл и с точки зрения уменьшения количества компонентов, если планируется серийное производство подобных изделий, — так как это позволит снизить как стоимость изделия в целом, так и упростить его производство, одновременно увеличив его надёжность.
И, такие способы есть, правда, большей частью, малознакомые широкой публике!
Нетипичное использование имеющихся возможностей
Выше мы говорили об сочетании двух функций — определении факта вращения и скорости вращения.
Однако, зачастую, не требуется решать обе эти задачи, так как не все применения требуют их одновременного решения - например, предположим ситуацию, что нам необходимо остановить работу электродвигателя, в связи с достижением какой-то кареткой, некой концевой точки.
Обычно эта задача решается с помощью установки, так называемых «концевых датчиков» — которые могут быть аппаратно разного исполнения, но суть их работы сводится к одному и тому же: остановить работу электродвигателя, при достижении некого положения каретки.
Задача эта весьма частая, и её решение «в лоб» требует установки концевых датчиков.
Тем не менее, есть интересная возможность отказаться от таких датчиков вообще! ;-)
Однако, для этого придётся перейти к достаточно продвинутым драйверам двигателей, например, DRV8833.
Это двухканальный (т.е. на 2 двигателя) драйвер двигателей, построенный на базе микросхемы от Texas Instruments.
Если мы обратимся к его даташиту, то мы увидим, что среди выводов микросхемы присутствует такой интересный вывод, как nFAULT:


Как можно видеть по первой таблице, этот вывод предназначен для информирования управляющей электроники, о возникновении нештатной ситуации: перегреве или превышения по потребляемому току.
В случае возникновения таких ситуаций, внутренняя логика драйвера отключает двигатель от питания, а на этот пин выводит сигнал с низким уровнем, для информирования электроники.
При этом, так как драйвер состоит из двух Н-мостов, то будет подключен только тот мост, на котором была зафиксирована нештатная ситуация.
Если посмотреть на одну из таблиц (раздел 6.5 даташита), то можно увидеть, что выключение происходит за время, равное 4 микросекундам:

Насколько удалось понять, эти драйверы существуют в двух вариантах реализации, где один из них (Latched), после появление нештатной ситуации требует обязательной перезагрузки, с помощью пина nSLEEP, тогда как другая версия (Hiccup), этого не требует, и, автоматически, через 1 мс, проверяет - сохраняются ли условия перегрузки. Если условия были устранены, то происходит автоматическое продолжение работы.
Этот второй тип (насколько удалось понять) более распространён среди хобби-драйверов и, микросхема маркируется обычно только как DRV8833, без каких-либо буквенных индексов в конце:

Для чего это можно использовать: вы уже, наверное, это поняли - в качестве обыкновенного концевого датчика!
То есть, двигатель, при достижении кареткой конечной точки останавливается, и через него устанавливается повышенный ток, что регистрирует драйвер и отключает двигатель. Так как это происходит за весьма короткое время (4 мкс), — это всё равно, представляет собой «штатный» (если его можно так назвать) режим работы системы, и, поэтому, микросхема не повреждается.
Одновременно с этим событием, происходит подача 0 на пин ULT платы (именно так маркируется выведенный на плату пин nFAULT микросхемы), что и будет означать достижение кареткой конечной точки!
Правда, надо отметить, что они там в даташите пишут, как я уже и говорил выше, что такое отключение произойдёт только на одном из двух H-мостов, на котором и возникло превышение, а вывод (ULT) у нас только один, поэтому, если использовать драйвер для подключения двух двигателей — то будет совершенно непонятно, какой из них подаёт «сигнал концевого датчика».
Это проблема, на мой взгляд, может быть решена, чисто механически, установкой определённых выступов/упоров на каретку(и), чтобы один из двигателей, всегда срабатывал чуть раньше, чем другой — таким образом, можно будет попробовать использовать оба двигателя, и, не устанавливать никаких концевых датчиков.
Это что касается измерения самого факта вращения. А как же обстоит дело с замером скорости оборотов?
В качестве альтернативного варианта замера скорости, можно попробовать применить измерение пульсаций тока, возникающее при переходе щёток, с одной ламели (пластинки коллектора, коллекторного двигателя) — на другую.
Правда, насколько можно судить по экспериментам энтузиастов, это довольно сложная проблема, так как соотношение сигнал/шум весьма небольшое, что требует сложной фильтрации, и не всегда хорошо работает в большом диапазоне скоростей, с изменяющейся нагрузкой.
Тем не менее, сама возможность есть, и может быть использована...
В качестве ещё одного любопытного способа измерения скорости можно использовать... замер напряжения! :-)
«Как так?» — скажите вы, «зачем нам мерить напряжение, если мы и так знаем, какое оно, и сами подаём его на двигатель!»
Штука здесь вот в чём: для регулировки скорости вращения двигателя, зачастую, используют подачу на него циклических импульсов питания — т.е. «Широтно-Импульсную Модуляцию» (ШИМ), которая подразумевает, что существуют временные интервалы, в течение которых питание на двигатель подано, и интервалы, во время которых, питание на двигателе — отсутствует.
Из этого следует, что в те моменты интервалов, когда напряжение на двигателе отсутствует, — мы можем производить с ним манипуляции!
Тут надо сделать небольшое отступление и вспомнить, что обычный электродвигатель является «обратимой электрической машиной» — то есть, он может выступать как в роли двигателя, так и в роли генератора, таким образом, в те моменты, когда мы не подаём на него питание — он вращается в силу своей инерции, постепенно замедляясь, во время этого вырабатывая электрический ток, который мы и можем замерять!
А дальше, вы, наверное, уже поняли: в те моменты, когда двигатель у нас обесточен (т.е. на него не подаётся ШИМ-сигнал), — мы можем замерять генерируемое им напряжение, где напряжение будет пропорционально скорости вращения двигателя!
Тем не менее, сигнал генерируемого напряжения будет достаточно малым, по сравнению с высокочастотными помехами от переходных процессов переключения, что может потребовать установки операционного усилителя и ряда фильтров для подавления этих помех.
То есть, проще говоря, получается, что, потенциально, такая возможность измерения оборотов существует, однако, она объективно связана с множеством трудностей, и, явно по количеству компонентов/сложности работы в целом — будет сложнее, чем самый простой вариант с использованием энкодера или сигнала перегрузки по току, если нам нужно замерять только факт наличия/отсутствия вращения. :-)
Нечто подобное используется в бесколлекторных двигателях, где идёт постоянный замер генерируемого на одной из неподключенных фаз напряжения, при этом, в бесколлекторных двигателях это используется не для замера скорости (которая, при желании, может быть вычислена), а для определения точного положения вала, так как это важно для правильной работы подобного типа двигателей — если подавать на них питающий сигнал неправильно, то это приведёт к вибрациям и даже остановке двигателя, поэтому определение точного местоположения вала является для них критически важным.
Размещайте облачную инфраструктуру и масштабируйте сервисы с надежным облачным провайдером Beget.
Эксклюзивно для читателей Хабра мы даем бонус 10% при первом пополнении.

YMA
Ага, щаз... А еще это может означать попадание постороннего предмета, застревание каретки из-за коррозии или грязи, КЗ в двигателе и кучу прочих неправильных событий.
Концевой же датчик за вычетом его неисправностей всё-таки сообщит, что каретка прибыла по назначению.
cnet Автор
Это понятно:-)
Но, скажем, прямо сейчас я реализую этот принцип на одной железной штуковине. Пока всё ок:-) Может быть, когда то расскажу подробнее:-)