Для электронщиков и радиолюбителей

Использование датчика зубчатых колес с Arduino

Использование датчиков зубчатых колес с Arduino

Измерение систем, вращающихся с высокой скоростью, является распространенной задачей в автомобильных системах. Чтобы точно определить скорость вращения объекта без физического контакта, как у энкодера, например, команда UCLA Baja Racing использует датчики зубчатых колес. В этой статье мы рассмотрим принцип работы этих датчиков на основе эффекта Холла, а также приведем практический пример их использования на гоночном автомобиле. После прочтения вы сможете реализовать собственное решение на основе датчика зубчатых колес.


Теория

Датчики зубчатых колес используют эффект Холла для обнаружения ферромагнитных материалов. Это сложное утверждение, поэтому давайте разберем его подробнее.

Ферромагнитные материалы (или любые материалы с высокой магнитной проницаемостью) обладают уникальным свойством: они могут направлять и концентрировать магнитные поля. На рисунке ниже видно, что при введении ферромагнитного материала в магнитное поле обычного стержневого магнита поле концентрируется прямо перед ним. Это означает, что при прохождении ферромагнитного объекта перед датчиком сила магнитного поля увеличивается и уменьшается. В подобных сенсорах магнит обычно встроен в корпус датчика, но перед использованием стоит проверить техническую документацию.

Но как это полезно и как мы можем это обнаружить? Ответ заключается в эффекте Холла. Этот эффект использует тот факт, что магнитные поля воздействуют на движущиеся электрические заряды. Заряды разного знака движутся в противоположных направлениях, позволяя нам обнаруживать магнитные поля в виде напряжения! Считывая это напряжение, мы можем определить силу магнитного поля, проходящего через датчик.


Реализация

Используя эффект Холла, датчики зубчатых колес могут фиксировать прохождение перед ними ферромагнитных объектов. Таким образом, мы можем измерять скорость вращения объекта (если он ферромагнитный). К счастью, благодаря встроенной электронике, нам не нужно интерпретировать напряжение эффекта Холла напрямую. Вместо этого датчик выдает цифровой высокий сигнал при обнаружении ферромагнитного объекта и низкий сигнал в противном случае.

Эти цифровые сигналы легко интерпретируются микроконтроллером, таким как Arduino Uno. Мы будем использовать датчик 55075 от Littelfuse. Подключите датчик, как показано на схеме.

В этом примере мы измеряем скорость передних колес нашего автомобиля.

На изображении ниже красным кружком обведен датчик зубчатого колеса. Он установлен таким образом, чтобы считывать прорези в стальном тормозном диске. Когда колесо (и тормозной диск) вращаются, датчик выдает низкий логический уровень, когда прорези в диске проходят перед ним. Если у вас нет автомобиля Baja, не беспокойтесь! Вы можете просто провести любым ферромагнитным объектом перед датчиком, чтобы проверить его работу. Мы часто используем для этого стальные болты.

В среде Arduino IDE используем следующий код для записи значений частоты вращения (RPM):

#define GEARTOOTH_INPUT 3 

int ticks = 0;
double teeth_per_rot = 8.0;
double gear_rpm;
uint32_t last_gear_time_us = 0;
unsigned long time;
double milPerMin = 60000;
double lastTime = 0;

void on_gear_tick() {
  ticks++;
}  

void setup() {
  Serial.begin(9600);
  pinMode(GEARTOOTH_INPUT, INPUT);
  attachInterrupt(digitalPinToInterrupt(GEARTOOTH_INPUT), on_gear_tick, CHANGE);
}

void loop() {
  if (millis() - lastTime == 500) {
    double rpm = ((ticks / teeth_per_rot) / 500) * milPerMin;
    ticks = 0;
    Serial.print(rpm);
    Serial.print(", ");
    Serial.println(millis());
    lastTime = millis();
  }
}

Если вы раньше использовали прерывания, этот код не покажется сложным. Прерывание — это функция, которая срабатывает при изменении состояния цифрового вывода (с High на Low или наоборот). В нашем случае мы фиксируем изменения на выходе датчика зубчатого колеса. Когда это происходит, мы увеличиваем переменную ticks.

Каждое срабатывание датчика соответствует прохождению прорези в тормозном роторе. В основном цикле мы оцениваем RPM каждые 0,5 секунды, деля количество срабатываний на число прорезей в роторе (8). Это дает нам число полных оборотов. Затем мы делим его на количество минут, прошедших с начала измерений, чтобы получить обороты в минуту (RPM).

Мы выводим рассчитанные RPM и время в миллисекундах, чтобы затем построить графики.


Результаты

Чтобы протестировать датчик, мы прокатились на автомобиле по парковке в течение нескольких минут. Затем мы взяли данные, напечатанные в серийном мониторе, и построили график с помощью Python. Вот результаты:

Вы можете заметить, что выходной сигнал содержит шум и несколько пиков, которые следует отфильтровать. Применив простой фильтр нижних частот, мы получили более стабильный график:

Используя этот метод, команда Baja измеряет скорость всех четырех колес и двигателя. Затем мы используем эти данные для управления автоматической трансмиссией!

Датчики зубчатых колес применимы не только для вращающихся объектов. Вы также можете использовать такой датчик в качестве переключателя, который определяет наличие или отсутствие ферромагнитного объекта. Это особенно полезно, когда стандартный концевой выключатель не подходит!

Теперь, прочитав статью, вы должны понимать, как работает датчик зубчатого колеса и как применить его на практике.