Dunuin
14.10.2011, 14:26
Moin,
Ich versuche den Duty-Cycle (in 1%-Schritten) vom PWM-Steuersignal des Mainboards auszulesen, welches normal per 4-Pin-Molexstecker an den PWM-geregelten CPU-Lüfter gesendet wird. Abhängig von dem gemessenen Duty-Cycle möchte ich dann später einen Lüfter (der kein PWM-Steuersignal unterstützt) über die Spannung drosseln.
Hier die Spezifikationen (http://www.formfactors.org/developer%5Cspecs%5CREV1_2_Public.pdf) zu dem PWM-Signal:
PWM Control Input Signal
The following requirements are measured at the PWM (control) pin of the fan cable connector:
PWM Frequency: Target frequency 25 kHz, acceptable operational range 21 kHz to 28 kHz
Maximum voltage for logic low: VIL = 0.8 V
Absolute maximum current sourced: Imax = 5 mA (short circuit current)
Absolute maximum voltage level: VMax = 5.25 V (open circuit voltage)
Da hatte ich jetzt 2 Ansätze, wo mir aber keine brauchbare Lösung zu einfällt:
1.) PWM-Signal direkt per Atmega uC auslesen.
Eine Idee war es, dass ich den Duty-Cycle direkt per 16bit-Timer per Input Capture Interrupt auswerte. 28kHz Frequenz * 100 Schritte Auflösung = Flankenwechsel im bis zu 2,8 MHz Intervall. Selbst wenn ich da einen 20MHz Quarz an den Atmega hänge, hätte ich nur 7 Takte, um den Flankenwechsel auszulesen und auszuwerten, bevor der nächste Flankenwechsel kommen würde. Das bekomme ich aber so schnell nicht hin.
2.) PWM-Signal per Tiefpass 1. oder 2. Grades glätten und dann dessen Spannung per ADC auslesen
Hier wollte ich gerne das PWM-Signal vom Mainboard per Optokoppler abzweigen, damit ich mir nicht ausversehen das Mainboard zerstöre und das ungeglättete PWM-Signal weiterhin funktioniert.
Da stehe ich jetzt aber vor dem Problem, dass so ein Optokoppler meist gute 10 bis 30mA für die LED verbraucht, man das Signal aber nur mit bis zu 5mA belasten kann (wo der CPU-Lüfter sicher auch noch etwas verbraucht). Optokoppler mit ca. 1mA Stromverbrauch konnte ich zwar auch finden, aber die arbeiten dann mit Darlington Phototransitoren, da sonst der Stromverstärkungsfaktor nicht reichen würde und dann sind die so langsam, dass die nur mit ein paar kHz zurecht kommen, ich ja aber 2,8 MHz brauche. Optokoppler mit Photodiode sollen angeblich mit mehreren MHz klar kommen, aber die brauchen dann auch wieder so viel Strom am Eingang.
Hat da noch jemand eine Idee, wie man das hinbekommen könnte?
Ich versuche den Duty-Cycle (in 1%-Schritten) vom PWM-Steuersignal des Mainboards auszulesen, welches normal per 4-Pin-Molexstecker an den PWM-geregelten CPU-Lüfter gesendet wird. Abhängig von dem gemessenen Duty-Cycle möchte ich dann später einen Lüfter (der kein PWM-Steuersignal unterstützt) über die Spannung drosseln.
Hier die Spezifikationen (http://www.formfactors.org/developer%5Cspecs%5CREV1_2_Public.pdf) zu dem PWM-Signal:
PWM Control Input Signal
The following requirements are measured at the PWM (control) pin of the fan cable connector:
PWM Frequency: Target frequency 25 kHz, acceptable operational range 21 kHz to 28 kHz
Maximum voltage for logic low: VIL = 0.8 V
Absolute maximum current sourced: Imax = 5 mA (short circuit current)
Absolute maximum voltage level: VMax = 5.25 V (open circuit voltage)
Da hatte ich jetzt 2 Ansätze, wo mir aber keine brauchbare Lösung zu einfällt:
1.) PWM-Signal direkt per Atmega uC auslesen.
Eine Idee war es, dass ich den Duty-Cycle direkt per 16bit-Timer per Input Capture Interrupt auswerte. 28kHz Frequenz * 100 Schritte Auflösung = Flankenwechsel im bis zu 2,8 MHz Intervall. Selbst wenn ich da einen 20MHz Quarz an den Atmega hänge, hätte ich nur 7 Takte, um den Flankenwechsel auszulesen und auszuwerten, bevor der nächste Flankenwechsel kommen würde. Das bekomme ich aber so schnell nicht hin.
2.) PWM-Signal per Tiefpass 1. oder 2. Grades glätten und dann dessen Spannung per ADC auslesen
Hier wollte ich gerne das PWM-Signal vom Mainboard per Optokoppler abzweigen, damit ich mir nicht ausversehen das Mainboard zerstöre und das ungeglättete PWM-Signal weiterhin funktioniert.
Da stehe ich jetzt aber vor dem Problem, dass so ein Optokoppler meist gute 10 bis 30mA für die LED verbraucht, man das Signal aber nur mit bis zu 5mA belasten kann (wo der CPU-Lüfter sicher auch noch etwas verbraucht). Optokoppler mit ca. 1mA Stromverbrauch konnte ich zwar auch finden, aber die arbeiten dann mit Darlington Phototransitoren, da sonst der Stromverstärkungsfaktor nicht reichen würde und dann sind die so langsam, dass die nur mit ein paar kHz zurecht kommen, ich ja aber 2,8 MHz brauche. Optokoppler mit Photodiode sollen angeblich mit mehreren MHz klar kommen, aber die brauchen dann auch wieder so viel Strom am Eingang.
Hat da noch jemand eine Idee, wie man das hinbekommen könnte?