Расчет оборотов датчики холла Arduino

Расчет оборотов двигателя на основании датчика холла, с учетом количества магнитов.

const int hallPin = 13;  // Пин, к которому подключен датчик Холла
const unsigned int numMagnets = 6;  // Количество магнитов на роторе

unsigned long lastPulseTime = 0;
unsigned long currentMillis = 0;
unsigned long lastPrintTime = 0;  // Время последнего вывода значений в серийный порт
const unsigned long printInterval = 500;  // Интервал времени между выводами в серийный порт (в миллисекундах)
float rpm = 0;
bool hallState = false;  // Текущее состояние датчика Холла
bool lastHallState = false;  // Предыдущее состояние датчика Холла

void setup() {
  Serial.begin(9600);  // Инициализация серийного соединения для вывода данных
  pinMode(hallPin, INPUT_PULLUP);  // Настройка пина как вход с подтягивающим резистором
}

void loop() {
  currentMillis = millis();

  // Чтение текущего состояния датчика Холла
  hallState = digitalRead(hallPin) == LOW;

  // Проверка на переход состояния с высокого на низкий
  if (hallState && !lastHallState) {
    unsigned long timePerRevolution = currentMillis - lastPulseTime;
    lastPulseTime = currentMillis;

    // Рассчитываем количество оборотов в минуту (RPM)
    rpm = 60000.0 / (timePerRevolution * numMagnets);  // 60000 мс в минуту

 
  }
  lastHallState = hallState;

  // Дополнительный вывод значений RPM в серийный порт через регулярные интервалы времени
  if (currentMillis - lastPrintTime >= printInterval) {
    lastPrintTime = currentMillis;
    Serial.println(rpm);  // Дополнительный вывод значений RPM в серийный монитор
  }
}
Оценить данный товар
(0 голосов)
--->
Поделиться
Также смотри