regolazione velocità di rotazione di una ventola con 4 fili

salve a tutti, ho la necessità di regolare la velocità di rotazione di una ventola Alpine arctic 11 plus dotata di 4 pin (nero-rosso-giallo-blu). Ho provato ad usare il banale analogWrite(pin,valore), ma non c’è nessuna variazione della rotazione. Ho provato anche un codice che mi consentisse di regolare la frequenza del pwm, facendo dei tentativi da 21 a 30 khz come frequenza:

byte  const OC1A_PIN  =  9 ;
 byte  const OC1B_PIN  =  10 ;

 parola  const PWM_FREQ_HZ  =  20000 ;  // Regola questo valore per regolare la frequenza
const  parola  TCNT1_TOP  =  16000000 / ( 2 * PWM_FREQ_HZ );

void  setup ()  {
  
  pinMode ( OC1A_PIN ,  OUTPUT );

  // Cancella i registri di controllo e conteggio Timer1
  TCCR1A  =  0 ;
  TCCR1B  =  0 ;
  TCNT1   =  0 ;

  // Imposta la configurazione del Timer1
  // COM1A (1: 0) = 0b10 (Uscita A in aumento / set in diminuzione)
  // COM1B (1: 0) = 0b00 (funzionamento normale uscita B)
  // WGM (13:10) = 0b1010 (PWM corretto di fase)
  // ICNC1 = 0b0 (cancellazione del rumore di cattura dell'ingresso disabilitato)
  // ICES1 = 0b0 (Selezione del fronte di cattura dell'ingresso disabilitata)
  // CS (12:10) = 0b001 (Input clock select = clock / 1)
  
  TCCR1A  | =  ( 1  <<  COM1A1 )  |  ( 1  <<  WGM11 );
  TCCR1B  | =  ( 1  <<  WGM13 )  |  ( 1  <<  CS10 );
  ICR1  =  TCNT1_TOP ;
}

void  loop ()  {

    setPwmDuty ( 0 );
    ritardo ( 5000 );
    setPwmDuty ( 25 );  // Modifica questo valore 0-100 per regolare il ciclo di lavoro
    ritardo ( 5000 );
// setPwmDuty (50);
// ritardo (20000);
// setPwmDuty (75);
// ritardo (20000);
// setPwmDuty (100);
// ritardo (20000);
}

void  setPwmDuty ( byte  duty )  {
  OCR1A  =  ( word )  ( duty * TCNT1_TOP ) / 100 ;
}

Ho collegato anche le masse assieme, ma non sono riuscito a far variare i giri. Ho provato a diverse tensioni pensando che magari il funzionamento sia differente in base alla tensione.Nulla… qualcuno mi aiuterebbe a venirne a capo??

Lo schema di collegamento, per una ventola a 4 fili, è quello che vedi in allegato … tu hai fatto così? Altrimenti è normale che non funziona e … meglio NON giocare con le frequenze del PWM che non serve.

Guglielmo

FAN 4wire.pdf (171 KB)

il pin 3 non l'ho collegato per la lettura della velocità. Per il resto mancherebbe il diodo tra il pin 1 e il pin 4. Proverò in serata..

ho fatto alcuni tentativi. Effettivamente con un diodo ed una resistenza di pullup da 10k la regolazione della velocità funziona, con un semplice analogWrite o anche con le istruzioni postate sopra per il funzionamento a 25khz. Il problema è ora la lettura RPM. Sostanzialmente, anche se collego il pin 3 (tachimetro) come da schema, la lettura dei giri funziona solo se il pwm è impostato al 100%. Se provo a modificare il valore, riducendo i giri si ha una lettura impazzita, con valori a caso. Da cosa può dipendere? Sembra un'interferenza di tipo elettrico