Hallo,
ich hatte meinen Beitrag gelöscht, weil er inhaltlich unpassend war. Also nochmal.
Default Einstellungen vom Arduino Framework.
TCCR1A 0b0000.0001 // WGM10
TCCR1B 0b0000.0011 // CS11, CS10
TCCR1C 0b0000.0000
OCR1A 0
OCR1B 0
Das heißt Timer 1 läuft im PWM Phase Correct 8Bit Mode mit Prescaler 64 und TOP ist fest auf 255 eingestellt. Der Ausgang taktet laut Formel im Manual mit 490Hz.
Sobald irgendwo im Sketch ein analogWrite für einen Pin vom Timer 1 verwendet wird, werden die Compare Output Mode Bits gesetzt. Das passiert alles im Hintergrund.
analogWrite(11, 100); // Mega2560
analogWrite(12, 150); // Mega2560
Änderungen auf:
TCCR1A 0b1010.0001
OCR1A 100
OCR1B 150
Setzt man den Prescaler auf 1 und rechnet erneut taktet der Timer mit 31,37kHz. Die Lüfter sind da recht tolerant. Wenn deiner nicht darunter fällt ginge es ans Eingemachte, glaube ich aber erstmal nicht.
In dem einfachen Fall kann man
TCCR1B = 0 setzen und damit den Timer stoppen und mit
TCCR1B = _BV(CS10) auf Prescaler 1 setzen und gleichzeitig wieder starten.
Wenn Pin 9 auf einen UNO verwendet wird, wird OCR1A verwendet. Nur als Nebeninfo.
Also
TCCR1B = 0;
TCCR1B = _BV(CS10);
analogWrite(9, 150);
Der Lüfter sollte laufen. Und das bei deinem 4Pin PWM Lüfter alles ohne Mosfet. 12V an Lüfter und Taktsignal ran. Fertig. Deswegen hatte ich damals nach dem Lüftermodell gefragt und dachte das wäre mit den anderen Antworten damals geklärt gewesen.
Du kannst dir auch gern die Grundlagen durcharbeiten für mehr Timerwissen. Wenn das Prinzip verstanden wurde kann man alles am Timer umkonfigurieren.
Pinout Arduino Uno 2014 v3.0 (812,6 KB)
Pinout Arduino Mega2560 - 2014 v3.1 (1,9 MB)