Hallo zusammen,
ich versuche gerade einen BLDC-Regler mit feldorientierter Regelung und
singleshunt Strommessung aufzubauen. Allerdings stellen mich die
Messergebnisse nicht ganz zufrieden. Vielleicht hat ja jemand Erfahrung
damit und kann mir dabei etwas helfen. Für die Strommessung verwende ich
einen ACS709 Hall-Effekt-Stromsensor. Im Anhang mal ein Screenshot, wie
die Ströme aktuell aussehen.
Die Ströme werden zweimal pro PWM-Periode gemessen und über das
Kirchhoffsches Gesetz der jeweils fehlende dritte Strom berechnet.
Anschließend werden die Ströme tiefpass gefiltert. Ich weiß nun nicht,
ob der Fehler bereits in der Hardware liegt oder in meiner Software. Bei
Bedarf poste ich gerne die restlichen Teile des Codes.
Hallo,
kennt sich niemand damit aus?
Mittlerweile sehen meine Ströme so wie auf dem Bild aus, ist meiner
Meinung nach schon mal etwas besser.
Viele Grüße Michael
Michael Mayer schrieb:> kennt sich niemand damit aus?
Mit deinen Vorgaben offensichtlich nicht!
Abgesehen davon, dass wahrscheinlich hier doch nicht jeder ohne Googeln
weiß was ein BLCD-Regler ist, gibst du so gut wie gar nicht zu
wesentlichen Details bekannt.
1.) Schaltung zeichnen, zumindest Prinzipschaltbild.
2.) Wie, womit (AD-Wandler) wird gemessen?
3.) Deine Diagramme sind ja ganz nett, aber ohne Bezug zur Realität
sinnlos = Einheiten was gemessen wird fehlen sowohl x als auch y! Sowohl
die Spannungen am Eingang der ADC's als auch die damit umgerechneten
realen Strom- und Spannungswerte, sowie die Zeitachsen in s oder ms oder
us oder in Abtastwerten, dann müßte man aber auch die Abtastfrequenz
kennen.
4.) Bevor man sich die Details der Software anschaut, sollten alle
obigen Punkte geklärt sein, sonst hat es nicht sehr viel Sinn sich in
die Software zu vertiefen.
Fritz schrieb:> Abgesehen davon, dass wahrscheinlich hier doch nicht jeder ohne Googeln> weiß was ein BLCD-Regler ist,
Auch mit Googlen weiß ichs nicht, aber ich denke,du meinst einen BLDC!
:-)
Wenn jemand noch nichts von einem BLDC gehoert hat, kann er auch nicht
antworten. Die Diagramme sind etwas schwer lesbar, koennen wie nicht 3
einzelne Kurven haben. Auf den ersten Blick sind die Stroeme nicht
symmetrisch.
Ein kleiner Programmfehler :
ADC_Strom_1 -= ACS_ref + ACS_0_Strom_offset;
ADC_Strom_2 -= ACS_ref + ACS_0_Strom_offset;
ADC_Strom_1 = ADC_Strom_1 << 3;
ADC_Strom_2 = ADC_Strom_2 << 3;
Strom_3 = - ADC_Strom_1 + ADC_Strom_2;
die ersten zwei Zeilen sind identisch.
Hallo,
zuerst mal vielen dank für die Antworten.
Harald Wilhelms schrieb:> Auch mit Googlen weiß ichs nicht, aber ich denke,du meinst einen BLDC!
Oh ja. Sorry war ein Tipp-Fehler.
Fritz schrieb:> 1.) Schaltung zeichnen, zumindest Prinzipschaltbild.
Schaltplan des betroffenen Teils ist im Anhang.
Fritz schrieb:> 2.) Wie, womit (AD-Wandler) wird gemessen?
Mit dem ADC 2 des STM32F103, dieser wird zwei mal pro PWM Periode über
einen Timer getriggert.
Fritz schrieb:> Deine Diagramme sind ja ganz nett, aber ohne Bezug zur Realität
Stimmt sorry. So werden die im STMStudio nunmal dargestellt. Auf der
X-Achse sind Abtastwerte des STMStudios (nicht des ADCs). Auf der
Y-Achse ist der Strom dargestellt. 100 entspricht dabei 600 mA.
Ich hoffe das hilft schon mal weiter.
Viele Grüße und vielen Dank Michael!
avion23 schrieb:> Es scheint so, als würde die obere Halbwelle fehlen.
Ich hätte eher gesagt die unter Halbwelle fehlt, aber warum? Hast du
evtl. eine Vermutung?
Viele Grüße Michael
Als erstes würde ich mal die Sensoren einzeln überprüfen, und zwar nicht
an diesem Motor sondern zum Beispiel mit dem Magnetfeld eines einfachen
Elektromagneten bei einfachen 50Hz Sinus.
Zeig mal, welche Spannungen diese Sensoren liefern (Oszilloskop).
Dann wissen wir, ob wir im Programmcode oder in der Elektronik weiter
suchen müssen.
Hallo,
zuerst einmal danke für eure Antworten. Ich habe nun mit einem 50 Hz
Sinus getestet und mit dem Oszi den Ausgang betrachtet. Im Anhang ist
einmal die Ausgangsspannung des ACS709 mit DC-Offset und einmal nur der
Wechselanteil.
Für mich sieht das soweit gut aus, oder was meint ihr?
Viele Grüße Michael
Hallo,
ich habe nun noch etwas weiter versucht. Wenn ich die Ströme nicht über
STMStudio betrachte, sondern die Werte in Excel, dann erhalte ich das
Bild im Anhang. Sieht etwas besser aus, aber die negative Halbwelle
fehlt immer noch :/. Hat jemand eine Idee woran dass liegen könnte
Viele Grüße Michael
Er hat ja keinen Shunt, sondern einen Hallsensor. Ich verstehe
allerdings nicht, wie du mit einem Hallsensor im Massezweig der Brücke
die drei Phasenströme berechnen willst?!
Wie sieht denn das Ausgangssignal deines Hallsensors aus, wenn du es mit
dem Scope misst? Dann bekommt man mal eine Idee, ob zumindest die
Messsignale richtig sind.
So aus dem Bauch heraus würde ich sagen, dass zwei Messungen pro
PWM-Zyklus zu wenig ist. Aber da sollte ein Vergleich zwischen Messung
per Scope und per µC schnell Klarheit bringen.
Mit freundlichen Grüßen
Thorsten Ostermann
Ich meine, wenn das PWM abschaltet treibt die Induktivität den Strom
durch die Mosfets in umgekehrter Richtung weiter. Diesen Strom kannst du
nicht messen. Den Strom misst du also am besten genau in dem Moment
bevor das PWM abschaltet.
Thorsten Ostermann schrieb:> Ich verstehe> allerdings nicht, wie du mit einem Hallsensor im Massezweig der Brücke> die drei Phasenströme berechnen willst?!
Im Anhang eine kurze Skizee, die es verdeutlicht. In einem PWM-Zyklus
kann man jeweils zwei Ströme messen und da der Sternpunkt ja nicht
angeschlossen ist, kann man über Kirchhoffsches Gesetz den dritten Strom
berechnen.
Ich hoffe es ist verständlich, ansonsten einfach nochmals Fragen.
Thorsten Ostermann schrieb:> Wie sieht denn das Ausgangssignal deines Hallsensors aus, wenn du es mit> dem Scope misst?
Das Problem ist, dass man hier nicht viel erkennen kann. Mann müsste die
Messwerte abhängig vom Aktuellen PWM-Zustand aufteilen um sinnvolle
Signalverläufe zu bekommen. Aber ich kann nachher Trotzdem mal einen
Messung machen und hier Posten.
Viele Grüße Michael
Hallo,
ich habe nun des Ausgang des ACS709 und einen Kanal des PWMs gemessen.
Habe leider nur ein Zweikanaloszilloskop. Der Ausgang sieht etwas
komisch aus, oder was meint ihr? Kann sich jemand den Verlauf erklären?
Und warum funktioniert die Messung für die positive Halbwelle dann?
Viele Grüße Michael
Du kannst anscheinend keine negativen Werte einlesen.
Warum das so ist, weiß ich nicht. Laut Datenblatt kann der Sensor beide
Stromrichtungen messen und auch ausgeben. Kann er das auch, wenn die
Ausgangsspannung dann unter 0V sein müsste? Und wie wird das dann
ausgegeben? Ich konnte das Datenblatt leider nur überfliegen.
Du könntest eine separate Spannungsversorgung des Sensors über Akku
probieren.
Der Sensor gibt bei 0 Strom VCC/2 aus. Bei positivem Storm steigt die
Ausgangsspannung. Bei negativer Stromrichtung sinkt die
Ausgangsspannung.
Viele Grüße Michael
Ich kann auf den Screenshots nichts erkennen. Welcher Kanal ist was, und
wie ist die Skalierung?
Aber wo sollen eigentlich die negativen Ströme am Hall-Sensor herkommen?
Du misst ja im Fußpunkt der Brücke, da fließt immer nur der Summenstrom.
Nur im Generatorbetrieb des Motors wirst du da ggf. eine andere
Stromrichtung sehen, wenn der Motor ins Netzteil zurück speist.
Mit freundlichen Grüßen
Thorsten Ostermann
Thorsten Ostermann schrieb:> Ich kann auf den Screenshots nichts erkennen. Welcher Kanal ist was, und> wie ist die Skalierung?
Oh sorry, hatte ich vergessen zu schreiben. Blau ist der Ausgang des ACS
und Gelb ist das PWM-Signal eines Kanals.
Thorsten Ostermann schrieb:> Aber wo sollen eigentlich die negativen Ströme am Hall-Sensor herkommen?
Vielleicht erklärt es dieses PDF besser:
http://ww1.microchip.com/downloads/en/AppNotes/01299A.pdf
Theoretisch sollte es funktionieren.
Vielen dank euch allen für eure Mühe und Hilfe!
Viele Grüße Michael
Hallo zusammen,
zum Test habe ich jetzt einfach einen Wechselstrom durch den Sensor
fließen lassen und die Mosfets usw. alles weg gelassen. Dann kommt ein
relativ schöner Sinus raus. Also sollte die Hardware des Sensors usw.
passen. Ich vermute es kann nur an der Software liegen. Nur hab ich
leider keine Idee wo der Fehler ist :/.
Im Anhang ein Bild vom Oszi. Gelb ist die Spannung über dem
Lastwiderstand, den ich verwendet habe um den Strom zu "erzeugen". Blau
ist der Ausgang des ACS709, dieser ist als AC eingekoppelt, da der
ACS-Ausgang ja einen Offset von VCC/2 hat. Zusätzlich auch noch ein Bild
wie die Werte des STM32 aussehen (nur Qualitativ).
Viele Grüße
Michael
Guten Abend,
nach langen Versuchen habe ich nun etwas, wo man mit viel Fantasie drei
Sinus-Kurven erahnen kann. Allerdings ist dies noch weit weg von Guten
Ergebnissen. Gelb ist der Winkel Teta, den ich als Eingang für meinen
SVPWM-Teil verwende. Ich habe gerade den Verdacht, dass der ACS709 für
diese Aufgabe etwas zu langsam ist. Kann hierzu jemand etwas sagen?
Bin mittlerweile echt am Verzweifeln. Mit dem Oszi kann ich hier nicht
vernünftig messen (oder ich weiß nicht was ich noch messen soll) und
wenn ich einfach nur einen Wechselstrom durch den Sensor schicken, dann
wird dieser auch korrekt gemessen.
Viele Grüße und noch einen schönen Abend Michael
Hallo Michael,
> Thorsten Ostermann schrieb:>> Aber wo sollen eigentlich die negativen Ströme am Hall-Sensor herkommen?>> Vielleicht erklärt es dieses PDF besser:> http://ww1.microchip.com/downloads/en/AppNotes/01299A.pdf> Theoretisch sollte es funktionieren.
Lies dir das PDF am Besten nochmal in Ruhe durch und schau dir
insbesondere die Bilder zu den Stromrichtungen auf Seite 6 nochmal an.
Der Stromfluss durch den Shunt ist immer positiv, wie ich bereits gesagt
hatte. Es ist Teil der Rekonstruktion der 3 Phasenströme, das Vorzeichen
abhängig vom Zustand der FETs richtig zu setzen.
Mit freundlichen Grüßen
Thorsten Ostermann
Hallo,
ich drehe das Vorzeichen ja auch in der Software. Mir ist bewusst das
der Strom durch den Shunt immer positiv sein muss. Ich poste heute
Nachmittag nochmal meinen aktuellen Code, dieser unterscheidet sich aber
nicht wirklich von dem in meinem ersten Post.
Viele Grüße Michael
ADC_Strom_1 ist dabei der Erste Messwert in der PWM-Periode, also
zwischen erster und zweiter Umschaltung. ADC_Strom_2 ist der zweite
Messwert.
Viele Grüße und nochmals Danke für die Hilfe! Michael
Guten Abend nochmal,
sorry das ich euch nochmal stören muss. Aber evtl. liegt der Fehler ja
auch in der Initialisierung der Hardware. Ich habe dies zwar so gut ich
konnte getestet, allerdings kann ja trotzdem jemandes etwas auffallen.
Timer 1 verwende ich zu PWM Erzeugung. Dieser zählt von 0 bis 2048 und
dann wieder runter auf 0. Timer 3 läuft synchron zählt aber von 0 bis
4095. Damit triggere ich den ADC. Dabei wird in der ISR von Timer 3 der
neue Vergleichswert für die Zweite triggerung des ADCs geladen. In der
ADC-ISR wird dann wieder der Wert für die erste Triggerung geladen.
Init des Timer 3: