"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

DIY: Altmetall CNC Tagebuch

Vinci 06.08.2012 - 22:38 58547 204 Thread rating
Posts

InfiX

she/her
Avatar
Registered: Mar 2002
Location: Graz
Posts: 14246
oh es geht was weiter :D

Zitat von Vinci
Ich hab übrigens einen USB Anschluss vorgesehen. Die Luxusvariante wär also quasi einen Treiber zu schreiben, der die Steuerung direkt in LinuxCNC (http://www.linuxcnc.org/) integriert. Aber obs das jemals spielt... ich glaub nicht. :D

...im nächsten jahr dann halt? :D

Castlestabler

Here to stay
Registered: Aug 2002
Location: Wien
Posts: 3776
Runter bekommst die Packages schon wieder, auch mit größeren Sockeln schon gemacht.
Brauchen tust aber auf alle Fälle ein feine Endlötlitze.

Die Platine für den Leistungsteil wird aber wohl nicht eingesetzt, die Bohrung sind auf der Platine ziemlich versetzt?

Bei den IC immer auf die kreisrunde Aussparung achten. Die Beschriftung darf beliebig aufgedruckt sein.
Bearbeitet von Castlestabler am 03.12.2014, 17:43

Vinci

hatin' on summer
Registered: Jan 2003
Location: Wien
Posts: 5824
Zitat von Castlestabler
Die Platine für den Leistungsteil wird aber wohl nicht eingesetzt, die Bohrung sind auf der Platine ziemlich versetzt?

Das ist die Seite für die Durchkontaktierungen, auf der andern Seite passen die Löcher.

click to enlarge
Bearbeitet von Vinci am 03.12.2014, 18:46

Vinci

hatin' on summer
Registered: Jan 2003
Location: Wien
Posts: 5824
Neuer Display-Treiber ohne Delays und mit diversem Error-Handling.
click to enlarge


Die Entwicklung mit Eclipse für STM leider immer noch eine Qual und debuggen bleibt ein Abenteuer. Vielleicht wechsel ich bei Zeiten doch mal die IDE. An was man aktuell noch alles denken muss ist einfach eine Katastrophe.

Auch die Konfiguration des Controllerst ist imho noch komplett unausgereift. Die Libraries die STM mitliefert sind oft langsam, unübersichtlich und teilweise auch komplett verbuggt bzw. offensichtlich von reinen Programmierern verfasst. In der SPI-Lib etwa wird das 1. gesendete Bit (Read/Write) zur Adresse hinzugezählt... Benutzt man die Library und spricht damit Peripherie an, so stimmt demnach natürlich die Adresse des Datenblatts und die via Lib geschickte nicht überein! Auf sowas muss man erst mal draufkommen, vor allem wenn man nicht vernünftig an der Leitung schnüffeln kann... :bash:

Auch nett ist ein Bug in STs hauseigenem Konfigurationstool SMT32Cube. Das Tool sollte eigentlich die Initialisierung des Prozessors vereinfachen, in dem sehr viele Dinge über ein GUI eingestellt werden können und das Ding dann fertigen Code ausspuckt. Eigentlich ja eine nette Sache, hätte das Tool bei meiner Clock-Konfiguration nicht die Flash Latency FALSCH gesetzt... Solche Sachen dürfen einfach nicht passieren, die sind nämlich mehr oder weniger unmöglich zu debuggen. :bash:

Vinci

hatin' on summer
Registered: Jan 2003
Location: Wien
Posts: 5824
Kleine Schritte... :)
Hab heut die, zur Ansteuerung der Halbbrücken notwendige, PWM zum Laufen gebracht. Was sich im ersten Moment relativ banal anhört ist bei der Fülle an Optionen, die der kleine STM32 bietet leider alles andere als einfach. +1600 Seiten Dokumentation wollen gut studiert sein, damits nicht an einem einzelnen Bit scheitert.

Wiedereinmal problematisch sind die von ST gelieferten Libs mit denen Timer und PWM initialisiert und gestartet werden wollen. Um die Schaltverluste der Leistungsstufe möglichst gering zu halten wird eine sogenannte phasenkorrekte, bzw. center-aligned PWM verwendet. Der Witz dahinter ist, dass jede PWM-Periode die Reihenfolge der Schaltvorgänge umgedreht wird während das Tastverhältnis jedoch unverändert bleibt. Damit spart man sich im Idealfall die Hälfte (?) der Schaltvorgänge im Gegensatz zur edge-aligned PWM.

Was tut man als braver Nutzer? Genau, man initialisiert einfach alle Module nach bestem Gewissen, schmeißt irgendeinen Function Call als Start rein und wartet was sich tut... vergebens. Scheinbar hat bei ST nämlich jemand vergessen, dass man für exakt diesen Fall doch bitte auch den klassischen Update Timer Interrupt (als einen von 4 Quellen des Moduls) aufdrehen sollte. Die Libs verschleiern dermaßen gut was sich tut, dass man nach dem fehlenden Flag eine Weile sucht. :p


Letztendlich hab ichs in eine eigene Funktion gepackt und tada:
click to enlarge click to enlarge

oben: Interrupt-Routine
unten: PWM


Software-technisch stellen sich jetzt noch 3 mehr oder weniger größere Punkte:
- Messung der Phasenströme und der Zwischenkreisspannung direkt mit Hilfe des DMA Controllers (kein Plan wie der funktioniert :D )
- Start / Stop / Beschleunigen / Bremsen
- Inputs Drehgeber / Parallel-Port für Drehzahlvorgabe
- eigenes browsbares GUI implementieren um die Spannungs-Frequenzkurve ändern zu können


Weiters hab ich mittlerweile ein 0815-Trafonetzgerät mit 2.WK-Hardware (naja, ev. Nachkriegs-HW :p ) gebaut, dass 13A@65V liefert. Photos davon gibts dann nächste Woche oder so. :cool:


/edit
Do-Want digitales Speicheroszi mit 4 Kanälen :(

Vinci

hatin' on summer
Registered: Jan 2003
Location: Wien
Posts: 5824
Netzgerät aka Riesn-Kupfer-Grab :)

click to enlarge click to enlarge click to enlarge

click to enlarge



Software-technisch ist leider immer noch einiges offen. Ich habs etwa bis dato nicht geschaft den sogenannten Triple-ADC Mode des Controllers mit DMA und Timer-Trigger zum Laufen zu bringen. Das ist leider enorm wichtig, da ich die Messung der Phasenströme mit einem simplen Shunt realisieren möchte und diese Variante im gegensatz zu Sigma-Delta oder sonstigen isolierten Messverfahren einen entscheidenden Nachteil besitzt... Und zwar ist die Messung ausschließlich dann möglich, wenn der untere Teil der Halbbrücke die jeweilige Motorspule gegen Masse schaltet. Bei PWM-Frequenzen jenseits der 20kHz und hohen Modulationsgraden (Spannungsverhältnis zw. "Eingangs" und "Ausgangsspannung") bewegen sich die Zeitfenster bereits im 1-2stelligen Mikrosekundenbereich... :D

Generell läuft die Wandlung zwar... dummerweise jedoch nur exakt 1x nach dem Initialisieren des ganzen Zeugs. Feuert man den ADC erneut, so wandelt dieser zwar brav, der DMA Controller weigert sich jedoch die Messwerte aus den Registern des ADCs in den Flash zu kopieren... warum auch immer. :confused:


/edit
Hah!
Zitat
No new DMA request is issued to the DMA controller if the DDS bit is cleared to 0 in the
ADC_CR2 register (this avoids generating an overrun error). However the DMA bit is
not cleared by hardware. It must be written to 0, then to 1 to start a new transfer.
S: 267 :fresserettich:

Und geht scho. :)
Bearbeitet von Vinci am 02.01.2015, 15:22

smashIt

master of disaster
Avatar
Registered: Feb 2004
Location: OÖ
Posts: 5235
Zitat von Vinci
/edit
Do-Want digitales Speicheroszi mit 4 Kanälen :(

schau dir mal das an:

http://www.rekirsch.at/Rigol+DS1054Z,i1.htm

die rigol-kisten sind für den preis einfach gewaltig

Vinci

hatin' on summer
Registered: Jan 2003
Location: Wien
Posts: 5824
4x Wänd und a Deckl...

click to enlarge click to enlarge click to enlarge click to enlarge click to enlarge

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25432
Schaut schon echt gut aus! :shake:

InfiX

she/her
Avatar
Registered: Mar 2002
Location: Graz
Posts: 14246
DIY at it's finest, I like.

Vinci

hatin' on summer
Registered: Jan 2003
Location: Wien
Posts: 5824
Ich hab die Tage mal testweise den Leistungsteil angeworfen und hab da noch ein etwas seltsames Problem. Aus irgendeinem Grund liegen an Silicon Labs 8233 Gate Treiber 5,5V am Ausgang der Highside an sobald ich beide Eingänge low schalte.

Das stimmt irgendwie nicht mit dem Truth Table des Datenblatts S.21 überein, in dem eindeutig steht, dass beide Ausgänge low sind, solang auch die Eingänge low sind.

click to enlarge


Ansonsten schaltet die Brücke wie gewünscht High- und Lowside Teil durch... :confused:


/edit
ok, das Verhalten dürfte normal sein
offenbar bezieht sich das Datenblatt mit "low" hier auf GNDA und nicht auf den eigentlichen PowerGND...
hätte man eigentlich auch wissen sollten/müssen :(


/edit2
Ich bin übrigens vom STM32F4 schwer begeistert. Vor nicht allzulanger Zeit war ich noch der Meinung, dass Microchip schlichtweg die bessere Peripherie bietet und Takt/Speicher/etc. nicht alles is... Aber wenn man mal durchschaut hat was der kleine kann, dann braucht man sich um so gut wie gar nichts mehr kümmern.
Grad eben bin ich draufgekommen, dass man den ADC von einer PWM Flanke nach Wahl triggern lassen kann. Die ADC Wandlung passiert somit (fast) ohne einzigen CPU Befehl!!! Das is schon ziemlich absurd... :eek:
Bearbeitet von Vinci am 14.01.2015, 19:30

Vinci

hatin' on summer
Registered: Jan 2003
Location: Wien
Posts: 5824
Als bald eine der letzten Aufgaben hab ich heute den Bremschopper getestet. Dieser verhindert, dass ein bremsender und damit generatorisch laufender Motor Energie in den Zwischenkreis zurückspeist und damit die Spannung erhöht. Zwar ist ein Großteil der Elektronik (inkl. den Sensoren) vor Überspannung geschützt, doch die Power FETs selbst gehen bei etwa 150V ein.

Ursprünglich hab ich für den Chopper eigentlich den selben FET vorgesehen, der auch in den Schaltbrücken Verwendung findet, lediglich ohne Gate Treiber sondern direkt von 2 bipolar Transistoren getrieben. Diese als "Bipolar Totem" bezeichnete Schaltung kommt eigentlich recht häufig vor... wollte aber auf meiner Platine schlichtweg nicht funktionieren. :confused:

Ich hab dann kurzerhand umgesattelt und einen der Transistoren gegen einen Kleinsignal FET getauscht, der nun den großen Power FET schaltet. Das is zwar wesentlich langsamer, weil ein geladener FET quasi "nicht mehr leer gesaugt" werden kann, aber immer noch um etliche Zehnerpotenzen schnell genug für den Chopper, der aktuell auf ~100Hz läuft. Interessanterweise erzeugt diese Frequenz bei einem simplen Test mit einem Glühlämpchen als Last ein ziemlich nerviges Brummen... da muss man also mit der Frequenz wohl noch nach oben. :D

click to enlarge click to enlarge

Bei rund 20% Überspannung fängt der FET an den Chopper zu pulsen.
Bei etwa 67% Überspannung schaltet der FET den Chopper komplett ein.
In Zukunft wird dann ein Lastwiderstand das arme Lamperl ersetzen. :D



Die gesamte Routine mit den Berechnungen der Raumzeiger-Winkel und Co ist mittlerweile ebenfalls implementiert und passt mit ~34µs Rechenzeit ausgezeichnet in die 50µs PWM Periode. Damit steht der Echtzeit-Implementierung defakto nichts mehr im Wege und auf Look-Up Tables kann verzichtet werden. :cool:

Vinci

hatin' on summer
Registered: Jan 2003
Location: Wien
Posts: 5824
Grml. Ich hab heut festgestellt, dass die eigentlich vorhergesehene Potentialtrennung zwischen Digital- und Leistungsteil in meinem Design irgendwie nicht so richtig funktionieren will.

Meine Annahme von vorn herein war eigentlich, dass die digitale und die Leistungserde sich in ihrem tatsächlichen Potential so gut wie nicht unterscheiden werden und vom Leistungsteil bezogene Messspannungen so direkt rückgeführt werden können. Das is zwar unglaublich russisch, dafür müsste man halt nicht jede Pippifax-Messung potentialgetrennt durchführen.

Jetzt stellte sich dummerweise heraus, dass die beiden Massen um verfluchte 1,4V unterschiedlich sind... bei 3,3V digitaler Versorgung kann man das komplette Messkonzept somit kübeln, sofern man die Erden nicht zusammenlegt. Das dürfte zwar im großen und ganzen "so irgendwie" funktionieren, is aber sehr unschön.

Ev. überarbeite ich die Versorgungen nochmal...
Sonst muss ich vermutlich den FI in der Werkstatt ausbaun. :D

roscoe

tinkerer
Avatar
Registered: Mar 2005
Location: 1050 Wien
Posts: 708
Zitat von Vinci
Zitat von böhmi
Ist der ausgebaute Stadl ein offizielles eigenes Wohngebäude?

Würde Dir ein Tektronix 465 in irgendeiner Weise helfen?

Disclaimer: Ich habe absolut keine Ahnung von Oszilloskopen, aber unter anderem dieses herumstehen.

wergor

connoisseur de mimi
Avatar
Registered: Jul 2005
Location: vulkanland
Posts: 4097
vote 4 FI ausbauen :D
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz