Forum: Mikrocontroller und Digitale Elektronik STM32F4 - Ansteuerung meines Boxed-CPU-Kühler: naja


von repac3r (Gast)


Lesenswert?

Schönen Abend euch,

nach längerer Auszeit, möchte ich gerne mal wieder mit meinem STM 
basteln. Habe meinen alten Boxed-CPU-Kühler (4Pin) rausgekramt und drauf 
los programmiert, oder auch nicht.

Habe das ganze nach diesem Schema angeschlossen: 
http://i240.photobucket.com/albums/ff102/jackthenewbie/cpufan.jpg

GND und VCC verlaufen auf mein Steckbrett, die 12V kommen von der 
Lüftersteuerung meines PC's (schlechte Idee ich weiß, habe im Moment 
aber keine andere 12V-Quelle).
GND von meinem Discovery-Board(stm32f4) geht ebenfalls zu GND der 
Lüftersteuerung auf dem Steckbrett.
Der PWM-Ausgang geht direkt in dessen Eingang, des CPU-Kühlers.
Der Kühler dreht es komplett auf, pendelt sich dann langsam bei der 
Hälfte seiner "stärke" ein.
Habe die Befürchtung, dass mein PWM nicht ganz stimmt, klemme ich dieses 
an einem Piezo, oder einer LED, bekomme ich kein hör, bzw. sehbares 
Signal.
Den PWM habe ich mal auf 25kHz ausgelegt.
Wer interesse hat, darf gerne mal in meinem Code schnüffeln:

1
int main(void)
2
{
3
    SystemInit();
4
    InitTimer();
5
    SetPwmPercentage(70);
6
    while(1)
7
    {
8
9
    }
10
}
11
12
13
void SetPwmPercentage(int percent)
14
{
15
    int pulse = ((3359 +1) * percent) / 100 -1;
16
    TIM_OCInitTypeDef timOcInit;
17
    timOcInit.TIM_OCMode = TIM_OCMode_PWM1;
18
    timOcInit.TIM_OutputState = TIM_OutputState_Enable;
19
    timOcInit.TIM_OCPolarity = TIM_OCPolarity_Low;
20
    timOcInit.TIM_Pulse = pulse;
21
22
    TIM_OC1Init(TIM3, &timOcInit);
23
}
24
25
void InitTimer()
26
{
27
    GPIO_InitTypeDef gpioInit;
28
    TIM_TimeBaseInitTypeDef timInit;
29
    TIM_OCInitTypeDef timOcInit;
30
31
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
32
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
33
34
    gpioInit.GPIO_Mode = GPIO_Mode_AF;
35
    gpioInit.GPIO_OType = GPIO_OType_PP;
36
    gpioInit.GPIO_Pin = GPIO_Pin_4;
37
    gpioInit.GPIO_Speed = GPIO_Speed_100MHz;
38
39
    GPIO_Init(GPIOB, &gpioInit);
40
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_TIM3);
41
42
    timInit.TIM_ClockDivision = TIM_CKD_DIV1;
43
    timInit.TIM_CounterMode = TIM_CounterMode_Up;
44
    timInit.TIM_Period = 3359;
45
    timInit.TIM_Prescaler = 0;
46
    TIM_TimeBaseInit(TIM3, &timInit);
47
48
    timOcInit.TIM_OCMode = TIM_OCMode_PWM1;
49
    timOcInit.TIM_OCIdleState = TIM_OCIdleState_Reset;
50
    timOcInit.TIM_OCNIdleState = TIM_OCNIdleState_Set;
51
    timOcInit.TIM_OCPolarity = TIM_OCPolarity_High;
52
    timOcInit.TIM_OCNPolarity = TIM_OCNPolarity_High;
53
    timOcInit.TIM_OutputState = TIM_OutputState_Enable;
54
    timOcInit.TIM_OutputNState = TIM_OutputNState_Disable;
55
    timOcInit.TIM_Pulse = 3359;
56
57
    TIM_OC1Init(TIM3, &timOcInit);
58
    TIM_Cmd(TIM3, ENABLE);
59
}



Grüße Marcel

von repac3r (Gast)


Lesenswert?

Hat wirklich keiner einen Tipp?

Grüße Marcel

von Michael (Gast)


Lesenswert?

Doch, 2:

a) 25kHz hören dürfte schwer werden (menschliches Gehör ca. 16Hz - 
20kHz)
b) 25kHz sehen dürfte unmöglich sein (menschliches Auge: ca. 25 Hz)

Un woher weißt du, dass der Lüfter "knapp die Hälfte" fährt? Drehzahl 
gemessen?
Was genau ist denn jetzt das Problem / die Frage? Außer dein "Gefühl", 
dass das nicht richtig ist?

von repac3r (Gast)


Lesenswert?

Nein es geht ja garnicht. Der von mir beschriebene Zustand trifft auch 
ein, wenn das PWM Signal nicht am Lüfter angeschlossen ist. Meine PWM 
bewirkt keine Zustandsänderung.
Das der Lüfter nur noch mit der Hälfte seiner Drehzahl dreht ist von mir 
nur geraten, wollte damit nur das Vorgehen des Lüfters erklären. Er 
macht das gleiche, wie wenn das PWM-Signal nicht dem Lüfter zugeführt 
wird. Deswegen habe ich das "Gefühl" das meine PWM nicht zu 
funktionieren scheint, was ja auch der Fall ist, wenn dieser bei einem 
unterschiedlichen Pulse absolut kein Zustand ändert.

Grüße Marcel

von Michael (Gast)


Lesenswert?

Hast du mal die Frequenz WEIT runtergeschraubt? 25kHz erscheinen mir 
irgendwie arg viel?

http://www.meisterkuehler.de/forum/ideen-innovationen/23264-vorstellung-einfache-lueftersteuerung-selber-bauen.html

Da steht was von  "Wird die Frequenz auf 20 kHz erhöht, so dass sie vom 
menschlichen Gehör nicht mehr wahrgenommen werden, so läuft der Lüfter 
häufig nicht mehr richtig. Die im Lüfter integrierte Elektronik ist der 
Schuldige."

Probier mal, wie da beschrieben, 100-150 Hz (ohne k!)

Außerdem: Wie hast du die Leitungen mit deinem MC verbunden? Evtl. ist 
der Pin des Lüfters ja Open-Collector und du musst einen PullUp 
verwenden?

von repac3r (Gast)


Lesenswert?

Okay, laut http://www.formfactors.org/developer/specs/REV1_2_Public.pdf 
dachte ich, währen 25kHz dafür idial geeignet. Das mit dem OC habe ich 
noch garnicht bedacht, sobald ich heute Abend zu Hause bin, werde ich 
dies mal testen.

von repac3r (Gast)


Angehängte Dateien:

Lesenswert?

Okay, habe jetzt auch ein Pull-UP Widerstand der Schaltung hinzugefügt.
Mit der Frequenz selbst habe ich auch ein bisschen rum gespielt (1khz, 
25khz, 100hz, 150hz) nichts hat den Drehimupuls des Lüfters verändert, 
er lief konstant mit ca. 50% weiter.

Grüße Marcel

von noreply@noreply.com (Gast)


Lesenswert?

vielleicht mag der Motor ja keine PWM. ;-) Ich würde mal zum guten alten 
Längsregler greifen.

von repac3r (Gast)


Lesenswert?

Wie soll denn ein CPU-Kühler denn sonst angesprochen werden? Kann mir 
kaum vorstellen, dass der keine PWM hat, der war bei meinem Xeon 1231v2 
drinne.

Grüße Marcel

von Repac3r (Gast)


Lesenswert?

Kann evtl. mal jemand über meinen Code schauen? Denn wenn ich mit der 
Funktion: "SetPwmPercentage" versuche eine PWM auf 100% zu betrieben, 
scheint meine LED nicht voll zu leuchten. Die LED nutze ich im Moment 
nur zum testen der PWM, da laut einem Post hier, mein CPU Kühler kein 
PWM versteht, was ich schwer glauben kann.

Grüße Marcel

von Michael M. (eos400dman)


Lesenswert?

Hallo,

mit welchem Takt läuft denn dein STM?

Viele Grüße Michael

von 6A66 (Gast)


Lesenswert?

Repac3r schrieb:
> Kann evtl. mal jemand über meinen Code schauen? Denn wenn ich mit der
> Funktion: "SetPwmPercentage" versuche eine PWM auf 100% zu betrieben,
> scheint meine LED nicht voll zu leuchten. Die LED nutze ich im Moment
> nur zum testen der PWM, da laut einem Post hier, mein CPU Kühler kein
> PWM versteht, was ich schwer glauben kann.
>
> Grüße Marcel

Hallo Marcel,

am besten wir raten alle nicht sondern Du versuchst einmal mit einem 
Messgerät nachzuvollziehen was Fakt ist. Dadurch lernst Du Deine eigene 
Schaltung zu kontrollieren.

a) Betriebsspannungen messen
b) Ausgangsspannungen messen. PWM auf 100% stellen und messen, PWM auf 
0% Stellen und messen, PWM auf 50% stellen und messen, ... Ströme 
messen,...
c) Belastbarkeit der Ausgänge prüfen (Datenblätter), Belsatung durch 
Eingänge prüfen, Schaltschwellen prüfen, ...

rgds

von Repac3r (Gast)


Lesenswert?

Michael Mayer schrieb:
> Hallo,
>
> mit welchem Takt läuft denn dein STM?
>
> Viele Grüße Michael

Er taktet mit 168Mhz

 @6A66: Hast natürlich recht. Gestaltet sich aber schwer, wenn man keine 
dafür geeignete Instrumente hat. Evtl. kann man ja mit nem AVR den PWM 
messen mal schauen. Was kannst du mir da für Mess-Instrumente empfehlen, 
die dieses können?

Grüße Marcel

von 6A66 (Gast)


Lesenswert?

Repac3r schrieb:
> @6A66: Hast natürlich recht. Gestaltet sich aber schwer, wenn man keine
> dafür geeignete Instrumente hat.

Im Baumarkt gibt es einfache Digitalmessgeräte für roundabout 10EUR. 
Damit kann man die Spannung auf etwa 5% genau abschätzen, das ist 
ausreichend.

Was glaubst Du was es uns kostet, Dich hier zu beraten?
Ich mach das mal nebenher zum Job während der Lötkolben anheizt, Das CAE 
System startet, der Kaffee durchläuft, ...

rgds

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Am Code fällt mir erstmal das auf:
1
    timOcInit.TIM_OCPolarity = TIM_OCPolarity_Low;
das du beim ReInit der PWM auch die Polarität änderst, das ist unnötig.

TIM_OCPolarity_High wäre schon richtig.
Ich hatte mich auch über die 25kHz gewundert, scheint aber der Standard 
bei diesen Lüftern zu sein:
https://en.wikipedia.org/wiki/Computer_fan_control#Pulse-width_modulation

Es kann manchmal nötig sein, dem Timer ein Update Event unterzuschieben:
1
  TIM3->EGR |= (1 << TIM_EGR_UG);
Ist aber bei den CCR Registern selten. Wenn du übrigens statt Timer 3 
den Timer 4 Channel 2 benutzt, ist die orange LED eine Indikator für die 
PWM.

von Michael M. (eos400dman)


Lesenswert?

Repac3r schrieb:
> Er taktet mit 168Mhz
Und wie steht der APB1 Prescaler?

von repac3r (Gast)


Lesenswert?

Michael Mayer schrieb:
> Repac3r schrieb:
>> Er taktet mit 168Mhz
> Und wie steht der APB1 Prescaler?

Der Takt wird ja geteilt, am Ende kommt dann 84Mhz raus.

6A66 schrieb:

> Was glaubst Du was es uns kostet, Dich hier zu beraten?
> Ich mach das mal nebenher zum Job während der Lötkolben anheizt, Das CAE
> System startet, der Kaffee durchläuft, ...
>
> rgds

Danke für die Hilfe, werde mal schauen was ich so finde. Denkst du 
wirklich, dass du der einzige mit einem Beruf bist?

Matthias Sch. schrieb:
> Am Code fällt mir erstmal das auf:    timOcInit.TIM_OCPolarity =
> TIM_OCPolarity_Low;
> das du beim ReInit der PWM auch die Polarität änderst, das ist unnötig.
>
> TIM_OCPolarity_High wäre schon richtig.
> Ich hatte mich auch über die 25kHz gewundert, scheint aber der Standard
> bei diesen Lüftern zu sein:
> https://en.wikipedia.org/wiki/Computer_fan_control...
>
> Es kann manchmal nötig sein, dem Timer ein Update Event unterzuschieben:
> TIM3->EGR |= (1 << TIM_EGR_UG);
> Ist aber bei den CCR Registern selten. Wenn du übrigens statt Timer 3
> den Timer 4 Channel 2 benutzt, ist die orange LED eine Indikator für die
> PWM.

Okay, werde ich heute Abend mal testen, vielen Dank.

Ist es evtl. Möglich, dass der Kühler, gerne eine PWM aus 12V 
Ausgangspannung haben möchte, statt die vom Board "erzeugten" 5V?

Grüße Marcel

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

repac3r schrieb:
> Ist es evtl. Möglich, dass der Kühler, gerne eine PWM aus 12V
> Ausgangspannung haben möchte, statt die vom Board "erzeugten" 5V?
Wikipedia behauptet, das 5V oder 3,3V reichen, das aber im Lüfter ein 
Pullup auf eine solche Schiene sei.
Das kannst du aber am offenen Lüftereingang mal nachmessen. Ohne MC 
sollte da also ein 'High' stehen. Wenn nicht, füge einen Pullup auf 3,3 
oder 5V mit z.B. 1k Ohm hinzu.
Ohne Messgerät wird das aber nichts. Und du brauchst immer mal eines.

: Bearbeitet durch User
von 6A66 (Gast)


Lesenswert?

repac3r schrieb:
> Danke für die Hilfe, werde mal schauen was ich so finde. Denkst du
> wirklich, dass du der einzige mit einem Beruf bist?

Nein, aber wenn ich das nebenbei so machen habe ich halt nicht viel 
Zeit. Und dann wäre es gut, die Fehler, die man selbst ausräumen kann 
erst mal selber auszuräumen. Da Du das anscheinend nicht im Beruf machst 
- ich vermute mal sonst hättest Du entsprechend Messgeräte - und ich 
nebenher hinkt Dein "Vergleich" also. Gilt im übrigen auch generell: 
Ertsn mal selbst ausschließen, dann Hilfe holen.

So und jetzt sind die CPUs geflasht.

rgds

von Repac3r (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Pullup auf eine solche Schiene sei. Das kannst du aber am offenen
> Lüftereingang mal nachmessen. Ohne MC sollte da also ein 'High' stehen.
> Wenn nicht, füge einen Pullup auf 3,3 oder 5V mit z.B. 1k Ohm hinzu.
> Ohne Messgerät wird das aber nichts. Und du brauchst immer mal eines.

In den von mir oben geposteten "Schaltplan" habe ich schon einen PullUp 
mit 10k auf 5v.

@6A66: Okay überredet, werde mir eins zulegen.


Grüße Marcel

von 6A66 (Gast)


Lesenswert?

Repac3r schrieb:
> überredet

Schade - Überzeugt wäre besser :)

rgds

von noreply@noreply.com (Gast)


Lesenswert?

Ich rate mal zwischen die PWM soll eine Steuerspannung für den Lüfter 
generieren und die PWM soll die Versorgungsspannung des Lüfters stellen.

In alter Zeit habe ich das mit einer temparaturabhängigen 
Widerstandskomponente und einen Transistor als Längsregler gemacht. 
Läuft immer noch. ;-)

Tiefpaßfilter helfen.

von repac3r (Gast)


Lesenswert?

noreply@noreply.com schrieb:
> Ich rate mal zwischen die PWM soll eine Steuerspannung für den
> Lüfter
> generieren und die PWM soll die Versorgungsspannung des Lüfters stellen.

Nein, schaut sich niemand mein "Schaltplan"-Ähnliches Bild an? Es geht 
um einen ganz normalen 4 Pin PWM Lüfter. Die Versorgungsspannung kommt 
vom 12V-Ausgang meines Computers. Allein der Steuerimpuls bzw. die PWM 
zeigt kein Einfluss auf den Lüfter. Wie gesagt, um mehr sagen zu können, 
muss ich mir erstmal ein Multimeter anlegen, um die Spannungen zu 
messen.

Grüße Marcel

von 6A66 (Gast)


Lesenswert?

repac3r schrieb:
> Wie gesagt, um mehr sagen zu können,
> muss ich mir erstmal ein Multimeter anlegen, um die Spannungen zu
> messen.

Welche Steuerspannung erwartet denn Dein Lüfter. Kann es sein dass der 
auch 12V PWM-Signale erwartet?

rgds

von repac3r (Gast)


Lesenswert?

6A66 schrieb:
> Welche Steuerspannung erwartet denn Dein Lüfter. Kann es sein dass der
> auch 12V PWM-Signale erwartet?
>
> rgds

Habe ich auch vorhin schon gefragt, die Antwort darauf hin: "nein laut 
Wiki, kann dieser auch mit 3.3V & 5V angesteuert werden". Werde es 
dennoch mal versuchen, ob dies was ändert.

Grüße Marcel

von 6A66 (Gast)


Lesenswert?

repac3r schrieb:
> Habe ich auch vorhin schon gefragt, die Antwort darauf hin: "nein laut
> Wiki, kann dieser auch mit 3.3V & 5V angesteuert werden". Werde es
> dennoch mal versuchen, ob dies was ändert.

Achtung: Nach Deinem Link

repac3r schrieb:
> Okay, laut http://www.formfactors.org/developer/specs/REV1_2_Public.pdf

Dürfte die Spannung an PWM 5,25V nicht überschreiten:

"Absolute maximum voltage level: VMax = 5.25 V (open circuit voltage) "

Die hast Du aber mit einem Pullup nach 12V schon überschritten.

Hast Du mal ins RICHTIGE Datenblatt DEINES Lüfters reingesehen?

rgds

von repac3r (Gast)


Lesenswert?

6A66 schrieb:

> "Absolute maximum voltage level: VMax = 5.25 V (open circuit voltage) "
>
> Die hast Du aber mit einem Pullup nach 12V schon überschritten.


Wo habe ich denn bitte den PullUp an 12V gelegt?
Ich weiß, der Schaltplan ist sehr undeutig, habe mich in Eagle nocht 
nicht eingelesen. Jedoch führt der PullUp in den VCC des Boards, genauer 
gesagt in den 5V Ein/Ausgang.

Naja das ist ein standard Intel-Boxed Kühler. Werde jedoch trotzdem mal 
schauen, ob ich dafür ein Datenblatt finde, melde mich dann.

Grüße Marcel

von 6A66 (Gast)


Lesenswert?

repac3r schrieb:
> Wo habe ich denn bitte den PullUp an 12V gelegt?
> Ich weiß, der Schaltplan ist sehr undeutig

Du hast nur eine "VCC", und die ist mit 12V verbunden. Zumindest im 
Schaltplan. Undeutig? Undeutlich!

repac3r schrieb:
> Jedoch führt der PullUp in den VCC des Boards, genauer
> gesagt in den 5V Ein/Ausgang.

Gut.

rgds

von noreply@noreply.com (Gast)


Lesenswert?

repac3r schrieb:
> Nein, schaut sich niemand mein "Schaltplan"-Ähnliches Bild an?

Lohnt sich das? Ich sehe keine GND Verbindung zwischen PWM-Erzeugung und 
Lüfter. Jetzt kann ich wieder raten warum.

Und es geht hier doch um die Fragen.
Welches Steuersignal will der Lüfter sehen.
Welches Steuersignal erzeugt das STM32X. Oszi?

von repac3r (Gast)


Lesenswert?

So habe auf die schnelle dieses Datenblatt gefunden: 
http://www.intel.ru/content/dam/www/public/us/en/documents/design-guides/3rd-gen-core-lga1155-socket-guide.pdf 
Witzigerweise wird hier ebenfalls auf das oben genannten Datenblatt 
verwießen (http://www.formfactors.org/developer/specs/REV1_2_Public.pdf)
Habe das Datenblatt von Intel ein wenig durchgestöbert, dort stehen 
exakt die gleichen Angaben drinne, wie in dem Blatt von Formfactors.

- Zu betreiben ist die PWM mit 25kHz.
- Die Spannung am PWM sollte nicht höher als 5.2V gehen.

Die Daten sind also richtig. Ich schaue heute nochmal genau, auf welchem 
Clock sich der STM32F407VG befindet und passe es evtl. an. Ich bin denke 
ich jetzt an einem Punkt angekommen, bei diesem mir nur noch ein 
Multimeter mehr sagen kann.

Grüße Marcel

von noreply@noreply.com (Gast)


Lesenswert?

repac3r schrieb:
>> https://en.wikipedia.org/wiki/Computer_fan_control...

btw. Wenn der Lüfter auf den nachfolgenden Wiki-Artikel hört, dann gibt 
es

Sense – provides a tachometer signal that measures the actual speed of 
the fan as a pulse train, frequency being proportional to speed. With 
each fan rotation, there are two pulses sent through this pin.

Da könnte man dann Pulse zählen und ausgeben.

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.