- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 9 von 9

Thema: Brushlessmotor Controller Softwareablauf

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.06.2008
    Beiträge
    158

    Brushlessmotor Controller Softwareablauf

    Hallo,

    ich hab mir einen Brushlessmotor Controller auf einem Steckboard mit 3x IR2101(Mosfethalbbrückentreiber), 6x F3205Z(Mosfets) und einem Atmega8A aufgebaut. Kommutierung erfolgt über eine BEMF-Schaltung.
    Genauso aufgebaut wie auf dieser Seite: http://www.mikrocontroller.net/artic...BEMF-Schaltung

    Meine Software ist in Bascom geschrieben und funktioniert. Ich weiß nur nicht ob das Glück ist oder ein Denkfehler meinerseits.

    Situation bei meinem Aufbau:
    -lege Spannung an
    -Motor fiept hörbar (obwohl die PWM-Frequenz bei ca 30khz liegt)
    -wenn der Motor angestoßen wird dreht er hoch und kann auch belastet werden

    Mich hat dieses fiepen verwundert. Das rührt daher das im Stillstand der Komparator ständig auslöst, ununterbrochen. Es werden also alle 6 Zustände durchgeschalten.
    In dem Artikel über Brushlesscontroller steht "So, das war jetzt die Beschreibung für einen Motor, der bereits läuft. Bis der Motor allerdings mal dreht, muss man anders vorgehen, weil der stillstehende Motor ja keine Komparator-Interrupts auslöst, da keine BEMF vorhanden ist."
    Bei mir scheint allerdings eine BEMF vorhanden zu sein.

    Gut, mal ganz einfach etwas ausprobiert--> Kommutierungszustand 1 eingeschalten. Das heißt Phase A liegt mit dem PWM-Signal an Vcc, Phase B hängt in der Luft und Phase C ist auf GND. Nun hab ich mir bei einem Komparatorinterrupt etwas via UART ausgeben lassen. Wenn ich die in der Luft hängende Phase messe löst ständig der interrupt aus, unabhängig ob der Motor gedreht wird oder nicht. Wenn ich allerdings Phase A messe, funktioniert es. Der Interrupt löst erst aus wenn der Motor mit Hand gedreht wird.
    Doch das ist doch falsch?!
    Wenn ich nun alles umschreibe und via Admux auf die anderen Phasen (also nicht auf die in der Luft hängenden) umschalte, funktioniert es fast garnicht. Nur mit sehr niedriger PWM bekomm ich ihn von Hand gestartet.

    Hoffe das ist irgendwie verständlich geworden .
    Mir fehlt auch noch im Programm eine 30Grad verzögerte Kommutierung. Doch bevor ich das in Angriff nehme will ich mir sicher sein keinen Fehler gemacht zu haben.

    D35troy3r
    Angehängte Dateien Angehängte Dateien
    Geändert von D35troy3r (02.05.2014 um 21:33 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied Avatar von derNeue
    Registriert seit
    01.01.2011
    Ort
    Bierstadt Radeberg
    Alter
    39
    Beiträge
    101
    Ich kann dir bei Bascom nicht wirklich weiter helfen, ich bin in C unterwegs, habe allerdings gerade auch einen BLDC REgler fertig gestellt. Ich nutze auch IR2101. Meine PWM ist 8-bit breit. Ich lade in das PWM-Register den Wert 20, also einen Duty-Cycle von etwa 6-8% zum starten. Mal ein kleiner Tip: Ich bestrome ganz zum Anfang mit diesem niedrigen Duty-Cycle zwei Phasen. Also U und V an PWM, W an Masse, etwa 300ms lang. So zuckt der Motor mal kurz und du hast ihn erstmal in einer festen Position. Dann V einfach wieder unbeschaltet lassen und etwa 20x noch starr kommutieren, mit Timer-Interrupt oder so. Und dann alles laufen lassen. klappt bei mir wunderbar. Natürlich musst du bisschen rumspielen mit ein paar Werten, aber einfach mal als Ausgangspunkt.

    Aber ehrlich gesagt ist der Atmega8 nicht wirklich geeignet dafür, der Atmega88 geht da wesentlich besser. Der hat einfach ein paar Timer-Modi mehr, die du für
    eine 30Grad verzögerte Kommutierung
    gut gebrauchen kannst. Das ist auch ganz einfach gelöst. In der Funktion, in der du die Phasen umschaltest setzt du einen Timer auf Zählerstand 0. Kommt der Komparator-Interrupt, liest du den Zählerstand aus, schreibst diesen Wert in ein OCR-Register und stellst den Timer-Modi auf CTC und mit Top-Wert auf das gerade beschriebene OCR-Register. Ich hoffe, das war halbwegs verständlich, ansonsten frag einfach nochmal nach, was du nicht genau verstanden hast.


    Dennis
    Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.06.2008
    Beiträge
    158
    Hey,

    Danke für die Antwort!
    Ich hab gestern noch eine Diplomarbeit über Brushlessregler gefunden. Dort gibt es folgenden Abschnitt:

    Befindet sich ein Motor im Normalbetrieb, muss die Update-Funktion überprüfen,

    ob dieser stehengeblieben ist. Dazu wird der Wert des Timercounter ausgelesen, den
    dieser im letzten Kommutierungszyklus erreicht hat (capture-Register). Aus diesem
    wird ein gleitender Mittelwert über die letzten 10 Messwerte gebildet. Erreicht dieser
    den maximalen Wert des Counters, wurde keine Kommutierung mehr erkannt und der
    Motor steht. Es kommt aber auch häufig vor, dass das System unkontrolliert schwingt,
    weil bei stehendem Motor die durch eine Kommutierung ausgelöste Umschaltung der
    Phasen sofort die nächste Kommutierung auslöst und der Messwert somit ein Minimum,
    nämlich die eingestellte Blockierzeitspanne, erreicht. Es muss also auch auf
    Er
    reichen dieses Minimums geprüft werden. Wird erkannt, dass der Motor steht, wird
    dieser in den Anlauf-Zustand versetzt.
    Sehr gut, somit weiß ich schon mal das kein Fehler vorhanden ist, meine Schaltung jediglich bei einem stillstehenden Motor schwingt.

    Echt gute Tipps von dir! ...die mit der Software werde ich mir sofort mal einfügen. Einen Atmega88 hab ich leider nicht hier, der muss erst bestellt werden.
    Doch da das ganze später in SMD aufgebaut werden soll, kaufe ich vorerst keinen atmega88 in DIP.

    Die 30Grad Verzögerung teste ich heute mal aus. Ich berichte nachher darüber.

    D35troy3r

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied Avatar von derNeue
    Registriert seit
    01.01.2011
    Ort
    Bierstadt Radeberg
    Alter
    39
    Beiträge
    101
    Hast du einen Link zu der Diplomarbeit?

    Weil was hier angesprochen wird, sollte man schon auch detektieren, dass der Controller abschaltet, wenn sich der Motor offensichtlich nicht mehr dreht. Mich würde eben interessieren, was so alles an Fehler detektiert werden kann, da hab ich nicht so wirklich eine Vorstellung davon.


    Dennis
    Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    24.06.2008
    Beiträge
    158
    http://www8.informatik.uni-wuerzburg..._Dilger_DA.pdf

    Sehr gute Arbeit von ihm.
    Mein Controller schaltet sich nicht ab, lediglich die BEMF Spannung schwingt im Stillstand.

    Zu der Verzögerung:
    Den CTC Mode habe ich in Bascom leider nicht aktiviert bekommen. Hab das ganze anders gelöst.
    -Timer0 misst die Zeit zwischen einer Kommutierung und einem AC-Interrupt
    -diese Zeit wird in den Timer1 geladen, dieser löst dann die nächste Kommutierung nach der Zeit aus

    Meine Frage wäre jetzt nurnoch, woher weiß ich welche Zeit 30Grad entspricht? Muss ich dazu nicht die Polpaarzahl wissen?

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied Avatar von derNeue
    Registriert seit
    01.01.2011
    Ort
    Bierstadt Radeberg
    Alter
    39
    Beiträge
    101
    Nein, musst du nicht. Für deinen Regler gibts nur die elektrische Umdrehung. Ich habe Motoren mit 7 Polpaaren. Soll heißen, ich benötige 7 elektrische Umdrehungen für eine mechanische. Alle 60 Grad schaltest du auf eine neue Phase(eben die 6 Zustände, die es gibt, hab kein passendes Wort gerade dafür). Und du möchtest genau 30 Grad nachdem der Komparator sich gemeldet hat kommutieren. Somit kannst du die Zeit, die er von der Kommutierung bis zum Komparator-Interrupt braucht, messen. Das ist dann genau die Zeit, die der Motor für 30Grad braucht. Deswegen reicht es zu, diese Zeit einfach nochmal abzuwarten, und dann erst umzuschalten. Die Grad-Angaben beziehen sich alle auf die elektrische Umdrehung. Manche fangen dann an, bei höheren Drehzahlen die Kommutierungszeitpunkt auf 25 oder sogar 20 Grad zu schieben. Ist nicht unbedingt nötig, wäre eben ein zusätzliches Feature, was nicht unbedingt gebraucht wird.

    Den CTC Mode habe ich in Bascom leider nicht aktiviert bekommen.
    Das hat doch mit Bascom nichts zu tun. Das liegt am Atmega8, weil der Timer0 keinen CTC Modus hat. Deswegen ja auch den Atmega88. Oder eben wie du es gelöst hast. Ist umständlich, aber geht. Du kannst aber auch gleich mit dem Timer1 die Zeit messen, da hast du mehr Spielraum, weil der Timer 16bit breit ist.


    Dennis
    Geändert von derNeue (03.05.2014 um 14:01 Uhr)
    Ich studiere die Wirkung der Sonnenstrahlen auf das Liebesleben der Pflastersteine

Ähnliche Themen

  1. Brushlessmotor ansteuern
    Von datatom im Forum Motoren
    Antworten: 26
    Letzter Beitrag: 23.11.2016, 11:43
  2. Brushlessmotor entkoppeln
    Von Manta22 im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 15
    Letzter Beitrag: 02.05.2014, 22:01
  3. Brushlessmotor Getriebe?
    Von Cool3000 im Forum Motoren
    Antworten: 6
    Letzter Beitrag: 19.01.2012, 20:35
  4. Brushlessmotor steuern
    Von datatom im Forum Suche bestimmtes Bauteil bzw. Empfehlung
    Antworten: 14
    Letzter Beitrag: 20.06.2011, 19:07
  5. [ERLEDIGT] Brushlessmotor mit mc73110
    Von martinheidelberg im Forum Motoren
    Antworten: 6
    Letzter Beitrag: 04.05.2011, 18:44

Berechtigungen

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

Labornetzteil AliExpress