Logic Analyzer (8channel, 24Mhz, 5€)

Mein neuer Fileserver steht in hörweite meines Arbeitsplatzes, er soll also so leise wie möglich sein. Gleichzeitig sollen die Lüfter aber so schnell wie nötig laufen, um die Festplatten auf durchschnittlich 40 °C zu halten.

Da mein Mainboard bzw. der Chipsatz nicht von lm-sensors unterstützt wird, baue ich zur Zeit eine Lüftersteuerung auf Arduino-Basis. Die Lüftersteuerung wird einen eigenen Post bekommen. Hier geht es nur um ein Teilproblem.

Der Arduino muss zur Steuerung der 4-Pin PWM-Lüfter laut Intel Spezifikation ein Pulsweitenmodulations-Signal mit etwa 25 kHz erzeugen. Pulsweitenmodulation (kurz: PWM) bedeutet in idealen Fall ein Rechtecksignal. Die obere Linien des Signals bedeutet das Strom fließt (An) und die untere Linie das kein Strom fließt (Aus). Das Verhältnis der Länge der An-Phase zur Länge der Aus-Phase plus Aus-Phase, also einer Periode, nennt man Tastgrad im englischen duty cycle, mit ihr wird die Geschwindigkeit des Lüfters gesteuert.

Zurück zum Arduino. Ich möchte mehrere Lüfter individuell steuern, alle brauchen also ein 25 kHz PWM-Signal, aber mit unterschiedlichen duty cycles.

Es gibt verschiedene Möglichkeiten diese Signale mit dem Arduino zu erzeugen. Man kann das in Software machen, in Hardware und es gibt spezielle Bibliotheken dafür. Ich habe nun die verschiedenen Möglichkeiten auf verschiedenen Arduinos getestet. Mein Problem war nur wie ich die resultierende PWM-Signale kontrolliere.

Man könnte einen Lüfter als Messinstrument benutzen und aus den Veränderungen der Drehgeschwindigkeit Rückschlüsse über den duty cycle ableiten. Ich finde das ohne ein Messinstrument für die Lüfterdrehzahl viel zu ungenau. Ausserdem sagt das auch nicht viel über die Frequenz des PWM-Signals aus, da ein 4-Pin PWM-Lüfter laut Intel Spezifikation durchaus um mehrere kHz varieren darf. Im Internet liest man oft eine LED bzw. deren Helligkeit wären eine gute Messmethode. Das finde ich auch zu ungenau.

Die sicherlich beste Methode wäre ein Oszilloskop, hier könnte man sich das Signal sehr genau anschauen. Für die Zukunft ist eine Anschaffung geplant, zur Zeit besitze ich leider keins. Für digitale Signale, also solche die nur aus An/Aus bzw High/Low bestehen, kann man einen Logic Analyser verwenden.

Wie bei allen Messgeräten ist die Preisspanne der verfügbaren Geräte extrem. Ich wollte preiswert einsteigen und habe mir einen bei Logic Analyser bei Aliexpress für 5€ bestellt.

Logic Analyzer

Beim Aliexpress stand leider nicht wirklich viel über kompatible Software, mit irgendetwas muss man sich die Signale ja dann anschauen. Die Firma saleae verkauft eigene Logic Analyzer und liefert eine gute Software mit. Irgendwo habe ich gelesen, dass die kleinen preiswerten China-Geräte mit deren Software kompatible sind. Der saleae-Support schrieb mir recht klar, dass die Software zwar kostenlos sei, aber nur ihre eigenen Produkte unterstützt.

Entgegen dieser Aussage, funktioniert mein (China) Logic Analyzer einwandfrei mit der saleae-Software.

Nach ein paar Experimenten habe ich es dann geschafft mit einem Arduino Uno mehrere PWM-Signale mit 25 kHz und verschiendenen duty cycles hinzubekommen.

PWM Signale

Leider muss man beim ATmega328P (das ist der Mikroprozessor des Arduino Uno) dafür auch den Timer0 verwenden bzw. umkonfigurieren. Der wird aber für viele andere Dinge wie delay() oder OneWire benötigt. Das heißt für mich kommt der Uno nicht in Frage. Ich werde den Arduino Leonardo (ATmega32u4) verwenden, dieser hat einen weiteren 16Bit-Timer, damit sollte alles realisierbar sein.