Контроллер вентилятора ESP32: неверный счетчик оборотов - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь контролировать и считывать обороты своего 12-вольтового вентилятора с помощью этого небольшого программного обеспечения для моего ESP32.

ШИМ-контакт вентилятора подключен к контакту 33, а тахогенератор - к контакту 16.Когда я запускаю свою программу, консоль выводит числа ~ 25125.Вентилятор работает на полной скорости ~ 5000 об / мин.Когда я отсоединяю сигнал ШИМ от моего ESP32, он показывает правильные числа ~ 165.

Откуда приходят 25000?ESP32 также добавляет 25000, когда я устанавливаю ШИМ на 150 вместо 255. (У меня нет резистора PULLUP 3.3 В на контакте 16)

main.cpp:

#include <Arduino.h>
#include <atomic>

#define PWM 33
#define TCH 16
#define CH 0
#define HZ 25000
#define BITRATE 8

std::atomic<int> half_rev;
int ttime;

void cnt_rpm(){
  half_rev++;
}

void setup() {
  Serial.begin(9600);

  pinMode(TCH,INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(TCH),cnt_rpm,RISING);

  ledcSetup(CH, HZ, BITRATE);
  ledcAttachPin(PWM, CH);
  ledcWrite(CH, 255);
}

void loop() {
  if(ttime == 1000){
    ttime = 0;
    Serial.println(half_rev.exchange(0),DEC);
  }
  ttime++;
  delay(1);
}
...