Оптический датчик
Оптические датчики при использовании с линейные приводы,функция очень похожа на датчики Холла, за исключением того, что они обнаруживают свет вместо магнитных полей [1]. Оптические датчики работают, используя свет от светодиода или другого источника света, который проходит через диск кодера. Этот диск кодера имеет прорези, позволяющие свету периодически проходить через него. На другой стороне диска находится фотодетектор, который улавливает свет при его прохождении через щели диска и формирует выходной сигнал [1]. Когда привод движется, диск энкодера вращается, и свет обнаруживается фотодетектором, который генерирует прямоугольную волну импульсов напряжения. Эти импульсы можно использовать аналогично импульсам датчика Холла, чтобы определить, насколько далеко переместился привод.
Позиционная обратная связь от оптического датчика
Поскольку оптические датчики по своим выходным сигналам функционируют очень похоже на датчики на эффекте Холла, в этом сообщении блога будет кратко описано, как считывать их выходные данные для получения обратной связи по положению. Если вы ищете более подробную информацию, прочтите нашу публикацию о том, как считывать позиционную обратную связь от датчика Холла, там все будет похоже.
Как и датчики Холла, оптические датчики будут иметь 3 контакта для подключения; один — входное напряжение, другой — земля и, наконец, один — выходной сигнал. Чтобы использовать импульсы выходного сигнала для обратной связи по положению, вам необходимо использовать микроконтроллер для подсчета произведенных импульсов. Вам понадобится использовать внешние контакты прерывания вашего микроконтроллера для точного подсчета этих импульсов. Поскольку внешние прерывания запускаются при изменении напряжения, их можно использовать для обнаружения каждого импульса по мере его возникновения. После того, как вы настроили прерывание в коде вашего микроконтроллера, вам необходимо настроить процедуру обслуживания прерываний, которая подсчитывает импульсы по мере их возникновения. Функция countSteps() в примере кода ниже используется для подсчета количества импульсов от оптического датчика.
Чтобы использовать эти импульсы для определения значения положения, вам необходимо знать предыдущее положение линейного привода и направление, в котором движется линейный привод. Контролируя направление движения линейного привода, вы можете просто настроить переменную для отслеживания направления привода в вашем коде. Эту переменную можно использовать, чтобы определить, нужно ли вам добавлять или вычитать импульсы из вашей предыдущей позиции. После того как вы обновите свою позицию, вам нужно будет сбросить подсчитанные импульсы на ноль. В примере кода ниже показана функция, которая обновляет положение на основе количества подсчитанных импульсов. Как только вы определите положение в импульсах, вы можете преобразовать его в дюймы, используя характеристику импульса на дюйм вашего линейного привода.
Наведение вашего линейного привода
Чтобы точно использовать обратную связь по положению от оптического датчика, вам всегда необходимо знать начальное положение вашего линейного привода. Хотя при первом включении системы ваш микроконтроллер не сможет определить, выдвинут привод или нет. Для этого вам потребуется установить линейный привод в известное положение. Чтобы домой ваш линейный привод, вам нужно будет привести его в известное положение, например, полностью втянуть. Используя приведенный ниже код Arduino в качестве примера, мы создали цикл WHILE, который будет перемещать наш линейный привод в известное положение. В этом примере мы узнаем, что находимся в известной позиции, проверив, было ли вызвано прерывание, проверив, изменилась ли переменная шагов. Нам также необходимо убедиться, что прошло достаточно времени, чтобы ожидать срабатывания прерывания, для этого мы используем функцию millis() и сравниваем ее с предыдущей отметкой времени. Как только мы определили, что линейный привод находится в исходном положении, мы прекращаем управление приводом, сбрасываем переменную шагов и выходим из цикла WHILE.
Работа с ложными триггерами
Хотя оптические датчики не так чувствительны к электрическому шуму, как потенциометры, электрический шум и дребезг переключателей все же могут влиять на выходной сигнал и вызывать подсчет ложных импульсов. Несколько дополнительных импульсов не сильно повлияют на позиционирование, но со временем это может стать более серьезной проблемой. Вы можете бороться с этими проблемами, используя внутренний таймер для фильтрации ложных срабатываний. Поскольку вы можете определить, как часто вы ожидаете обнаружения новых импульсов, вы можете отфильтровать случаи, когда прерывание было вызвано шумом. В приведенном ниже примере кода trigDelay — это временная задержка между каждым импульсом. Если прерывание было вызвано до этой задержки, то импульс не будет засчитан. Продолжительность этой задержки будет варьироваться в зависимости от вашего приложения, но если она слишком короткая, шум не будет должным образом фильтроваться, а если слишком длинная, фактические импульсы от оптического датчика будут пропущены.
Другим способом борьбы с ложными срабатываниями является корректировка значения положения каждый раз, когда привод достигает известного положения. Как и при возврате линейного привода в исходное положение, если вы привели линейный привод в полностью втянутое или выдвинутое положение или используете внешние концевые выключатели, вы будете знать, сколько импульсов потребуется для достижения этого положения. Затем вы можете просто скорректировать значение позиции, используя это значение, когда достигнете известной позиции. В приведенном ниже примере кода это делается для полностью выдвинутого и полностью втянутого положения. Этот метод обеспечивает практическое решение, позволяющее гарантировать точность вашего позиционного значения.
Краткое содержание
Оптические датчики, используемые для позиционной обратной связи, обеспечивают большую точность и разрешение по сравнению с датчиками Холла и потенциометрами, но имеют аналогичные преимущества и недостатки с датчиками Холла. Хотя они не измеряют абсолютное положение и требуют известного начального положения для определения позиционного значения, большое количество импульсов на дюйм обеспечивает надежность позиционирования и обеспечение одновременного перемещения нескольких линейных приводов. Используя наш ФА-СИНХР-X контроллер привода или через дополнительный код, вы даже можете обеспечить синхронное перемещение приводов независимо от нагрузки.
Полный пример кода можно найти в нашем блоге по адресу как читать позиционную обратную связь от датчика холла столько же будет похоже. Такие значения, как количество импульсов на дюйм и временные задержки между импульсами, — это лишь некоторые из изменений, которые вам необходимо внести, чтобы использовать этот код для точного использования вашего оптического датчика.
[1] Пашотта, Р. Статья об оптических датчиках. Извлекаются из:https://www.rp-photonics.com/optical_sensors.html