Eliminare il fischio di un motore

Salve

Vorrei postare il codice per eliminare quel fastidioso fischio del motore ma non mi funziona
Se qualcuno puo' intervenire lo ringrazio anticipatamente.`

 int enA = 9;
 int in1 = 5;
 int in2 = 6;

void setup()
{
  
   pinMode(enA, OUTPUT);
   pinMode(in1, OUTPUT);
   pinMode(in2, OUTPUT);
  setPwmFrequency(9, 1);
  }
  
  void loop()
  {
  
  analogWrite(enA, 120);
  digitalWrite(in1, HIGH);
  digitalWrite(in2, LOW);
  
  delay(50000);
   
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  
  delay(20000);

  analogWrite(enA, 120);
  
  digitalWrite(in1, LOW);
  digitalWrite(in2, HIGH);
  
  delay(2000);
  digitalWrite(in1, LOW);
  digitalWrite(in2, LOW);
  
  delay(2000);
  //ATTENZIONE AI FILI COLLEGATI//
  } 
  void setPwmFrequency(int pin, int divisor) {
 byte mode;
 if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
   switch(divisor) {
      case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
     case 64: mode = 0x03; break;
     case 256: mode = 0x04; break;
     case 1024: mode = 0x05; break;
      default: return;
    }
    if(pin == 5 || pin == 6) {
      TCCR0B = TCCR0B & 0b11111000 | mode;
   } else {
     TCCR1B = TCCR1B & 0b11111000 | mode;
    }
  } else if(pin == 3 || pin == 11) {
    switch(divisor) {
     case 1: mode = 0x01; break;
      case 8: mode = 0x02; break;
     case 32: mode = 0x03; break;
     case 64: mode = 0x04; break;
     case 128: mode = 0x05; break;
      case 256: mode = 0x06; break;
      case 1024: mode = 0x7; break;
     default: return;
    }
    TCCR2B = TCCR2B & 0b11111000 | mode;
  }
}

Ho ripreso dopo anni a dedicarmi alla costruzione di piccoli dispositivi per hobby
avevo, molto tempo fa, fatto la stessa richiesta e analizzando le risposte di allora non riesco lo stesso a procedere mentre allora ero riuscito a risolvere.`Preformatted text

@1oniudra2 : in conformità al REGOLAMENTO , punto 7, cortesemente edita il tuo post qui sopra (quindi NON scrivendo un nuovo post, ma utilizzando il bottone a forma di piccola matita :pencil2: che si trova in basso del tuo post), seleziona TUTTA la parte di codice e premi l'icona </> nella barra degli strumenti per contrassegnarla come codice. Inoltre, così com'è non è molto leggibile ... assicurati di averlo correttamente indentato nell'IDE prima di inserirlo (questo lo si fa premendo ctrlT su un PC o cmd T su un Mac all'intero del IDE). Per maggiori informazioni ... punto 17.2 del succitato regolamento. Grazie.

Guglielmo

P.S.: Ti ricordo che, purtroppo, fino a quando non sarà sistemato il codice, nel rispetto del suddetto regolamento nessuno ti risponderà, quindi ti consiglio di fare il tutto al più presto. :wink:

Se non sbaglio stai usando il PWM sul pin 9 con il prescaler a 1 quindi una frequenza di circa 31.25 KHz.

Dovresti essere ben lontano dalla soglia dell'udibile, ma io temo che una frequenza del genere sia troppo per il povero motore e che quindi il fischio che percepisci sia dovuto ad altro dovuto alla perdita di efficienza di commutazione.

Io starei più su una frequenza tipo 3.9 KHz (prescaler 8) oppure 7.8Khz cambiando pin (5 e 6) se si tratta di un buon motore con una bassa induttanza.

Ringrazio dei consigli ,fortunatamente sembra che i motori del tergicristallo panda si comportino bene per gli utilizzi che ne devo fare.
L'inghippo forse era nella scheda arduino mega, forse rovinata, che non ne voleva sapere l'ho sostituita con arduino uno e il fischio e' sparito.