Archiv verlassen und diese Seite im Standarddesign anzeigen : DIY Brushless Regler für Modellbaumotoren (max. 20A)
Che Guevara
17.01.2014, 14:49
Hi,
da ich mit meinem letzten Projekt einen schon sehr fortgeschrittenen Status erreicht habe, möchte ich das nächste Thema in Angriff nehmen: Ein BLDC-Regler für Modellbaumotoren. Hierbei gehts nicht um Wirtschaftlichkeit, sondern um DIY und die Funktionen.
Ich hab mich natürlich schon etwas eingelesen und auch einige APP-Notes von Atmel dazu gefunden, jedoch gibts noch einige Punkte, bei denen ich etwas Hilfe gebrauchen könnte.
Was soll das Teil können?
- Spannung: 9 - 15V (3 - 4S Lipo)
- Strom: max. 20A
- PWM Signal einlesen (mit einigen 100Hz)
- Drehzahlsteuerung (beinhaltet auch aktive Bremse)
- aktiver Freilauf
- Strommessung
Mein Problem liegt u.a. in der Drehzahlsteuerung. Normalerweise würde ich Drehzahl messen -> PID -> Steuern. Allerdings bräuchte ich dann für jeden Motor eigene Werte!? Es gibt aber auch kaufbare Regler (u.a. von Graupner), die so einen sog. Govener-Mode integriert haben. Da muss man nichts einstellen, einfach ein- bzw. ausschalten und das Teil läuft. Wie macht man das?
Die Komponenten:
- ATXMegayyA4 als Controller (evtl. yy=16, je nach Flash)
- Platine max. 2 seitig , selbstgeätzt, max. 60 x 30 mm (so klein als möglich)
- Rest: noch nicht definiert
Sollte ich Fet-Treiber verwenden? Welche Art von Fets sind am besten geeignet? Sollte ich die Strommessung über einen Shunt laufen lassen, so wie auch in der App-Note getan? Spannungsmessung ist kein Problem, das bekomme ich hin ;)
Der Preis sollte natürlich auch nicht zu hoch sein (was den auch sonst?! :D ), max. 50€ wären wünschenswert.
Ich weiß, sind viele Fragen / unklare Angaben, ich hoffe ihr helft mir etwas auf die Sprünge.
Vielen Dank & Gruß
Chris
Hallo,
vorweg: bei den hohen Strömen wird das alles kompliziert. Du brauchst MOSFETs mit sehr geringem RDSon, dazu vernünftige Treiber, die das Gate schnell genug umladen, um verlustarm schalten zu können. Das alles muss dann noch niederohmig und niederinduktiv geroutet werden und eine gute Kühlung ist auch nötig...
Ich habe bereits als studentische Hilfskraft eine Hochstrom-H-Brücke gebaut (designed für 30A, getestet bis 12A).
Schau dir mal die Gatetreiber IR2184 an. Die können je eine Halbbrücke inkl. Bootstrapping ansteuern. Dazu suchst du noch niederohmige n-Kanal MOSFETs. Der RDSon muss für diese hohen Ströme in der Größenordnung 5mOhm und kleiner liegen. Pro MOSFET wirst du mit 1-2 Euro rechnen müssen. Die Gatetreiber kosten ca. 1,50 Euro. 6x3 cm Platinengröße sind sehr ambitioniert, meine Platine hatte etwa 16x10cm (2 H-Brücken) und war komplett in THT. Es ging aber auch viel Platz für die Hochstromstecker drauf ;)
Grüße, Bernhard
FET-Treiber solltest du wie BMS gesagt hat verwenden um die FETs schneller umzuschalten und dadurch geringere Schaltverluste zu erhalten.
Bei den FETs nimmt man idr. n-FETs, da diese einen deutlich geringeren Widerstand (Rdson) haben. Das ganze hat allerdings auch einen Nachteil, denn damit die Mosfets richtig schalten brauchen sie eine hohe Spannung von Gate nach Source (idr. > 8V). Ist diese Spannung nicht gegeben schaltet der Transistor nicht richtig durch und sein Innenwiderstand wird relativ hoch -> große Verlustleistung -> Tod. FET-Treiber benutzen idr. eine Bootstap-Schaltung um diese Spannung für den Highside-FET bereit zustellen. Hier muss man aber beachten, dass man nicht mehr mit 100%, sondern max. ~95%* PWM die Mos-Fets betreiben darf, da für die Bootstrap ein Kondensator geladen werden muss. [* Abhängig von den verwendeten Bauteilen und ihrer Dimensionierung]
Strommessung über einen Shunt ist in Ordnung und gängige Praxis. Andere Möglichkeit wären noch Hall-Sensoren (zb: ACS709), aber die kosten auch etwas mehr.
Zum Govener-Mode:
Also wenn ich das richtig verstehe, wird bei dem Govener Mode die Drehzahl Konstant gehalten, egal welche Last anliegt. Das ganze sollte bei einem BLDC eigentlich recht simpel sein, da er ja wie ein Schrittmotor zwangskommutiert wird. Du wirst nur eine Maximal-Drehzahl mit deinem max. PWM-Wert verknüpfen müssen und kannst dann linear zwischen 0 und 100% verfahren. An der Drehzahl selber musst du erst einmal nichts mehr ändern. Merkst du, dass der Lastwinkel zu groß wird (max. 90°), muss die Kraft und damit der Strom entsprechend erhöht werden (Kraft proportional zum Strom). Erst wenn du den Maximalen Strom erreicht hast, könnte man als eine Art "Failsafe" die Drehzahl verringern. Wobei letzteres auf eine falsche Dimensionierung hindeutet.
Wie das bei einem Modellbau-Regler funktioniert weiß ich allerdings nicht, dem kann man ja keine Max. Drehzahl vorgeben. Ich vermute hier wird mit einer festen Maximal-Drehzahl gearbeitet und dann eben bei Erreichen des Maximalstroms gestoppt.
Gruß,
Robin
Che Guevara
17.01.2014, 20:40
Hi,
also ich hab mal kurz einwenig gesucht und hab den IRLR8743 gefunden. Dieser hat folgende Eigenschaften:
- RDSon = 3.1mOhm
- Vds = 30V
- Vgs = 20V
- max. Strom = 50A
Ist dieser passend für meine Application? Hab leider von der Leistungselektronik nicht soo viel Ahnung.
Der IR2184 sollte ja auch dazu passen.
Was gibt es den übers Layout wichtiges zu sagen? Ich plane, alles in SMD zu machen, um den Platzverbrauch gering zu halten. Außerdem werden dann auch die Leitungen kurz und haben somit weniger Induktivität.
Über die Software mache ich mir dann Gedanken, wenn das Layout / die Hardware steht.
Vielen Dank & Gruß
Chris
Was gibt es den übers Layout wichtiges zu sagen?
Wie bei Hochstromanwendungen üblich: Leiterbahnen so breit wie nur möglich machen, bei doppelseitiger Platine auch beide Seiten verwenden. Bei Durchkontaktierungen im Hochstrombereich auf jeden Fall mehrere setzen, um auch hier eine höhere Strombelastbarkeit zu erreichen. Mach dir auch schon mal Gedanken, wie du einen Kühlkörper anbringst. Um den Kühlkörper anbringen zu können, sollte es im Bereich der MOSFETs z.B. keine höheren Bauteile geben, sonst passt der nicht drauf. Welche Stecker möchtest du verwenden? Oder lötest du die Kabel direkt auf die Platine?
Grüße, Bernhard
Che Guevara
18.01.2014, 10:19
Ich hab mir überlegt, ob es nicht eine gute Idee wäre, eine Seite auf VCC und die andere auf GND zu legen? Das würde das Layout vereinfachen und die "Leiterbahnen" wären schön breit --> kleiner Widerstand. Die Fets kommen übereinander, so habe ich jeweils kurze Zuleitungen zu den Motoranschlüssen und spare Platz. Das ganze wird sowieso in SMD aufgebaut, da mache ich mir wegen der Kühlkörper keine Gedanken. Mein Wunsch wäre es allerdings, ohne diese auszukommen (fast alle kommerziellen Bl-Regler in dieser Leistungsklasse haben keine Kühlkörper). Als Platine möchte ich welche mit 70µm Kupfer verwenden, das sollte wohl auch etwas Wärme aufnehmen / abstrahlen können?!
Stecker sind keine geplant, soll alles verlötet werden --> spart Platz, vermeidet Übergangswiderstände und Wackelkontakte.
Sitze seit einer Weile schon am Layout, wenn der Leistungsteil fertig ist, stelle ich mal ein Bild rein, um es kritisieren zu lassen :D
Gruß
Chris
70µ Kupferauflage sind eine gute Idee. Bei SMD-Bauteilen wird durch die Leiterbahnen/Platine einiges an Wärme aufgenommen.
Die MOSFETs sind mit 3mOhm schon recht gut.
Sitze seit einer Weile schon am Layout, wenn der Leistungsteil fertig ist, stelle ich mal ein Bild rein, um es kritisieren zu lassen :D
Konstruktive Kritik ist nicht böse gemeint, das sind Tipps damit es noch besser wird ;)
Klingt jetzt nicht so verkehrt, was du machst, Mos-FET ist aus meiner Sicht auch gut gewählt.
Ob es ohne Kühlkörper geht, müsstest du durch rechnen, im Datenblatt ist ja die Erwährmung pro Watt Verlustleistung angegeben (100°/W ohne bzw 50°/W mit Kühlfläche auf der Platine). Gerade mit den Verlusten durch die Interne Diode und die Schaltverluste könnte es knapp werden.
Bin auch schon gespannt auf dein Design.
Che Guevara
18.01.2014, 11:02
Also ich weiß, dass es nicht böse gemeint ist, aber ich glaube, das Layout ist böse xD
Hier mal drei Bilder von Top & Bottom , Top und Bottom. Hätte auch noch die .lay Datei, aber ich denke mal, darauf sollte man alles erkennen können?!
27242
27243
27244
Natürlich fehlen noch die ganzen Block-C's, Spannungsregler, µC Beschaltung, Zero-Cross-Schaltung, usw... Aber ich dachte mir, bevor ich mich jetzt stundenlang hinsetzte und dann sowieso wieder alles ändern muss, mach ich erstmal nur das heikelste ;)
Beim µC dachte ich daran, eine AutoMasse Sperrfläche einzubauen, damit er nicht so direkt an der dreckigen Spannung sitzt!? Die beiden Pads links unten sind VCC & GND, die 3 Pads links oben sind für den Motor. Die restlichen Anschlüsse (PWM-IN & UART) kommen wohl auf die rechte Seite der Platine, wo insgesamt die Ganze Steuerelektronik hinsoll. Die Bauteile sind die oben erwähnten. Allerdings habe ich eben die Befürchtung, dass die Leitungen vom Halbbrückentreiber zu den FET's zu lang / verwunden sind, was ja wieder Kapazitäten mit sich bringt.
Ja, wenn ich gleich mal Zeit finde, rechne ich ein paar Beispieldaten durch (allerdings weiß ich ja nicht, wieviel Wärme von der Platine abgestraht wird / werden kann). Die max. 20A sind übrigens nur für die Zukunft, meine gewünschten Motoren (Roxxy BL2824-34) ziehen max. 10A, die reichen momentan dick ;)
Gruß
Chris
Ja, es lässt sich gut erkennen. Das Layout finde ich gar nicht so "böse" ;)
Im frühen Stadium kann man noch wenig Tipps geben. Ich stelle meine Layouts dreimal auf den Kopf, bis sie mir gefallen, weiß nicht wie das bei euch läuft... 8-[
Ich bin mir nicht sicher, ob man unter dem TO252-Gehäuse Leiterbahnen durchführen kann.
Normalerweise ist die Rückseite der MOSFETs fast komplett blank und kann zur Wärmeabfuhr genutzt werden. Das Pad am Drain ist normalerweise größer.
Zur Anordnung der Bauteile habe ich noch einen Vorschlag:
GND
Ausgang MOSFET Treiber
Ausgang MOSFET Treiber µC
Ausgang MOSFET Treiber
VCC
Eventuell lassen sich dann die Leiterbahnen der Versorgung besser ziehen. Das könntest du ausprobieren.
Grüße, Bernhard
Che Guevara
18.01.2014, 18:57
Hi,
ja, bei mir ist es ähnlich, mir gefällts noch nicht so, rein optisch ;)
Mit dem Gehäuse hast du Recht, die Rückseite ist blank, das sollte ich wohl wirklich verlöten, um die Wärme besser abzuführen. Die räumliche Trennung von VCC & GND finde ich nicht so gut, v.a. weil das ganze ja (wie du evtl. schon bemerkt hast) auf einen Multikopter soll und da alle Leitungen verdrillt & eng beieinander sein sollten (kommt u.a. auch ein Kompass-Sensor drauf, der ist da empfindlich).
Aber wenn ich GND & VCC direkt nebeneinander packe, gefällts mir sehr gut! Eine ähnliche Idee hatte ich auch schon.
Bin gerade am Testen, melde mich später nochmal mit neuem Leistungsteil.
Gruß
Chris
Che Guevara
20.01.2014, 01:41
Hi,
habs gestern nicht mehr geschafft, aber hier jetzt mal das neue Layout, gefällt mir persönlich sehr gut. Es fehlt noch:
- ein geeigneter Elko (welche Größe brauch ich den bei max. 20A)
- ein Shunt zur Strommessung
Als Funktionen / Eigenschaften hab ich jetzt:
- Spannung zw. 10 & 20V
- Strom max. 20A
- Spannungsmessung
- Temperaturmessung
- max. 16Bit PWM
- PWM Input
- TWI & USART zu Debugging Zwecken / later use herausgeführt
- 2 Leds zur Status Anzeige / Debugging
Hier mal die Bilder:
27260
27261
27262
Was haltet ihr davon? Welchen Elko sollte ich verbauen? Low-ESR ist klar, aber welche Kapazität? Reichen die Kondensatoren neben dem SOT-223 (LM317)?
Welchen Widerstand sollte der Shunt in etwa haben?
Vielen Dank & Gruß
Chris
Achja:
Wie sollte ich den die Zero-Cross Schaltungswiderstände dimensionieren? Einerseits sollte die Spannung nicht zu klein sein, um das Rausch-Spannungsverhältnis klein zu halten, aber andererseits muss gewährleistet sein, dass keine zu hohe Spannung am µC anliegt (max. 2V).
nikolaus10
20.01.2014, 09:15
Hallo
Alternativ zum Servosignal vielleicht noch I2C implementieren ?
Haette einige Vorteile.
Gruesse
I2C hat er doch raus geführt, nennt sich bei Atmel TWI
Gibt es zum Layout noch einen Schaltplan?
Ansonsten schau ich mir das grad mal an, editiere den Beitrag dann noch mal.
Edit: (top = grün, bot = blau)
- Wenn du die FETs ohne Kühlkörper nutzen willst, sollte so viel Kupfer zur Kühlung genutzt werden, wie möglich. (Top und Bot würde noch einiges mehr gehen)
- Bist du dir Sicher mi den Pads unter den Mosfets? sehen für mich zu klein aus. (vergleich lieber nochmal hier mit: http://www.vishay.com/docs/95016/dpak252a.pdf)
- Auf der Top-side würde ich entweder die kleinen Verbringung zwischen den unteren Pins des FETs entfernen (clearens erhöhen) oder, was mMn. besser wäre den mittleren Pin raus schmeißen und die Fläche zur Kühlung nutzen
- Es befindet sich noch einiges an totem Kupfer in der Schaltung, das sollte man noch entfernen. Müsste es bei den Masseflächen eine Option für geben
- Den LM317 würde ich um 90° (im Uhrzeigersinn) drehen, die 2 Widerstände zur Spannungseinstellung dann rechts daneben und die Kondensatoren dann direkt an den Ausgang. Danach dann den ATMega anschliesen.
- Die Fläche der Versorgungsspannung würde ich unter dem Mikrocontroller weg lassen und hier eine zweite mit 3,3V einfügen. Das verhinder A) dass durch einen Kurzschluss 20V am ATmega anliegen und B) die 3,3V lassen sich besser verteilen.
E2:
Zum Shunt, den solltest du so klein wie möglich wählen, der verbrät ja nur Energie. Du solltest am Ende halt auf eine Vernünftige Spannung kommen, mit der dein ADC/Comperatur gut arbeiten kann. 1mOhm wäre zwar wenig, am Ende bleiben aber nur 20mV zum Messen übrig, bei einer int. Referenz von 1V wird dann nur ein fünfzigstel deines Messbereichs genutzt, entsprechend ungenau wären dann auch die Ergebnisse. Wenn ich von einer Referenzspannung von 1V und 20A Last ausgehe, würde ich maximal 50mOhm nehmen, lieber etwas kleiner, falls doch etwas mehr strom fließt (zB. 40mOhm).
Wenn du eine externe Referenz nutzt, kann der Widerstand entsprechend höher ausfallen, unter Verwendung des internen Verstärkers, wider rum kleiner, etc. (Hängt zu sehr von den Rahmenbedingungen ab und dir einen Wert zu nennen)
nikolaus10
20.01.2014, 14:10
I2C hat er doch raus geführt, nennt sich bei Atmel TWI
......
Ja, zum debuggen
Bei Quadrocopter wird das auch zur Ansteuerung genutzt.
Na, egal .......
Das muss man ja nicht für immer zum Debuggen nutzen ;)
Che Guevara
20.01.2014, 14:26
Hi,
den Schaltplan stelle ich in ein paar Minuten rein, muss den gerade noch zeichnen ;)
Zum TWI:
Es macht IMHO keinen Unterschied, ob ich es zum debuggen rausführe oder später nutzen will? Die Anschlüsse sind zwar etwas klein, aber ich denke, das wird nicht die einzige Verbesserung sein, es bleibt bei mir selten beim ersten Laoyut ;) Trotzdem wird es wohl wieder rausfliegen, da TWI / I2C einfach zu langsam ist.
Zum Schaltplan:
- Die Pads unter den Fets sind zu klein, allerdings läuft unter den Fets auch GND zum Source durch (auf der Top seite)
- Der mittlere Pin der Fets kommt raus, ist wirklich überflüssig
- Glaubst du, dass das tote Kupfer Störungen verursacht? Ich layoute mit Sprint Layout, da gibts nicht soviele Möglichkeiten, müsste das dann von Hand wegmachen (Sperrfläche)
- Wieso würdest du den LM317 drehen? Damit die Anschlüsse kürzer werden?
- Die Sache mit dem Kurzschluss unter dem µC verstehe ich nicht. Der µC sitzt auf Top, auf dieser Seite ist GND als Groundplane ausgelegt.
Zum Shunt mach ich mir gleich mal Gedanken, jetzt erstmal den Schaltplan fertig machen.
Vielen Dank & Gruß
Chris
EDIT:
Hier der Schaltplan:
27269
- Totes Kupfer wird als Kapazität und kann Störungen/Probleme verursachen und sollten deswegen vermieden werden. Wenn Sprintlayout (noch nie mit gearbeitet) das allerdings nicht automatisch kann , würde ich das erst ganz zum Schluss machen.
- den Lm317 würde ich drehen, damit die 3,3V einfacher von deinen 20V trennen kannst. Also in Verbindung mit dem nächsten Punkt.
- Ein Kurzschluss ist eigentlich nie gewollt und selbst wenn die 20V auf der Unterseite sind, du hast Verbindungen nach unten, an denen gelötet wird. Zwingend nötig ist es sicher nicht und es wird auch die Funktionsweise der Schaltung vermutlich nicht stören. Es macht aber in der Regel Sinn, in dem Bereich in dem du mit 3,3V Arbeitest auch entsprechend großflächig diese Spannung zu verteilen. die 20V brauchst du hier ja überhaupt nicht. letzteres ist definitiv der wichtigere Punkt.
Zum Schaltplan:
- Iiihh Papier :D
- beim IR2184 fehlen Kondensatoren!
1x min. 100nF für die Versorgung
1x XnF für die Boot-Strap (zwischen Vb und Vs) -> Berrechnung: http://www.silabs.com/support/Pages/bootstrap-calculator-faq.aspx (ich kam auf ca. 140nF -> wegen 20% Toleranz min. 170nF würde wohl 200nF nehmen)
- Beim Xmega fehlen die Cs im Schaltplan, sind aber glaub ich im Layout drin.
Mal eine Frage, wie willst du die Stromregelung machen? In Hardware mit dem Comperator oder Software über den ADC?
Che Guevara
20.01.2014, 15:41
Ok, das Kupfer entferne ich am Ende, wenn der Rest fertig ist. Der LM317 wird gedreht und unter dem µC mache ich eine 3V3 Fläche.
Ja, die C's fehlen noch, mach ich gleich.
Ja beim XMega fehlen sie nur im Schaltplan, hatte vergessen sie einzuzeichnen.
Was meinst du mit Stromregelung? Meinst du Überstrom-Regelung? Also den Shunt will ich per ADC messen.
Gruß
Chris
EDIT:
Hab jetzt die Cs eingefügt, den LM317 gedreht, eine 3V3 Fläche eingefügt und die Zero-Cross Schaltungsteile auf die linke Seite der Fets gezogen.
27270
27271
27272
EDIT 2:
Welche Dioden soll ich den verwenden? Reicht eine 1N4148 oder brauch ich da was "exotischeres"?
H,
hatte gestern leider keine Zeit mehr.
Die Diode sollte denk ich gehen.
Beim Layout würde ich immer noch größere Kühlflächen für die oberen Fets einplanen
Und bei der Strombegrenzung frag ich, weil hier der ADC uU. zu langsam sein könnte. Hier würde ich versuchen den internen Komperator mit DAC zu nutzen (bzw. als Option offen zu lassen)
Che Guevara
21.01.2014, 16:43
Hi,
die Kühlflächen der Fets sind jetzt so groß wie möglich, allerdings:
Ich hab die Unterseite (blau) falsch rum aufgebaut -.- --> Fets, LM317 & Treiber sind falsch rum...
Der ADC des XMega arbeitet mit biszu 2MSps, das sollte passen.
Gruß
Chris
Hallo,
im Schaltplan fehlt bei den Treibern der Bootstrapkondensator (zwischen Kathode der Diode und Halbbrückenausgang), im Layout habe ich das auf die Schnelle nicht erkennen können, ob der drin ist.
Warum schaltest du 6 Keramikkondensatoren am LM317 parallel? Sollen das die Abblockkondensatoren für die Treiber darstellen? Falls ja, dann gehören die direkt an die ICs.
Wie breit kannst du die Leiterbahnen machen? Für 20A sollten es schon 5-6mm sein. http://www.mikrocontroller.net/articles/Leiterbahnbreite
Grüße, Bernhard
Che Guevara
21.01.2014, 19:43
Hi,
der BootstrapC ist nur im Layout, hab den im Schaltplan vergessen. Die 6 C's am LM317 hab ich mal eingeplant, je nachdem wie dreckig die Spannung ist. Da es das erste Layout ist, wird sicherlich noch einiges neues kommen --> lieber mal etwas Puffer einplanen ;)
Direkt an den Treibern sind auch 100nF.
Die Leiterbahnen sind alle so dick als möglich, aber ich weiß, die sollten eig. teilweise noch breiter sein. Momentan nutze ich nur 10A Motoren, da sollte es auf jeden Fall reichen und beim nächsten Layout werden dann solche "Kinderkrankheiten" ausgemerzt.
Die Platine ist übrigens gerade fertig geworden, jetzt wird kontrolliert und bestückt, dann gehts an die Tests :D
Gruß
Chris
Die Platine ist übrigens gerade fertig geworden, jetzt wird kontrolliert und bestückt, dann gehts an die Tests :-)
Hätte nicht gedacht, dass das so schnell geht. Hut ab! ;)
Che Guevara
22.01.2014, 03:29
Hi,
danke für die Blumen!
Leider hab ich bei dünneren Leiterbahnen ein paar Unterätzungen (die Ätzflüssigkeit ist schon zu verbraucht --> langer Ätzvorgang), die Funktion ist aber trotzdem noch gewährleistet.
Bin gerade dabei, die Hardware zu konfigurieren. Da ich (noch) nicht weiß, welche Größe die induzierte Spannung der unbestromten Phase haben kann, hab ich den Zero-Cross Spannungsteiler evtl. etwas zu groß dimensioniert, aber das kann ich ja noch ändern.
Außerdem ist mir aufgefallen, dass ich, dank dem Fet-Treiber, den aktiven Freilauf nicht extra implementieren muss, der ist schon Hardwaremäßig vorhanden :D
Nur das Thema Drehzahlregelung ist mir noch etwas unklar:
Ich kenne die akt. Drehzahl, aber nicht die max. Drehzahl --> ich kann keinen Fehler berechnen --> IMHO keine Regelung möglich?!
Mit der Regelung will auf sowas raus: http://www.youtube.com/watch?v=to7aj6kRFJw
Gruß
Chris
Che Guevara
22.01.2014, 19:12
Hi,
nach etwas Testerei hab ich ein Problem festgestellt:
Egal welche Signale (PWM) ich an IN anlege, es gibt immer kurze Spikes an den Ausgängen (mit angeschlossenen Motoren). Außerdem bricht die Spannung am µC öfters mal ein, das liegt aber wohl daran, dass ich das Ganze am LNT betreibe (max. 3A).
Hat jemand eine Ahnung, an was das liegen könnte?
Gruß
Chris
EDIT:
Hab jetzt mal Pin 6 (Vs) und Pin 8 (Vb) gemessen, hier das Ergebnis:
Vs: 27303
Vb: 27304
Sieht IMHO nicht richtig aus. Kann es sein, dass die Diode ( 1N4148 ) falsch ist?
EDIT2:
Hab jetzt rausgefunden, dass wenn die Versorgungsspannung zwischen 9 und 10V liegt, läuft alles prima (auch die Bootstrap-Spannung stimmt) ... Über 10V sind starke Spikes auf der Versorgungsspannung, die dann u.a. den µC resetten lassen.
Könnte das Verhalten evtl. an Cs mit falschem Spannungsbereich liegen? Ich hatte zuwenig 100nf gekauft und hab zuhause noch welche gefunden, von denen ich aber den Spannungsbereich nicht kenne. Wenn diese jetzt nur 6.3V aushalten würden, könnte das das Verhalten erklären?
Che Guevara
23.01.2014, 13:01
Hi,
also der Controller läuft jetzt schonmal, allerdings gibts noch einige Baustellen:
- Der Anlauf funktioniert nur manchmal. Momentan gebe ich einfach ein festes Drehfeld vor und hoffe, dass es eingehalten wird. Nach einiger Zeit schalte ich dann auf Interrupt um. Allerdings hab ich wohl noch nicht die "optimale" Frequenz gefunden.
- Die Schaltung funktioniert wie gesagt nur zwischen 9 & 10V , werde aber gleich mal die Kondensatoren gegen andere mit mehr Spannungsfestigkeit austauschen, evtl. (hoffentlich) liegts ja daran.
- Das Einlesen der PWM ist noch nicht fertig programmiert, ist aber lediglich das Setzen einiger Register / deuten des Wertes.
- Strom & Spannungsmessung sind auch noch nicht drin, sind aber genauso schnell gemacht.
- Richtungsumkehr per Konfiguration.
- PWM-Timer auf Hi-Res umschalten, um mehr Auflösung zu bekommen (geplant sind ca. 2000 effektive Steps). Leider ist das DB des XMega an dieser Stelle nicht sehr lesefreundlich geschrieben, auch das Internet schweigt sich weitestgehend darüber aus ...
- Einige "Kleinigkeiten" wie Blockiererkennung , Überstromdrosselung , Datenausgabe per UART (/TWI) , Temperaturmessung , ...
Technische Daten:
- Pwm Frequenz 32kHz (sauberer Lauf & schöneres Geräusch bzw. kein Geräusch als bei 16kHz)
- Auflösung: ca. 800 Steps (geplant: ca. 2000)
- Spannung: zw. 10 & 20V
- Strom: max. 20A
- InputSignal: Pwm (geplant: 1kHz)
- Output: Uart (115200 Baud)
- 2 Leds zur Statusanzeige
- Strommessung --> Überstromerkennung & -drosselung
- Temperaturmessung --> Übertemperaturerkennung
- Spannungsmessung --> Unterspannungserkennung
Was mir aufgefallen ist:
- Anscheinend wird die Drehzahl auch ohne Software Regler geregelt, ich weiß aber nicht, warum das so ist. D.h. wenn ich den Motor versuche mit dem Finger abzubremsen, zieht er automatisch mehr Strom und versucht, die Drehzahl zu halten (im Rahmen der Stromversorgung).
- Die Drehzahl ändert sich in beide Richtungen (pos. & neg. Beschleunigung) sehr rasch.
- Mein TestMotor läuft fast perfekt, an einem Turnigy-Plush 10A läuft er erst garnicht an (hat einige Unwuchten / Schrammen).
- Die ganze Sache gestaltet sich leichter als gedacht. :D
ToDO:
Andere Motoren testen (insbesondere mit anderen kV Zahlen).
Oben erwähnte Dinge erledigen, anschließend mit Last an einem Lipo testen, Sicherheitsabstand einhalten und hoffen.
Wenn jemand Tipps / Fragen / Anregungen hat, immer her damit.
Gruß
Chris
Hallo,
das scheint bei dir ja alles wie am Schnürchen zu laufen ;)
Was mir noch eingefallen ist: Die IR2184-Treiber haben eine kleine Totzeit beim Umschalten, und zwar damit highside- und lowside-MOSFET nie gleichzeitig leitfähig sind (Vermeidung von "Querströmen").
Bei hohen PWM-Frequenzen kann das ins Gewicht fallen. Das Datenblatt gibt typ. 5µs deadtime an. Bei 32kHz, also einer Periodendauer von ~31µs sind 5µs etwa ein Sechstel. Der Treiber wird also auch nur bis zu einem bestimmten Tastverhältnis folgen.
Das Tastverhältnis der PWM darf aber sowieso nicht zu lange nahe 100% sein, da der Bootstrap-Kondensator regelmäßig über den lowside-MOSFET nachgeladen werden muss.
Grüße, Bernhard
Che Guevara
23.01.2014, 21:03
Hi,
heute Nachmittag hat noch alles funktioniert, doch dann kam das Problem der Spannungsversorgung: Funktioniert nur zwischen 9V & 10V (ca.).
Hab mal nachgemessen und festgestellt, dass die Bootstrap Spannung Schuld ist. Diese ist nur in diesem Bereich vorhanden..
Hab schon versch. Kondensatoren ausprobiert (100nf, 220nf, 200nf), doch das alles scheint nichts zu ändern.
Gibt es da irgendwas spezielles zu beachten? Könnte es sein, dass die Diode ( 1N4148 ) Schuld ist? Oder das LNT (max. 3A)?
Der µC wird übrigens auch andauernd resetet (wenn die Bootstrap nicht funktioniert) --> evtl. kurzzeitig zuviel Strom?
Der DeadTime bin ich mir bewusst, bringt mir aber momentan nichts. Trotzdem danke für den Tipp!
Gruß
Chris
Eine Realisierung gibt es z.B. hier:
http://www.elektor.de/Uploads/Cache/Forum/Posts/100202094334.H-Br-cke.resized.454x0.jpg
(Elektor Wheelie)
Dort wird eine 1N4936 verwendet. Der Bootstrapkondensator ist 4,7µF parallel zu 100nF.
Grüße, Bernhard
Che Guevara
23.01.2014, 22:46
Ich hab gerade mal zwei 220nF parallel geschaltet und es ist schon etwas besser --> dachte mir schon, dass er zu klein ist.
Kann ich da auch einen Elko verwenden? Sieht so aus (das macht vieles einfacher).
Werde mal die Teile morgen besorgen, dann wird sich zeigen obs funktioniert.
Hab heute übrigens mal die Kosten pro Regler grob überschlagen und festgestellt, dass die reinen Materialkosten nur unwesentlich höher liegen als bei gekauften Reglern.
Vielen Dank & Gruß
Chris
Che Guevara
24.01.2014, 18:50
Hi,
also ich hab jetzt den Fehler gefunden:
Die Gate Widerstände waren zu groß (hatte 39Ohm). Hab jetzt mal 19.5Ohm und die Bootstrap funktioniert, werde aber wohl noch auf ca. 5Ohm runter gehen.
Jetzt muss ich noch einen / zwei Fets tauschen, einen hats wohl erwischt.
Dann kommt mal das Anlaufproblem dran. Wie macht man den sowas? Ich geb einfach eine feste Frequenz auf den Motor, ist das so richtig?
Gruß
Chris
EDIT:
Also der Fet ist getauscht, der Motor läuft sauber an und auch der normale Betrieb sieht sehr gut aus!
Jetzt kommt die Drehzahlregelung:
Ich hab die Idee, wenn die gewünschte Drehzahl (PWM-In-Signal) nicht geändert wurde, kann ich während der ersten paar Kommutierungen die akt. Kommutierungsfrequenz messen und Tiefpassfiltern. Das ist dann die Soll-Drehzahl, anhand dieser könnte ich dann die Drehzahl regeln.
ALLERDINGS:
Wenn der Motor schon von Anfang an mit erhöhter / dynamischer Last betrieben wird, ist die Soll-Drehzahl versch. Motoren nicht gleich.
Das wäre aber vermutlich auch nicht so schlimm, ist ja bei gekauften (sprich: bei meinen akt. Treibern, z.b. Turnigy Plush) ja auch nicht anders und der Copter fliegt.
Was meint ihr?
Che Guevara
29.01.2014, 13:24
Hi,
also Spannungsmessung, Anlauf und Drehzahlregelung funktionieren jetzt (teilweise eingeschränkt).
Das Problem ist jetzt, dass wenn ich den Propeller montiere und den Motor auf min. ca. 3/4 der max. Drehzahl bringen will, sich der µC resettet. Als Spannungsquelle verwende ich einen Lipo, das ist also definitiv nicht das Problem. Auch alle Kabel sind auf die Spannung / Strom ausgelegt ---> der Fehler muss am Layout liegen. Kann es sein, dass die Idee, eine 3V3 Fläche zu machen, doch nicht so gut war? Ich werde jetzt erst mal eine Drossel einfügen und dann mal versuchen, den Fehler etwas einzugrenzen.
Gruß
Chris
EDIT:
Hab gerade mal versucht, den µC per LNT zu versorgen und den Rest per Lipo. Trotzdem resettet sich der µC wieder, muss also wohl an was anderem liegen... Evtl. sind die Widerstände der BEMF Schaltung falsch ausgelegt, sodass der µC kurzzeitig zuviel Spannung abbekommt. Muss ich gleich mal testen.
Che Guevara
29.01.2014, 22:54
Hi,
also ich hab gerade mal gemessen und herausgefunden:
Die Pegel an den Motoranschlüssen gehen nicht von 0V bis xV, sondern von ca. -1.5V bis xV. Woher kommt das den? Kann mir das momentan überhaupt nicht erklären...
Wäre toll, wenn jemand nen Tipp hat, an was das liegen könnte.
EDIT:
Sorry für den Schmarn, war nen Messfehler... Bin langsam schon etwas am verzweifeln, aber werde den Fehler schon noch raus bekommen!
Vielen Dank & Gruß
Chris
Che Guevara
16.07.2014, 12:30
Hi,
nachdem meine Regler nun schon seit einem halben Jahr gut laufen, möchte ich ein paar "Extras" hinzufügen.
Es soll ein Bootloader drauf, das Motortiming soll einstellbar sein, ebenso wie der Kommutierungsgrad. Außerdem soll eine Ring-Topologie integriert werden (USART), sodass der Hauptcontroller nur noch eine Anfrage senden muss und dann jeder Brushless-Controller seine Daten an den vorhandenen String anhängt.
Mein Hauptanliegen ist aber die Frage nach der Machbarkeit einer weiteren Bonusfunktion.
Ich würde gerne den aktiven Freilauf ausschaltbar machen. Da dieser aber eigentlich fest in der Hardware des Fet-Treibers (IR2184) integriert ist, fiel mir nur eine Lösung ein:
Den IN-Pin dauerhaft auf 1 setzen (normalerweise liegt hier die PWM an) und die Pwm stattdessen an den SD-Pin (lässt die fets floaten) anschließen. Allerdings bin ich mir nicht sicher, ob das bzgl. der Bootstrap Schaltung funktioniert?! Konnte diesbzgl. leider keine Infos im DB finden, evtl. hat jemand ja Erfahrungen oder Ideen?
Vielen Dank & Gruß
Chris
Crazy Harry
18.07.2014, 17:08
Hi Chris,
klasse :) .... wenn ich mal neugierig sein darf: in was proggst du und wie schnell taktet dein XMega ? Was für eine Motordrehzahl schaffst du damit ?
Gruss
Harry
Che Guevara
18.07.2014, 17:56
Hi,
programmiert wird in C (Atmel Studio), der XMega läuft mit 32MHz. Welche Drehzahl ich damit schaffe, hab ich noch nicht ausgerechnet, weil ich normalerweise (bzw. bis jetzt) nur 1100kV (14Pol) an 3S betrieben habe, da bin ich wohl noch weit vom Limit entfernt. Die Drehzahl ist wohl nur durch die ISR des AC begrenzt, ich denke mal, diese braucht etwa max. 500 Takte zur Abarbeitung (nur geschätzt).
Gruß
Chris
Ich würde gerne den aktiven Freilauf ausschaltbar machen.
Hey Hallo!
Ich habe auch einen Regler gebaut, welcher inzwischen richtig gut funktioniert. Ich habe allerdings einen anderen µC ( Atmega88 ) und andere Fet Treiber genutzt, die die Sache nicht unbedingt einfacher gemacht haben, aber in deinem Falle jetzt warsch besser geeignet wären. Ich nutze die IR2101, mit denen könntest du eben auch einen Kurzschluss produzieren, aber du hast die volle Kontrolle über die ganze Schaltung. Bei den IR2101 ist es zumindest so, das ich die Lowside durchschalten muss, um den Bootstrap zu laden, ich hatte am Anfang gehofft, es reicht den High-pin einfach an 0V anzulegen. Also eben ohne aktiven Freilauf. Aber das ging nicht. Somit müsstest du einen größeren Kondensator wählen, der eine 1/6 el. Umdrehung lang durchhält, deinen Fet durchzuschalten.
Also ich denke, es ist schwieriger ohne aktiven Freilauf, zumindest wenn du solche Fet-Treiber nutzt. Und ich muss ehrlich sagen, das ich den Sinn dahinter nicht ganz verstehe, warum du den aktiven Freilauf ausschaltbar machen möchtest, da es ja eigentlich keine besseren Dreheigenschaften des Motors mit sich bringt, sondern ja nur dafür da ist, die Fets zu schonen.
Den Rest, den du vor hast, finde ich eine klasse Sache, das ist sicher interessant umzusetzen und macht mir direkt wieder ein jucken in den Fingern, mal wieder an meinen Reglern weiter zu basteln.
Dennis
Che Guevara
18.07.2014, 21:48
Hi,
vielen Dank für deine ausführliche Antwort!
Ich habe nun schon von mehreren Seiten gehört (bzw. gelesen), dass der aktive Freilauf für Motoren, die in ihrem unteren Drezahlbereich betrieben werden, nicht so ideal sein soll, das wollte ich eben mal ausprobieren. Wenns nicht geht, ist das für mich auch kein Problem. Blöderweise hat der 2101 nicht das selbe Pinout (bzgl. der gleichen Pins), sonst hätte ich den einfach mal schnell testen können.
Auf jeden Fall werde ich mich hier die Tage mal melden, das neue Layout ist gerade aus der Ätzanlange gekommen, jetzt muss noch bestückt werden. Die SD Pins sind jetzt auch an PWM-fähigen Pins des µC, das ganze Layout ist kleiner und es gibt nun eine Hochstrom- und eine Kleinstrom-Seite, sodass die DuKos nichts mehr aushalten müssen.
Außerdem sind alle Pins nun etwas schöner rausgeführt (USART, TWI, PWM), sodass es auch einfacher ist, einige Platinen in eine große Verteilerplatine (Strom) zu integrieren (spart Verdrahtung, sieht besser aus, übersichtlicher).
Drückt mir die Daumen, dass ich keine gravierenden Layoutfehler gemacht habe (so wie bei meinem ganz ersten Versuch).
Gruß
Chris
Ah, ok, das habe ich bisher noch nicht gehört. Aber ich will auch einen Copter bauen, da braucht man keine niedrigen Drehzahlen, das ist ja eher für Autos oder Schiffe interessant. Aber wie dein IR darauf reagieren wird, kann ich dir auch nicht sagen, mein Englisch ist einfach zu schlecht, als das ich solche Details aus einem Datenblatt holen könnte. Es steht sicher drin, man muss es nur finden und das kann sich manchmal sehr schwer gestalten.
Dennis
Che Guevara
19.07.2014, 01:34
Hi,
mein Regler ist auch für einen Kopter gedacht, selbst da können mal niedrige Drehzahlen vorkommen, z.b. wenn man im starken Sinkflug ist oder wenn man einen Kamerakopter mal ohne Kamera / Zuladung fliegt.
Niedrige Drehzahlen per se sind auf Koptern übrigens auch gut, deswegen gibts auch viele Große / Starke Motoren mit wenig Drehzahl (< 700kV), dadurch lassen sich größere Props verwenden und der Flug wird insgesamt ruhiger.
Nun, gefunden hab ich nichts im DB, nur einige nicht ganz voll aussagekräftige Diagramme, aber ich werds morgen einfach mal probieren.
Gruß
Chris
Che Guevara
21.07.2014, 22:31
Hi,
also die neue Schaltung läuft jetzt, allerdings möchte ich den Spannungsbereich noch etwas erweitern (lief momentan nur an 3S). Dazu muss aber die BEMF-Schaltung anders dimensioniert werden, damit der AVR keine zu großen Spannungen abbekommt.
Hier die Schaltung: http://www.mikrocontroller.net/articles/Datei:BLDC_BEMF_schaltung.png
Der Spannungsteiler incl. TiefpassKondensator sind schnell verändert, ich werde einfach 1k, 6k8 und 220nF verwenden, aber ich weiß nicht, wie ich die Widerstände zur Mittelspannungserzeugung dimensionieren soll? Habt ihr eine Idee?
Vielen Dank & Gruß
Chris
Die sind ziemlich unkritisch. Hauptsache es sind drei gleiche. Nimm einfach 10k, die liegen ja meistens irgendwo rum.
Aber die anderen Widerstände musst du eig nicht großartig verändern. An der gemessenen Phase liegt etwa VCC/2 an. also 15,8V/2= 7,9V. Diese 7,9V teilst du ja mit einem Spannungsteiler nochmal. In deinem Link sind es zwei gleiche Widerstände, also wird die Spannung nochmal halbiert. Bist du bei 3,95V. Ich glaube noch zu wissen(grad keine Lust zum suchen :) ) dass du einen Atxmega nutzt. Also mit 3,3V Versorgungsspannung. Ich würde also die 4K7 auf der einen Seite lassen, auf der zu-messenden-Phase-Seite die 6K8 nehmen und die 100nF einfach lassen. So kritisch ist das jetzt nicht, mein Regler läuft ohne diese Kondis fast rund, nicht ganz sauber, aber er dreht. Und wenn du den Widerstand vor dem Kondi erhöhst, senkst du damit ja eh nur die Grenzfrequenz des Tiefpass. Da jetzt noch einen größeren Kondi zu nutzen könnte evtl Probleme bereiten, wenn der Nulldurchgang zu spät erkannt wird, weil erst der Kondi fertig geladen werden muss. ABer müsste man probieren.
Dennis
Che Guevara
22.07.2014, 19:50
Hi,
das Problem ist aber nicht die zu messende Phase, sondern die Phase, die momentan bestromt wird, Bsp:
Pwm = 90% (Vollgas), Vcc = 21V (5S voll) --> 90%*21V = 18.9V (natürlich nur grob überschlagen)
Ja, ich nutze einen XMega, der mit 3V3 läuft.
Die Platine ist jetzt übrigens fertig, alles funktioniert BIS auf eine komische Sache: Bei einem Zustand der Bestromungsphase (PhaseC = Pwm, PhaseB = GND, PhaseA = floating) haut der AC unzählige Interrupts raus (alle 30µs einen, also in phase mit der PWM, die mit 32kHz läuft), ich weiß aber nicht wieso. Mit dem Oszi sehen alle Phasen mehr oder weniger gleich aus, am Layout kanns eigentlich auch nicht liegen...
Werde später aber noch ein paar Bilder reinstellen, evtl. fällt jemanden (dir) was auf.
Gruß
Chris
Che Guevara
23.07.2014, 13:34
Hi,
also ich hab jetzt mal ein paar Bilder gemacht, sieht eigentlich ganz in Ordnung aus:
28712
Gelb ist die Mittelpunktspannung, Blau ist die Spannung an PhaseA (nach dem Spannungsteiler)
28713
Gelb ist der Trigger Impulse (AC ISR), Blau ist die Spannung an PhaseA (nach dem Spannungsteiler)
Leider habe ich nur ein 2 Kanal-Oszi, sodass ich nicht die drei Signale gleichzeitig darstellen kann, aber ich denke, man kanns so auch ganz gut erkennen.
Aber jetzt die Frage:
Warum haut der da immer Interrupts raus, obwohl sich die Spannungen nicht überkreuzen?
Vielen Dank & Gruß
Chris
Hallo!
das Problem ist aber nicht die zu messende Phase, sondern die Phase, die momentan bestromt wird
Da ist dir warsch ein Detail entgangen, was ich selbst aber auch ohne deutliche externe hilfe nicht gefunden hätte. Ich bin jetzt mit Xmega nicht so firm, aber ich denke, die Pin-Beschaltung wird sehr ähnlich dem einfachen Megas sein. Du hast schließlich noch eine interne Schutzdiode. Solange durch diese nicht mehr als 1mA fließt, ist alles i.O.
Rechnen wir also einfach mal mit 3,3V als Vcc. Wenn die interne Schutzschaltung genauso wie beim Atmega ist, sollte die Schutzdiode die Spannung am Pin auf 3,9V begrenzen(0,6 bis 0,8 V Spannungsfall über einer SI Diode). Vom Pin zur Masse hast du ja einen Widerstand in deiner BEMF Schaltung. Ich hätte diesen auf 4k7 gelassen. Bei 3,9V fließen über diesen Widerstand 0,83mA. Jetzt dürfen max. 1mA über die Diode fließen, also 1,83mA über den Widerstand zwischen Phase und Pin. 6k8 und ein Strom von 1,83mA macht einen Spannungsfall von 12,44V. Dieser Spannungsfall plus 3,9V sind wir bei 16,34V. Okay, sind wir leicht unter 16,8V eines vollgeladenen 4S, sollte aber trotzdem noch funktionieren. Bei mir ist die Spannung noch deutlich höher, da ich einen Atmega88 mit 5V Vcc betreibe, damit wird der Strom durch den Wid zwischen Pin und Masse höher, somit steigt der Strom durch den Wid zwischen Phase und Pin und somit steigt ja auch der Spannungsfall über dem Wid zwischen Phase und Pin.
Soll heißen, beim messen hast du dann deutlich mehr Spannung zur Verfügung, die der AC vergleichen kann. Bei dir sind es jetzt im 300mV Bereich, nach deinen Oszi Bildern. Das ist schon arg wenig. Da weist du nicht, wo vielleicht irgend ein Spike doch durch kommt, widerrum wundert es mich, das es überhaupt soviele Spikes gibt, wo du doch einen Tiefpass dazwischen hast. Wie nahe hast du die Kondis des Tiefpasses an den Eingangspins des Atxmegas? Ich habe meine direkt an die Pins gesetzt, um evtl. einstreuende Störungen auch noch zu vermeiden immerhin fließen ein paar mm weiter mehrere Ampere. Evtl kannst du auch noch einmal 100nF an deinen viertuellen Sternpunkt machen, nur zum probieren.
Dennis
Che Guevara
23.07.2014, 20:49
Hi,
jein, ich weiß, dass es Schutzdioden gibt, dachte aber, die seien eher für "Notfälle" und eben nicht für den normalen Dauerbetrieb. Da muss ich nochmal das DB studieren.
Momentan hab ich in der Schaltung noch (bzw. wieder) die 4k7 Variante, weils anfangs mit den veränderten Rs nicht funktioniert hat und ich dachte, es liegt daran.
Ja, es sind einige Spikes, ich hatte / habe auch die Vermutung, dass es wohl induktive Spikes von einer anderen Leiterbahn sind, alles andere kann ich mir nicht vorstellen (obwohl ich mir das auch nur schwer vorstellen kann...). Aufjedenfall werde ich das gleich mal ausprobieren mit ein paar zusätzlichen Kondensatoren nahe der Pins.
Was mich aber wundert, du hast geschrieben, in deiner Schaltung sind keine Tiefpässe verbaut und trotzdem funktionierts. Wie hast du den deinen Regler aufgebaut sprich: wie sind dein Logik- und Hochstromteil räumlich getrennt / aufgebaut?
Gruß
Chris
Ähm, nein, nicht ganz. Mein Regler hat natürlich auch einen tiefpass vorgesehen. Aber mein Motor wollte einfach nicht funktionieren. Und da habe ich viele durchprobiert. Unter anderem dachte ich, die Kondensatoren verzögern den Spannungsverlauf zu sehr. Deswegen habe ich ihn mal ohne Kondis laufen lassen. Es ging halbwegs, er drehte, irgendwie, aber auf jedenfall lief er nicht rund. Hatte ich aber in dem anderen Post auch schon geschrieben. Ich denke, das da genau solche Probleme, wie bei dir jetzt Fehler verursacht haben. Ich hatte das zu dem Zeitpunkt nicht näher untersucht, weil es eindeutig war, das mein Motor noch schlechter lief, also sowieso schon.
<OT> zur Info, bei mir war das Problem, die Kopplung zwischen AC Interrupt und Input Capture von Timer 1. Also es gibt da eine Option, die beiden Interrupts AC und ICP mit einander zu verbinden. Theoretisch eine prima Sache, nur scheints nicht richtig zu funktionieren, weil selbst Atmel in seinen App-Notes diese Funktion nicht nutzt. Ich habe ein ganzes halbes Jahr gebraucht, das rauszufinden, ich war kurz davor, es sein zu lassen. Bei niedrigen Drehzahlen lief er, sobald ich schneller drehen wollte, kam er aus dem Tritt.</ot>
Dennis
Che Guevara
24.07.2014, 00:17
Also langsam hab ich schon an mir selbst gezweifelt, selbst die zusätzlichen Kondensatoren brachten keine Besserung DOCH DANN:
Durch das neue Layout haben sich auch einige Pin-Belegungen (speziell die der Timer-Pwm) geändert, das hatte ich aber bei der ISR-Vector vergabe vergessen, sodass der Timer-Interrupt nie zugeschlagen hat. Die Störungen der Phase kamen nur durch die Zwangskommutierung, aber es machte mich eben stutzig, dass es nur bei einer Phase auftrat.
Wie dem auch sei - Danke für deine Hilfe, jetzt läuft alles, falls ich noch Fragen habe, melde ich mich nochmal!
Gruß
Chris
Schön, wenn es jetzt läuft, freut mich :-)
Dennis
Che Guevara
24.07.2014, 20:38
Hi,
leider hats mir vohin zwei der IR2104 zerschossen, weil die Bootstrap-Kondensatoren wohl zu gering dimensioniert waren. Bei den bisherigen 32kHz Pwm-Frequenz hats immer gut funktioniert, nur bin ich jetzt auf 16kHz runtergegangen --> weißer Rauch
Also hab ich die Kondensatoren mal auf 300% vergrößert, und schon funktionierts.
Dann hab ich aber zur Sicherheit mal im DB nachgekuckt, ob der Rest passt und das hat dann wieder Fragen aufgeworfen:
1. Passt meine 1N4148 als Bootstrap Diode?
2. Sind meine Gatewiderstände mit 4.7Ohm zu klein? Ich hab im DB nur eine Angabe gefunden, die evtl. dieses Thema behandelt, bin mir aber nicht sicher, ob sich das wirklich darauf bezieht. Da heißt es: "Output high short circuit pulsed current: min 130 , typ 210 mA" Was mich stutzig macht ist dieses "short circuit". Hab schon mehrere Schaltpläne mit 4.7Ohm gesehen, deswegen denke ich, es sollte passen (hat auch das letzte halbe Jahr ohne Ausfall funktioniert)
Vielen Dank & Gruß
Chris
Hallo!
Zur 1N4148:
Wenn du auf µC.net mit dieser Diode anfängst, geht das nörgeln los. Einen vernünftigen Grund, warum diese Diode nicht geht, konnte mir bisher keiner nennen, bisherige Argumente waren zu alt oder andere haben mit anderen Dioden gute ERfahrungen gemacht. Was für Argumente. Ich nutze auch diese Diode, weil sie einfach unschlagbar billig ist. Sie ist äußerst schnell und den Strom, der fließen müsste, kann sie auch vertragen. Also für mich persönlich spricht nix gegen diese Diode.
zu den Gatewiderständen:
Ich weiß grad gar nicht, ob überhaupt welche unbedingt nötig sind. Meine Info ist, dass diese Widerstände drin sind, um die Güte eines evtl. Schwingkreises zu senken. Also das Gate des Mosfets als Kapazität, die Leiterbahn dahin als Induktivität. Wenn du den ohmschen Widerstand erhöhst, sinkt die Schwingneigung erheblich. Natürlich ist es auch gut, wenn der Strom im Einschaltmoment etwas begrenzt wird. Ich nutze 10 Ohm, ich denke, mit 4,7 Ohm liegst du nicht falsch.
Welche Kapazität nutzt du denn bisher für deinen Bootstrap Kondi? Ich nutze bei mir 1µF als SMD. Ohne aktiven Freilauf hast du eben das Problem, das der Kondi ne ganze Weile nicht geladen wird. Zumindest ist das bei meinen IR2101 so. Dort muss ich die Lowside durchschalten, ansonsten läd der nicht. Ich denke, diese Kapazität sollte man nicht zu knapp wählen.
Dennis
Che Guevara
25.07.2014, 15:34
Hi,
ich hab den Widerstand vor allem deswegen drin, damit keine zu großen Strömen fließen, da ansonsten die Leiterbahnen des IR2104 sehr viel größer sein müssten (auch wenn die Ströme nur kurzzeitig fließen).
Anfangs hatte ich 470nF drinnen, nun bin ich eben auf 1.47µF raufgegangen, werde aber wohl noch ein paar "Reserven" einbauen. Der aktive Freilauf ist beim IR2104 übrigens Standart, also gibts in dieser Hinsicht keine Probleme.
Zum aktuellen Stand:
Das Motor-Timing (7,15,30°) lässt sich einstellen, genauso wie die Pwm-Frequenz. Was noch fehlt ist eine Drehrichtungsumkehr per Software, da ist mir noch kein eleganter Ansatz eingefallen...
Außerdem fehlt noch die Drehzahlregelung, bis jetzt hab ich das so gemacht, dass ich dem µC Informationen über den Motor gegeben hatte (kV & Polzahl). Das gefällt mir aber garnicht, es sollte automatisch für jeden Motor ohne jegliche Konfiguration funktionieren. Auch das aktive Bremsen fehlt noch, da weiß ich noch nicht genau, wie ich das mache. Evtl. "einfach" zwei Phasen auf GND (bzw. gleiches Potenzial) legen, aber da weiß ich nicht, wie lange und v.a. welche Pegel (also z.b. PhaseA auf 20% Pwm, PhaseB auf 50% Pwm).
Hast du dazu evtl. ein paar Infos?
Gruß
Chris
Der aktive Freilauf ist beim IR2104 übrigens Standart,
Ich dachte, den wolltest du ausschaltbar machen?
Was noch fehlt ist eine Drehrichtungsumkehr per Software, da ist mir noch kein eleganter Ansatz eingefallen...
Also du meinst, das du einen Motor in beide Richtungen drehen kannst, ohne zwischendurch neue Software aufzuspielen? Also ich würde das mit zwei Arrays erledigen, in denen eben die Port und Pin Adressen gespeichert sind. Je nachdem, welches Array du Stück für Stück lädst schaltet er eben andere Pins um. Wie gibst du deinem Regler bis jetzt die Information, was er machen soll? Oder dreht der Motor einfach los, sobald du Strom anlegst?
Das gefällt mir aber garnicht, es sollte automatisch für jeden Motor ohne jegliche Konfiguration funktionieren.
Also ich übergebe meinem Regler einfach einen PWM-Wert, den er einstellen soll, ohne Drehzahlvorgabe. Wenn du wirklich die Drehzahl fest vorgeben willst, brauchst du die Infos nach der Polpaarzahl, ohne wird das nix. Für deinen Regler gibts nur die el. Umdrehungen, die mechanischen bekommt er ja nicht mit. Dann brauchst du ja nur die Zeit zu messen, zwischen den Umschaltungen, dann weist du ja, dass er (1/6)/Polpaarzahl geschafft hat.
Auch das aktive Bremsen fehlt noch, da weiß ich noch nicht genau, wie ich das mache.
Also hast du einen PID mit im deinem Regler? Weil bei aktivem Freilauf ist die Rückspeisung der Energie ansich "kostenlos" mit dabei. Zumindest klappt das bei mir bestens.
Dennis
Che Guevara
25.07.2014, 20:18
Das mit dem aktiven Freilauf ausschaltbar machen, hab ich erstmal hinten angestellt, sollte ja nur eine Art Studie sein ;)
Ja, ich hab mir schon folgendes vorgestellt:
//declaration
int16_t PwmArray[2];
int16_t SdArray[2];
...
//left
PwmArray[0] = 1; SdArray[0] = 1;
PwmArray[1] = 0; SdArray[1] = 0;
//right
PwmArray[0] = 0; SdArray[0] = 0;
PwmArray[1] = 1; SdArray[1] = 1;
...
//StateMachine
PhaseAPwm = PwmIn * PwmArray[0];
PhaseBPwm = PwmIn * PwmArray[1];
PhaseASd = SdArray[0];
PhaseBSd = SdArray[1];
Mal sehen, obs funktioniert wie ich mir das vorstelle und ob ich nicht noch eine einfachere Variante finde, v.a. weil ich noch keine Idee für die AC-Einstellungen habe.
Momentan hab ich anfangs eine 2sec Wartezeit, anschließend gibt er Töne aus, dreht langsam hoch, gibt kurzzeitig 1/2 Vollgas und stoppt wieder.
Dass die Drehzahlregelung auch ohne diese Infos an jedem beliebigen Motor funktioniert, zeigen verschiedene Regler, u.a. Mikrokopter BL3.0 oder auch "normale" Modellbauregler (z.b. Graupner), welche einen sog. Govenor-Modus haben.
Aber leider kann ich mir eben auch nicht vorstellen, wie das funktionieren soll ...
Ich hab mir mal die Drehzahl (bzw. die Kommutierungszeitpunkte) ausgeben lassen, da geht wohl noch was (hoffe ich zumindest).
Gruß
Chris
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.