Содержание:
Двухканальный выход формирует квадратурные сигналы со сдвигом 90°. Подсчет фронтов позволяет определить направление вращения: если импульс на линии A опережает B – вал крутится по часовой стрелке. Частота следования импульсов прямо пропорциональна скорости вращения.
Для подавления дребезга контактов добавьте RC-фильтр с параметрами 100 Ом и 0.1 мкФ параллельно каждой сигнальной линии. При работе с высокоскоростными валами используйте аппаратные прерывания МК вместо опроса состояния в основном цикле.
Подсоединение датчика угла поворота к управляющему модулю
Добавьте подтягивающие резисторы 10 кОм между сигнальными линиями и питанием +5 В, если встроенные подтяжки отключены. Это исключит ложные срабатывания.
Для подавления дребезга контактов примените программную фильтрацию. В Arduino используйте библиотеку Encoder с задержкой 2–5 мс или реализуйте проверку состояния в прерывании с таймером.
Пример кода для считывания поворотов:
#include <Encoder.h>
Encoder myEncoder(2, 3);
void setup() {
Serial.begin(9600);
}
void loop() {
int position = myEncoder.read();
if (position != 0) {
Serial.println(position);
myEncoder.write(0);
}
}
Для инкрементальных моделей учитывайте направление: при вращении по часовой стрелке сигнал A опережает B, против – наоборот. Анализируйте оба фронта для точного подсчета импульсов.
Определение направления и скорости вращения по сигналам датчика
Для обработки импульсов с выхода A и B используйте аппаратный или программный метод. При аппаратном способе задействуйте триггеры или специализированные микросхемы, такие как LS7084, которые автоматически определяют направление по фазовому сдвигу.
В программной реализации считывайте оба канала с помощью прерываний. Если при срабатывании прерывания по линии A сигнал на B высокий – вращение происходит по часовой стрелке. Если низкий – против. Для повышения точности учитывайте фронты и срезы обоих сигналов.
Скорость вычисляйте по количеству импульсов за фиксированный интервал времени. Например, при 1000 импульсов на оборот и частоте опроса 1 кГц, 500 импульсов за 0,5 сек соответствуют 60 об/мин. Для плавного измерения применяйте скользящее среднее или цифровые фильтры.
При высоких оборотах используйте 16-битные таймеры в режиме захвата. Настройте их на фиксацию времени между соседними импульсами. Для STM32 подойдут каналы TIMx_CCRx, для AVR – Input Capture.
Для устранения дребезга контактов в механических датчиках добавьте задержку 2-5 мс в обработчике прерываний или установите RC-фильтр (100 Ом + 0,1 мкФ) на входе контроллера.
Физическое соединение и распиновка
Для инкрементальных моделей с выходом HTL (push-pull) подключите фазы A и B к цифровым входам контроллера, а общий провод – к GND. Напряжение питания: 5–24 В DC, потребление тока не превышает 50 мА.
Абсолютные версии с интерфейсом SSI требуют четырёх проводов: CLK, DATA, GND и VCC (3.3 В или 5 В). Длина кабеля – до 15 м при экранированной витой паре.
При использовании RS-422 (дифференциальный сигнал) задействуйте пары A+/A- и B+/B-. Подключите экран кабеля к земле только на стороне приёмника.
Для защиты от помех установите RC-фильтры (100 Ом + 100 нФ) на входных линиях, если расстояние до контроллера больше 1 м.
Алгоритмы обработки сигналов: декодирование и вычисление параметров
Декодирование квадратурных импульсов
Для точного определения направления и скорости вращения вала используйте следующий алгоритм:
- Фиксируйте состояние каналов A и B по фронту сигнала (например, при переходе от 0 к 1).
- Применяйте таблицу состояний для определения направления:
- 00 → 01: вращение вперед
- 01 → 11: вращение вперед
- 00 → 10: вращение назад
- 10 → 11: вращение назад
- Используйте прерывания для обработки каждого изменения сигнала, чтобы избежать потерь импульсов.
Подсчет импульсов и вычисление параметров
Для расчета скорости и пройденного расстояния:
- Регистрируйте количество импульсов за фиксированный интервал времени (например, 100 мс).
- Применяйте формулу:
- Скорость (об/мин) = (импульсы / количество_меток_на_диске) * (60000 / период_измерения_мс)
- Для повышения точности используйте 32-битный счетчик и аппаратный таймер микроконтроллера.
Пример кода для STM32 (HAL):
- Настройте таймер в режиме Encoder Mode (TIM_EncoderMode_TI12).
- Активируйте прерывание по переполнению счетчика для обработки высоких скоростей.
- Для фильтрации дребезга установите параметр ICFilter в TIM_Encoder_Config.