Bonjour
J'ai un ventilateur ARTIC F12 PWM PST que j'ai raccorder sur un ESP WROOM 32 comme ceci :
Avec ce code (sans la connection du "PWM") la vitesse de rotation par minute est bien retourner dans le terminal, il descend bien quand je freine le ventilateur avec le doigt.
#include <Arduino.h>
#define PIN_HALL 4
unsigned long previousMillisRpm = 0;
const long intervalCompteur = 1000;
long rpm;
uint32_t compteur = 0;
void IRAM_ATTR blinkFan() {
compteur += 1;
}
void setup()
{
Serial.begin(250000);
pinMode(PIN_HALL, INPUT_PULLUP);
attachInterrupt(PIN_HALL, blinkFan, RISING);
}
void loop()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillisRpm >= intervalCompteur)
{
rpm = ((compteur * 60 * 1000 ) / intervalCompteur) / 2;
compteur = 0;
Serial.print(" rpm =");
Serial.println(rpm);
previousMillisRpm = currentMillis;
}
}
mais lorsque je veut contrôler le PWM de celui ci en connectant la pin GPI02 avec ou sans ce code :
#include <Arduino.h>
#define PIN_BUTTON 4
volatile uint32_t DebounceTimer = 0;
unsigned long previousMillisRpm = 0;
const long intervalCompteur = 1000;
long rpm;
uint32_t compteur = 0;
void IRAM_ATTR blinkFan() {
compteur += 1;
}
void setup()
{
Serial.begin(250000);
pinMode(PIN_BUTTON, INPUT_PULLUP);
attachInterrupt(PIN_BUTTON, blinkFan, RISING);
ledcAttachPin(2, 0); // broche, canal
ledcSetup(0, 1000, 12); // canal, fréquence, resolution
}
void loop()
{
unsigned long currentMillis = millis();
ledcWrite(0, 500); //canal,PWM
if (currentMillis - previousMillisRpm >= intervalCompteur)
{
rpm = ((compteur * 60 * 1000 ) / intervalCompteur) / 2;
compteur = 0;
Serial.print(" rpm =");
Serial.println(rpm);
previousMillisRpm = currentMillis;
}
}
le rpm est erratique ou disproportionné .
De plus je ne comprend pas la ligne :
ledcSetup(0, 1000, 12); // canal, fréquence, resolution
j'ai parcouru cette page mais je n'ai pas compris la fréquence et la résolution....
Si quelqu'un peut corrigé mon erreur et m'expliquer la definition de ces 2 variables ?
Merci

