Hallo Zusammen,
aus interesse beschaeftige ich mich gerade mit der Regelung von
BLDC-Motoren. Mir macht die Elektronik aber leider mehr sorgen, als die
Regelungstechnik.
Als Controller werde ich meinen ATMEGA8 benutzen und für die
Mosfet-Endstufe habe ich mir folgendes überlegt:
- Mosfet: 6 N-Channel irf1404
- Treiber: ir2130 drei phasen brücken treiber
Problem ist hier die Dimensionierung von diversen Bauteilen.
Fragen Richtung Mosfet:
1.) Gate-Widerstand 47 Ohm OK?
2.) Keine Freilaufdiode OK? Da sie laut Datenblatt schon eine inne hat.
Fragen Richtung Treiber:
3.) Kondensatorkapzitaet zwischen Vb und Vs ist vermutlich von der
Frequenz der Ansteuerung/PWM abhaengig. Richtig? Ich werde aber aus der
Beschaltung nicht wirklich schlau, sodass ich nicht weiß, wie es es
ausrechnen bzw. Dimensionieren sollte.
4.) Dann sind da bei Typical Connection auf der linken Seite noch ne
Menge anderer Widerstaende und Transistoren. Da bin ich auch total
überfragt.
Ich möchte zu Beginn ganz einfach mit einer Blockkommutierung eine alte
Festplatte zum drehen bringen, anschließend Sinuskommutierung und
Feld-orientierte Regelung ebenfalls als Ziel mit einschliesen. Ein
richtiger BLDC soll dann natürlich herhalten.
Habt ihr vielleicht auch noch andere Tipps und Hinweise?
Vielen Dank.
mosfeter schrieb:> 1.) Gate-Widerstand 47 Ohm OK?
viel zu hoch..rechne den strom mal aus... 4.7ohm oder weniger wären ok..
> 2.) Keine Freilaufdiode OK? Da sie laut Datenblatt schon eine inne hat.
bei kleinen lasten geht das..
> 3.) Kondensatorkapzitaet zwischen Vb und Vs ist vermutlich von der> Frequenz der Ansteuerung/PWM abhaengig. Richtig? Ich werde aber aus der> Beschaltung nicht wirklich schlau, sodass ich nicht weiß, wie es es> ausrechnen bzw. Dimensionieren sollte.
Gibt 2 AppNotes von IRF zum Thema Bootstrap Kondensator berechnung..
> 4.) Dann sind da bei Typical Connection auf der linken Seite noch ne> Menge anderer Widerstaende und Transistoren. Da bin ich auch total> überfragt.
3 getrennte hallbrückentreiber sind billiger :)
> Ich möchte zu Beginn ganz einfach mit einer Blockkommutierung eine alte> Festplatte zum drehen bringen, anschließend Sinuskommutierung und> Feld-orientierte Regelung ebenfalls als Ziel mit einschliesen. Ein> richtiger BLDC soll dann natürlich herhalten.
für eine FVC brauchst du die rotorposition sowie rechenpower.. fang da
gleich mit nem CortexM0 bzw M3 an... ein Atmega ist da ein witz..
Andi D. schrieb:> viel zu hoch..rechne den strom mal aus... 4.7ohm oder weniger wären ok..
In Ordnung. Woher weiß ich denn, wieviel Strom zu wenig oder zu hoch
ist. Im Datenblatt konnte ich leider keine Angabe zum erforderlichen
Gatestrom finden.
> 3 getrennte hallbrückentreiber sind billiger :)
Ja, der IR2111 scheint mir auch angenehmer zu sein.
> für eine FVC brauchst du die rotorposition
Die Position werde ich dann über ein Systemmodell abschätzen.
> rechenpower.. fang da gleich mit nem CortexM0 bzw M3 an... ein Atmega> ist da ein witz..
Echt? Ich dachte für die paar Formeln würde nen ATMEGA8 (mit 3.2 MHz)
vollkommen reichen...
Ich bin froh, wenn die Festplatte sich erstmals ganz einfach mit
Blockkommutierung dreht. FOC und ein richtiger Motor sollen dann erst
später kommen, wobei natürlich die Hardware schon so weit bzw. flexibel
sein sollte, um das dann auch mal packen zu können.
Warum den atmega8 nehmen, wenn es doch deutlich interessantere von atmel
gibt. Stichwort attiny 261, da ist viel schon in Hardware drin, was für
die ansteuerung eines bldc benötigt wird, gibt auch einige app-notes zu
den unterschiedlichen arten der ansteuerung.
Mfg Dennis
Oder wenigstens eine Mega48/88/168/328. Der hat 3 Timer, die alle
komplementäre OC Ausgänge haben. Das passt genau auf deine Motore.
Schau dir bitte mal Application Note AVR444 an, in dem Ansteuerung von
Sensorless BLDC mit ATMega besprochen wird.
Space Vector Modulation (Sinusansteuerung) wird in AVR447 behandelt,
dort allerdings für Motore mit Sensoren.
mosfeter schrieb:> Echt? Ich dachte für die paar Formeln würde nen ATMEGA8 (mit 3.2 MHz)> vollkommen reichen...
3,2 Mhz sind wirklich knapp. Selbst wenn du nicht mit Formeln hantierst,
sondern mit Tabellen, solltest du der Kiste mindestens die 8Mhz des
internen Oszillators spendieren. Und Leute, vergesst doch endlich den
Mega8, der ist wirklich veraltet. Die o.a. Megas verfügen neben den
Timern auch über Pinchange Interrupts und andere nette Sachen.
Der ATTINY261 gefällt mir sehr gut. Werde ihn dann nehmen. Danke für die
Tipps erstmals, jetzt muss ich noch ein bisschen lesen und wenn ich dann
nicht zu faul bin, werde ich die Schaltung zusammenklicken und posten.
Beachte bei dem Attiny aber, dass der ISP an den Kontakten für eine
Halbbrücke ist. Ich habe einige Mosfets geschrottet, bevor ich kapiert
habe, warum ab und zu nach dem programmieren auf einmal alles
abgeschmiert ist und ich einen schönen fetten kurzen auf der Platine
hatte. Da hatten eben offensichtlich mal der obere und untere Mosfet
gleichzeitig durchgeschalten, während des programmierens. Aber ist ganz
einfach zu lösen, da die Mosfets ja einen Pulldown/Pullup kriegen
sollten trennst du einfach eine Verbindung zu einem der Mosfets, wenn du
programmieren willst, mit nem Jumper oder so. Einer reicht ja zu. Das
nur mal als Hinweis, weil es mir einige Mosfet-Euros gekostet hat :-).
MfG Dennis
Ist es jetzt schon echt zu spät oder kann es wirklich sein das ich mit
dem ir2111 nicht die Möglichkeit habe, beide mosfets unbeschaltet zu
lassen. Ich hab nur ein Input und kann mit ihm laut Datenblatt jenach
High oder Low den hs oder ls fet durchschalten. Ich muss bei meiner
Kommutierung aber eine Phase immer unbestromt lassen. Habe ich etwas
übersehen?
mosfeter schrieb:> Ist es jetzt schon echt zu spät oder kann es wirklich sein das ich mit> dem ir2111 nicht die Möglichkeit habe, beide mosfets unbeschaltet zu> lassen. Ich hab nur ein Input und kann mit ihm laut Datenblatt jenach> High oder Low den hs oder ls fet durchschalten. Ich muss bei meiner> Kommutierung aber eine Phase immer unbestromt lassen. Habe ich etwas> übersehen?
ne hast du nicht, der kann nur high/low .. für eine FOC ausreichend aber
nicht für vollblocksteuerung. schau dir zB mal den IRS2004 an
mosfeter schrieb:> Ist es jetzt schon echt zu spät oder kann es wirklich sein das ich mit> dem ir2111 nicht die Möglichkeit habe, beide mosfets unbeschaltet zu> lassen. Ich hab nur ein Input und kann mit ihm laut Datenblatt jenach> High oder Low den hs oder ls fet durchschalten. Ich muss bei meiner> Kommutierung aber eine Phase immer unbestromt lassen. Habe ich etwas> übersehen?
Dieser ist nicht wirklich geeignet für dein Vorhaben. Wenn du nur einen
Signalweg nutzen willst, also ähnlich wie beim IR2111, dann nimm den
IR2104. Da hast du noch die Möglichkeit über einen zweiten PIN beide
Mosfets Stromlos zu schalten. Wenn du aber den Attiny261 nutzen willst,
wären IR2101 besser. Weil der Attiny ja auch für Highside und Lowside
jeweils einen PIN nutzt. Mit denen habe ich auch schon einen BLDC Regler
aufgebaut, funktionierte super. Und mit denen hast du auch den Vorteil,
dass du mein schon angesprochenes Problem nicht hättest :
Dennis H. schrieb:> Beachte bei dem Attiny aber, dass der ISP an den Kontakten für eine> Halbbrücke ist.
da die beiden Eingänge des IR2101 gegeneinander veriegelt sind.
MFG Dennis
Den IR2104 hatte ich mir auch schon ausgesucht. Jetzt habe ich die Wahl.
Beim 2104er muss ich mich nicht um die gegenseitige Verriegelung
kümmern.
Beim 2101 schon und ja, ich die Schaltung mit dem ATTINY261 steht schon.
Welche PINs auf dem ATTiny meinst du die nur im Gegentakt laufen können,
also mein HIN und LIN perfekt treiben würden?
An den ISP Kontakten, also SPI Kontakten, ohhh da sehe ich es ja gerade
:) OCX1 und !OCX1
Nun gut, wie entscheide ich mich nun? Das scheint ja dann mit dem IR2101
schon bequemer zu sein, oder?
mosfeter schrieb:> Nun gut, wie entscheide ich mich nun? Das scheint ja dann mit dem IR2101> schon bequemer zu sein, oder?
Das ist durchaus bequemer, weil du ganz einfach mit zwei
Hardware-Registern eine Totzeit einstellen kannst. Also du hast es ganz
einfach, einen aktiven Freilauf zu basteln.
Du benötigst beide Timer. Timer 1 könntest du mittel PLL mit bis zu
64Mhz betreiben, habe ich persönlich aber nicht gemacht, weil meine
Mosfets nicht so schnell schalten können (ich habe eine Variante mit N-
und P-Mosfet gebaut). Ich nutze die PLL trotzdem, um auf einen
Systemtakt von 16Mhz zu kommen. Beim Timer 1 stellst du den PWM6 Mode
ein. Auf Seite 105 des Datenblattes ist eine Zeichnung, wie der Mode
funktioniert, diese ist allerdings nicht ganz so eindeutig, ich hatte
damit meine Probleme. Dazu später mehr. COM1A0 habe ich noch gesetzt, um
der PWM auch einen Ausgangspin zuzuordnen. Dann noch PWM1A, um das
Register festzulegen, welches das Tastverhältnis einstellt.
Vorteilereinstellungen musst du dir einfach mal selbst überlegen.
Interessant ist noch das Register DT1, mit dem du die Totzeit einstellen
kannst. Das ist sozusagen ein 4-bit Timer. Das obere Nibble des
Registers stellt den Timerwert für den Wechsel von Highside auf Lowside
ein, das untere andersherum. Also wenn du einen PWM-Wert von 40
einstellst, schließt der Highside-Mosfet nach dem Compare Match. Dieser
braucht allerdings ein paar ns dafür. Jetzt kommt der 4-bit Timer ins
Spiel. jetzt zählt dieser bis zu dem Wert, den du in DT1 geschrieben
hast. Erreicht er den Wert, schaltet der Lowside Mosfet durch. Also
echter aktiver Freilauf. Für die Totzeit gibts einen extra Vorteiler im
Register TCCR1B. Um dem Timer zu sagen, welche Pins er schalten soll,
gibt es das Register TCCR1E. In diesem Register musst du einfach immer
den High- und Lowside-Pin setzen. Also z.B. OC10E0 und OC10E1. Laut der
Zeichnung auf Seite 105 könnte man denken, dass dann aber Low- und
Higside gleichzeitig durchgeschalten werden. Das ist aber nicht so, da
über den Pins der Lowside noch ein Strich ist, welcher das ganze
negiert, das habe ich lange nicht verstanden. Dazu setzt du dann noch im
Port-Register den PB4 und fertig ist alles für die ersten 60Grad drehen
des Motors. Die meiste Schreibarbeit ist es jetzt, eine Funktion zu
schreiben, die jedesmal, wenn du sie aufrufst eben weiterschaltet, dass
der Motor die nächsten 60Grad dreht. Zum Anfang kannst du diese Funktion
einfach im Interrupt des Analog-Komparators ausführen, da sollte der
Motor schon drehen, wenn auch noch nicht perfekt. Perfekt bekommst du es
ganz einfach mit dem Timer 0. Aber das kannst du ja vielleicht auch
selbst rausfinden, jetzt habe ich dir schon einiges erzählt.
Was ich vielleicht noch erwähnen sollte, im AVR-Simulator funktioniert
das ganze nicht, dort kannst du alle möglichen Register des Timer1
beschreiben, da passiert nix an den Ausgängen, musst du in Hardware
probieren. Aber kann ja nix passieren, wenn du die IR2101 nutzt.
MfG Dennis
Ja, jetzt hast du doch schon ne Menge geschrieben :) aber da ich gerade
kaum Zeit habe weiterzubasteln, habe ich bis zum nächsten Lötzinn dein
Geschriebenes wieder vergessen ;)
Moin Moin,
aus gegebenen Anlass würde ich das Thema nochmal aufgreifen bzw. mit
einsteigen.
Bin 31 Jahre alt und staatlich geprüfter Techniker Informationstechnik
und studiere zur Zeit E-Technik im 5 Semester.
Mein Schwager ist auf den Trichter gekommen sich ein RC-Car zu zulegen
und möchte es gerne mit ein wenig mehr Dampf befeuern und fragte mich ob
ich das hin bekomme. Habe natürlich sofort Bllut geleckt und Ihm gesagt
ich lese mich mal ein und baue eine Testumgebung.
So weit so gut, IR2130 schien mir als geeignet da er ziemlich robust
scheint, ATMEGA8 flog noch in der Ecken rum reichelt erledigte den Rest.
BEMF habe ich von euch als MOSFET dienen die IRF3710.
Breadboard ausgegraben und angefangen auf zu bauen.
Spannungsstabilisiesung einmal 5V für den Atmega 8 und dann einmal 15V
für den Treiber. Gatewiderstand für die FETS erst mal weggelassen und
fleißig alles zusammengesteckt.
Jetzt zur Frage: HIN und LIN vom Treiber sind ja Low aktiv, wenn ich
jetzt sie High Site durchsteuern möchte, muss ich dann die Low Site auf
high setzten und dann die High Site einfach mit dem PWM Signal bedienen
?
Des weiteren habe ich in dem Thread wo auch die BEMF erklärt wurde
gelesen, dass es ausreicht einen PWM Kanal für alle HIN's am Treiber zu
nutzen. Entspricht das der Wahrheit? kann man wirklich den einen Pin von
wo die PWM kommt auf alle HIN's legen ?
Ich glaube das wäre es erst mal. Ist das erste mal das ich was bei euch
schreibe, bin bis jetzt immer nur leser gewesen :-)
Wen der Bedarf besteht sende ich gerne den Schaltplan und Bilder vom
Aufbau.
In diesem Sinne einen schönen Abend.
sebastian schrieb:> Gatewiderstand für die FETS erst mal weggelassen und> fleißig alles zusammengesteckt.
Sei bitte so fleissig und füge Gatewiderstände hinzu. Es ist ja nicht
so, das wir die einbauen, um den Herstellern Umsätze zu verschaffen,
sondern um eine Strombegrenzung für die Treiberbausteine herzustellen.
Das Gate eines MOSFet muss aufgeladen werden und zieht bei schnellen
Anstiegszeiten eben auch mal gehörig Strom.
sebastian schrieb:> kann man wirklich den einen Pin von> wo die PWM kommt auf alle HIN's legen ?
Wenn man sich auf Blockkommutierung beschränkt, kann man das machen.
Allerdings sparst du dir nicht die Treiberbausteine für alle drei
Highsides sondern wirklich nur 2 Pins am Prozessor, verbaust dir aber
dauerhaft die Möglichkeit auf FOC/SVM/Sinusmodulation.
sebastian schrieb:> ATMEGA8 flog noch in der Ecken rum
Und wieder das alte Schlachtschiff. Wenigstens ist er pinkompatibel zum
Mega48/88/168/328, so dass da ein Upgradepfad existiert. Die o.a.
neueren Megas machen nämlich 3-Phasenansteuerung mit ihren 3 Timern zum
Kinderspiel.
Das mit dem Widerstand ist natürlich sinnvoll, denke da so an 10 Ohm,
sollte ja reichen.
Da ich aber nur noch drei Stück habe muss ich wohl wieder zu Reichelt
und bei der Gelegenheit spendiere ich dem Testaufbau einen Mega 328.
Das mit dem PWM gemurkse kann ich mir dann ja auch sparen, da ja 6
Kanäle verfügbar sind.
War den die Annahme die ich betüglich des Treibers getroffen habe
richtig ?
Muss LIN auf High und HIN quasi auf low damit man die high site öffnet
??? Man würde ja in diesem fall nur das PWM Signal am HIN vom Treiber
haben um ihn zu schalten, natürlich muss der LIN dann auch
dementsprechend gesetzt werden.
Vielen lieben dank schon mal für die Anrwort Matthias .
sebastian schrieb:> Man würde ja in diesem fall nur das PWM Signal am HIN vom Treiber> haben um ihn zu schalten, natürlich muss der LIN dann auch> dementsprechend gesetzt werden.
Ja nee, auf keinen Fall darfst du ja in einer H-Brücke die Highside
und die Lowside gleichzeitig durchsteuern. Es ist also immer eine der
anderen beiden Lowsides durchgesteuert, damit der Strom auch durch den
Motor fliesst. Das Schema dafür kannst du dir entweder mal aufzeichnen
oder einer Animation entnehmen. Hier ist z.B. ein einfaches Zeitdiagramm
für einen BLDC mit drin:
http://de.wikipedia.org/wiki/B%C3%BCrstenloser_Gleichstrommotor
He He, das habe ich schon verstanden, hatte nur irgendwie einen kleinen
Knoten durch die Low aktiven Eingänge.
Weil um z.B. die erste h-side durch zu steuern muss ja am Treiber der
Eingang LIN1 auf high gesetzt werden und HIN1 auf low. Da ja aber auf
HIN1 das PWM signal liegt muss ich ja quasi das Tastverhältnis umdrehen
da sonst ja bei z.B. 80% high und 20% low Anteil im PWM Signal mein
Ausgang am treiber, da er ja low aktiv ist nur den 20% Anteil
durchschalten. Hoffe man versteht was ich meine. :-)
Um also ein Tastverhältnis von 80/20 am Ausgang zu erhalten muss ich ja
ein Tastverhältnis von 20/80 rein geben.
Werde das die Tage mal im Labor mit einem FG am treiber testen und mich
dann mal langsam an den code begeben.
Ist der Mega 328 den jetzt die bessere Wahl oder sollte es besser ein
Mega 44 oder 88 werden. Wollte nämlich heute die letzten kleinteile bei
Reichelt ordern, damit mir der Kurier die schön am Montag bringt und ich
dann mal am Dienstag ins Labor komme und den Treiber quälen kann.
Vielen Dank aber nochmal für deine Zeit die du aufgebracht hast.
Mal sehen wie weit ich die Woche komme. Werde mich bei fragen die
bestimmt noch auftauchen werden melden. Erfolge werden aber ebenfalls
berichtet.
Sebastian Juch schrieb:> Ist der Mega 328 den jetzt die bessere Wahl oder sollte es besser ein> Mega 44 oder 88 werden.
Nicht ganz einfach zu beantworten. Ich selbst habe bisher nur die
Blockkommutierung umgesetzt, da reicht ein Mega88 locker. Wieviel Platz
man für eine sinus-Ansteuerung benötigt weis ich nicht, das habe ich
noch nie gemacht.
Dennis
sebastian schrieb:> Des weiteren habe ich in dem Thread wo auch die BEMF erklärt wurde> gelesen, dass es ausreicht einen PWM Kanal für alle HIN's am Treiber zu> nutzen. Entspricht das der Wahrheit? kann man wirklich den einen Pin von> wo die PWM kommt auf alle HIN's legen ?
Ein einziger PWM Kanal reicht aus, wenn du ihn jeweils nur zu jenem
Treiber "leitest", der das PWM gerade benötigt. Also immer
abwechslungsweise alle drei Treiber hintereinander.
Dazu braucht man nur drei Widerstände, so wie in der Beispielschaltung
in diesem Artikel:
https://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren#Beispielschaltung
In dieser Schaltung ist der R20 einer dieser drei Widerstände, die
anderen sind nicht gezeichnet da nur eine Halbbrücke abgebildet ist.
Der Trick besteht darin, den Ausgangs-Pin für HIN einfach auf Eingang zu
definieren, dann ist der Pin hochohmig und das PWM-Signal wird über den
Widerstand (R20) zum Treiber geleitet. Ist der Ausgang niederohmig, also
auf Low oder High liegt auch dieses Signal am Treiber an, auch wenn das
PWM weiterläuft.
Es gibt mehrere Möglichkeiten, wie man einen BLDC Controller aufbaut. Im
verlinkten Artikel ist eine sehr einfache Variante erklärt, mit der man
recht schnell zum Ziel kommt. Ein Merkmal der Schaltung im Artikel ist,
dass die Treiber nicht HIN und LIN ala Eingänge haben, sondern IN und
SHUTDOWN (bzw. ENABLE). Das hat verschiedene Vorteile, die unter
"Treiber" erklärt sind:
https://www.mikrocontroller.net/articles/Brushless-Controller_f%C3%BCr_Modellbaumotoren#Treiber
(z.B. ist der "aktive Freilauf" viel aufwändiger wenn man HIN/LIN statt
IN/SD verwendet)
Nachteil an dieser Variante ist dieser hier:
Matthias Sch. schrieb:> Wenn man sich auf Blockkommutierung beschränkt, kann man das machen.> Allerdings sparst du dir nicht die Treiberbausteine für alle drei> Highsides sondern wirklich nur 2 Pins am Prozessor, verbaust dir aber> dauerhaft die Möglichkeit auf FOC/SVM/Sinusmodulation.
Jetzt musst du selber wissen, ob du später mit deinem Controller auch
mal was anderes als nur Blockkommutierung machen möchtest...
Dennis H. schrieb:> Wieviel Platz> man für eine sinus-Ansteuerung benötigt weis ich nicht, das habe ich> noch nie gemacht.
Ich habe jetzt schon öfter die AVR447 implementiert, noch mit
umfangreichen Konsolroutinen. Allerdings ist die 447 ein
tabellenorientierter Ansatz, der keinerlei trigonometrische Funktionen
benötigt und deswegen auf die 'math' Lib verzichten kann.
Für AVR447 reicht ein Mega48 knapp in der Grundvariante aus der Appnote.
Mit einem Mega88 ist man da immer auf der sicheren Seite. Auch der
3-Phasen-Umrichter aus dem Wettbewerb läuft minimal auf einem Mega88.
Ich habe den Mega328 aber jetzt oft schon als den preisgünstigsten
gesehn, trotz des grossen Flash. Lohnt sich also, beim Händler alle im
Preis zu vergleichen.
Ein kleines Update.
Reichelt hat geliefert. Gate Widerstad wurde eingepflegt, 8 Mhz Quarz
instaliert und der neue Mega 328 verdrahtet.
BEMF Schaltung wurde ebefalls auf 15V angepasst.
Zum testen der einzelnen Funktionen dient noch der Mega 8, PWM Erzeugung
klappt Prima , LCD dient zum Anzeigen von Timer Werten und Poti in
Verbindung mit dem ADC ändern die PWM. Versuche gerade den Empfänger aus
zu lesen. Habe gelesen das man den gleichen Timer nutzen kann, welcher
auch die PWM erzeugt.
Mal schauen ob das Interrupt gewusel was ich mir vorstelle auch klappt.
Schauen wir mal was die nächste Woche alles so bringt.
Schönes Wochenende.