Forum: Mikrocontroller und Digitale Elektronik STM32 Lüftersteuerung PWM, Tacho, Display


von Heinz M. (subi)


Lesenswert?

Hallo,

ich bin gerade dabei eine Lüftersteuerung zu bauen. Sie soll an mehreren 
Stellen zum Einsatz kommen. Das Projekt dient mehr zum herantasten an 
größere Projekte. Soll aber gleichzeitig einen praktischen Nutzen 
abwerfen.

Zentrale Steuereinheit:
STM32 (aktuell F042F6P6)

Ansteuerung Lüfter:
PWM 20 bis 60 kHz mit 0 bis 100% (Nur Lüfter, welche PWM Eingang 
besitzen)
Am PWM Ausgang des µCs hängt über einen 1 kOhm Widerstand ein BC 547C 
Transistor, welcher den PWM des Lüfters auf Masse zieht.
 - Nidec TA 350 DC funktioniert hervorragend
 - Arctic Cooling F12 PWM zeigt keinerlei Reaktion

Tacho:
Tachosignal jedes Lüfters soll vom µC erfasst werden und ein Ausfall 
soll signalisiert werden.
Momentan versuche ich es mit einem Timer als Counter. Dieser soll 
mittels zeitbasiertem Interrupt ausgelesen und zurückgesetzt werden.
 - Bekomme Fehlermeldung beim Zähler abfragen, siehe Unten

Display:
Anzeige der einzelnen Lüftergeschwindigkeiten, aktuelle Temperatur und 
Einstellwerte.
 - Muss mich erst noch mit dem Display beschäftigen

Temperaturerfassung:
Wahlweise über PTC/NTC oder I²C.
 - I²C Temperatursensor funktioniert (zum Testen wird einfaches Poti 
verwendet)

Software:
CubeMX STM32
Eclipse (SW4STM32)

---------------------------------------------------------------

Nun zu den Problemen:

Den Tacho wollte ich über einen Counter laufen lassen. Ich bin nach 
dieser Anleitung vorgegangen:
https://letanphuc.net/2015/06/stm32f0-timer-tutorial-and-counter-tutorial/
"2. External Input Counter"
Beim Compilieren bringt er mir die Fehlermeldung:
1
undefined Reference to __HAL_TIM_GetCounter(&htim2);
Das heißt für mich, dass er eine Funktion nicht findet. Aber wie bringe 
ich ihm diese bei? Bei dem oben verlinkten Beispiel sind auch nicht mehr 
Includes dabei.
1
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, adcResult [0]);
Diese Funktion basiert ebenfalls auf Timern und geht ohne Probleme (PWM 
Signal).

Hier wird eine Lösung vorgeschlagen:
https://www.eclipse.org/forums/index.php/t/1065128/
Jedoch kann ich das Menü (Bild ganz am Ende des Links) nirgends finden.

Wie behebe ich den Fehler?


Der Nidec Lüfter lässt sich hervorragend per PWM runterregeln. 
Einstellwerte:
Prescaler: 0
Period: 200
Pulse: Über Poti 0 bis 200
CPU/ABP: 8MHz
8 MHz / 200 = 40 kHz
Der Arctic Cooling Lüfter verändert weder bei 40, noch bei 20 kHz seine 
Drehzahl. Selbst wenn ich den PWM Eingang mit Widerstand direkt an Masse 
oder VCC halte passiert nichts. PWM auf GND ist in der Theorie, als auch 
beim Nidec 0% PWM. Warum weigert sich der Artic Cooling?

von Christopher J. (christopher_j23)


Lesenswert?

Heinz M. schrieb:
> Der Arctic Cooling Lüfter verändert weder bei 40, noch bei 20 kHz seine
> Drehzahl. Selbst wenn ich den PWM Eingang mit Widerstand direkt an Masse
> oder VCC halte passiert nichts. PWM auf GND ist in der Theorie, als auch
> beim Nidec 0% PWM. Warum weigert sich der Artic Cooling?


Vermutlich weil sich der Arctic Cooling scheinbar an die Specs hält:
http://www.formfactors.org/developer/specs/4_wire_pwm_spec.pdf

Alles unter 20% PWM ist nicht spezifiziert, ebenso wie 20kHz oder 40kHz 
PWM-Frequenz. Die Frequenz soll 25kHz betragen, wobei 21kHz bis 28kHz 
akzeptiert werden.

von Harald (Gast)


Lesenswert?

Heinz M. schrieb:
> Am PWM Ausgang des µCs hängt über einen 1 kOhm Widerstand ein BC 547C
> Transistor, welcher den PWM des Lüfters auf Masse zieht.

Der PWM-Eingang ist nicht low-active, sondern muss mit einem ganz 
„normalen“ 5V-PWM Signal angesteuert werden.

von Heinz M. (subi)


Lesenswert?

@Christopher:
Danke für den Link.

Laut Arctic Cooling Webseite müsste der Lüfter bei 0% und 5V ausgehen. 
Bei 0% und 12V runter regeln.
https://www.arctic.ac/de_en/arctic-f12-pwm.html

0% PWM ist GND.

@Harald:
Das erklärt, warum der Arctic Cooling Lüfter mit PWM ungleich 0% nicht 
läuft. Der Nidec hat den 5V Spannungsteiler schon eingebaut. Der AC 
scheinbar nicht.

Das erklärt aber noch nicht, warum er bei 0% PWM nicht anhält.

von Bimbo385 (Gast)


Lesenswert?

Harald schrieb:
> Der PWM-Eingang ist nicht low-active, sondern muss mit einem ganz
> „normalen“ 5V-PWM Signal angesteuert werden.

Nein, stimmt so nicht! Muss ein open-collector oder open-drain Signal 
sein.
Der Pullup steckt im Lüfter selber und auf welche Spannung der das 
Signal hochzieht kann je nach Lüfter verschieden sein. In der Spec 1.3 
ist bei 2.3.1 eine Signalform mit 5V abgebildet, ich hab hier aber einen 
92mm Noctua Lüfter der einen Pullup auf ca. 3,3V hat.

Ich Hab selber von Arctic einen PWM Lüfter in meiner elektronischen 
Last. OC-Ausgang über einen ATmega PWM-Ausgang und BC54x geht 
problemlos. Ungefähr 25kHz sollten es schon sein, aber die meisten 
Lüfter sind da recht tolerant. Unterhalb von 30% ist das Verhalten nicht 
völlig unspezifiziert, so wie ich die Spec lese. Der Lüfter darf sich 
unterhalb von 30% weiter (linear) regeln lassen, irgendwann ausgehen, 
gleich ausgehen oder mit minimum Speed weiterdrehen. Aber schneller als 
bei 30% ist nicht vorgesehen.

Mfg Bimbo385

PS: Ich mache seit über 5 Jahren mit PWM Lüftern und entsprechenden 
Steuerungen rum ;-)

von Heinz M. (subi)


Lesenswert?

Ich habe rausgefunden, was das Problem ist.

Der Nidec geht bei 0% PWM auf 0%.
Der Arctic Cooling geht bei 0% bis 10% PWM auf 100%.

Das Poti ist über den ADC angeschlossen (8Bit = 256). Alles was über 200 
ist, habe ich auf 200 gekürzt, damit ich das ohne Formatumwandlung 
direkt als PWM Wert übertragen kann. Das hatte zur Folge, dass die 11% 
bis 20% wo der Arctic stehen bleibt eine Mittelstellung des Potis 
entspricht. Da der Arctic mit seinen 1350 RPM relativ leise gegenüber 
den 6000 oder 7000 RPM des Nidec ist, merkt man nicht so schnell, dass 
die Regelung läuft und ist schnell über den Stillstand hinaus.

Muss ich wohl eine Konfiguration in die Regelung einbauen, weil der 
Nidec ist bei 10% lauter, als der Arctic bei 100%. 8-O


Bleibt noch das andere Problem mit dem Counter. Jemand ne Idee?

von Christopher J. (christopher_j23)


Lesenswert?

Heinz M. schrieb:
> Beim Compilieren bringt er mir die Fehlermeldung:undefined Reference to
> __HAL_TIM_GetCounter(&htim2);

Es heißt eben auch __HAL_TIM_GET_COUNTER()

von Harald (Gast)


Lesenswert?

Bimbo385 schrieb:
> Harald schrieb:
>> Der PWM-Eingang ist nicht low-active, sondern muss mit einem ganz
>> „normalen“ 5V-PWM Signal angesteuert werden.
>
> Nein, stimmt so nicht! Muss ein open-collector oder open-drain Signal
> sein.

Man lernt doch nie aus! Ich habe die Spec. ein weiteres Mal gelesen und 
Du hast absolut Recht. Ich habe die Spec bisher immer aus Anwendersicht 
gelesen, aber sie richtet sich natürlich auch an den Designer des 
Lüfters, daher ist mir das mit max. 5.25V open loop voltage entgangen! 
Etwas mehr Text oder Bild hätte dem Dokument bestimmt gut getan!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.