Forum: Mikrocontroller und Digitale Elektronik STM32F4 BLDC mit Hall Sensoren


von Hunt W. (hunt_work_er)


Angehängte Dateien:

Lesenswert?

hey,
ich arbeite gerade daran einen 1kW BLDC Motor zum drehen zu bekommen.
Dazu benutze ich: ein STM32F4Discovery, den Motor mit Hall-Sensoren, 
IRFP4310Z als FETs und IR2110 als FET-Treiber mit DCDC-Wandler für die 
High-Side-FETs.
Die Software basiert auf STM32 BLDC Control with HALL Sensor jedoch 
TIM3 für die Hall Sensoren.
Soweit sieht alles auch ganz gut auch, jedoch hänge ich an dem Phänomen, 
dass wenn ich im TIM1 beide Ausgänge (CCx und CCxN) deaktiviere, so 
werden beide Ausgänge auf high gesetzt was zu häftigen Kurzschlüssen 
führt.
1
TIM_CCxCmd(TIM1, TIM_Channel_1, TIM_CCx_Disable);
2
TIM_CCxNCmd(TIM1, TIM_Channel_1, TIM_CCxN_Disable);

Im reference manual ist es auf Seite 412 beschrieben:
deaktiviere ich einen Ausgang (CCxE = 0 und CCxNE = 1, oder CCxE = 1 und 
CCxNE = 0) so ist dieser auf inaktiv (bei mir Low) und der andere gibt 
PWM aus. Deaktiviere ich beide Ausgänge (CCxE = 0 und CCxNE = 0) so 
werden die Ausgänge vom Timer nicht mehr gesteuert und befinden sich 
beide im High Zustand -> peng.

Hat jemand einen Tipp für mich wie ich beide Ausgänge gleichzeitig auf 
Low setzen kann ohne ein komplettes remap der Pins duchzuführen?

Grüße

von jibi (Gast)


Lesenswert?

Moin,

ohne dem STM32 genauer zu kennen, aber wenn beide pins auf einem port 
liegen sollte die sich doch auch gleichzeitig schalten lassen.

Gruß Jonas

von Hunt W. (hunt_work_er)


Lesenswert?

Bei mir werden die Ausgangstreiber direkt in Hardware mit dem Timer 
verbunden. Daher hab ich mit dem Ausgangsregister kein einfluss mehr auf 
die Ausgänge. Ich müsste also diese Verbindung löschen, den Ausgang von 
hand setzen und später wieder mit dem Timer verknüpfen.

von Michael .. (gismi)


Lesenswert?

Hunt Worker schrieb:
> Im reference manual ist es auf Seite 412 beschrieben:

erster Satz auf Seite 413 auch beachtet?

von Hunt W. (hunt_work_er)


Lesenswert?

Michael .. schrieb:
> erster Satz auf Seite 413 auch beachtet?

Nein hab ich nicht beachtet. Guter Hinweis, aber:
1
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;      //=0
2
  TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;    //=0
3
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;   //=0
4
  TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset; //=0

wird auch nirgendwo geändert

von Hunt W. (hunt_work_er)


Angehängte Dateien:

Lesenswert?

hier mal ein Bild der Ausgänge.
Kanal 1) Low-Side Phase U
Kanal 2) High-Side Phase U
...

Man sieht auch hier: wenn beide Ausgänge einer Phase eingeschaltet sind, 
müssten sie eigentlich aus sein. Sobald ein Ausgang aktiv ist 
funktioniert es wie es soll.

von Martin Beuttenmüller (Gast)


Lesenswert?

Hoffentlich kann ich meie Gedanken verständlich formulieren ...

Gegeben: Pins (Timer-Ausgänge) vom µC = High-Z -> Fets = Kurzschluß

Frage: wenn die µC-Pins "floaten", was macht Dein Fet-Treiber daraus?
Möglicherweise muß Du durch (geeignete) PullUp/Down-Widerstände
dem Fet-Treiber Logic-Zustände "aufzwingen", da er "floaten"
mißversteht ...

Martin

von Hunt W. (hunt_work_er)


Lesenswert?

Vielen dank Martin!
ein wort hätte gereicht: floaten!
ich habe immer dran gedacht, dass der STM die Pins high setzt. Dabei 
haben die Pull-Up Widerstände des Logic analyzers (der für 10€ :)) den 
high pegel erzeugt.

Immer diese banalen dinge...

Grüße

von Martin Beuttenmüller (Gast)


Lesenswert?

Freut mich, daß ich helfen konnte ...
... war aber eher geraten.  ;-}

Weiterhin viel Erfolg bei Deinem Projekt
Martin

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.