Я пытаюсь контролировать и считывать обороты своего 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);
}