Cambio frequenza PWM

Ciao, vorrei controllare delle ventole da 2 pin con arduino e ho notato che variando la velocità tramite PWM emettono un fastidioso ronzio. Ho trovato su internet un modo per variare la frequenza del PWM e portarla a 31kHz così che non facciano più rumore. Sul setup del codice ho inserito:

TCCR1B = (TCCR1B & 0b11111000) | 0X01;

che mi varia il timer 1 sui pin 9 e 10.
La ventola non emette più nessun ronzio ma appena viene dato il comando di accensione (che sia tramite pulsante o sensore di temperatura) la ventola parte come dichiarato ma il codice si blocca non eseguendo più nessun'altra funzione.
Se elimino la riga il tutto torna a funzionare come dovrebbe. Come mai questo comportamento?

Oltre che un motore Brushless come quelli delle ventole non funzionano bene se pilotato in PWM, Come possiamo saper il Tuo sketch se ci dai solo una riga?
Ciao Uwe

Questo è il codice (elimino un pò di righe sopra il setup perchè troppo lungo il messaggio, non definisco nulla di importante):

#include <Time.h>
#include <TimeAlarms.h>
#include <DS3231.h>
#include <DS3232RTC.h>
#include <Wire.h> 
#include <IRremote.h>
#include <LEDFader.h>
DS3231  rtc(SDA, SCL);
Time t;


//DEFINISCO RICEVITORE E TRASMETTITORE IR
int RECV_PIN = 13;
IRrecv irrecv(RECV_PIN);
IRsend irsend;
decode_results results;


//DEFINISCO I PIN UTILIZZATI
     #define router                  A0                                                           //RELE' 1
     #define voip                    A1                                                           //RELE' 2
     #define wii                     A3                                                           //RELE' 3
     //                              3                                                            //TRASMETTITORE IR 
     #define pc                      4                                                            //RELE' 4
     #define led_sopra               11                                                            //TRANSISTOR GRANDE
     #define led_tv                  6                                                            //TRANSISTOR GRANDE                             
     #define stereo                  7                                                            //RELE' 5
     #define giradischi              8                                                            //RELE' 6
    // #define led_stato               5                                                            //TRANSISTOR PICCOLO                   
     #define ventola_alimentatore    10                                                           //TRANSISTOR GRANDE 
     //                              11                                                           //RICEVITORE IR 
     #define lampada                 12                                                           //RELE' 7                                                                                            
     #define ventola_generale        9                                                           //TRANSISTOR GRANDE                                       

     #define amp_giradischi          A2
     //#define SVILUPPI FUTURI                                                                    //RELE' 8, NON UTILIZZATO
     #define pulsante                A5
     #define interr_3luci            2


//FADE LED

LEDFader led_stato = LEDFader(5);




void setup(){

TCCR1B = (TCCR1B & 0b11111000) | 0X01;
 
//AVVIO IR
     irrecv.enableIRIn();


//IMPOSTAZIONE LE VARIABILI TEMPO  
     rtc.begin();
     tempoCorrente_Router_Voip=millis();
     tempoCorrente_wii=millis();
     tempoCorrente_pc=millis();
     tempoCorrente_stereo=millis();
     tempoCorrente_giradischi=millis();

  
//IMPOSTAZIONE INGRESSI E USCITE  
      pinMode(router, OUTPUT);
      pinMode(voip, OUTPUT);
      pinMode(wii, OUTPUT);
      pinMode(pc, OUTPUT);
      pinMode(led_sopra, OUTPUT);
      pinMode(led_tv, OUTPUT);
      pinMode(stereo, OUTPUT);
      pinMode(giradischi, OUTPUT);
      pinMode(ventola_alimentatore, OUTPUT);
      //pinMode(led_stato, OUTPUT);
      pinMode(lampada, OUTPUT);
      pinMode(ventola_generale, OUTPUT);
      pinMode(amp_giradischi, OUTPUT);

      pinMode(pulsante, INPUT);
      pinMode(interr_3luci, INPUT);
    


//IMPOSTAZIONE DEI PIN ALL'AVVIO      
      digitalWrite(router, LOW );                                                   //RELE' 1 -------- LOW
      digitalWrite(voip, LOW );                                                     //RELE' 2 -------- LOW                
      digitalWrite(wii, LOW );                                                      //RELE' 3 -------- LOW
      digitalWrite(pc, LOW );                                                       //RELE' 4 -------- LOW
      analogWrite(led_sopra, 0 );
      analogWrite(led_tv, 0 );
      digitalWrite(stereo, LOW );                                                   //RELE' 5 -------- LOW
      digitalWrite(giradischi, HIGH );                                              //RELE' 6 -------- HIGH
      //analogWrite(led_stato, LOW );
      analogWrite(ventola_alimentatore, LOW );
      digitalWrite(lampada, HIGH );                                                 //RELE' 7 -------- HIGH
      analogWrite(ventola_generale, LOW );
      //digitalWrite(SVILUPPI FUTURI, HIGH );                                       //RELE' 8 -------- HIGH
      digitalWrite(amp_giradischi, LOW );
      digitalWrite(2, INPUT_PULLUP);
      digitalWrite(A5, INPUT_PULLUP);
     
}



void loop() {

//AVVIO RECEZIONE CODICI IR
     {if (irrecv.decode(&results)) {Serial.println(results.value, HEX); irrecv.resume();}}

     
//AVVIO DEI PROGRAMMI
     Router_Voip();
    Fade_led();
  //   Blink_led();
     Wii();
     Giradischi();
     Pc();
     Stereo();
     Pulsante_riavvio_router_voip();
     Pulsante_modem();
     Pulsante_voip();
  
     Pulsante_riavvio();
 //  Led_sopra();
     

  

                                         
//VENTOLA GENERALE
     if (rtc.getTemp()<30)   {analogWrite(ventola_generale, 0);}
     if (rtc.getTemp()>30)   {analogWrite(ventola_generale, 250);}


//VENTOLA ALIMENTATORE
   if (stato_wii==0 & stato_giradischi==1){analogWrite(ventola_alimentatore, 0);}
     if (stato_wii==1 & stato_giradischi==1){analogWrite(ventola_alimentatore, 200);}
     if (stato_wii==0 & stato_giradischi==0){analogWrite(ventola_alimentatore, 150);}
     if (stato_wii==1 & stato_giradischi==0){analogWrite(ventola_alimentatore, 250);}
     

     
//PULSANTI
     lettura_interruttore_3luci = analogRead (interr_3luci);
     lettura_pulsante_giradischi = results.value == 0xFF22DD;
     lettura_pulsante_wii = results.value == 0xFFE21D;
     lettura_pulsante_pc = results.value == 0xFF629D;
     lettura_pulsante_stereo = results.value == 0xFFA25D;
     lettura_pulsante_conferma_azione = results.value == 0xFF38C7;
     lettura_pulsante_riavvio_router_voip = results.value == 0xFF906F;
     lettura_pulsante_led_sopra = results.value == 0xFF4AB5;
//     lettura_pulsante_DIMINUISCE_led_sopra = results.value == 0xFF4AB5;FF6897
     lettura_pulsante_modem = results.value == 0xFFE01F;
     lettura_pulsante_voip = results.value == 0xFFA857;
     lettura_pulsante_riavvio = results.value == 0xFFC23D;



}




//---------------------------------------------------------------------------------------------------ALTRI PROGRAMMI---------------------------------------------------------------------------------------------

//PROGRAMMA AVVIO ROUTER E VOIP
  void Router_Voip() 
     {if((Avvio_Router_Voip==1)||(Riavvio_Router_Voip==1)) {stato_Router_Voip=1; Avvio_Router_Voip=0; Riavvio_Router_Voip = 0; digitalWrite(router,LOW); digitalWrite(voip,LOW); stato_router = 0; stato_voip = 0; stato_led_fade=1;numero_fade=5;}
     tempoCorrente_Router_Voip=millis();
     if((tempoCorrente_Router_Voip-tempo_Router_Voip>=5000)&&stato_Router_Voip==1) {digitalWrite(router,HIGH); stato_router = 1; stato_Router_Voip=2; tempo_Router_Voip=millis();}
     else if (stato_Router_Voip==2) {if(tempoCorrente_Router_Voip-tempo_Router_Voip>=2000) {digitalWrite(voip,HIGH); stato_voip = 1; stato_Router_Voip=0;}}}


//PROGRAMMA FADE LED DI STATO
  void Fade_led() 
     {led_stato.update();
     if ((led_stato.is_fading() == false)&&(stato_led_fade == 1)) 
     {if (led_stato.get_value() == 255) {led_stato.fade(0, 1000);contatore_led_fade++;}
     else {led_stato.fade(255, 1000);}} 
     if (contatore_led_fade == numero_fade){stato_led_fade = 0; contatore_led_fade = 0;}}

  void Blink_led() 
     {led_stato.update();
     if ((led_stato.is_fading() == false)&&(stato_led_blink == 1)) 
     {if (led_stato.get_value() == 255) {led_stato.fade(0, 100);contatore_led_blink++;}
     else {led_stato.fade(255, 100);}} 
     if (contatore_led_blink == numero_blink){stato_led_blink = 0; contatore_led_blink = 0;}}





void Wii()
     {tempoCorrente_wii=millis();
     if (lettura_pulsante_wii == HIGH && valore_precedente_pulsante_wii == LOW && tempoCorrente_wii - tempo_wii > ritardo_pulsante) 
     {if (stato_wii == 1) stato_wii = 0; else stato_wii = 1; tempo_wii = millis(); }
     digitalWrite(wii, stato_wii);
     valore_precedente_pulsante_wii = lettura_pulsante_wii;}
     
void Pc()
     {tempoCorrente_pc=millis();
     if (lettura_pulsante_pc == HIGH && valore_precedente_pulsante_pc == LOW && tempoCorrente_pc - tempo_pc > ritardo_pulsante) 
     {if (stato_pc == 1) stato_pc = 0; else stato_pc = 1; tempo_pc = millis(); }
     digitalWrite(pc, stato_pc);
     valore_precedente_pulsante_pc = lettura_pulsante_pc;}

Nessuno?