Dienstag, 20. Dezember 2016

Schaltverluste verringern

Bei meinem letzten Post kam ich rechnerisch auf ca. 45W Schaltverluste. Um diese Wärme abzuführen kommt man, um aktive Kühlung nicht herum. Jedoch stellt sich die die Frage, wie kann man diese Verluste verringern? Ganz klar mit einer geringeren Schaltfrequenz. Geht man von 24kHz auf 8kHz so bleiben nur 15W Schaltverluste übrig. Aber 8kHz sind nicht schön anzuhören und die Regelfrequenz ist auf höchstens 16kHz begrenzt. Was kann man also tun um die Verluste elektrotechnisch runter zu bekommen?

Und hier gehe ich auf dünnes Eis. Deshalb sind die nach folgenden Infos als meine derzeitige Meinung anzusehen. 

Also warum entstehen Schaltverluste? Der Strom bleibt durch die Wicklungsinduktivität weit gehend konstant und die über den FETs abfallende Spannung steigt an im Schaltmoment. Wenn in diesem Umschaltmoment ein anderes Bauteil den Strom übernimmt während die FETs Umschalten so reduziert das massiv die Schaltverluste. Weil diese proportional zu dem von den FETs geführten Strom sind.

Zur Erklärung gehe ich von einem einzigen Schaltvorgang aus. Es sei die Highside gerade aktiv und die Lowside soll einschalten.
Außerdem sei ein Kondensator mit einer hohen Impulsstromfestigkeit von der Phase zur Lowside respektive GND eingebaut.
Dieser Kondensator ist auf $U_{BAT}$ geladen. Durch die Phase fließt ein Strom von 82A in eine stark induktive Last.

Jetzt schaltet die Highside ab. Der Strom will auf Grund der Induktivität der Last konstant bleiben. Da der Widerstand zur $U_{BAT}$ durch das Abschalten der Highside steigt, muss der Kondensator zwischen der Phase und GND den Strom weiter tragen. Das kann der Kondensator solange wie er genügend Ladung hat. Aber so lange sind die FETs quasi Stromlos und können ohne Verluste umschalten.

Snubber

Bei Umrichtern mit hoher Leistung verwendet man gern sogenannte Snubberglieder. Der Kondensator zwischen Phase und GND von dem ich schrieb ist quasi so ein Snubber. Jedoch werden Snubber eigentlich dafür eingesetzt um die Spannungsspitze, welche entsteht wenn während der Totzeit der High- und Lowside kein FET leitend ist, abzufangen bzw. zu dämpfen. 

Bei den Spannungen bei denen ich hier arbeite habe ich jedoch keine allzu lange Totzeit. Allein schon deshalb weil ich die FETs sehr schnell umschalten kann, ohne das mein dV/dt an der Phase weit über 400V/µs steigt. was wiederum die EMV auf einem vernünftigen Maß hält. 

Eine Frage ist aber noch offen. Wie dimensioniere ich so einen Kondensator. Ich wähle hier einen Kerko mit hoher Spannungsfestigkeit und sehr geringem Innenwiderstand (Große Bauform bei wenig Kapazität).

$\cfrac{dU}{dt} = \cfrac{I}{C} = \cfrac{\approx 100V}{200ns} = 400V/µs $

$\cfrac{I}{\cfrac{dU}{dt}} = C = \cfrac{82A}{400V/µs} = 205nF$

Um den Strom durch die FETs mit einer flacheren Spannungskurve abzufangen brauche ich einen 200nF Kondensator an jeder Phase jeweils gegen GND für den Schaltvorgang High -> Low und von der Phase gegen $U_{BAT}$. 


In der Realität ist das alles natürlich nicht so einfach aber es ist eine schöne Vorstellung. 

Und deshalb hoffe ich jetzt, dass das funktioniert. :)

Berechnen der Schaltverluste einer dreiphasigen Brücke

Auch dieser Beitrag basiert wieder auf der App-Note "Calculating Motor Driver Power Dissipation" von TI. Bei allen verwendeten Daten beziehe ich mich ebenfalls wieder auf mein letztes Brücken-Design.

  • Betriebsparameter
    • $U_{BAT} = 4,2V \cdot 18 = 75,6V$
    • $I_{BAT} = 100A$ 
    • PWM Frequenz: 24kHz 
  • MosFETs
    • $R_{DS(ON)_{MAX}}  = 4,5m\Omega$
    • $Q_g = 58nC$
    • 8 x FETs parallel

Treiberleistung

Der Vollständigkeit halber will ich auch kurz auf den Leistung- bzw. Strombedarf des Treibers eingehen. Dabei beziehe ich mich auf das Wiki von mikrocontroller.net zu MosFet-Treibern. Dort wird die Treiberleistung wie folgt berechnet.

$P_{Drv} = f_{sw} \cdot Q_{g_{Gesamt}} \cdot U_{Drv}$

Die Spannung $U_{Drv}$ ist hier die Spannungsversorgung des Treibers und damit die Spannung auf die die Gates umgeladen werden. Das die Highside noch 0,7V über die Bootstrap-Diode einbüßt vernachlässige ich in den folgenden Rechnungen. 

Die Ladung $Q_{g_{Gesamt}}$ steht hier für die Total-Gate-Charge $Q_g$ aller mit der PWM Frequenz $f_{sw}$ geschalteten FETs. In meinem Fall also $48 \cdot 58nC = 2784nC$. 

$P_{Drv} = f_{sw} \cdot Q_{g_{Gesamt}} \cdot U_{Drv} = 24kHz \cdot 2784nC \cdot 12V = 0,8W$

Daraus lässt sich dann auch der Strombedarf für den Treiber mit $I_{Drv} = \cfrac{P_{Drv}}{U_{Drv}} = \cfrac{0,8W}{12V} = 67mA$ berechnen.

Schaltverluste

Wirklich zubuche schlagen aber die eigentlichen Schaltverluste während des Umschaltens zwischen Low- und Highside.

Dafür setzt man üblicherweise eine linear steigende/fallende Spannung bei konstantem Strom voraus. Die Fläche des Spannungsdreiecks bestimmt damit die eigentliche Schaltverlustleistung. TI gibt deshalb pro Phase folgende Gleichung an:

$P_{sw_{Ph}} = 0,5 \cdot U_{BAT} \cdot  I \cdot t_{rf} \cdot f_{sw}$

Bis auf die Anstiegs- bzw. Fallzeit der Spannung sind alle benötigten Werte bereits bekannt. Für eine halbwegs gute Näherung setze ich einfach mal an, das der LM5101A 3A in die Gates von 8 FETs schiebt. Um die Gateladung der FETs mit 3A auf 12V zu laden braucht er:

$t_{rf} = \cfrac{8 \cdot Q_g}{3A} = \cfrac{8 \cdot 58nC}{3A} = 154ns$

Ja dabei vernachlässige ich bewusst die Abflachung des Anstiegs je höher die Spannung steigt. Aber im Grunde muss der FET ja auch nur über seinen Threshold und das ist bei 63% von 12V auf jeden Fall so. Zur Sicherheit nehme ich $t_{rf} =200ns$ an.

$P_{sw} = 3 \cdot 0,5 \cdot U_{BAT} \cdot  I \cdot t_{rf} \cdot f_{sw} = 1,5 \cdot 75,6V \cdot 82A \cdot 200ns \cdot 24kHz = 44,6W$

Gesamtverluste der Brücke

Alles in allem komme ich so auf eine Verlustleistung $P_v = 11,4W + 0,8W + 44,6W = 56,8W$. Wenn die Brücke bei dieser Verlustleistung bei 30°C Umgebungstemperatur nicht die zulässige Sperrschichttemperatur der FETs von 150°C übersteigen soll dann muss der thermische Widerstand der Kühlung unter $\cfrac{150°C - 30°C}{56,8W} = 2\cfrac{K}{W}$ liegen. 

Da ist es goldwert 48 FETs zuhaben. Denn ein FET allein hat bereits einen thermischen Widerstand von der Sperrschicht zum Gehäuse von $\approx1\cfrac{K}{W}$. Dieser reduziert sich glücklicherweise bei 48 FETs die doppelseitig an einen Kühlkörper angebunden sind auf  $\approx1/96\cfrac{K}{W}$ sprich $\approx0,01\cfrac{K}{W}$. Nichts desto trotz sind Kühlkörper mit weniger als $2\cfrac{K}{W}$ nicht gerade klein geschweige den leicht.

Wie ich das gekühlt bekomme werden ich sehen wenn der elektrische Aufbau steht.

Soweit erstmal die mathematische Auslegung. 

Montag, 19. Dezember 2016

Die Tücken der Verlustleistung

Gleich vorweg der ganze Beitrag basiert auf der App-Note "Calculating Motor Driver Power Dissipation" von TI. Bei allen verwendeten Daten beziehe ich mich auf mein letztes Brücken-Design.


  • Betriebsparameter
    • $U_{BAT} = 4,2V \cdot 18 = 75,6V$
    • $I_{BAT} = 100A$ 
  • MosFETs
    • $R_{DS(ON)_{MAX}}  = 4,5m\Omega$
    • $Q_g = 58nC$
    • 8 x FETs parallel

Durchlassverluste


Die App-Note geht hier zwar von einem DC Motor aus, aber das lässt sich ja auf Drehstrom übertragen. Für DC setzt TI folgende Gleichung an:

$P = (R_{DS(ON)_{HS}} \cdot I^2) + (R_{DS(ON)_{LS}} \cdot I^2)$

Der Strom fließt also aus der Highside in die Lowside und passiert bei einer DC-Vollbrücke genau zweimal einen FET. Bei einer dreiphasigen Maschine fließt in allen 3 Phasen der Strom. Deshalb passiert der Strom eine Lowside und zwei Highsides oder umgekehrt. Da nie die Highside und die Lowside einer Phase gleichzeitig aktiv sind (sein sollen) und die Thermodynamik langsam ist sieht die Gleichung für dreiphasenige System so aus:

$P_v = 3 \cdot (R_{DS(ON)} \cdot I^2)$

Ich habe hier gleich die $R_{DS(ON)}$ zusammen gefasst, weil alle gleich sind.

Jetzt ist aber noch eine Frage offen für die Berechnung der Verlustleistung. Wie hoch ist $I$ eigentlich? Da setze ich einfach mal den Energieerhaltungssatz an. Die Energie die rein geht muss auch wieder raus. Wenn man jetzt noch annimmt, dass der Wirkungsgrad des Umrichters $\approx1$ ist. Gehen schlanke $ U_{BAT} \cdot I_{BAT} = P_{BAT} = 75,6V \cdot 100A = 7560W$ von der Batterie in den Umrichter. Und die müssen ja auch wieder raus, aber da wird es dann auch wieder knifflig.

Warum? Weil der Innenwiderstand der Motoren so niedrig ist wird die Länge des Spannungsvektors nahezu allein durch die Drehzahl der Maschine bestimmt. (EMK Spannung) Der Spannungsabfall über dem Wicklungsinnenwiderstand kann vernachlässigen. Das Problem ist also wie sieht die Betriebsdrehzahl des Antriebs aus. Für ein Traktionsantrieb, also Fahrrad, KFZ usw. ist die Leerlaufdrehzahl der Maschine kein normaler Betriebspunkt. Da wird sich die Drehzahl im Mittel auf 50% der Leerlaufdrehzahl der Maschine belaufen. Bei einem Propellerantrieb, hingegen ist eine Betrieb nahe der Leerlaufdrehzahl sehr wahrscheinlich.

Langer Rede kurzer Sinn: Niedrige Drehzahlen bedeuten mehr Strom und damit ist der Antrieb als auch der Umrichter in einem ungünstigeren Betriebspunkt. ABER: Das soll ja eine Abschätzung sein und deshalb nehmen wir einfach einen Betriebspunkt und zwar Leerlaufdrehzahl und volle Lotte Strom. Bei voller Leerlaufdrehzahl muss der Umrichter den längst möglichen Spannungsvektor fahren.

Stern oder Dreieck

Egal. Zumindest für den Umrichter. Für die Rechnung nicht. Und um diese möglichst "einfach" zu halten nehme ich Stern an. Weiterhin sage ich an dem Motor liegt ein gültiger Spannungsvektor von $[1; 0,5; 0]$ an. Phase A ist hierbei fest auf $U_{BAT}$, Phase B bekommt eine 50% PWM und Phase C liegt fest auf $GND$. In dem Fall sehen die Spulen A und C eine Spannung von $0,5 \dot U_{BAT}$. Bei geschickter Modulation (SVPWM) lassen sich ca. 15% mehr Spannungshub rausholen. Deshalb sieht jede Spule im Stern maximal $1,15 \cdot 0,5 \cdot U_{BAT}$. 

Für die Leistungsberechnung ist aber nicht der Spitzenwert, welchen wir jetzt berechnet haben , interessant sondern der RMS Wert. Somit ergibt sich eine wirksame Spannung von

$U_L = \cfrac{1,15 \cdot 0,5 \cdot 75,6V}{\sqrt(2)} = 30,74V$

pro Phase. Weil wir drei Phasen haben die mit $P = U \cdot I$ zusammen auf $7560W$ kommen sollen, muss noch etwas umgestellt werden und siehe da:

$I = \cfrac{ P_{BAT}}{3 \cdot U_L} = \cfrac{7560W}{3 \cdot 30,74V} = 82A$

Es fließt also ein Strom mit dem Effektivwert von $82A$ durch jede Phase und damit durch jeden aktiven $R_{DS(ON)}$


$P_v = 3 \cdot (R_{DS(ON)} \cdot I^2) = 3 \cdot (\cfrac{4,5m\Omega}{8} \cdot 82A^2 = 11,4W$

Und spätesten die $11,4W$ sollten jedem klar machen, dass dieses Brücken Design mit 65x85mm echt klein ist. Ich bin gespannt. 

Die Schaltverluste kommen Morgen im nächsten Post.

Samstag, 17. Dezember 2016

Leistungsbrücke: "Monster MK II"

Als die CPU feststand habe ich erst einmal überlegt, wie ich eine deutlich leistungsfähigere Brücke, als die des TDC bauen kann.

Die Schlüsselerkenntnis aus dem TDC ist für mich: Leiterbahnen haben einen NICHT zu vernachlässigenden Widerstand :).

Aber mehr als 70µm Kupferauflage ist für Einzelstücke quasi nicht zu bezahlen, bzw. will ich nicht allein für die unbestückte Platine 500€ ausgeben. Deshalb musste eine einfache Platine mit 4 Lagen a 70µm Kupfer reichen. Wirklich Strom bekommt man da aber nur mit mehr Fläche durch. Oder ....

Leiterquerschnitt erhöhen

Bei günstiger Leistungselektronik sieht man immer wieder aufgelötete massive Kupferdrähte, die den leitenden Querschnitt einer Leiterbahn erhöhen sollen. Aber dafür muss ich viele Kupferdrähte ziehen, zuschneiden und auflöten was ziemlich fummelig ist und dafür bringt es immer noch zu wenig Querschnitt. Da hilft nur richtig massives Material. Deshalb habe ich mir 6x3mm Flachkupfer Stäbe auf ebay bestellt. Die kann ich hochkant auf die Platine löten und komme so auf mehr als 18mm² Querschnitt (es kommt ja noch die Bahn darunter mit dazu). Nach VDE Norm kann ein 16mm² Leiter frei in der Luft verlegt 98A bei einer Umgebungstemperatur von 30° ab.

Ich bin gespannt wie sich die Temperatur bei meinem Aufbau verhlt. Aber da die Flachkupferstangen stehend verlötet sind bilden sie quasi "Kühlrippen" und ich erhoffe mir jetzt einfach mal, dass das etwas bringt 😉.

Die FETs

Da mache ich keine großen Experimente. Ich bleibe bei SO-8 ähnlichen Gehäusen nur braucht es bei dem Strom ein paar mehr. Meine Wahl fiel auf die TPW4R50ANH

Absolute Maximum Ratings

CharacteristicsSymbolRatingUnit
Drain currentID92A
Power DissipationPD142W
Drain-Source voltageVDSS100V
Gate-Source voltageVGSS+/-20V

Electrical Characteristics

CharacteristicsSymbolConditionValueUnit
Input capacitance (Typ.)Ciss-4000pF
Total gate charge (Typ.)Qg-58nC
Drain-Source on-resistance (Max)RDS(ON)|VGS|=10V0.0045Ω
Mit einer Spannungsfestigkeit bis 100V ist dann auch gleich der Spannungsbereich fix. Für 18 - 20S (72V) sollten diese FETs hobbytaublich Dimensioniert sein. 60V Batteriespannung sollten aber sicher problemlos möglich sein. 

Außerdem war für mich das DSOP-Gehäuse der FETs ein wichtiges Auswahlkriterium. Denn das Gehäuse führt den Source Kontakt an der Gehäuseoberseite flächig nach außen.
Toshiba nennt das dann "double sided cooling". Das Prinzip ist aber ähnlich wie bei den Directfets von Infineon/IR.
Nur kosten die 1/3 von dem was ein vergleichbarer Directfet kostet. 

Die Frage ist jetzt noch wie viele von den FETs schaltet man parallel. Antwort: Soviele wie möglich 😁

Leider gibt es Grenzen. Damit die FETs in den Genuss von doppelseitiger Kühlung kommen, müssen alle auf die selbe Platinenseite. Sonst würden sich die FETs gegenseitig erwärmen. Denn die Lötseite des DSOP-Gehäuses ist immer noch, die mit dem besten Wärmewiderstand. Wenn jetzt aber alle FETs auf eine Seite kommen, darf auf der Seite auch kein höheres Bauteil bestückt werden, wenn ich einen unbearbeiteten Kühlkörper verwenden will. Da ist dann 0402 angesagt. (Die FETs sind 0,8mm hoch, 0402 ist 0,5mm hoch)

Ausgehend vom TDC der mit 2 ungekühlten FETs ca. 20A dauerhaft fahren kann und ich auf 100A kommen will brauche ich schlanke 10 FETs in parallel...puhhh. Aber die Kühlung ist ja besser 😉
macht also 8 FETs. Außerdem klingt 48 auch besser als 60 FETs. Das macht dann lumpige 464nC Total Gate Charge insgesamt. Eigentlich kein schlechter Wert. 2 Dicke D²-PAK-7 FETs haben mehr.

Der Gate-Treiber

Eigentlich wollte ich meinen Feld, Wald und Wiesen Treiber den IR2186 nehmen, doch dann hatte ich kurzzeitig die Schnapsidee einen isolierten Gatetreiber zu verwenden. Da ich dafür 4 separate isolierte 12V DC/DC Wandler bräuchte fällt das gleich flach. Aber beim recherchieren nach isolierten Treibern ist mir ein Kennwert aufgefallen, der bei unisolierten Treiber quasi nicht erwähnt wird. Die Propagation Time, also die Zeit zwischen logischem Eingang auf High und dem High am Ausgang des Treibers. Und da ist der Steinzeit IR2186 auf dem Niveau eines normalen isolierten Treibers. Der braucht dafür 170ns!!! Folglich habe ich mich mal auf die Suche nach einem neuen Treiber begeben und ich bin bei TI fündig geworden. Der LM5101A hat einen Propagation Delay von nur 25ns und ist auch noch in fast allen anderen Werten besser. Einziger Haken ist er kann nur 100V ab. Was mich aber nicht stört, mehr können die FETs auch nicht. 

Die Strommessung

Wenn ich die Leitfähigkeit der Bahnen erhöhe dann muss ich mir auch die Strommessung als solches vornehmen. Aber meine aktuelle Lieblingstechnologie bietet auch hier Linderung. Der AMC1304M05 hat einen Eingangsspannungsbereich von +/-50mV bei einem SNR von 80dB typisch.

(20dB  entsprechen Faktor 10, da dB eine logarithmische Einheit ist bedeutet eine Addition von 20dB + 20dB = 40dB  = 10x10 = 100, bei 80dB SNR ergibt sich ein Signal zu Rauschabstand von 1 zu 10000, 20dB x 4 => 4 Nullen hinter der 1) 
Er löst also auf ca. 5µV effektiv auf 😎. Als Shunt passt da wunderbar der WSLP5931 von Vishay mit 0,3mR. Damit bin ich bei einer absoluten Messbereichsgrenze von 216A und einer linearen Messung von +/-166A. Außerdem kann der AMC1304M05 über die Bootstrap Spannung der High Side FETs versorgt werden, den er hat einen internen LDO. Leider merkt man dass auch am Gehäuse Wide Body SOIC-16. 

Das Board




Donnerstag, 15. Dezember 2016

STM32F767 oder STM32H743 mit Delta Sigma Demodulatoren

Nach dem mich ein stiller Mitleser daran erinnert hat, dass den Blog vllt. doch jemand ließt schreibe ich wieder. Zumal ich meine Gedanken mal wieder nieder Schreiben muss, sonst drehe ich gedanklich noch 5 Runden nur im vor den selben Entscheidungen zustehen.

In meinem letzten Post habe ich zwischen den XMC4xxx von Infineon und dem ADSP-CM4xx von Analog geschwankt. Der XMC war mir zu langsam allein von den Daten her. Der ADSP-CM4xx ist schlecht erhältlich  und es existiert quasi kein GCC portierter Code für den Prozessor. Alle Libs von Analog sind für IAR. Drum habe ich mich sehr über die STM32F76x Prozessoren mit Delta Sigma Demodulatoren gefreut. Dabei habe ich die Ankündigung für den STM32H743 gesehen, den es auch noch in LQFP100 gibt.

Da der STM32H743 und die STM32F76x pinkompatibel sein sollen habe ich mich auf den STM32F767 in LQFP festgelegt. Mit der Option später auf einen STM32H7 upgraden zu können. Außerdem bietet der STM32H743 noch eine HRPWM, die vllt. noch eine Möglichkeit ist um die Systemgenauigkeit weiter zu erhöhen.

Dienstag, 28. Juni 2016

Die Controllerauswahl

Vorwort

Wie so oft bin ich der Zeit am grübeln, was man noch anders und besser machen kann bei den Motorreglern. Der größte Punkt ist hier bei für mich eine maximal saubere Strommessung. Bisher bin ich mit den ACS Sensoren von Allegro wie auch der Lowside Shuntmessung nicht zufrieden.

Bei der Lowside-Messung stört es mich, dass ich nur einen Messwert pro PWM-Periode zur Verfügung habe und darauf angewiesen bin, dass zum Zeitpunkt der Messung der OP auch auf die korrekte Ausgangsspannung eingeschwungen ist. (Stichwort: settling time / slew rate)

Bei den ACS Sensoren kann ich zwar mehrere Messwerte pro Periode aufnehmen, aber diese Sensoren haben gerade bei Strömen um 0A herum das Problem einer Hysterese. Der Sensor kann quasi keine 0A ausgeben sondern er gibt entweder -0,1A oder +0,1A aus. Bei einem Nulldurchgang des Stromes von negativ nach positiv bleibt der Sensor erst auf -0.1A kleben und springt auf 0.1A wenn der Strom auf 0,1A gestiegen ist. Im Mittel geht sich das meißt aus für langsame Signale. Jedoch hört man die Verformung des Stroms bei höheren Drehzahlen.

Da ich die Motorregler ohne kommerziellen Hintergrund baue und beim Hobby immer gilt: Wie kann ich mit möglichst viel Aufwand Zeit und Geld verbrennen, will ich mich mit diesen Lösungen nicht zufrieden geben auch wenn sie gut funktionieren.

Lange Rede kurzer Sinn: Die STM32 sind mir zu General Purpose. Ich suche einen Motor Control spezifischeren µC mit Cortex M Kern und Floating Point Unit um das portieren und die Einarbeitung möglichst einfach zu halten.

2 Interessante Kandidaten sind hier für mich der ADSP-CM403 von Analog Devices und der XMC4700 von Infineon.


ADSP-CM403

  • ARM Cortex M4 Core with Floating Point Unit to support advanced programming models and complex algorithms with speed grades of 100 to 240 MHz.
  • Dual 16 bit SAR ADCs with no missing codes, 13+ ENOB, 380ns conversion speed for high precision closed loop control.
  • 128 to 384KB SRAM and 256KB to 2MB flash memory options for a wide range of program and data memory requirements.
  • Advanced PWM and timer functions for improved PV inverter and motor drive performance.
  • Two CAN interfaces, three UARTS, two SPIs, two SPORTs, eight 32-bit timers, two two-wire interfaces and four quadrature encoder interfaces.
  • SINC filters for glueless connection to AD74xx isolated converters.
  • Harmonic Analysis Engine for compliant grid connection.
  • 14x14 120 lead LQFP package with 40 GPIO pins, 24 ADC input pins and 2 DAC output pins optimized for PV inverter applications.
  • Up to 105C ambient operating temperature for support of industrial applications.

XMC4700

  • ARM ® Cortex ®-M4 @ 144MHz
  • 1536kB Flash, 276kB RAM
  • Data and IP Protection on Flash
  • 6 x CAN nodes
  • EthernetMAC, USB-OTG, SD/MMC
  • 6 channel USIC (configurable to SPI, UART, IIC, IIS)
  • External Bus Unit
  • 4 x 12-bit ADC, 18 input channels, 4 x parallel sampling and conversion
  • 2 channel 12bit DAC
  • 4 channel ∆Σ Demodulator
  • 24 x 16-bit special purpose timers, dead time generation
  • 2 x Position Interface
  • Watch Dog Timer, Real Time Clock
  • XMC4000 Functional Safety Package
  • LQFP100
  • -40 - 85°C
Der ADSP ist ein ziemliches Monster mit 240MHz und 16Bit ADCs die eine effektive Auflösung von mehr als 13Bit liefern. Der Infineon stellt quasi den vernüftigen Mittelweg dar, aber der ADC ist nicht wirklich besser als der des STM32. Nur die Timer sind vielfältger.

Wenn man einmal genau überlegt was Analog mit dem ADSP für einen Proze baut bin ich tief beeindruckt. Auch wenn die Dinger doppelt so teuer sind. Der STM32 kommt auf eine ENOB von 10,8Bit bei einem 12Bit ADC ist das meiner Meinung nach schon sehr hingelogen. Aber Analog gibt mehr als 13Bit ENOB für den SAR ADC des ADSP an. Das bedeutet eine um mindestens 4mal (fast 8mal) höhere Auflösung als der STM32 liefern kann.

Ich hatte ursprünglich gedacht ich nehme für den Pitchregler des Constant Speed Prop einen XMC1100 aber irgendwie nervt es, sich für so ein im Vergleich kleines Projekt in einen anderen Prozessortyp einzuarbeiten. Ich hatte eigentlich gehofft das DAVE von Infineon mit seinen konfigurierbaren Peripherieblöcken mir die Arbeit bei der Konfiguration der Timer usw. abnimmt. Aber diese Blöcke sind quasi nicht zu gebrauchen. Ein LED Blinky ist damit zu machen, vllt. auch eine LED dimmen und das war es dann auch schon. Für so eine elementare Funktion wie ein Capture für PPM-Eingänge gibt es nicht. Das ist echt schade. Sonst wäre DAVE eine echte Alternative um schnell die Peripheriekonfiguration zusammen zu kloppen und sich dann um die Applikation zu kümmern.

Deshalb gehe ich wieder auf dem STM32F3 für den Pitchregler und die nächste Ausbaustufe für den ThunderDrive wird dann mit dem ADSP-CM4xx implementiert. Leider bietet Analog nur Beispiele und Code-Unterstützung für IAR an. Ich müsste also für eine freie IDE den Startup Code und das Linkerstript für den Prozessor erstellen. Das sollte aber kein allzu großes Hindernis sein. Vor der Konfiguration des Caches des Prozessors habe ich mehr Respekt. Was solls das ist ja schließlich Hobby. Wenn ich so eine voll Inbetriebnahme mit neuer Toolchain in Angriff nehme ist es denke ich auch gleich sinnvoll nicht auf den betagten GCC zu setzen sonder auf cLang zu gehen. Aber da muss ich mich erstmal weiter belesen, wie die cLang Integration mit Eclipse und dem GDB funktioniert.


Mittwoch, 15. Juni 2016

Automatische Schub und Drehzahlregelung bei einem Constant Speed Prop

Im RC-Network wird aktuell ein Thread über den Bau eines Constant Speed Propeller, diskutiert.

Weil das Thema eine interessante Anwendung für einen Umrichter wie den ThunderDrive ist, hatte ich vorgeschlagen die Automatisierung des Props zu übernehmen. Darauf hin kam Jüge, der Threadstarter, auf mich mit ein paar Anforderungen zu.

Im wesentlichen geht es um folgende Betriebsmodi:

  • Normal / CUT: Keine Regelung. Motor über Knüppel und Pitch/Verstellung über Slider.
  • Idle 2 / FLIGHT IDLE: Hier ist das gleiche, nur dass die Drehzahl bei 12000rpm liegt.
  • Idle 1 / GROUND IDLE: Regelung mit Begrenzung bei z.B. 4000rpm. Solange nicht genügend Gas gegeben wird, bleibt der Pitch auf Minimum, um das Moment so klein wie möglich zu halten, damit der Prop auf die gesetzte Drehzahl beschleunigen kann. Hat der Propeller 4000rpm erreicht und es wird mehr Gas gegeben, so erhöht der Regelkreis den Pitch, um das Moment zu überhöhen.

Zu erst dachte ich, das wirt simpel. Drehzahl messen und regeln mit dem Pitch als Stellgröße. Ein simpler PI-Regler würde das schon tun. Aber so einfach wie es auf den 1. Blick wirkt ist das Thema aber gar nicht. Was ich nicht bedacht hatte, war das unterschiedliche Verhalten der Antriebe. Ein Verbrennungsantrieb (Egal ob Zerknalltreibling oder Turbine) ist leistungsgesteuert, Mehr Gas ergibt mehr Leistung, aber bei konstantem Gas bricht bei Belastung die Drehzahl ein. Das ergibt sich aus der Gleichung für die mechanische Leistung.

Leistung = Drehmoment * Drehzahl

Ersetzt man den Verbrennungsantrieb durch einen BLDC-Motor mit einem Standard BLDC-Regler, hat man keinen leistungsgesteuerten Antrieb mehr sondern einen drehzahlgesteuerten Antrieb. Das ergibt sich einfach gesagt aus der Drehzahlkonstante Kv die üblicherweise in rpm/V angegeben wird und der Arbeitsweise der BLDC-Regler. Denn diese "Regler" stellen abhängig von ihrem Sollwert (0% - 100%) eine Spannung von 0 - Akkuspannung ein. Im Leerlauf entspricht die Drehzahl des Motors

Drehzahl = Sollwert * Kv * Akkuspannung

Jetzt mag man geneigt sein zu sagen, dass die Drehzahl unter Belastung auf bei E-Motor absinkt und das stimmt auch aber nur um einen sehr geringen Teil:

Drehzahl = Sollwert * Kv * Akkuspannung - Rs * Wicklungsstrom

Rs ist der Innenwiderstand der Wicklung (Der wird sogar bei Modellbaumotoren oft angegeben). Der Strom durch die Wicklung welcher sich durch die Belastung des Motors ergibt sorgt somit für einen Spannungsabfall in der Wicklung. Das hat zur Folge das die Spannung die der Motor in Drehzahl umsetzen kann sinkt und folglich auch die Drehzahl an der Welle. ABER der Rs ist so gering, dass man diese Spannung auch vernachlässigen kann. Übliche Werte für Rs liegen je nach Leistungsklasse des Motors bei 100mOhm bis runter zu 10mOhm. Die Drehzahl sinkt so unter Volllast nur um gut 10% ab.

Selbst wenn man den Innenwiderstand der Motor- und Akkuzuleitungen sowie den Innenwiderstand des Akkus selbst mit einbezieht kommen nicht mehr als 20% Drehzahleinbruch zusammen.

Long story short: Wenn der Gasknüppel so steht das der Prop an die eingestellte Drehzahl des Pitchreglers kommt, dann würden 2 Rasten mehr am Knüppel dazuführen das der Motor überlastet wird weil der Pitchregler versucht die Drehzahl mit mehr Pitch zu halten und der Motor der höheren Spannung des Reglers folgt. Die einzige Variable Größe ist hier der Strom und der steigt soweit an des entweder der Motor oder der Regler stirbt.

Deshalb braucht der Pitchregler nicht nur die Drehzahl sondern auch den Strom des Motors um die Motorleistung zu messen. Damit kann dann auf den Gasknüppel eine Antriebsleistung von 0%-100% gelegt werden.

So glaube ich ließe sich zum einen ein Scale-Verhalten des gesamten Antriebs erreichen und eine maximale Feinfühligkeit für den Schub am Knüppel. Außerdem kann der Pitchregler so immer sicherstellen, dass Motor und Regler nicht überlastet werden.

Und all das will ich fürs erste in ein XMC2Go packen.

Sonntag, 22. Mai 2016

Erster Test mit Propeller

Ich habe jetzt mal ein Video gemacht wie sich der TDC an ein einem GTX3546 mit einem Kv von 650rpm/V verhält. Leider hatte ich nur eine 10x8" Latte da, aber für einen ersten Eindruck reichts.


Freitag, 20. Mai 2016

Löppt.

Nach dem ich lange nichts geschrieben habe gibt es jetzt mal wieder bewegte Antriebe in bewegten Bildern zusehen. Der kleine TDC läuft und das sehr Problemlos.



Ich war aber in der Zwischenzeit nicht untätig, ich hab mal wieder einen Großteil der Software umgebaut um die Regelung zu vereinfachen. Dabei raus gekommen ist ein Konzept in dem nur noch die Drehmomentregelung und der Beobachter mit 24kHz laufen. Alle anderen Regelungen und Auswertungen laufen nur mit 1kHz. Für die Drehzahlregelung welche ich z.B. neu eingebaut habe ist das vollkommen ausreichend. Damit ich aber keine Probleme mit einer Unterabtastung bekomme musste ich die 24kHz Momentanwerte mit einem Tiefpass filtern. Da ich aber nicht für alle Werte wie Spannungen, Ströme, Drehzahl und Lastmoment IIR-Filter in der 24kHz schneller Regelung berechnen wollte wurde für jeden einzelnen Momentanwert ein Puffer eingeführt. Jetzt werden die letzten 50 Werte in einem Ringpuffer gespeichert und ich kann in der langsamen 1kHz Regelung
FIR-Filter berechnen. Das reduziert den Rechenaufwand auf ein 24tel (Wenn IIR und FIR eine ähnliche Ordnung haben).

Außerdem können so Unabhängig von der Regelung Algorithmen zur Offline Parameter-Identifikation benutzt werden. In der Hoffnung die Motorparameter während des Betriebs immer genauer bestimmen zu können. Die Regelung wird davon nicht direkt beeinflusst und ggf. instabil,
sondern wenn alle Parameter auf einander abgestimmt sind können sie gleichzeitig definiert übernommen werden.

Montag, 11. April 2016

Inbetriebnahme vollständig

Es ist geschafft die Inbetriebnahme ist komplett. Alle Messungen laufen sauber und die Phasenzuordnung der Strommessungen zu den PWM-Kanälen sowie zu den Anschlüssen passt.

Es gibt aber noch ein paar Punkte die ich in einer nächsten Hardware-Version ändern würde.

  • Footprint der Shunts, die Trennung von Messanschluss und Leistung ist parallel zum Shunt besser zu löten. Aktuell musste ich Silberdrahtstücke neben die Shunts löten.
  • Die Pads für die Batterieanschlusskabel müssen nach außen auf der Platine, aktuell stören die Kabel über der Platine.
  • Die HOTT-Pads müssen auch auf die Stirnseite neben den PPM Eingang, an der Seite sind die Pads ungünstig.
  • Die Kerkos an der Brücke bei den Shunts müssen gleichmäßig gleichmäßig verteilt werden, damit die Elkos flach über die Shunts passen. Die Elkos über den STM zu legen geht aber auch sehr gut, ist vllt. auch etwas kühler also über den Shunts.
  • AVDD mit Ferrit an 5V anschließen. 
  • Befestigung der Goldkontakte für den Motor durch feste PADs mit Kantenmetallisierung(teuer) am Rand der Platine ersetzen. Die aktuelle Variante ist nicht so schön. 
  • Vllt. BEC Stepdown durch einen Integrierten im TO-PMOD-Gehäuse ersetzen. Sowas wie den LMZ14203.
  • Größere Gehäuse für die diversen Kerkos vorsehen die höheren Spannungen ausgesetzt sind.
  • den JTAG/SWD Anschluss etwas weiter nach links verschieben, das der Stecker fürs Flachbandkabel sauber passt.
Die ersten Prototypen mit allen Anschlüssen (oben: 3,5mm Goldis, unten 4mm Goldies)
Aber alles in allem können diese Prototypen jetzt gequält werden. Der untere Umrichter kommt an den Motorteststand mit einem Dymond HQ6060 als Antriebsmaschine und einem Turnigy 6374
mit 192 Kv als Lastmaschine. Und dann muss diese Variante zeigen das sie die gleichen Tests kann wie der große Umrichter. Und ich bin sehr gespannt auf das Wärmeverhalten der Kleinen.

Das Ziel ist es dann beide Prototypen an je einer Maschine zu betreiben und die Energie im Kreis
zu fahren. Damit sollte mein 30V 15A Labornetzteil erstmal reichen um beide Regler ordentlich zu belasten.

Donnerstag, 7. April 2016

Der DRV8305 arbeitet

Ein kleiner Zwischenbericht von der Inbetriebnahme. Der DRV8305N gibt die PWM auf allen 3 Phasen sauber an die Fets aus. Die Konfiguration über SPI läuft reibungslos und wenn man sich bei den Registerwerten nicht verrechnet :) arbeitet der DRV auch wie er soll.

Was auffällt ist der recht hohe Stromverbrauch für den DRV wenn die EN_GATE gesetzt ist. In Ruhe nimmt die Platine an 12V ca. 50mA auf. Mit aktiven GATES sind es 150mA! Mein 1. Umrichter mit 12 TO220 Fets und IRS2186 Treiber hat 100mA aufgenommen. Meine erste Vermutung war eine zu geringe Totzeit zwischen Abschalten eines FETs und den Einschalten des anderen FETs. Aber egal ob ich 1780ns oder 55ns in DRV einstelle, der Stromverbrauch bleibt gleich. Aber das werde ich zu einem späteren Zeitpunkt weiter untersuchen, wenn es darum geht die maximale Antriebsleistung aus dem Umrichter heraus zu holen.

Ein Fehler scheint aber auf dem Board zu sein. Denn ohne einen 10R Widerstand von den 5V zur AVDD des DRV meldet dieser AVDD Unterspannung. Da ich diesem Problem bereits auf 2 Platinen hatte gehe ich davon aus, dass der DRV8305N, ganz wichtig das N, nicht nur am VREG-Pin versorgt werden muss sondern auch am AVDD-Pin. Im Datenblatt ist davon aber nichts zu finden. Meine Vermutung ist das TI den LDO für VREG auch für AVDD verwendet und die "N"-Version hat diesen LDO nicht.

Als Nächstes will ich die ADCs des STM in Betrieb nehmen. Dafür muss ich aber erst wieder den ADC-Treiber von ChibiOS/RT so anpassen das dieser Injected Conversions unterstützt. Denn alle 3 ADCs gleichzeitig mit mehreren Wandlungen hintereinander zu betreiben führte in der Vergangenheit immer zu ADC-Overruns, weil der DMA die Daten nicht weg bekam. Und für die 6 ADC-Kanäle den Tripple Mode der ADCs zu implementieren erscheint mir zu aufwändig.

Sonntag, 20. März 2016

Von Hand bestücktes Einzelstück

Der erste Prototyp komplett bestückt von oben

Der erste Prototyp von unten
Mit den Fotos zeigt sich auch der mechanische Aufbau besser als mit einem Layout. Jedoch sieht man so auch das einiges noch nicht 100%ig passt. Die 3,5mm Bullets passen leider nicht so weit in die Aussparungen rein wie gedacht. Da muss ich ggf. noch über eine metalisierung der Kanten nachdenken und eine breitere Aussparung. Oder ich lasse die Aussparungen weg und spare die Platinenfläche. Die Bullets werden dann einfach mit 3mm Kupferdraht an die Platine gesetzt.

Ein weiterer Punkt der mich aktuell stört ist die Plazierung der BAT+ und BAT- Pads. Diese kommen in einer nächsten Version an den Rand. So werden die Kabel nicht mittig über die Bauteile geführt. Ggf. ist hier eine metallisierte Außenkante als PAD/Kartenrandkontakt auch gut. Die Frage ist nur wie teuer so eine Platine wird.

Die erst Schaltungsteile wie der BEC-Stepdown laufen schon mal, als nächstes werde ich den Prozessor in Betrieb nehmen und sehen ob der DRV auf SPI-Anfragen antwortet.

Mittwoch, 16. März 2016

Die Platinen von WEDirekt sind da!

Die Bilder sprechen für sich, ein schweizer Käse hat weniger Löcher:
Oberseite der Platine

Unterseite der Platine
Dafür das die Platinen aus Deutschland bei 4-lagiger 70µm Kupferauflage ähnlich viel Kosten wie vergleichbare China-Platinen ist die Qualität optisch um Welten besser. Der Bestückungsdruck ist astrein, kein Versatz oder ähnliches. Die Vias sitzen alle zu 100%. Einzig der Lötstopplack ist sehr dünn und deshalb sind Pads der TQFPs die nur von einer Bahn kontaktiert werden schmaler als Pads die auf der Massefläche liegen. Das ist aber nur ein minimaler optischer Mangel der bei weniger Kupferauflage wahrscheinlich gar nicht auffällt.

In diesem Sinne, bestücken und in Betrieb nehmen. Hoffentlich sind keine Fehler drin. Einen winzigen Layoutfehler habe ich schon gefunden :(, ist aber nicht weiter wild. Das Via unter dem U4 (LMR14030) sollte 2mm haben. Der Durchmesser ging aber anscheinend beim Layouten an unterschiedlichen Rechner unter. Aber das ist kein Beinbruch. Es macht nur das Löten des PowerPADs des ICs mit dem Lötkolben schwieriger. 

Sonntag, 6. März 2016

TDCombat Revision 2 ist Fertig und bestellt.

Seit dem letzten Post habe ich die Plazierung der Pads für den Empfängereingang und BEC-Ausgang überarbeitet. Das war nötig weil der Strompfad zum 5V Pad in der letzten Variante auf einer Innenlage verlief und das Ground-Pad war noch schlechter angebunden. Das wäre bei 3A Dauerstrom wahrscheinlich auf gebrannt oder zumindest sehr heiß geworden. Jetzt ist der Ausgang direkt an den 5V Ausgang des Schaltreglers gewandert. Die Groundanbindung ist wesentlich besser und mehr lagig. Und der Rückstrompfad des Ausgangskondensators des Schaltreglers ist jetzt um Welten besser als in der letzten Variante. Wie in dem Bild zusehen, von dem Pad 2 des 1206 Kerkos in der Mitte eine breite Massefläche nach oben zum eigentlichen Schaltregler. Dieser niederimpedante Strompfad sollte dazu beitragen, dass der Stepdown sauber und mit wenig Rauschen arbeitet. Für nähere Infos zu dem 
Thema Strompfade bei Schaltregler Layout verweise ich gern an die Seite von Lothar Miller.




Außerdem habe ich die Anordnung der 100nF Kerkos für die Versorgung des STM32 geändert. In der alten Variante waren auf der rechten Seite oben und unten keine Kerkos. Damit aber jedes Paar der Versorgungsspannung eine niederimpedante Entkopplung hat habe ich noch mal einige Bauteile umplaziert, damit die Kerkos möglichst dicht an die Pins des STM32 sitzen. Gerade im Analogbereich oben rechts habe ich viel umordnen müssen um den Kondensator dort unterzubringen. 

KiCAD und Via-Stitching

Wahrscheinlich hat jeder Nutzer von KiCAD irgendwann das Problem, dass er ein einzelnes Via setzen muss. Also Leiterbahn ziehen Lagen wechseln mit Taste 'V' und gut. Nur bei mehr als 100 Vias macht das keinen Spaß. Außerdem entfernt KiCAD überflüssige Verbindungen automatisch (Wenn man es aktiviert). In Eagle konnte ich einfach ein Via in eine Fläche setzen und fertig. Bei KiCAD gibt es diese Funktion so nicht. Also muss man sich umständlich ein Footprint erstellen mit einem Via und dieses dann mehrfach im Layout duplizieren. Und dann muss das Via auch noch dem korrekten Netznamen zuordnen sonst weiß KiCAD nicht, dass das Via zu dem Netz in des es plaziert wurde auch gehört. Das kingt erstmal sehr kompliziert. Aber es ging dann eigentlich gut von der Hand. Bis ich gemerkt habe, dass mein Via Footprint eine Aussparung in der Lötstopmaske hat. 
Bei der Menge an Vias sieht da komisch aus wenn einige Vias freigestellt und Verzinnt sind und andere Vias sind normal mit Lötstopp überzogen. Also das Footprint geändert und die Lötstopausparung gelöscht. Aber KiCAD synchronisiert die Footprints nicht automatisch. Und ich sah mich schon jedes einzelne Via editieren. Also ein Via genommen und das Editieren Menü geöffnet. Dann Footprint ändern und siehe da, KiCAD hat mir angeboten Das neue Footprint für alle meine Vias mit der selben Referenz zu übernehmen. Augenzu und angeklickt, siehe da er hat alle Vias mit einem Klick geändert! Puh :)

OpenHardware

Weil ich den aktuellen Stand als so gut empfinde habe ich das Projekt veröffentlicht: thunderdrive-combat auf BitBucket

Die Projektdateien sind mit KiCAD 4.02 erstellt, sodass das Projekt von jedem geöffnet und bearbeitet werden kann. 


Donnerstag, 3. März 2016

Das Layout #2 ist soweit.

Es hat etwas gedauert aber jetzt ist der neue Schaltplan und das Layout auf einem Stand den man zeigen kann.

Die Unterseite der Platine mit den 12 Fets und dem DRV8305.
Die Oberseite der Platine mit dem STM32F446RE, den Shunts und dem restlichen Hühnerfutter.
An der linken Seite ist der 3,5A Stepdown mit dem LMR14030 auf der Rückseite, daneben befindet sich der STM32F446 in LPFP64, sowie der DRV8305 darunter. Unterdem DRV ist das Powerpad als Pad mit 3mm Bohrung ausgeführt, damit der DRV komplett von Hand bestückt werden kann. Dann folgen 2 dicke Elkos für den Zwischenkreis. Die habe ich zur besseren Übersicht ausgeblendet, außerdem sollen diese Elkos liegend bestückt werden. Zur niederimpedanten Entkopplung der Versorgung folgen dann 1 Kerko je Phase und dann ein Shunt je Phase. Zum Schluss befindet sich rechts der Anschlussbereich in dem 3,5 - 4mm Goldkontakte eingelötet werden können.



Montag, 15. Februar 2016

Revision 2 des TDCombat

Nichts ist so beständig wie der Wandel. Deshalb habe ich nach langem Hin und Her dazu entschlossen das alte Design nur abzuwandeln, aber die Dimensionierung gleich zu lassen. Das Ziel ist immer noch ein kleiner leichter BLDC-Umrichter für den Air Combat. Ohne zusätzliche Kühlung sollen 20A bei 6S kontinuierlich möglich sein.

Es hat ein BEC

BEC mit getrennten LDOs für Analog- und Digitalversorgung
Entgegen meines letzten Posts bekommt der TDCombat ein 5V 3,5A BEC, von welchem die 3V3 für den STM32 mit 2 TPS73233 abgeleitet werden. Wenn ich diesmal das Layout nicht verbocke, dann sollte die Versorgung gesichert sein.

Ein DRV830x sie zu knechten

Der DRV8305 integriert einen Großteil der Schaltung
Wenn man in diesen Tagen einen BLDC-Regler designed der halbwegs klein werden soll, kommt man um die DRV830x von TI nicht herum. Ich habe mich immer gescheut vor diesen ICs, weil gerade die DRV8301/2 sehr zickig sind, was Lagerung und Löten betrifft. Diese ICs von Hand mit dem Lötkolben zu bestücken ist unmöglich außer man macht sich das PowerPAD des ICs mit einem großen Via zugänglich, und genau das habe ich mit dem DRV8305 vor.

Warum der DRV8505 und nicht der 8301 oder 8302

Weil er neuer ist :). Und weil der 1,5A Stepdown des 8301 oder 8302 überflüssig ist durch das 3,5A BEC. Außerdem ist der DRV8305 noch weiter integriert als seine älteren Brüder. Wie an dem Schaltplan zu sehen ist braucht der 8305 keine Gatebeschaltung. Das Schaltverhalten soll sich laut Datenblatt mit 2 Parameter (IDRIVE und TDRIVE) einstellen lassen. 
Der etwas niedrigere maximale Gatestrom von ca. 1A ist für die kleinen Toshiba-FETs mehr als ausreichend. Dennoch bin ich gespannt wie sich der Treiber verhält und ob parallel geschaltete FETs Probleme machen können. 

Der größte Gewinn ist aber die Überwachung jedes FET-Paares auf Überstrom. Sollte ein FET durchschlagen oder ein Phasenschluss auftreten, so schaltet der DRV alle FETs ab und meldet den Fehler. Somit sollte ein Defekt in der Brücke keinen Totalausfall der BEC-Versorgung zur Folge haben und der Flieger sollte noch kontrollierbar sein.

Zusätzlich hat der DRV8305 einen dritten Verstärker für eine dreiphasige Strommessung. Damit kann der Regler mit 100% Duty fahren. Denn bei einer 3phasigen SVPWM ist immer nur eine der Phasen bei 100% Duty und die beiden haben einen so geringen Dutycycle, dass eine Strommessung in den Phasen möglich ist. Und wenn die Phase außerhalb dieses Bereiches sind kann die 3. Strommessung genutzt werden um jegliche Gleichtaktstörung auf den Strommessungen zu kompensieren, in dem die vollständige 3 phasige Clark-Transformation berechnet wird.

Das Hirn des Ganzen

Der STM32F446RE übernimmt die Steuerung und Regelung des Antriebs.
Zum entwickeln der Software habe ich gern etwas mehr Rechenleistung. Ein STM32F303RC reicht mit 72MHz eigentlich aus für die FOC, den Beobachter und die Zustandsüberwachung des Motors. Dennoch ist Leistung nur durch mehr Leistung zu ersetzen. Außerdem bietet der STM32F446 mit 180MHz so viel Luft nach oben, dass ich damit die Regelfrequenz von 10kHz auf 20kHz erhöhen kann und noch Luft nach oben habe für Telemetrie (z.B. Graupner HOTT)  und ggf. UAVCAN, falls ich den Regler auch für Copter einsetze. Zum debuggen und testen auf dem Schreibtisch habe ich noch 2 Taster-Eingänge und DAC-Ausgänge (Danke an Andreas für die Idee) vorgesehen. Außerdem leiste ich mir in der Software den Luxus eines RTOS (Chibios/RT). Das ist nicht wirklich notwendig, macht aber das Softwaredesign einfacher. Genauso erleichtert die Verwendung von C++ die Programmierung, sofern man sinnig mit den Sprachkonstrukten umgeht. 




Mittwoch, 3. Februar 2016

Warum eigendlich FOC oder das BEC fliegt raus!

Es gibt tausende von verschiedenen BLDC-Reglern auf dem Markt und recht viele sind sogar Opensource oder Openhardware Projekte aber nur ganz weniger benutzen feldorientierte Regelung.
Warum ist das so? Klar FOC ist wesentlich aufwändiger zum implementieren und die Hardware wird ebenfalls aufwändiger. Aber ein Hauptgrund ist die Entwicklung eines zuverlässigen Beobachters für die Lage des Rotors. Einem BLDC-Regler reichen 6 Zustände, die er entweder über die
Messung des Nulldurchgangs der BEMF des Motors ermittelt oder über 3 HALL-Sensoren.

Die feldorientierte Regelung braucht aber einen möglichst genauen Lagewinkel des Rotors um den Antrieb effizient zu regeln. Deshalb braucht man entweder einen Encoder an der Rotorwelle oder ein Modell mit dem die Rotorlage rechnerisch bestimmt wird. Und gerade dieser Punkt ist für mich als Regelungstechniker am interessantesten.

Genau wie konventionelle BLDC-Regler hat auch ein Umrichter der mit feldorientierter Regelung arbeitet, dass bei niedrigen Drehzahl die Gegenspannung des Motor zu gering ist um an ihr die Rotorlage zu bestimmen. Aber der große Vorteil der feldorientierten Regelung ist, dass das Motor-Modell so ausgelegt werden kann, dass der Beobachter aus dem Stillstand des Motors herraus eine halbwegs genaue Rotorlage ermitteln kann und so der Motor ohne Startroutine anläuft.

Benjamin Vedder demonstriert das gerade mit seinem VESC und diesem Beobachter und seine Ergebnisse sehen sehr gut aus. Sein erstes Vergleichsvideo zeigt sehr schön einen wesentlichen Vorteil der FOC.

Das ganze ist wesentlich leiser. Es gibt weniger Vibrationen auf dem Antrieb, weil die Ströme schön sinusförmig sind und wenn man die PWM-Frequenz auf 20kHz setzt hört man auch die PWM nicht mehr. Was bleibt sind entweder mechanische Geräusche der Lager und des Getriebes oder Schwingungen die durch eine schlecht eingestellte Regelung kommen. Aber das Verfahren ermöglicht einen sehr ruhigen und leisen Lauf der Maschine.
Besonders merkt man, unter Last. Wie mein Video hier mit meinem RES-Beobachter-System zeigt.
Die PWM ist mit 20kHz nicht zu hören und der Motor dreht sich ohne fiepen oder ähnliche Töne obwohl gerade 20A fließen. Was man hört ist der Lagerschaden des 6374 vorn im Bild :).

Aber was bringt der Aufwand jetzt?

Eine E-Maschine die nahezu lautlos und vibrationsarm läuft. Außerdem stellt eine Stromregelung auch eine sehr wirksame Strombegrenzung dar. Falls die Luftschraube zu groß ist und der Motor mit einem normalen BLDC-Regler überhitzen würde, ist das mit einem Umrichter der FOC verwendet,
nicht möglich (Wenn die Stromgrenze richtig gewählt ist.). Wenn 20A über die Fernbedienung vorgegeben werden, dann stellt der Regler sie ein. Mehr Strom fließt dann nicht.

Gerade für die Anwendung im Kopter ist außerdem wichtig, dass so ein Umrichter neue Sollwerte viel schneller anfahren kann. Damit steigt die mögliche Dynamik des Lageregelkreises einen Kopters. Damit fliegt der Kopter ruhiger und kann schneller seine Lage verändern. 

Für den Modellflug mit Flächen-Modellen ist die höhere Effizienz und der ruhige Lauf das beste Kriterium. Gerade in einem großen Schlepper mit 12-14S kann sich der Einsatz von FOC richtig lohnen. Das Modell ist leiser und nimmt bis zu 30% weniger Strom auf. (Zu gegebener Zeit werde ich Gerd Giese ein Exemplar des Umrichters schicken, damit er diese Behauptung mit Messergebnissen untermauern kann :). ) .

Und hier kommt mein Dilemma mit dem TD Combat. Für den kleinen 3S Miefquirl lohnt sich solch ein Aufwand nicht. Ab 6S wird das Thema eigentlich erst interessant, Deshalb habe ich auch beschlossen, Das BEC fliegt raus! Ein externes BEC oder eine andere Empfängerstromversorgung ist in diesem Bereich durch aus üblich, und ich brauche keinen ineffizient arbeitenden viel zu groß ausgelegten Schaltregler für 5-8,4V auf dem Umrichter vorsehen. Das spart Platz und sorgt für eine bessere Spannungsversorgung der restlichen Bauteile.

  

Ein neues Design ist notwendig.

Das aktuelle Design von TD Combat ist so leider nicht in Betrieb zu nehmen. Ich habe den DRC von KiCAD nicht explizit drüber laufen lassen, sondern nur den pseudo DRC welcher immer mit läuft.
Man lernt nie aus...

Aber ein paar Erkenntnisse konnte ich gewinnen.

Die ACS711 im EX Gehäuse lassen sich ohne Stencil nicht sonderlich schön von Hand bestücken. Ich bestücke aber gern von Hand und ohne Ofen, weil ich so die Platine Stück für Stück in Betrieb nehmen kann.

Die Toshiba-Fets und andere Fets in einem SO-8 ähnlichen Gehäuse sind weit billiger als D2PAK-Fets und lassen eine länglichere Platine mit 3 parallel geführten Phasen wunderbar zu. Die gleiche Brücke mit 12 Fets wie im Layout vom TD Combat wäre in D2PAK ca. 50x50mm groß in SO-8 weniger als 30x30mm. Außerdem ist mir die TPW Serie von Toshiba aufgefallen.
Quelle: http://toshiba.semicon-storage.com/content/dam/toshiba-ss/asia-pacific/image/product/mosfet/power-mos01e.png
Wenn solche Fets einseitig, wie bei dem Layout des TD Combat einseitig bestückt werden, kann die Platine flach auf eine Alu-Platte geschraubt/geklebt werden. Damit ist eine sehr gute Kühlkörper Anbindung gewährleistet. Der Kühlkörper muss aber leider elektrisch isoliert werden weil die Kühlflächen der Fets auf Source-Potential liegen. 

Somit sind die eigentlichen Probleme, die Überlappungen in den Boards und das EX-Gehäuse der ACS711. Mit dem DRC sind die Überlappungen schnell korrigiert, aber was ist mit dem ACS711. 
Das Design mit den 2 parallel geschalteten Sensoren hat seinen Charme zu mal es so flach ist das die Sensoren ebenfalls auf der Seite mit den FETs bestückt werden können und so auch gekühlt werden.
Jedoch hat der Sensor in SO-8 nur einen Messbereich von +/- 25A, womit ohne zusätzlichen Shunt parallel zu dem oder denn Sensoren nur +/- 50A Spitze möglich sind. In Anbetracht der Leistung, die die FETs mit Alternativ-Bestückung treiben können ist das zu wenig und zu unflexibel.

Eine Messung über einen Shunt erscheint mir hier viel variabler und vielseitiger zu sein. So kann die Messung für +/- 50A dimensioniert werden oder aber auch für +/- 200A Spitze. Diese 200A sind alles andere als utopisch mit sauberem Design und 4xTPWR8004PL parallel liegt der RDSon je phase bei weniger als 0,25mR. 

Aber ein Shunt lässt sich nur in der low-side einsetzen und kann nur gesampled werden, wenn in der jeweilige Phase der low-side FET leitend ist. Außerdem ist direkt nach dem Schalten des FETs mit Oberwellen zurechnen, folglich muss der FET für 1-2µs mindestens leitend sein. Das beschränkt aber wieder den maximalen Duty des Reglers und damit die Ausnutzung der Akkuspannung. 

Deshalb muss der Shunt in die einzelnen Phasen oder es muss eine hochdynamische Batteriestrom-Messung erfolgen. Dafür müssen aber die PWM-Muster so beeinflusst werden das zum Messzeitpunkt immer ein Strom einer bekannten Phasen fließt. 

Das schöne an der single Shunt-Messung ist, dass man gleich eine Überstromüberwachung hat, die auch einen geschossenen FET erkennt. Das ist bei der Phasenstrommessung nicht möglich. Die Frage ist aber verbaut man sich damit die Möglichkeit INFORM zu implementieren?



Dienstag, 26. Januar 2016

Der Fehler mit dem TPS73233 ist gefunden!

Die Platinen von elecrow in 4-lagig mit 1 mm Dicke sahen schon als ich sie bekam nicht so gut aus! Die 2- und 4-lagigien die ich bisher dort in Grün und 1,6 mm bestellt habe, waren immer einwandfrei. Diese Platinen scheinen aber ein Problem mit dem NR-Pin (Pin 4) des U202 zu haben.

Im Datenblatt des TPS73233 findet man dieses Bild:
Der NR-Pin geht hier nach der Bandgap-Referenz mit einem 27k Widerstand ab. Zur Filterung der Referenz kann man an diesen Pin dann einen 10nF Kondensator hängen.
Zum Problem: In den TPS gingen 5V rein und nur 2V kamen raus. Warum? Das geht nur wenn die Referenz für den Error Amp nicht der Spannung entspricht die der LDO erwartet. Und das kann nur sein wenn der NR-Pin einen relevanten Widerstand nach GND hat. Ok also C208 runter vom Board.

Leider auf Kies gefurzt, immer noch 2V :(. Nach etwas grübeln habe ich gedacht, das kann nur der NR-Pin sein. Also Pin abgekniffen und noch mal Spannung und siehe da 3,3V am Ausgang!

Ok also unbestückte Platine genommen und den Widerstand zwischen GND (Pin 2) und NR (Pin 4) gemessen = 0R, Klasse!


Es kommt noch Dicker. Ich hab den DRC in KiCAD nicht richtig bedient. Ok es war mein erstes Design mit KiCAD und ich bin dennoch überzeugt das KiCAD besser ist als der Eagle, ich muss nur lernen es zu bedienen...

Zurück ans virtuelle Reisbrett.


Erste Bilder des TD Combat

Erste Eindrücke des Designs, jedoch ist gerade die Logik-Platine bestückt, wegen der Problematik mit der Spannungsversorgung.



Jede Platine ist 31x50mm, hier sind beide Unterseiten der 4-lagigen Platinen zusehen

Beide Oberseiten der Platinen, die Aussparungen der Leistungsplatine sind zum einlöten von 3,5 - 4 mm Goldkontakten.

Final werden die Platinen aufeinander gesteckt und in Schrumpfschlauch verpackt.

Leider sind die Platinen nur 1 mm dick. 
Die obigen Fotos zeigen mal einen Überblick über das Design des TD Combat. Die Stecker sind hier nur für Debug-Zwecke drauf. In einer finalen Version werden an den Pads die Kabel direkt angelötet.
Es sind Anschlüsse für externe Taster, HOTT-Telemetrie und ein USART zum Debuggen vorgesehen. Außerdem findet sich auf dem Board ein Cortex-M 0,1 Inch SWD/JTAG Stecker für meinen J-Link. Zu guter Letzt ist der Standard-Anschluss für einen Empfänger mit PPM vorgesehen.

Auf den Boards ist eine 3-phasige Spannungsmessung und eine Zwischenkreis-Spannungsmessung aufgebaut, sowie eine 3-phasige Strommessung mit jeweils 2 parallel geschalteten ACS711-EK mit +-31A Messbereich. Damit ergibt sich ein Strommessbereich von +-62A pro Phase, was grob einem Batteriestrom von +-40A entspricht.

Und wie fast immer hat diese erste Platinenversion mehrere kleine Fehler. Man achte zum Beispiel auf den THT Quarz auf dem Logik-Board. Hier war das KiCAD Footprint für den SMD-Quarz falsch bzw. meine Pin-Nummerierung im Symbol ist spiegelverkehrt. Außerdem habe ich im Schaltplan 2x 10µF Kondensatoren für den Ausgang des Schaltreglers vergessen. Also ACHTUNG an alle die gern den Webbench Designer von TI verwenden um einen Schaltregler auszulegen. Der malt einen Schaltplan mit einem Kondensator und schreibt 3x10µF dran. Das übersieht man leicht :(. Aber es war zu retten. Der gelbe Tatal-Elko auf dem Logik-Board hat 100µF und sollte fürs erste reichen.

Ach ja noch was besonderes, was ich mit diesem Design ausprobieren wollte ist die Versorgung der MosFet-Treiber IR2186 mit 10V. Diese werden von einer Ladungspumpe LM2767 aus den 5V erzeugt.




Montag, 25. Januar 2016


Die Crux des TD Combat, das Netzteil. Ich wollte unbedingt ein 3A BEC mit 5V für die Versorgung von Empfänger und Servos um Modellflugzeug mit integrieren. Und genau das macht jetzt Probleme. Interessanter Weise ist aber nicht der Schaltregler das Problem, sondern der TPS73233 für die 3V3 Versorgung des STM32. Dieser liefert egal ob mit der ohne Last nur ca. 2V.
Der 2. TPS für die Analogversorgung liefert anstandslos seine 3,3V. Mein Verdacht ist aktuell das irgendwas mit der Beschaltung des NR-Pins nicht in Ordnung ist. 

Für die jenigen die sich den Schaltplan genauer ansehen, die 10µF von C205 sind zu wenig, ich musste hier einen 100µF Tatal nach bestücken. Ich hab leider in dem Design Tool auf der TI-Seite das 3x 10µF am Angangskondensator über sehen und nur einen vorgesehen. Ein Redesign des Boards ist also schon mal gebucht. Mal sehen was ich noch so finde. Aber erstmal muss der U202 laufen. Zur Not wird er durch einen TPS73633 ersetzt.

Spannungsversorgung für Controller und Sensoren









Donnerstag, 21. Januar 2016

ThunderDrive Combat

Auf der Suche nach Anforderungen für einen Umrichter der breit nutzbar ist im Flugmodellbau und dennoch leicht aufbaubar ist, bin ich bei einer Auslegung für Aircombat gelandet. Bei 6S werden hier nur lediglich 20A Batteriestrom benötigt. Solche Ströme sind ohne großen Aufwand einfach zu schalten und damit Stand der Entschluss fest. 24V und 20A mindestens.

Auf die Größe kommt es an.

Wie so oft, ist die Größe des Umrichters ein wichtiges Kriterium. Passt das Dingen überhaupt in einen Rumpf. Bei einem Design, wie dem von Benjamin Vedder mit seinem VESC wird die Breite der Platine zu einem Problem. Aber der VESC ist auch auf 60V 60A ausgelegt, also kleinere MosFETs. 
Der IRF3006 in D2PAK ist einfach zu groß mit 16x10mm Grundfläche.



Der TPHR8504PL im SOP Advance Gehäuse (quasi SO-8 ohne Beine) ist in quasi allen interessanten Punkten besser als der IRF3006 und nur 5x6mm groß. Gerade aber die niedrige Gate Charge war für mich das entscheidende Kriterium. Weil ich 2 von diesen Fets parallel betreiben möchte. Also 12 Fets in Summe und nicht 6, wie beim VESC.





Der erste Entwurf steht bereits

Die Bilder folgen dann in einem nächsten Post.

Der Anfang des Pfades.

Das ganze Projekt ist eigentliche aus dem Quadrokopter-Hype entstanden. Wie fast jeder etwas ambitionierte E-Technik-Student wollte ich einen Kopter selber bauen. Irgendwie bin ich in meinem Anspruch die gesamte Elektronik selber zu entwickeln nie über die Controller für die BLDC-Motoren hinaus gekommen.

Masterthesis

Das Ende vom Lied war, dass ich meine Masterthesis über die feldorientierte Regelung von BLDC-Maschinen geschrieben habe. Dabei raus gekommen ist ein Umrichter ausgelegt auf 60V bei 100A Spitzenstrom in einem Aufbau der zum Testen eine schöne Größe hat aber für eine reale Verwendung im Modellbau ungeeignet ist.

 In dem Video ist mein Testaufbau und der aufgeräumte!!! Schreibtisch zusehen. Auf meinem Youtube-Kanal sind auch noch ein paar mehr Videos zusehen.