Forum: Mikrocontroller und Digitale Elektronik Brushless Motorsteuerung mit Atmega328P


von Matthias B. (mattep)


Angehängte Dateien:

Lesenswert?

Guten Abend,

ich bin zur Zeit dabei eine Platine für die Ansteuerung eines brushless
Motors zu bauen. Leider habe ich noch nicht so viele Erfahrungen auf
diesem Gebiet, deshalb hoffe ich ihr könnt mir weiterhelfen.

Erstmal ein paar allgemeine Infos:

Die Stromversorgung wird von einer 7,4V LiPo Batterie übernommen. Der
Schaltplan kann den angehängten Bildern entnommen werden. Es wurden aber
bereits folgende Änderungen am Schaltplan vollzogen:
Leider habe ich bei Eagle einige Kondensatoren vergessen. Es wurden
zwischen Pin 7 und 8 sowie Pin 20 und 22 des Mikrocontrollers 100nF
Abblockkondensatoren hinzugefügt. Nach dem Spannungswandler wurde ein
10uF Kondensator zwischen 5V und GND hinzugefügt.
Das verwendete Quarz und die damit verbundenen Kondensatoren wurden
durch einen Taktgeber ersetzt, der dem des Arduino Uno ähnlich ist.
Durch diese Änderungen funktioniert die Schaltung eigentlich ganz gut,
wenn keine Last (Motor) angeschlossen ist. Die Ansteuerung läuft dabei
über Raumzeiger mittels PWM Signal. Dieses Signal konnte mit einem
Oszilloskop nachgewiesen werden.
Unter Last (Motor angeklemmt) geschieht es, dass sich der
Mikrocontroller nach kürzester Zeit aufhängt. Durch ein Reset zuckt der
Motor kurz wieder.

Wenn man nun den Mikrocontroller von der Platine nimmt und stattdessen
die Pins 4,5,15,16 sowie GND des Atmega Sockels mit einem Arduino UNO
verbindet und dort den Atmega einsetzt läuft die Schaltung einwandfrei,
auch unter Last. Was könnte der Grund dafür sein?

Ein weiteres Problem besteht darin, dass die MOSFETS, die sich im
Boardlayout rechts befinden, sich viel stärker erhitzen als die MOSFETS
der anderen beiden Phasen. Habt ihr eine Idee woran das liegen könnte?

Ich hoffe ihr könnt weiterhelfen. Ich wäre euch sehr dankbar.

von BLDC Wissender (Gast)


Lesenswert?

Es fehler noch ein par Infos von Dir:

Datenblatt der Zelle (wegen Innenwiderstand und so)
Datenblatt des  Motors
Daten der SW : Schaltfrequenz, eingestellte Totzeit

1.)

Zum Schaltplan:

Strommessung:

Bau niederohmigere Shunts ein (1 mOhm ist Industreistandard) und 
verwende Opamps um das Signal zu verstärken. Tue auf jeden Fall die Cś 
parallel zu deinen Shunts weg! Rechne mal aus was der MOSFET hier 
leisten muss! du hast schnelle MOSFET Treiber und dein Inrush-Strom wird 
hier höllisch sein!

Gatedriver:

Warum hast du LTC Bausteine? LTC heist übersetzt "leider teuer"

MOSFETs:

Warum hast du einen 55V Typ?
Ich würde hier einen 30V typen nehmen da hast du mehr Auswahl (das ganze 
PC Mainboard Zeugs + viel Automotive hat um die 12V Eingangsspannung und 
daher 30 MOSFETs). Du hast auch genug Luft zu deiner Versorgung. 
Vermutlich würde auch ein 25V typ dicke ausreichen.

Zwischenkreis-Kondensator (330uF):

Nehm unbedingt einen Typ mit sehr niedrigem Innenwiderstand du solltest 
hier nicht sparen. Im Schaltplan ist nicht ersichtlich was verbaut ist. 
Hier solltest du den genauen typen angeben.

2.) Layout

Schlechtes Layout mit großen Induktivitäten. Versuche die Induktivitäten 
klein zu halten wo viel Strom fließt (kurze Leitungen)

3.) Probleme deiner Schaltung (heiß werden)

Durch die Cś parallel zu den Shunts kann der Inrush sehr hoch werden und 
der MOSFET muss sich durch den Linearbetrieb quälen. Das mag er nicht.

In Abhängigkeit des Innenwiderstandes deiner Versorgung, des 
Ladezustandes der Batterie und des Batteriestromes kann die Spannung so 
stark einsinken das die MOSFETS mit niedrigerer Gatespannung angesteuert 
werden und in den Linearbetrieb kommen und viel Leistung verbraten statt 
den Motor zu betreiben. Du kannst ez.B. inen Gatetreiber nehmen der eine 
Chargepump hat wie z.B. einen DRV8301 (liefert 10V an die Gates wenn die 
Spannung auf 6V eingebrochen ist) oder einen von Allegro z.B. A4915 (der 
macht auch die Kommutierung selbst) oder alternativ natürlich selbst 
eine Ladungspumpe aufbauen mit welchen deine Gatetreiber betrieben 
werden.

4.) Wozu ARDUINO und Space Vector zeugs?

von Matthias B. (mattep)


Lesenswert?

Schon mal vielen Dank für deine Infos!!

Mit Datenblatt der Zelle meinst du die Batterie?
Die gibts hier: 
http://www.conrad.de/ce/de/product/209139/Conrad-energy-LiPo-Racingpack-74-V-3000-mAh-20-C-Stecksystem-Tamiya-Stecker-XH

Datenblatt des Motors: LRP Electronic Brushless-Elektromotor Vector X12 
Drehzahl 15840 U/min Turns 17.5
http://www.produktinfo.conrad.com/datenblaetter/225000-249999/239105-an-01-de-VECTOR_X12_BRUSHLESS_STOCKSPEC_17_5T.pdf

Daten zur Software:
In der Software ist ein Array definiert das aus 24 Einträgen besteht. 
Jeder Eintrag ist ein PWM Wert zwischen 0 und 200. Das Array ist zudem 
zyklisch.
Die PWM Werte werden ausgelesen und an den Motor weitergegeben (Die PWM 
Frequenz beträgt 32kHz). Dabei ist anfangs Phase A bei Arrayeintrag 0, 
Phase B bei Arrayeintrag 8 und Phase C bei Arrayeintrag 16. Nach einer 
bestimmten Anzahl an Interrupts werden alle Phasen einen Arrayeintrag 
weitergesetzt.
Die Interrupts sind auf eine Frequenz von 15625 Hz gesetzt. Wenn man die 
Arrayeinträge nach 40 Interrupts weiterschaltet bekommt man 16,3 
Umdrehungen des Motors pro Sekunde.

1) Schaltplan

Strommessung: Die parallel geschalteten Kondensatoren sind nun weg.
Die Shuntwiderstände wurden nur so hochgewählt, weil das anscheinend vom 
Treiber so gefordert wird. Siehe 
http://cds.linear.com/docs/en/datasheet/1158fb.pdf Bezeichnung: Rsense

Gatedriver: Die habe ich gewählt, weil ich nicht viele für den 
geforderten Spannungsbereich gefunden hatte. Die Spannung von der 
Batterie kann bis 6Volt fallen und da soll das Auto auch noch fahren 
bzw. die Treiber schalten können. Abgesehen davon, dass die Treiber 
teuer sind, müssten Sie ihren Dienst erfüllen oder?

MOSFET: Die 55 Volt wurden gewählt, weil es preislich kaum einen 
Unterschied gemacht hat und ich dachte dann kann man ja ruhig mehr 
nehmen. Wo besteht der Unterschied zu Mosfets mit 25Volt außer in der 
Spannungsfestigkeit?

Zwischenkreiskondensator: 
http://www.produktinfo.conrad.com/datenblaetter/400000-424999/404646-da-01-en-SMD_ALUMINIUM_KONDENSATOR_330UF_35V.pdf
Passt der Innenwiederstand?

2) Layout

Habe die Phasen des Motors nun direkt an die entsprechenden Mosfets 
gelötet und nicht an die seitliche Klemme angeschlossen. Wo oder wie 
kann ich hier noch weiter optimieren (auf Grundlage des fertiggestellten 
Boards)?

3) Probleme der Schaltung

Habe - wie gesagt - die parallelen Kondensatoren abgelötet und die 
Phasen des Motors näher an die Mosfets gebracht.
Die Shuntwiderstände werden immer noch sehr warm. Der am weitesten 
rechts im Boardlayout wird am wärmsten.Das müsste ja besser werden, wenn 
ich niederohmigere nehme bzw. kurzschließe?
Die Mosfets werden immer noch sehr heiß. Meine subjektive Wahrnehmung 
sagt, dass die Highside Mosfets generell wärmer als die Lowside sind. 
Der am weitesten rechts gelegene Highside Mosfet ist am heißesten. Liegt 
das an der nahegelegenen Einspeisung?
Kannst du eine Aussage darüber treffen, ob die Mosfets im Linearbetrieb 
arbeiten? Wie kann ich das erkennen?

4) Den Arduino habe ich zum Testen benutzt.

Meine Schaltung funktioniert nur, wenn kein Motor angeschlossen ist. Mit 
dem Oszilloskop kann man dann schön das PWM Signal aller 3 Phasen 
erkennen. Wenn ich nun den Motor anschließe geht der Mikrocontroller aus 
oder bleibt stehen?!
Zum Testen habe ich dann den Mikrocontroller von meiner Schaltung 
entfernt und auf einen Arduino gesetzt. Dann habe ich die Pins 4,5,15,16 
sowie GND vom Arduino zum Sockel des Mikrocontrollers auf meiner Platine 
verbunden. Jetzt läuft die Schaltung auch unter Last. Wenn der 
Mikrocontroller jedoch direkt auf meiner Schaltung sitzt geht es nicht.
Meiner Meinung nach kann das nur am Taktsignal oder der "schöneren" 
Spannungsversorgung des Arduinos liegen. Aber ich bin kein Experte...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Bau auf jeden Fall Widerstände in die Leitungen CurrentA usw. vor den 
ADC-Eingängen ein, dann haben die internen Schutzdioden des MC noch 
einen Chance.
Schau dir auch mal das Schaltbild der MC100 Motorcontrol Platine bei 
Atmel an, da sieht man ganz gut, was an Entstörungen noch so nötig ist. 
Weiter ist Application Note AVR447 eine guter Ansatz für Sinusmodulation 
an Sensor-Motoren.

Matthias B. schrieb:
> In der Software ist ein Array definiert das aus 24 Einträgen besteht

Das klingt auch sehr grob. In AVR447 wird beschrieben, wie du das mit 
einer Tabelle von 192*3 Werten feiner abstufen kannst.

von BLDC Wissender (Gast)


Lesenswert?

Um Auf Linearbetrieb prüfen zu können empfehle ich ein Oszi >= 500MhZ 
Eingangsbandbreite + entsprechende Tastköpfe mit einer niedrinduktiven 
Anbindung der Masse-Klemme. Mit diesem gleichzeitig GS-Spannung sowie 
DS-Spannung der LS mit einfachen Mitteln anschauen. AM besten dann noch 
eine entsprechende Strommesszange für den Phasenstrom (>2k€)

Dein Lochrasteraufbau und die Verwendung von LTC-Chips bringen mich 
jedoch zu der Annahme das du im Hobbybereich bist und kein solches Oszi 
hast.

Ach eine Analyse warum der rechte MF wärmer wird ist nur möglich mit 
entsprechendem Messequipment.

Die HS-MOSFETs sind nur sicher entsprechend mit sehr guten 
Differenztastkpfen zu vermessen.

Deine Aussage die HS-MF haben ein größeres Problem sind ggf. dadurch 
erklärbar da diese ja 1. weniger Spanung bekommen durch den Abfall an 
der Diode zum Aufladen der Bootsrap-Cs sowie 2.) durch den 
Ladungsausgleich zwischen Bootstrap-C und Gate.

Mit so wenig Spannung empfehle ich zwingend einen Gatedriver der über 
eine Chargepump die Spannung hochpumt. 6V unter LAst wäre nur gut wenn 
du Logic-Level-MF verwendest. Du hast jedoch einen normal Level typ in 
Verwendung.

Kondensator:

Der Typ ist nicht wirklich gut mit 90mOhm.
Nimm einen bedrahteten. Die SMD-Typen (Nass, kein Conductive Polymer) 
sind hier noch nicht wirklich gut. Versuch auf unter 30mOhm zu kommen.

Anmerkung von Matthias:

Ist korrekt. Nehme hier wie bereits an anderer Stelle von beschreiben 
nen Opamp/Komparator. Es reicht ein einziger der als Komparator arbeitet 
und den Summestrom aller 3 Zweige in der LS misst. Du hast ja eine Zelle 
ohne Temperatursensor. Eine Strommessung macht nur dann Sinn wenn due 
entweder Akkumangement machen willst  oder einen Stromregelkreis 
brauchst. Wähle den Faktor des Opamps so daß die Betriebsspannung des uC 
nicht überschritten wird (das darf auch nicht beim Starten des Boards 
passieren, wenn die Spannung von aussen 7.5V ist und der uC noch 0V hat! 
Schua dir daher die zeitlichen Abläufe des aktivierens der Spannungen 
auf dem Board an .

Tip:

Nimm einen für deinen Spannungsbereich geeigneten Gatedriver wie den 
Allegro dann brauhcst du auch nicht mal mehr den uC da der GTR die 
Kommutierung macht (Oszillator kannst du extern aufbauen). Du hast in 
deiner jetzigen Schaltung ja nicht mal einen Ein/Aus-Knopf.

Alternativ kannst du den uC verwenden um den Allegro anzusteuern dann 
musst du nur sehr wenig SW machen was den Motor betrifft.

Dann hast du 3 ICs gespart, 1 mögliches Problem eliminiert und hast mehr 
Platz um deine MF Induktivitätsärmer anzubinden

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.