- Labornetzteil AliExpress         
Ergebnis 1 bis 10 von 24

Thema: BLDC Regelung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von ikarus_177
    Registriert seit
    31.12.2007
    Ort
    Grein
    Alter
    31
    Beiträge
    601
    Hallo!

    Ich hab' mir mal den entsprechenden Codeteil der AN1078 angesehen - wie es scheint wird die inverse Clarke-Transformation doch noch ausgeführt, d.h. ins 3-Achsen-System zurückgerechnet.
    Die Gleichungen zur Berechnung der PWM-Werte aus den Werten für die 3 Phasen scheinen sehr sehr einfach zu sein und enthalten keine Winkelfunktionen. So ganz verstehe ich den Lösungsweg aber noch nicht

    Der folgende Code ist eine C-Übersetzung des eigentlichen Codeteils, der in Assembler geschrieben ist. Alle verwendeten Variablen scheinen global zu sein.

    Code:
    void CalcRefVec( void )
    { 
        if( Vr1 >= 0 )
            {       
            // (xx1)
            if( Vr2 >= 0 )
                {
                // (x11)
                // Must be Sector 3 since Sector 7 not allowed
                // Sector 3: (0,1,1)  0-60 degrees
                T1 = Vr2
                T2 = Vr1
                CalcTimes();
                dPWM1 = Ta
                dPWM2 = Tb
                dPWM3 = Tc
                }
            else
                {            
                // (x01)
                if( Vr3 >= 0 )
                    {
                    // Sector 5: (1,0,1)  120-180 degrees
                    T1 = Vr1
                    T2 = Vr3
                    CalcTimes();
                    dPWM1 = Tc
                    dPWM2 = Ta
                    dPWM3 = Tb
    
                    }
                else
                    {
                    // Sector 1: (0,0,1)  60-120 degrees
                    T1 = -Vr2;
                    T2 = -Vr3;
                    CalcTimes();
                    dPWM1 = Tb
                    dPWM2 = Ta
                    dPWM3 = Tc
                    }
                }
            }
        else
            {;        // (xx0)
            if( Vr2 >= 0 )
                {
                // (x10)
                if( Vr3 >= 0 )
                    {
                    // Sector 6: (1,1,0)  240-300 degrees
                    T1 = Vr3
                    T2 = Vr2
                    CalcTimes();
                    dPWM1 = Tb
                    dPWM2 = Tc
                    dPWM3 = Ta
                    }
                else
                    {
                    // Sector 2: (0,1,0)  300-0 degrees
                    T1 = -Vr3
                    T2 = -Vr1
                    CalcTimes();
                    dPWM1 = Ta
                    dPWM2 = Tc
                    dPWM3 = Tb
                    }
                }
            else
                {            
                // (x00)
                // Must be Sector 4 since Sector 0 not allowed
                // Sector 4: (1,0,0)  180-240 degrees
                T1 = -Vr1
                T2 = -Vr2
                CalcTimes();
                dPWM1 = Tc
                dPWM2 = Tb
                dPWM3 = Ta
    
                }
            }
    }
    
    
    void CalcTimes(void)
    {
        T1 = PWM*T1
        T2 = PWM*T2
        Tc = (PWM-T1-T2)/2
        Tb = Ta + T1
        Ta = Tb + T2
    }
    Der Teil, in dem der Sektor bestimmt wird ist ja noch verständlich, die drei ersten Gleichungen von CalcTimes() ja auch - die beiden nächsten verstehe ich aber überhaupt nicht, vor allem, da anscheinend die Zeitwerte der vorhergehenden Berechnung ebenfalls eine Rolle spielen...

    Schöne Grüße!

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    11.11.2012
    Beiträge
    10
    Hmm also so ganz blick ich das nicht. Warum nur wird das so mystifiziert, wie man diesen Duty cycle berechnet?

    Gut, im Prinzip ist es ja einfach: aus Alpha und Beta kann der Winkel berechnet werden. (Dieser müsste mit dem vom Drehgeber gelieferten Winkel übereinstimmen, oder?)
    Anhand des Winkels bestimmt man den Sektor, und danach berechnet man den Winkel innerhalb des Sektors. Anschliessend ist

    t1 = sin(60 - x)
    t2 = sin(x)

    die Zeiten für Vektor 1 und Vektor 2, wobei x der Winkel in diesem Sektor ist.

    Beispiel:

    Winkel des Rotors sei 70°. Dies ist im Sektor 2. Also subtrahiere man 60°, man erhält 10°. Somit ist

    t1 = sin(50°) = 0.766
    t2 = sin(10°) = 0.173

    die Zeit für den Anfangs- und den Endvektor. Der Nullvektor muss während der Zeit

    1 - t1 - t2 = 0.061

    ausgegeben werden.

    Das ist alles schön und gut und auch sehr trivial, aber

    a) was mache ich denn nun mit alpha und beta, die benötige ich ja gar nicht, denn den Winkel kann ich ja auch vom Drehgeber ablesen
    b) irgendwie ist das doch ein wenig komisch, innerhalb jedes Sektors immer dieselben Winkel wieder zu berechnen -- das sollte doch auch einfacher gehen, direkt mit alpha und beta, denn diese geben den winkel doch implizit an, oder nicht?

    Gruss

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

    Der Winkel, der durch alpha und beta (im Grunde ja das Ergebnis der ganzen Regelung), ist (bzw. sollte) ein "bisschen" größer als der aktuelle Winkel vom Drehgeber sein. Du willst ja den Rotor im Vergleich zur aktuellen Position um ein Stückchen weiterbewegen.
    Würdest du den Winkel vom Drehgeber nehmen, könntest du dir die ganze Rechnerei gleich ganz sparen, dann würde sich der Rotor aber nie bewegen.

    Das Ergebnis der Regelung (= der Winkel, der auf den Motor / die 3 Phasen gegeben werden soll) ist sicher in alpha und beta enthalten, wie genau man dann aber die PWM-Werte mit der Methode der AN1078 berechnet, weiß ich auch noch nicht so ganz...

    Schöne Grüße!

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

    hmm stimmt eigentlich

    heute in der Mittagspause war mir ein wenig langweilig, und daher habe ich nochmals ein wenig über Vektorgeomtrie nachgedacht. Ich habe mir überlegt, wie man ohne nervige Winkelfunktionen den Vektor (alpha, beta) auf die 6 Achsen vom "SV PWM Star" projizieren kann -- genau das möchte man ja tun, um die Einschaltzeiten für den Anfangs- und den Endvektor zu berechnen.
    Nun, es hat sich gezeigt, dass dies recht simpel ist. Es ergeben sich so sechs 2x2 Matrizen, mit denen man einen Vektor (alpha, beta) nun so umrechnen kann. Der aktuelle Sektor gibt an, welche der sechs Matrizen zu benutzen ist. Ich habe mir mal in Excel ein Sheet erstellt, wo ich die Duty cycles mit diesen Matrizen berechne und in einem Diagramm darstelle, und siehe da, es ergeben sich diese schönen SVPWM-Kurven. (Die man, glaube ich, Supersinus nennt??)

    Ich werde dann morgen schnell ein PDF hochladen, wo das beschrieben ist. Eigentlich ist es recht einfach

  5. #5
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Nur als Bestätigung für mich das ich das halbwegs verstanden habe, hier geht es um so eine Regelung und die 6 Sektoren die in diesem [1] [2] PDF gezeigt werden?

    Gruß
    Georg

    [1] http://www.arpnjournals.com/jeas/res...s_0710_362.pdf
    [2] http://www.ti.com/lit/an/bpra073/bpra073.pdf
    Geändert von schorsch_76 (27.11.2012 um 08:38 Uhr)

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

    @bert: deine Matritzen würden mich sehr interessieren! Ich hab' auch schnell versucht, eine Umrechnung im ersten Sektor zu formulieren, hab aber noch nicht verifiziert, ob da was brauchbares herausgekommen ist...

    @schorsch: ganz genau

    Mittlerweile bin ich am Bestücken der Reglerplatine - bin schon gespannt auf die ersten Testläufe mit dem Motor!

    Schöne Grüße!

  7. #7
    Erfahrener Benutzer Roboter-Spezialist Avatar von schorsch_76
    Registriert seit
    25.03.2012
    Ort
    Kurz vor Neuschwanstein
    Alter
    48
    Beiträge
    456
    Hab hier noch ein Appnote [1] von Atmel gefunden das auf die Kommutierung und PWM eingeht.

    [1] http://www.atmel.com/Images/doc7518.pdf

Ähnliche Themen

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

Stichworte

Berechtigungen

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

Solar Speicher und Akkus Tests