- LiTime Speicher und Akkus         
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: BLDC Regelung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    11.11.2012
    Beiträge
    10

    BLDC Regelung

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Leute,

    ich war mir nicht ganz sicher, ob ich das unter "Motoren" posten sollte, oder hier. Bitte entschuldigt also, wenn meine Frage nicht ganz passen sollte
    Ich habe ziemlich viele Fragen zur Ansteuerung eines BLDC.

    Ich bin im Moment daran, ein kleines Fahrzeug mit einem BLDC anzutreiben.
    Ich habe einen maxon motor, dieser verfügt über 6 Hallsensoren. Da mein Fahrzeug auch sehr langsam fahren können muss, habe ich ein Getriebe 1:10 drin; die minimalste Drehzahl vom Motor möchte ich zwischen 100..200 U/min regeln (Maximal dann 8000 U/min).

    Erst mal zur Ansteuerung des Motors. Diese mache ich wie folgt: jede Änderung der Hallsensoren löst einen Interrupt aus. Im Interrupt werden dann die aktuellen Hallsensor-Zustände abgefragt. Danach lege ich die zu bestromende Phase jeweils an einem Anschluss an Masse, mit dem anderen Anschluss "wackle" ich PWM-mässig zwischen 0V und 12V. So kann ich den Motor steuern. Ist das richtig so, oder sollte ich das anders machen? eine Seite fest auf Masse, und die andere PWM-mässig entweder offen oder 12V?
    seltsam an meiner Ansteuerung ist nämlich, dass der Motor am meisten Strom verbraucht, wenn der Tastgrad so um 50% rum ist. Und das, obwohl ich eine grosse Totzeit eingebaut habe, von 2 us! mit kleineren Totzeiten wird es nicht besser. Zwar dreht der Motor immer sauber, aber es irritiert mich, dass er bei 50% duty cycle mehr Strom braucht als bei 100%. Woran könnte das liegen?


    Dann, zur Regelung des Motors: ich messe mit einem Timer des Mikrocontrollers (ein STM32F4) die Pulsbreite der Hallsensoren, und diese versuche ich auf einen konstanten Wert zu regeln. Leider oszilliert meine Regelung und ist recht träge. Wenn ich Kp und Ti ändere, kriege ich das oszillieren im höheren Drehzahlbereich zwar weg (Stichwort Ziegler Nicholls), allerdings kann ich den Motor im Unteren Drehzahlbereich kaum regeln, weil ich ja nur 6 Impulse pro Umdrehung kriege. Ich dachte erst, das würde reichen, aber jetzt sehe ich, dass es ein wenig knapp ist. Oder liegt es tatsächlich an meinem Regler? den habe ich einfach so in 10 Minuten mal schnell zum Testen geschrieben und dann damit ein wenig experimentiert

    Ich überlege gerade, ob ich noch einen Drehgeber an den Motor bauen soll, damit ich mehr Impulse pro Umdrehung kriege. Das würde wohl mein Problem lösen, oder?

    dann, noch eine Frage. Im Moment fahre ich mit Blockkommutierung. Damit dreht der Motor gut, aber schöner wäre eine Sinuskommutierung. Ich habe mir jetzt überlegt:
    ich könnte einen Timer nehmen, und diesen z.B. alle 100 us einen Interrupt auslösen lassen. Und im Interrupt zähle ich dann, abhängig von meiner gewünschten Drehzahl, eine Variable phi hoch, die mir den Rotorwinkel angibt. Mit einer Sinus-LUT könnte ich dann den duty cycle für die PWM bestimmen. Und dann, alle 60°, kriege ich von den Hallsensoren einen Interrupt, und kann phi wieder synchronisieren. Ist das ein möglicher Ansatz?

    Noch besser wäre eine feldorientierte Regelung, ich möchte aber nicht unbedingt die Phasenströme messen. Wäre es auch möglich, eine solche zu bauen, wenn ich nur die Ströme an den lowside MOSFETs messe?

    Ich hoffe, ihr könnt mir mit meinen Fragen ein wenig weiter helfen.

    Wichtig: ich bin noch im Studium, also verzeiht mir, wenn ich teilweise etwas naiv Frage

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2004
    Ort
    Kreis Starnberg
    Alter
    59
    Beiträge
    1.825
    ... Danach lege ich die zu bestromende Phase jeweils an einem Anschluss an Masse, mit dem anderen Anschluss "wackle" ich PWM-mässig zwischen 0V und 12V ...
    Das Kurzschließen von Motorwicklungen ist in diesem Fall ungünstig. Die Generatorspannung verursacht einen hohen Strom in der Wicklung, dessen Magnetfeld wirkt der Antriebsrichtung entgegen. Der Strom verursacht entsprechende Erwärmung der Wicklung, der Wirkungsgrad ist schlecht. Unterbrechen ist richtig, gegebenfalls müssen aber hohe Abschaltspannungen über Freilaufdioden abgeleitet werden.

    ... Wenn ich Kp und Ti ändere, kriege ich das oszillieren im höheren Drehzahlbereich zwar weg (Stichwort Ziegler Nicholls), allerdings kann ich den Motor im Unteren Drehzahlbereich kaum regeln ...
    Bedenke dass sich die Regelstrecke nochmals völlig verändert, sobald der Motor mechanisch als Antrieb für das Fahrzeug eingesetzt wird. Drehzahlschwankungen gibt es dann wegen der hohen Masse kaum noch, entsprechend können (müssen) die Regelparameter angepasst werden.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    11.11.2012
    Beiträge
    10
    Hallo,

    sorry für die späte Antwort. Ich hatte sehr viel zu tun...

    also, wegen dem Kurzschliessen der Motorwicklungen - da habe ich keine neuen Erkenntnisse gewonnen. Ich habe mal versucht, die PWM anders zu implementieren: nun liegt immer ein Anschluss fest auf Masse, der andere ist entweder offen oder auf +. Das hat den Stromverbrauch aber nur unwesentlich beeinflusst -- ist eigentlich ja auch klar, denn beim Motor handelt es sich ja um was induktives, d.h. der Strom fliesst eh noch weiter, wenn die PWM aus ist. Warum der Motor bei 50% duty am meisten Strom verbraucht, ist mir ein absolutes Rätsel. Ich schiebe die "Schuld" mal auf eine nicht so optimale Endstufe (vielleicht shoot through oder sowas).

    Zur Regelung - ich habe jetzt einen Drehgeber am Motor montiert, mit 1024 Inkrementen pro Umdrehung. Damit lässt er sich auch im unteren Drehzahlbereich super einfach regeln. Die Kommutierung läuft weiterhin über die Hallsensoren; ein Hardwaretimer wertet die Drehgebersignale aus. Ca. alle 100ms schaue ich nach, wie viele Inkremente der Timer gezählt hat, und regle dann auf die Anzahl Inkremente - so funktioniert das wunderbar!

    Jetzt komme ich zur feldorientierten Regelung. Meine Endstufe kann bei jedem lowside FET den Strom gegen Masse messen. Geht das so? eigentlich möchte man für eine feldorientierte Regelung ja den Strom in den Phasen kennen.

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    30
    Beiträge
    601
    @bert89: ich arbeite auch gerade an einem Brushlesscontroller mit feldorientierter Regelung. Sieh dir dazu mal von Microchip die AN1078 an (auf deren Basis ich meinen Regler aufbaue), interessant für Schaltplaninspirationen ist auch der "dsPICDEM MCLV Development Board Users Guide".

    Falls du Interesse hast, kann ich dir den Schaltplan meines Reglers zukommen lassen (für den ich gerade die Platine geätzt habe, die Schaltung wurde also noch nicht getestet)!

    Schöne Grüße!

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    11.11.2012
    Beiträge
    10
    Hallo Ikarus,

    danke für den Tipp. Die AN schaue ich mir gleich an! Allerdings habe ich mit der Hardware am allerwenigsten Probleme. Eher Sorgen bereitet mir die Ansteuerung der Brücke! Eben diese Raumzeigermodulation, die ganzen Drehzeigertransformationen etc. Leider wird in der gängigen Literatur alles immer mystifiziert, obwohl es wahrscheinlich nicht soo kompliziert ist. Immerhin habe ich jetzt schon das Schema gezeichnet für eine Hardware incl. Motortreiber, Interface für die Hallsensoren und Drehgeber sowie eine Strommessung in allen 3 Phasen (jeweils am lowside MOSFET).

    Eine Frage taucht auch immer wieder auf -- für die Park-Transformation benötige ich ja den aktuellen Rotorwinkel. Der kann zwischen 0° und 360° liegen, ja? Nun, wie finde ich heraus, wo denn die Position 0° liegt? ich habe nur einen Inkrementaldrehgeber mit A und B Signalen, die mein Mikrocontroller in Hardware schön brav hoch zählt. Ich habe 1024 Inkremente pro Umdrehung, das sollte ja schon recht gut sein, oder?

    Gruss

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    30
    Beiträge
    601
    Ich denke, das ist einfach Definitionssache, soll heißen, wenn du vor Hochlauf des Motors einfach zwei Wicklungen für eine gewisse Zeit bestromst und die dritte offen lässt, müsste das doch dem Winkel 0° entsprechen, oder?

    Eine andere Frage: die Application Note, die ich angesprochen habe, verwendet eine Sensorlose Implementierung, d.h. die Ermittlung des Rotorwinkels für die Park-Transformation geschieht über ein Modell des Motors, welches über einen "Slide-Mode-Controller" an das tatsächliche Motormodell angeglichen wird (über die Rückspeisung eines Korrektursignals). Den Teil, den ich nun nicht verstehe, ist jener, bei dem über Tiefpassfilterung dieses Korrektursignals Z die Back-EMF abgeschätzt wird (siehe ab S.12, im speziellen S. 14 unten). Wieso genau Tiefpassfilterung (das Modell enthält als zusätzlichen Term ja den Korrekturwert, der natürlich im physikalischen Motor nicht enthalten ist - kann man daher die beiden Größen zusammenfassen und die Back-EMF einfach als niederfrequenten Teil auffassen (der die "höherfrequenten" Störungen durch die Adaption des Algorithmus nicht enthält))?

    Schöne Grüße!

    EDIT: so wie es aussieht, verwendet auch die AN1078 für den Anlauf einen vorherige "Ausrichtung" des Stators - zu sehen z.B. auf Figure 1-20 (Seite 17).
    Geändert von ikarus_177 (22.11.2012 um 14:37 Uhr)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    11.11.2012
    Beiträge
    10
    Hallo Ikarus,

    sorry, mit dem Motormodell habe ich mich bisher nicht befasst. Ich habe in meiner Anwendung Sensoren, d.h. ein Drehgeber und Hallsensoren, daher habe ich mir das gar nie überlegt.
    Aber ich schaus mir nachher an, vielleicht kann ich dir trotzdem ein wenig weiter helfen.
    Dafür kannst du mir auch was verraten

    Oder besser gesagt 2 Dinge.

    1. Mein Drehgeber liefert mir einen Wert zwischen 0 und 1024 für die Rotorposition. Ich habe mir eine Lookuptable gemacht für sin und cos, die grade die 1024 Werte aufnimmt. Zwar hat mein Mikrocontroller eine FPU, aber sin und cos möchte ich dann doch nicht in Echtzeit rechnen müssen So, also, die Clarke und Park Transformation sowie deren Inverse sind jetzt mit dieser Tabelle lauffähig. Ich rechne alles in floating point (weiss zwar nicht ob es nötig ist, Integer würde wohl auch reichen). So, ich messe ia, ib und ic, gehe damit über Clarke zu alpha und beta über, und mit Park erhalte ich d und q. Dann regle ich (das ist der einfachste Teil von allen ) und dann wird mit inverser Parktrafo nach alpha und beta transformiert, mit clarke erhalte ich wieder ia, ib, und ic. Jetzt ist die Frage: wie berechne ich nun aus diesen Werten den Duty cycle für meine PWM? Es ist eine Center aligned PWM mit 10 Bits Auflösung. Mit Hilfe der Hallsensoren kann ich ja den Sektor bestimmen, aber dann?

    2. Wie soll ich die Ströme in den Phasen messen. Zwar kann ich meinen ADC mit den Timern synchronisieren, aber ich möchte zwei Motoren ansteuern, der ADC lässt sich aber nur von einem Timer triggern, was ein bisschen unschön ist..... Hast eine Idee? Ich habe bei jedem lowside FET einen Shunt mit Differenzverstärker. Ich habe mir überlegt, da ein kleines Tiefpassfilter einzubauen, damit der OpAmp die PWM nicht "sieht" und dann so auf den Mikrocontroller zu gehen und einfach "irgendwann" zu messen, durch das Tiefpass kriege ich ja dann so eine Art Mittelwert, der ja auch meinem Strom entspricht. Meinst du, das würde gehen?

    Gruss

  8. #8
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    30
    Beiträge
    601
    Hallo bert89!

    1.) Mit der PWM kannst du ja primär die drei Phasenspannungen ausgeben, eigentlich sollen ja aber die Ströme beeinflusst werden. Nach meinem derzeitigen Verständnis des Themas sollte das aber kein Problem sein, da ja Spannung und Strom nur durch eine konstante Phasenverschiebung getrennt sind (im Idealfall 90°). Soll heißen, du gibst einen um 90° dem gewünschten Stromvektor vorauseilenden Spannungsvektor aus (bitte korrigieren, falls falsch - ist einfach nur so daherüberlegt!).
    Dafür gibt es jetzt mehrere Möglichkeiten (siehe AN955): einerseits die "straightforward"-Methode, bei der du einfach gemäß dem gewünschten Spannungsvektor (resultiert in drei eindeutigen Phasenspannungen) verschiedene Spannungen an die Phasen legst (einfach durch unterschiedliche PWM-dutycycles).
    Zweitens gibt es die Raumzeigermodulation, die lt. AN955 eine bessere Ausnutzung der Zwischenkreisspannung (bzw. DC-Speisespannung) mit sich bringt. Die Raumzeigermodulation ist dort auch gut beschrieben. So wie ich die Grafiken verstehe, benötigt man bei dieser Art als primäre Eingangsgröße nicht die geforderten Phasenspannungen/Phasenströme sondern kann direkt mit alpha und beta arbeiten, wodurch die letzte Rücktransformation obsolet wird (stimmt das?).

    2.) Hmmm, ein Tiefpassfilter erzeugt immer auch eine Phasenverschiebung, die bei höheren Drehzahlen schnell unangenehm werden kann (ich hatte zuvor die klassische Brushlessregelung mit Blockkommutierung versucht; da zeigte sich bei hohen Drehzahlen - die für meinen Quadrocopter unerlässlich sind - eine Verschiebung des Kommutierungszeitpunktes und somit eine Verschlechterung des Wirkungsgrades).
    Andere Frage: welchen Controller/DSP verwendest du? Beim dsPIC33FJMC202 (den ich verwenden werde) lässt sich der ADC über die PWM-Einheit triggern, d.h. es wird in der Mitte jeder PWM-Periode (center-aligned) gesampled. Wenn du dir jetzt einen Controller mit ausreichend vielen PWM-Kanälen für 2 Motoren suchst und alle center-aligned betreibst, kannst du problemlos zum optimalen Zeitpunkt messen.
    Allerdings ist wohl die Rechenleistung, die der ganze Algorithmus braucht, nicht zu unterschätzen (lt. AN1078 ca. 21MIPS für 20kHz-PWM).

    Schöne Grüße!

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    11.11.2012
    Beiträge
    10
    Hallo Ikarus,

    ja ich denke deine Aussage über die letzte Rücktransformation dürfte korrekt sein. Wie man nun aber von Alpha und Beta auf die drei Duty Cycles kommt, das verstehe ich noch immer nicht!

    Wegen des Tiefpassfilters. Die Phasenverschiebung dürfte relativ gering sein, da das Filter ja eine Grenzfrequenz von einigen kHz hat, und die Frequenz des Motors ja relativ gering ist (einige 100Hz wohl) dürfte das doch passen. Oder nicht?

    Das Problem ist, dass in dem Lowside Shunt der Strom auch negativ werden kann, d.h. man benötigt eine bipolare Strommessung, was auch recht haarig wird denke ich

    Der Algorithmus ist allerdings nicht so komplex, dünkt es mich; ich benutze einen DSP mit 160 MHz Takt und Floatingpoint Unit. So kann ich die Clarke, Park und deren inverse Transformationen in knapp einer Mikrosekunde rechnen, das passt. Für sin und cos habe ich eine Lookuptable, die auch direkt zur Auflösung meines Drehgebers passt

  10. #10
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    30
    Beiträge
    601
    Hi bert!

    Zur Dutycycle-Berechnung mit Raumzeigermodulation: sieh dir mal die Gleichungen auf S. 4 von AN955 an.

    Zur bipolaren Strommessung: ich zitiere wieder AN1078 bzw. den Schaltplan dazu - dort ist die Strommessung so realisiert (die Anschlüsse links kommen von den Shunts, davon messen die oberen beiden direkt 2 der 3 Phasenströme (der dritte kann ja daraus berechnet werden), der untere den Gesamtstrom - der Komparator rechts unten gibt ein Überstromsignal an den Controller zurück):
    Klicke auf die Grafik für eine größere Ansicht

Name:	Strommessung.jpg
Hits:	114
Größe:	34,7 KB
ID:	23837

    Zum Tiefpassfilter: da hast du wohl recht (ich hab' nachgesehen - mein Tiefpass hatte eine Grenzfrequenz von um 350Hz), käme auf einen Versuch an. Für die maximal geforderte Kommutierungsfrequenz spielt neben der max. gewünschten Drehzahl aber auch die Polpaarzahl des Motors eine Rolle.

    OK, da ist dein Controller natürlich ein paar Nummern größer als meine Plattform, da sollte das schon hinhauen

    Schöne Grüße!

Seite 1 von 3 123 LetzteLetzte

Ähnliche Themen

  1. Motortreiber für BLDC
    Von SirHonk im Forum Motoren
    Antworten: 1
    Letzter Beitrag: 29.01.2012, 15:29
  2. [ERLEDIGT] Bidirektionaler BLDC ?
    Von PICture im Forum Elektronik
    Antworten: 6
    Letzter Beitrag: 14.09.2011, 11:17
  3. [ERLEDIGT] BLDC mit 1V ?
    Von PICture im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 17.06.2011, 17:35
  4. 3 V BLDC's ?
    Von PICture im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 0
    Letzter Beitrag: 29.03.2011, 18:13
  5. BLDC als Lictmaschine
    Von BlackDevil im Forum Elektronik
    Antworten: 15
    Letzter Beitrag: 23.12.2009, 13:17

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiTime Speicher und Akkus