Датчик Холла
Датчики Холла могут обнаруживать наличие магнитного поля и выдавать выходное напряжение при его обнаружении. Датчики Холла при использовании слинейные приводы, обычно располагаются внутри редуктора привода вместе с магнитным диском. Когда линейный привод выдвигается или втягивается, этот диск вращается мимо датчика Холла, который заставляет датчик выдавать цифровой выходной сигнал в виде импульса напряжения. Эти импульсы можно подсчитать и использовать для определения расстояния перемещения привода.
Позиционная обратная связь от датчика Холла
Недостатком использования датчика Холла для обратной связи по положению является то, что он не измеряет абсолютное положение. Вместо этого они производят импульсы, которые можно подсчитать, чтобы определить, насколько далеко переместился привод. Чтобы использовать эти импульсы для обратной связи по положению, вам необходимо использовать микроконтроллер для подсчета произведенных импульсов. Для этого вам нужно будет использовать внешние контакты прерывания вашего микроконтроллера для подсчета этих импульсов по мере их возникновения. Внешние прерывания — это контакты, которые обнаруживают изменение напряжения и в нашем случае могут использоваться для обнаружения импульса напряжения от датчика Холла. Вам нужно будет ознакомиться с техническим описанием вашего микроконтроллера, чтобы убедиться, какие контакты вашего микроконтроллера можно использовать в качестве контактов прерывания. Используя Ардуино Уно например, контакты 2 и 3 можно использовать для внешних прерываний. После того, как вы выбрали соответствующий контакт прерывания, вы можете подключить провод выхода датчика Холла к этому контакту, а также подключить входное напряжение к 5 В и заземление к контакту заземления.
В приведенном ниже примере кода показано, как настроить прерывание в Arduino IDE, при котором прерывание будет запускаться по нарастающему фронту импульса напряжения. Вы можете настроить срабатывание прерывания в разные моменты изменения напряжения, и вам следует обратиться к таблице данных вашего микроконтроллера, чтобы определить доступные параметры. Последний аспект, который вам нужно сделать для настройки прерывания, — это написать процедуру обслуживания прерывания, которая представляет собой функцию, которую код будет запускать каждый раз, когда срабатывает прерывание. Эта функция должна быть короткой и выполнять только простые задачи, такие как подсчет количества импульсов от нашего датчика Холла. Функция countSteps() в приведенном ниже примере кода используется для подсчета количества импульсов от датчика Холла.
Чтобы использовать эти импульсы для определения значения положения, вам необходимо знать предыдущее положение линейного привода и направление, в котором движется линейный привод. Ваш микроконтроллер уже знает, в каком направлении вы управляете линейным приводом. поэтому вы можете просто настроить переменную для отслеживания направления привода в вашем коде, которая будет использоваться для определения, добавляете ли вы импульсы из вашего предыдущего положения или вычитаете их. После того как вы обновите свою позицию, вам нужно будет сбросить подсчитанные импульсы на ноль. В примере кода ниже показана функция, которая обновляет положение на основе количества подсчитанных импульсов. Как только вы определите положение в импульсах, вы можете преобразовать его в дюймы, используя характеристику импульса на дюйм вашего линейного привода. В приведенном ниже примере кода количество импульсов на дюйм перемещения составляет 3500.
Наведение вашего линейного привода
Чтобы точно использовать обратную связь по положению от датчика Холла, вам всегда необходимо знать начальное положение вашего линейного привода. Хотя при первом включении системы ваш микроконтроллер не сможет определить, выдвинут привод или нет. Для этого вам потребуется перевести линейный привод в известное положение. Чтобы привести линейный привод в известное положение, вам нужно будет привести его в известное положение, например, в полностью втянутое положение. Вы также можете использовать внешние концевые выключатели чтобы установить известное положение в какое-либо другое положение, кроме полностью выдвинутого или втянутого. Используя приведенный ниже код Arduino в качестве примера, мы захотим настроить цикл WHILE, который будет переводить наш линейный привод в известное положение, в данном случае полностью втянутое. Мы знаем, что вы находитесь в известной нам позиции, поскольку прерывание датчика Холла не срабатывает. В этом случае мы проверяем, изменилась ли переменная шагов, чтобы определить, сработало ли прерывание. Нам также необходимо убедиться, что прошло достаточно времени, чтобы ожидать срабатывания прерывания. Для этого мы используем функцию millis(), которая выводит время в миллисекундах с момента запуска кода, и сравниваем его с предыдущей отметкой времени. . Как только мы определили, что линейный привод находится в исходном положении, мы прекращаем управление приводом, сбрасываем переменную шагов и выходим из цикла WHILE.
Работа с ложными триггерами
Хотя датчики Холла не так чувствительны к электрическому шуму, как потенциометр, электрический шум все равно может влиять на выходной сигнал. Подпрыгивание переключателя также может быть проблемой для датчиков Холла, которые могут вызывать подсчет ложных импульсов, что может повлиять на то, насколько ваш микроконтроллер считает, что ваш линейный привод переместился. Несколько дополнительных импульсов не сильно повлияют на позиционирование, поскольку на дюйм приходится тысячи импульсов, но со временем это может стать более серьезной проблемой. Вы можете бороться с этими проблемами, используя внутренний таймер для фильтрации ложных срабатываний. Поскольку вы можете определить, как часто вы ожидаете обнаружения новых импульсов, вы можете отфильтровать случаи, когда прерывание было вызвано шумом. В приведенном ниже примере кода trig-Delay — это временная задержка между каждым импульсом. Если прерывание было вызвано до этой задержки, то импульс не будет засчитан.
Продолжительность этой задержки будет варьироваться в зависимости от вашего приложения, но если она слишком короткая, шум не будет должным образом фильтроваться, а если слишком длинная, фактические импульсы от линейного привода будут пропущены. Скорость линейного привода также будет влиять на эту задержку, и если вы хотите отрегулировать скорость, возможно, потребуется изменить эту переменную, чтобы приспособиться к новой ожидаемой частоте импульсов. Чтобы точно определить задержку между каждым импульсом, вы можете использовать логический анализатор для просмотра фактического сигнала от датчика Холла. Хотя в большинстве приложений это не требуется, если вам требуется очень точное позиционирование, вам может потребоваться определить точную задержку.
Другим способом борьбы с ложными срабатываниями является корректировка значения положения каждый раз, когда привод достигает известного положения. Как и в случае с возвратом линейного привода в исходное положение, если вы привели линейный привод в полностью втянутое или выдвинутое положение или если вы используете внешние концевые выключатели, вы узнаете, насколько далеко переместился привод. Поскольку вы знаете, сколько шагов должен отправить датчик Холла, чтобы достичь известного положения, вы можете просто скорректировать значение, когда мы его достигнем. В приведенном ниже примере кода это делается для полностью выдвинутого и полностью втянутого положения. Поскольку привод не будет двигаться после достижения одного из этих положений, если мы попытаемся привести привод в действие, а значение положения не изменится, мы будем знать, что находимся на пределе. Этот метод обеспечивает практическое решение, позволяющее гарантировать точность значения положения, особенно если в какой-то момент во время работы вы полностью втягиваете или полностью выдвигаете привод. Вы можете использовать этот метод в сочетании с методом, описанным выше, который должен помочь сохранить точность вашего позиционного значения.
Краткое содержание
Использование датчика Холла для обратной связи по положению обеспечивает гораздо большее разрешение по сравнению с обратной связью от потенциометра. Поскольку на дюйм перемещения может приходиться тысячи импульсов, датчики Холла обеспечивают точность и надежность позиционирования линейного привода. Датчики Холла также обеспечивают большую способность обеспечивать одновременное движение нескольких линейных приводов, поскольку подсчет импульсов более точен, чем изменение напряжения потенциометра. Используя наш ФА-СИНХР-X Контроллер привода позволяет даже обеспечить синхронное перемещение приводов независимо от нагрузки. Для домашних мастеров вы можете проверить, как обеспечить синхронное движение ваших приводов с помощью Arduino. здесь.
Ниже приведен полный пример кода, использованный в этом блоге и созданный для управления длиной хода 14 дюймов. Пуля серии 36 кал. Линейный привод. Линейный привод приводится в движение с помощью водитель автомобиля, который вы можете узнать, как настроить здесь.
[1] Монари, Г. (июнь 2013 г.) Понимание разрешения оптических и магнитных энкодеров. Извлекаются из: https://www.electronicdesign.com/technologies/components/article/21798142/understanding-resolution-in-optical-and-magnetic-encoders