Beruflich Dokumente
Kultur Dokumente
än
µEDM - Dokumentation
3. September 2015
llst
vo
un
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Einleitung
Das folgende Dokument zeigt den aktuellen Stand meines Projekts „µEDM“. Die Dokumenta-
tion ist unvollständig und zeigt nur eine Momentaufnahme.
Durch die hier veröffentlichten Informationen werden wird weder die Eignung für einen be-
än
stimmten Zweck noch irgendetwas anderes garantiert.
Markennamen gehören auch ohne besondere Markierung ihrem Eigentümer, die in diesem
Dokument vorhandenen Bilder, Grafiken und Piktogramme dem Autor.
Schöne Bilder, plausible Formeln und glaubwürdige Texte entlasten niemanden von der Ver-
antwortung, sich beim Nachbau selbst um die Einhaltung gesetzlicher Vorschriften und Sicher-
heitsbestimmungen zu kümmern.
Bei nicht-fachgerechtem Aufbau kann das hier vorgestellte Gerät erhebliche Störaussendungen
entgegen gesetzlicher Bestimmungen (beispielsweise dem Gesetz über die elektromagnetische
Verträglichkeit von Betriebsmitteln) erzeugen. Hier ist der Nachbauer selbst in der Pflicht,
llst
die Einhaltung dieser Bestimmungen zu garantieren. Auch die Verwendung veröffentlichter
Layouts entlastet davor nicht.
Es werden Spannungen benötigt, die den Bereich der Schutzkleinspannung (Schutzklasse III)
überschreiten. Er darf damit nur von einer Elektrofachkraft oder elektrotechnisch unterwiese-
nen Person vorgenommen oder verändert werden.
Mach nur daß, was Du vertreten kannst, denn Du wirst selbst dafür geradestehen müssen.
Nicolas, 3. September 2015
vo
un
2
dig
Inhaltsverzeichnis
än
1. Einführung Funkenerosion 5
1.1. Der Erodierprozeß . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2. Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.3. Parameterwahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2. Bedienung µEDM 9
2.1. Bedienelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2. Inbetriebnahme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3. Bedienhinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
llst
2.4. Allgemeine Bedienhinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
3. Aufbau µEDM 13
3.1. Geräteaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2. Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.1. EDM-Modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2.2. Andere Betriebsmodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2.3. Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.2.4. Grafik-LCD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2.5. Schrittmotorsteuerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.6. Pulserzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.2.7. Abstandsregelung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3. Steuerteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
vo
3.3.1. Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.3.2. Bauteilauslegungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.4. Schrittmotortreibermodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.5. Leistungstreibermodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5.1. Strommessung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.5.2. Eingangsfilter für die „Sense“-Eingänge . . . . . . . . . . . . . . . . . . 29
3.5.3. Leistungsgrenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Literaturverzeichnis 34
un
A. Schaltpläne 36
A.1. Schaltplan Steuerteil (ARM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
A.2. Schaltplan Steuerteil (AVR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
A.3. Schaltplan Schrittmotormodul . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
A.4. Schaltplan Pulserzeugungsmodul . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
B. Neukonzeption: Kleinleistungsteil 42
B.1. Entwicklungsdetails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
B.2. Neukonzeption des Steuer- und Schrittmotorteils . . . . . . . . . . . . . . . . . 47
B.2.1. Neukonzeption Steuerteil . . . . . . . . . . . . . . . . . . . . . . . . . . 47
B.2.2. Neukonzeption Schrittmotorteil . . . . . . . . . . . . . . . . . . . . . . . 49
B.2.3. Zusammenlegung von Steuer- und Schrittmotorteil . . . . . . . . . . . . 49
än
B.3. Unzusammenhängende Details . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
B.3.1. Drehgeber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
C. Entwicklungsprojekt 51
C.1. Nächste Schritte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
C.2. Verbesserungen und Korrekturen . . . . . . . . . . . . . . . . . . . . . . . . . . 51
C.2.1. Leistungsteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
C.2.2. Steuerteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
C.2.3. Schrittmotorteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
C.2.4. Gesamtgerät . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
llst C.2.5. Firmware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
C.2.6. Firmwarebugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
C.2.7. Lessons learned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
D. Entwicklungstagebuch 63
vo
un
4
dig
1. Einführung Funkenerosion
än
An dieser Stelle wird keine grundlegende Einführung in die allgemein bekannten Grundlagen
des Senkerodierens gegeben. Zu diesem Zweck sei auf die Wikipedia-Artikel zum Funkenero-
dieren [Wik11] und Drahterodieren [Wik13] verwiesen.
Stattdessen werden im folgenden Begrifflichkeiten und Grundlagen eingeführt, wie sie für die
Entwicklung oder die Bedienung einer solchen Anlage im Hobbybereich sinnvoll sind.
(Werkzeugelektrode) und Kathode (Werkstück) ist demnach darauf zurückzuführen, daß Ionen
massereicher und damit energiereicher als Elektronen sind[Gin02].
Die Jet-Theorie wird z.B. in [Wik13] (nicht nur auf Wikipedia, auch in ernstzunehmenden
Quellen) vertreten. Hier dient die Funkenentladung dazu, einen räumlich begrenzten Plasma-
kanal zwischen Werkstück und Werkzeugelektrode auszubilden, der beim Zusammenbruch des
Entladekanals implodiert, wodurch ein Strahl (eng. jet) entsteht, der auf die beiden Elektroden
trifft und dort einen impact bewirkt, der wiederum zur Materialzerrütung (=Erosion) führt.
Der unterschiedliche Abtrag von Werkzeug und Werkstück ist demnach darauf zurückzuführen,
daß die Werkzeugelektrode aus einem weitaus zäheren Material als das Werkstück besteht.
un
Generell sollte es bei der Ausstattung mit einer entsprechenden Apparatur und dem passendem
Meßequipment kein Problem sein zu unterscheiden, welche der beiden Theorien den primären
Abtragmechanismus beschreibt – die Uneinigkeit, die sich in der Literaturlage widerspiegelt,
ist damit vermutlich eher Uneinigkeit zwischen Autoren und nicht die Beschreibung eines
wissenschaftlich ungeklärten Sachverhalts.
5
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
td Zündverzögerungszeit
U0 trise te Entladedauer, Brenndauer
ti Impulsdauer
t0 Pausendauer
ton Eingestellte Brenndauer∗
Ub
toff Eingestellte Pausendauer
än
U (t) tp Periodendauer
td te t0
ti = ton toff
trise Anstiegszeit des Spannungsimpulses
tp U0 Leerlaufspannung
Ie Ub Brennspannung
Ie Entladestrom
I(t)
∗
In der Literatur unterschiedlich, manchmal gilt
auch ton = te
U(t) 30
200
25
150
vo
20
100
U [V]
I [A]
15
50
10
0
5
−50 I(t)
0
−5
0 10 20 30 40 50 60 70 80 90 100
t [μs]
un
Abbildung 1.2.: Illustration des (idealisierten) Spannungs- und Stromverlaufs einer kommerzi-
ellen Pulsstromquelle
Bei einem realen Erodierprozeß besitzen die Prozeßgrößen erhebliche statistische Abweichun-
gen. Abbildung 1.2 zeigt qualitativ den Spannungs- und Stromverlauf beim Erodierprozeß mit
einem kommerziellen Pulsgenerator.
6
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Die Werkzeugelektrode oder auch kurz „das Werkzeug“ besteht üblicherweise aus Kupfer oder
Graphit und wird üblicherweise als Anode geschaltet (im Gegensatz zum elektrochemischen
Abtragen).
Das Werkstück bildet ebenfalls eine Elektrode, wird aber gewöhnlich nicht so bezeichnet. Bei
Werkzeug und Werkstück findet ein Materialabtrag statt, der bei ersterem als „Verschleiß“ und
än
bei letzterem als „Abtrag“ bezeichnet wird. Das Verhältnis von Verschleiß und Abtrag wird
als „relativer Verschleiß“ bezeichnet.
Das Dielektrikum dient einerseits als Isolationsmaterial zwischen den beiden Elektroden, an-
dererseits aber auch zum Fortspülen der durch den Prozeß erzeugten Partikel. Die Spülung
führt der Bearbeitungsstelle sauberes Dielektrium zu und durch die Partikel verunreinigtes
Dielektrikum ab. Oft werden die Begriffe „Spülung“ und „Dielektrikum“ synonym verwendet.
Beim Drahterodieren erfolgt grundsätzlich eine Umlaufspülung, bei der das Dielektrikum der
Bearbeitungsstelle ständig im Schwall zugeführt wird. Beim Senkerodieren besteht auch die
Möglichkeit einer Bewegungsspülung. Hier ist die Bearbeitungsstelle ständig eingetaucht und
das Dielektrikum im Erodierspalt wird mit der Elektrode regelmäßig umgerührt.
llst
1.2. Literatur
Der vielzitierte Standard im Hobby-Erodierbereich ist das EDM How-To Book [?]. Dieses Buch
ist eigens für den Hobby-Selbstbau geschrieben, leider aber nur noch antiquarisch erhältlich.
Inhaltlich beleuchtet es vor allem den Senkerodierer-Entwurf „Mini-EDM“ des Autors Ben
Fleming. Es werden detailliert die zahlreichen Fallstricke geschildert und auch Tipps für die
Wahl der Betriebsparameter gegeben, von denen sich einige auch auf andere Geräte übertragen
lassen.
Wer die Möglichkeit hat, in einer Bibliothek o.Ä. kostenlos einen Blick in „Weck Werkzeugs-
maschinen Band 1“ [WB06a] zu werfen, findet dort eine schön bebilderte Einführung in die
vo
funkenerosive Bearbeitung. Band 3 [WB06b] dagegen befaßt sich in Bezug auf das Funkenero-
dieren nur kurz mit „zeitgemäße“ Regelkonzepten und ist daher für den Hobbyisten weniger
interessant.
Die Wikipedia-Artikel zum Funkenerodieren[Wik11] und Drahterodieren[Wik13] (Stand De-
zember 2013) sind als Einführung ebenfalls empfehlenswert und stehen gegenüber dem „Weck“
nur wenig nach.
Die Dissertation von Jens Ginzel [Gin02] ist eine der wenigen Publikationen, in denen konkrete
Prozeßparameter für kommerzielle Senkerodieranlagen genannt und diskutiert werden. Bis auf
Inhaltsverzeichnis und Deckblatt ist sie komplett im Internet verfügbar (Stand 2. Dezember
un
2013). Auf den ersten 76 Seiten werden Prozeßparameter, Einflußgrößen und Regelkonzepte
erläutert – damit ist das Studium dieser Publikation für den Hobby-Senkerodiererbauer sehr
empfehlenswert.
7
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
1.3. Parameterwahl
än
deenergie. Eine kleine Entladeenergie erlaubt dabei eine höhere Oberflächenqualität.
Eine kleine Entladedauer ti führt zu einem stabileren Prozeß, da sich die Wahrscheinlich-
keit von Fehlentladunden verringert.
Aus Gründen der Oberflächenqualität ist es daher sinnvoll, eine geringe Entladedauer
anzustreben, was allerdings zu Lasten der Abtragsrate geht.
Als Startwert für eigene Versuche können Werte ti = 10 . . . 40µs herhalten.
• Die Leerlaufspannung U0 sollte so klein wie möglich gewählt werden. Sie bestimmt die
Spaltweite. Ein großer Spalt erleichtert die Spülung, ein kleiner Spalt führt zu einer
besseren Abbildungsgenauigkeit.
Als Startwert für eigene Versuche sollten ti = 200 . . . 80V geeignet sein.
llst
• Die Pausendauer t0 sollte lang genug sein, einen eventuell entstandenen Lichtbogen zu-
verlässig zu löschen. Eine lange Pausenzeit stabilisiert den Prozeß. Für einen abtrags-
intensiven Prozeß sollte die Pausenzeit möglichst kurz sein, da sie nichts zum Abtrag
beiträgt.
Falls der Generator für dieses Tastverhältnis geeignet ist, können eigene Versuche mit
ti = 10 . . . 30µs begonnen werden.
Nicht alle Größen sind bei allen Generatoren einstellbar.
vo
un
8
dig
2. Bedienung µEDM
än
2
9 3
llst
1 4
5 6
8 7
1 Netzschalter
6 Einstellpoti toff
2 Drehgeber/Taster
7 Anschluß für Vorschubmotor
3 Rückstellpoti für schnelles Verfahren
8 Elektrodenanschluß
4 Soll-Strom-Potenziometer
9 Grafik-LCD
vo
5 Einstellpoti ton
2.1. Bedienelemente
Alle Bedienelemente sind an der Frontplatte des Grundgeräts (siehe Abbildung 2.1) unterge-
bracht. An der Rückseite befindet sich lediglich der Anschluß für die 230V-Versorungsspannung
un
Netzschalter Nach dem Einschalten des Netzschalters befindet sich das Gerät im Grundzu-
stand (Pulserzeugung ausgeschaltet und Z-Koordinate Z = 0 unabhängig von der tat-
sächlichen Elektrodenposition).
9
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Das Gerät kann jederzeit mit dem Netzschalter außer Betrieb genommen werden. Eine
eventuell stattfindende Verfahrbewegung und/oder Pulserzeugung wird augenblicklich
gestoppt. Es gehen keine Grundeinstellungen verloren.
Drehgeber-/Taster Dieses Eingabegerät hat je nach Betriebsmodus unterschiedliche Funktio-
nen. Im Erodiermodus (Puls oder Handvorschub) läßt sich durch Drehen eine sehr präzi-
än
se Bewegung der Elektrode steuern. Durch einen kurzen Tastendruck wird zwischen den
unterschiedlichen Erodiermodi (Verfahrmodus → Handvorschub → automatischer Vor-
schub → Verfahrmodus) gewechselt. Durch einen langen Tastendruck wird in die Menüs
gewechselt. In den Menüs läßt sich durch Drehen der Menüpunkt ansteuern und durch
einen kurzen Tastendruck auswählen. In einem Einstellmenü läßt sich der ausgewählte
Wert dann wiederum durch Drehen einstellen, bis er durch einen kurzen Tastendruck
bestätigt wird.
Im allgemeinen ist die Verwendung dieses Eingaberäts intuitiv und unkritischen Einstell-
parametern vorbehalten.
Rückstellpoti für schnelles Verfahren Dieses Bedienelement ähnelt im Verfahrmodus einem
llst
jog shuttle und erlaubt unterschiedlich schnelle Bewegungen der Werkzeugelektrode.
Einstellpotenziometer Die drei Einstellpotenziometer für den Soll-Strom (Isoll , die Pulsein-
schaltdauer (ton ) und die Pulspausenzeit (toff ) diesen der Einstellung dieser drei primären
Prozeßparameter. Ihre Wirkung erfolgt unmittelbar und unabhängig vom Betriebsmodus.
Die Einstellung geht auch beim Ausschalten nicht verloren. Der aktuell eingestellte Wert
wird im Grafik-Display angezeigt.
Das Soll-Strom-Potenziometer ist das wichtigste Bedienelement im automatischen Vor-
schubmodus. Im Falle einer unerwarteten/unkontrollierten Vorschubbewegung kann diese
durch das Drehen an den Linksanschlag sofort unterbunden werden.
Anschluß für den Vorschubmotor Der Vorschubmotor wird mit einem vierpoligen XLR-Stek-
ker angeschlossen. Dies darf nur bei ausgeschaltetem Gerät (Netzschalter aus) erfolgen.
vo
Elektrodenanschluß Die zwei Bananenbuchsen „+“ (gelb) und „-“ (blau) können als Steck-
oder Klemmverbinder eingesetzt werden.
2.2. Inbetriebnahme
• Gerät aufbauen:
– Elektrode einspannen
un
10
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
• Spülung in Betrieb nehmen: Die Bearbeitsungsstelle muß dabei sicher überflutet werden.
• Z-Achse nullen: Entweder
– Z-Achse mit dem Schnellvorschubpoti auf bis ca 1...3mm an die Werkstückoberfläche
heranfahren
– Pulserzeugung einschalten und mit dem Drehgeber an das Werkstück heranfahren,
än
bis Funken entstehen.
– In das Einstellungsmenü wechseln und die Z-Achse nullen (Menüpunkt Z=0), an-
schließend die gewünschte Zieltiefe einstellen.
oder:
– Z-Achse mit dem Schnellvorschubpoti auf bis ca 1...3mm an die Werkstückoberfläche
heranfahren
– In das Einstellungsmenü wechseln und die Z-Achse nullen (Menüpunkt Z=0)
– Sehr kleinen Soll-Strom einstellen und in den automatischen Vorschubmodus wech-
seln.
llst– Sobald Funken sichtbar sind, automatischen Vorschub beenden.
– In das Einstellungsmenü wechseln und die Z-Achse nullen (Menüpunkt Z=0), an-
schließend die gewünschte Zieltiefe einstellen.
• Im EDM-Modus auf automatischen Vorschub umstellen
• Gewünschten Soll-Strom, Puls- und Pausenlänge einstellen, daß sich ein optimaler Prozeß
ergibt.
• Zurücklehnen und entspannen
2.3. Bedienhinweise
vo
• Der Soll-Strom wird sinnvollerweise so eingestellt, daß sich nur blaue und keine gelbe
Funken ergeben. Bei gelben Funken findet kein Erodierprozeß, sondern vorwiegend Kon-
taktabbrand statt.
• Der automatische Vorschub wird nur durch den gemessenen Strom und die Zieltiefe be-
grenzt. Es gibt keine Kraftbegrenzung. Können die Elektroden keinen Kontakt herstellen,
der mindestens dem Zielstrom entspricht, wird der Motor unweigerlich bis zur Zieltiefe
fahren. Deshalb ist darauf zu achten, daß die Elektroden nicht während des Betriebs den
Kontakt verlieren können.
• Die Polarität Elektrode–Werkstück kann durch Umstecken der mit „+“ und „-“ beschrif-
un
teten Buchsen gewechselt werden. Das ist auch problemlos während des Betriebs möglich
– jedoch nur dann, wenn der automatische Vorschub abgeschaltet ist (siehe vorheriger
Punkt).
11
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
• Der Schrittmotortreiber verträgt es nicht, wenn bei eingeschaltetem Gerät der Stecker
für den Anschluß des Schrittmotors gezogen wird. Vor dem Abziehen des Schrittmotorka-
bels ist daher das Gerät auszuschalten oder in das Einstellungsmenü zu wechseln. Beim
Einstecken ist auf korrektes Einrasten zu achten.
än
2.4. Allgemeine Bedienhinweise
12
dig
3. Aufbau µEDM
än
3.1. Geräteaufbau
Grundgerät Antrieb
Schrittmotor- Steuer-/
treibermodul Bedienteil
llst
230V~
Elektrode
Last- Spülung
EMV-
Pulserzeugungs-/ widerstand
Filter
Leistungsmodul Werkstück
Das Mikro-EMD (µEDM) ist ein kompletter Senkerodierer, bestehend aus aus dem Grundgerät,
in dem Generator, Antriebs- und Steuerelektronik untergebracht sind und der Peripherie, die
den Vorschubantrieb, das Gestell und die Spülung umfaßt.
vo
Die Peripherie ist vergleichsweise einfach aufgebaut. Da die Bearbeitung durch Senkerodieren
völlig kraftfrei erfolgt, reicht als Gestell ein einfacher Bohrständer, an dem das Werkstück
entsprechend befestigt werden kann.
Zur Spülung kann das Werkstück entweder in das Dielektrikum eingetaucht werden (Petrole-
um) oder mittels einer Aquarienpumpe eine ständige Umlaufspülung erreicht werden (Wasser-
spülung). Die Spülung kann dabei völlig ungeregelt laufen, lediglich muß die Bearbeitungsstelle
immer geflutet sein. Deshalb ist die Spülung eine separate Komponente ohne Verbindung zum
Grundgerät.
un
13
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Das Grundgerät ist weitaus komplexer aufgebaut. Der Generator (hier Pulserzeugungs- oder
Leistungsmodul genannt), die Antriebselektronik (das Schrittmotortreibermodul), die Prozeß-
steuerung und die Bedienerschnittstelle (Steuer- und Bedienteil) sind in einem kompakten 10-
Zoll-Gehäuse untergebracht. Aus diesem Grund mußten inbesondere bei der Leistungsfähigkeit
(Spitzenstrom) des Pulserzeugungsmoduls Abstriche gemacht werden.
än
Durch das Zusammenspiel der mechanischen Komponenten, Leistungselektronik und Firmware
ergibt sich jedoch trotzdem ein sehr komfortables und dynamisches System, das sich insbeson-
dere durch eine schnelle Inbetriebnahme und weitestgehende Automatisierung auszeichnet.
3.2. Firmware
Die Firmware ist ein verhältnismäßig aufwendiger Teil des Grundgeräts. Sie erfüllt unterschied-
liche Aufgaben wie:
• Bedienerschnittstelle (Eingabe- und Darstellungsfunktion)
llst
• Prozeßregelung
• Diagnosefunktionen
und implementiert folgende Funktionen:
• Spaltweitenregelung
• Vorschubanzeige und -Überwachung
• Spülzyklen
• Pulsgeneratorsteuerung
• Hand- und Schnellvorschubsteuerung
• Menüsteuerung für Grund- und Prozeßeinstellungen
• Sensorabfragen und
• Grafische Darstellung
vo
Generell ist sie ist für einen ATmega32 implementiert, wobei jedoch insbesondere die scope-
Funktionen nur mit einem ATmega644 funktionieren.
Im folgenden werden Implementierungsdetails beschrieben. Die Quelltexte sind auf der Website
des Autors verfügbar.
3.2.1. EDM-Modus
Der EDM-Modus ist der zentrale Betriebsmodus des Senkerodierers. Hier wird der Prozeß
gesteuert und überwacht. Seinerseits besteht er aus mehrere Untermodi, die im folgenden
un
dargestellt werden. Nur die mit einem Piktogramm dargestellten Betriebsmodi sind für den
Benutzer sichtbar und erlauben Benutzerinteraktion.
Initialisierungsmodus Alle für den EDM-Modus notwendige Peripherie wird initialisiert, der
Schrittmotortreiber wird im Niedrigenergiemodus gestartet. EEPROM-Daten der Einstellun-
gen werden gelesen.
14
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
llst
vo
un
15
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Initialisierung des Verfahrmodus Pulserzeugung (falls aktiv) wird angehalten, eventuell statt-
findende automatische Verfahrbewegungen gestoppt.
än
vorschubmodus und mit einem langen Tastendruck ins Menü gewechselt werden.
Initialisierung des Handvorschubs Die Funkenerzeugung wird gestartet.
Handvorschub Die Funkenerzeugung ist in Betrieb. Der Eilgang ist abgeschaltet. Mit
dem Drehgeber läßt sich die Z-Achse langsam verfahren, der Ist-Strom wird nur ange-
zeigt. Mit einem kurzen Tastendruck kann in den Automatikvorschubmodus und mit
einem langen Tastendruck ins Menü gewechselt werden. In diesem Modus kann der Nullpunkt
sehr präzise gesetzt werden.
Initialisierung des automatischen Vorschubs Der Timer für den automatischen Rückzug wird
llst
gestartet. Die Funkenerzeugung wird (falls nötig) eingeschaltet. Eventuell stattfindende Ver-
fahrbewegungen werden gestoppt.
Automatischer Rückzugmodus Die Z-Achse wird bis zum in den Einstellungen hinter-
vo
legten Wert zurückgezogen, um ein Spülen zu ermöglichen. (Achtung: Der Wert wird
negativ interpretiert!) Ist die Rückzugsposition erreicht, wird automatisch wieder in
den automatischen Vorschubmodus gewechselt. Im normalen Automatikbetrieb wird ständig
zwischen dem automatischem Vorschub und -Rückzug gewechselt.
Mit einem kurzen Tastendruck kann in den Verfahrmodus und mit einem langen Tastendruck
ins Menü gewechselt werden.
Deinitialiserung Alle EDM-Routinen werden angehalten. Der Schrittmotor wird in eine Rast-
position gefahren und der Treiber abgeschaltet. Der EDM-Modus wird verlassen und in das
Einstellungsmenü gewechselt.
un
16
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Im EDM-Menü kann mit dem Drehgeber navigiert werden und mit dem Taster die an-
deren Betriebsmodi erreicht werden:
Z-Achse Nullen Der Bezugspunkt der Z-Achse (z.B. für den automatischen Rückzug notwendig)
än
und die Positionsanzeige wird auf die aktuelle Position gesetzt.
Zieltiefe Im automatischen Vorschubmodus wird bei dieser Tiefe in den Verfahrmodus zurück-
geschaltet, d.h. der automatische Vorschub wird gestoppt und die Funkenerzeugung abgeschal-
tet.
Firmware-Info Anzeige der Firmware-Revision, build-Datum, Compilerversion und Zielplatt-
form.
Einstellbar sind:
• Zmax,norm Default-Zieltiefe in Millimetern
• tlift Rückzugverzögerung: Zeitdauer, nach der im automatischen Vorschubmodus die Elek-
trode zum Spülen zurückgezogen wird. Ist tlift = 0s, ist der automatische Rückzug deak-
vo
tiviert.
• Zlift Rückzugshöhe: Auf diesen Abstand wird die Elektrode zum Spülen zurückgezogen.
Diese Größe bezeichnet einen Abstand, d.h. die Position bei einem positiven Abstand ist
negativ!
• ton,min Minimale Einschaltdauer: Dieser Wert ist durch die Endstufe bedingt und be-
zeichnet die kleinste Dauer, bei der die Endstufe noch einen ordentlichen Puls erzeugt.
Er limitiert im EDM-Prozeß die Einstellmöglichkeiten.
• toff,min Minimale Ausschaltdauer: Dieser Wert ist durch die Endstufe bedingt und be-
zeichnet die kleinste Dauer, bei der die Endstufe noch den Stromfluß unterbrechen kann.
un
17
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Die Größen ton,min , toff,min und Dmax sind einzeln einstellbare Grenzen, im Prozeß aber
voneinander abhängig. Die tatsächlichen Prozeßlimits werden so berechnet, daß alle Gren-
zen eingehalten werden. Dadurch ist der tatsächlich einstellbare Bereich etwas kleiner als
die Einzelgrenzen hier suggerieren mögen.
• Isoll,max Maximaler wählbarer Sollstrom, Spitzenwert
än
Das Einstellungsmenü kann entweder durch Speichern oder Abbrechen verlassen werden. Jeder
Speichervorgang wird unmittelbar in das interne EEPROM des Controllers geschrieben.
Hilfsfunktionen Hier finden sich Funktionen, die Hauptsächlich zur Fehlersuche dienen können,
für den eigentlichen Verwendungszweck aber nicht von Belang sind. Das Menü wird genau wie
das EDM-Menü mit Drehgeber und Taster bedient.
• SRAM-dump: Darstellung der aktuellen Speicherbelegung des Controllers als Pixelmu-
ster. Durch den SRAM läßt sich mit dem Drehgeber scrollen, mit dem Taster diese
Funktion wieder verlassen. Diese Funktion beeinflußt die SRAM-Belegung und ändert
sich auch durch das Scrollen. zum Systemstart wird der gesamte Speicher mit 0xAA ge-
füllt. An diesem charakteristischen Muster läßt sich vom Programm ungenutzter Speicher
llst
umittelbar erkennen. Läßt sich mit einem Tastendruck wieder verlassen.
• Flash-dump: Darstellung der Flash-Belegung des Controllers als Pixelmuster. Durch den
Speicher läßt sich mit dem Drehgeber scrollen, mit dem Taster diese Funktion wieder
verlassen. Insbesondere der Speicherplatz von Piktogrammen und Schriftarten und ver-
brauchter Speicherplatz sind sofort erkennbar. Läßt sich mit einem Tastendruck wieder
verlassen.
• EEPROM-dump: Darstellung der EEPROM-Belegung des Controllers als Pixelmuster.
Wäre das EEPROM größer als auf eine Displayseite geht ließe sich mit dem Drehgeber
scrollen. Mit dem Taster läßt sich diese Funktion wieder verlassen. Alle Einstellungen
sind als Pixelmuster erkennbar. Läßt sich mit einem Tastendruck wieder verlassen.
• Chars test: Anzeige aller Zeichen des aktuellen Zeichensatzes. Läßt sich mit einem Ta-
stendruck wieder verlassen.
• Encoder test: Testen der Drehgeber-Haptik. Läßt sich mit einem Tastendruck wieder
vo
verlassen.
• Key test: Testen, als wie lange ein Tastendruck erkannt wird. Ein Tastendruck startet die
Messung, ein weiterer Tastendruck löscht die Anzeige und bereitet die nächste Messung
vor. Läßt sich mit dem Drehgeber und anschließendem Tastendruck wieder verlassen.
• Scan I2 C bus: Durchsucht den I2 C-Bus nach angeschlossenen Geräten und stellt die ge-
fundenen Adressen dar. Läßt sich nach dem Scan mit einem Tastendruck wieder verlassen.
Nach der Rückkehr aus den Menüs ist der EDM-Prozeß immer im Verfahrmodus.
un
3.2.3. Aufbau
Der Aufbau der Firmware ist verhältnismäßig überschaubar (siehe Abbildung 3.5 auf Sei-
te 20). Eine Unterteilung in hardwareabhängige und hardwareunabhängige Module erleichtert
im Laufe der Entwicklung den Wechsel der Hardwareplattform von AVR auf STM32. Solange
die Hardware für die neuere Plattform nicht stabil ist, werden beide durchgehend unterstützt.
18
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
Comic von Randall Munroe http://xkcd.org/1513/
Abbildung 3.4.: Vermutlich wurde der Cartoon von der Firmware dieses Projekts inspiriert.
llst
Abbildung 3.5 auf der nächsten Seite zeigt den logischen Aufbau der Firmware. Die meisten
Modulnamen sind selbsterklärend und werden nicht weiter beleuchtet. Es verbleiben:
Uhr Die Uhr dient vorwiegend dem Benutzer als heartbeat-Signal und zeigt die Systemlaufzeit
in Stunden, Minuten und Sekunden an. Sie hat eine Gangabweichung von mehreren
Sekunden pro Stunde, da der Uhrentakt aus dem Regler-update gespeist wird. So zeigt
eine laufende Uhr die Funktion von Regler und Zustandsmaschine an.
AVR-Kompatibilität Die Firmware wurde ursprünglich für einen AVR geschrieben. Die AVR-
Kompatibilitätsmakros stellen sicher, daß sie auch auf einem STM32 ohne Modifikatio-
nen genutzt werden kann. Dies umfaßt die Verfügungstellung von delay-Routinen für
zeitunkritische Funktionen, die Adressierung von Konstanten im Programmspeicher und
Routinen für eine kompatible Verwaltung von EEPROM-Daten (entweder in- oder ex-
tern) auf beiden Hardwareplattformen.
Hardwaretestfunktionen für alle Firmwaretreiber sind über das Menü verfügbar.
vo
3.2.4. Grafik-LCD
Das Grafik-LCD wird durch die Routinen mit einer durchgehenden Adressierung versehen,
so daß die zwei getrennten Abschnitte mit je einem Displaycontroller nicht beachtet werden
müssen. Es ergibt sich ein Adressraum von 0 bis 1024 (128×64 Pixel). Bei einer Schriftbreite
von 6 Pixeln passen in eine Zeile 21 Zeichen + 2 Pixel.
Bei den Displays vom Typ „TG12864B“ ist ein Controller vom Typ S6B0108 (ähnlich KS0108)
un
verbaut. Die Pinbelegung der LEDs (Anode/Kathode) und der benötigte LED-Vorwiderstand
variieren.
Das Grafik-LCD vom Typ „64128A-LED“ ist auf den ersten Blick pinkompatibel und ver-
spricht ein deutlich besseres Kontrastverhältnis als die TG12864B. Die LED-Pinbelegung ist
genau umgekehrt wie bei den meisten TG12864B-Exemplaren und die Befestigungsbohrungen
19
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
EDM-
Zustands-
maschine
än
Spül- Abstands- Benutzer- Benutzer- Konfig-
bewegung regelung eingaben ausgaben Menüs
AVR- Hardware-
Uhr Kompa- Test- Menü
tibilität Funktionen
Text- und
Motor- Grafik-
llst
delay pgmspace EEPROM
steuerung funktionen
haben nur einen Durchmesser von 2,5mm. Auch die Ansteuerroutinen dieses LCDs sind nicht
100% identisch (das busy-timing ist etwas empfindlicher), obwohl der gleiche Displaycontroller
vorliegt.
vo
Escapesequenzen
• Umschalten der Schriftart
\es Umschalten auf kleine, tiefgestellte Schriftart für Indizes (Merkwort: subscript),
3 × 6 Pixel
\en Umschalten auf normale Schriftart, 5 × 8 Pixel
\eb Umschalten auf fette Schriftart, 8 × 8 Pixel
un
20
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
−→ y
0 0 64
1 128 192
2 256 720
3 384 448
4 512 576
än
5 640 704
6 768 832
7 896 960
• Standard-Steuersequenzen
\n Neue Zeile
llst\t Tab: Vorschub auf das nächste 32-Pixel-Raster
\b Backspace: Eine Zeichenbreite (Festbreitenmodus) oder eine Pixelspalte (variable
Schriftbreite) zurückspringen, ohne daß das darunterliegende Zeichen gelöscht wird.
Nicht alle Schriftarten sind vollständig implementiert (siehe Abbildung 3.7 auf der nächsten
Seite), sondern lediglich die für den Betrieb notwendigen Zeichen. (Die 4×8-Schriftart beispiel-
weise, die hauptsächlich für die platzsparende Darstellung von Einheiten gedacht ist, vefügt
nur über Kleinbuchstaben, Zahlen, µ und für alle anderen Zeichen lediglich Platzhalter.) Alle
Schriftarten sind Kompromisse aufgrund der geringen Auflösung des Grafik-LCDs.
3.2.5. Schrittmotorsteuerung
Step-Dir-Steuerung
vo
Für die Beschleunigungsrampen ist in der ersten Näherung eine stückweise konstante Beschleu-
nigung anzunehmen. (Später werden aufgrund des Losbrechmoments noch ein paar langsamere
Schritte vorangestellt.) Damit gilt:
a = const.
vi (t) = a ti
si (t) = a t2i .
Zwischen zwei Schritten:
si+1 − si = 1
2 a t2i+1 − 12 a t2i
un
q
ti+1 = t2i + 2 si+1a−si
q
2
= t2i + a
21
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
3 × 6 Font 5 × 7 Font
än
(keine Umlaute) (ASCII + Umlaute)
4 × 8 Font
(Zahlen und Kleinbuchstaben)
llst
8 × 8 Font
(komplette Codepage 850)
5 × 8 Font
(ASCII + Umlaute)
1 1 2
= ∆t̄0
ā 2
Damit ergibt sich eine Rampenschrittfolge zu:
q
2
∆ti+1 = t2i + ∆t̄0 − ti
Da bei der diskreten Implementierung die Zeitabstände nur ganzzahlige Vielfache des Basi-
stakts abbilden können, wird aufgerundet:
q
2
un
Aufgrund des Losbrechmoments wird ab Anfang der Beschleunigungsphase keine konstante Be-
schleunigung, sondern mehrere Schritte eine konstante Geschwindigkeit gefahren. Gegen Ende
der Beschleunigungsphase kann aufgrund der Einschränkungen eines ganzzahligen Vielfachen
des Interrupttakts keine konstanten Beschleunigungs mehr erreicht werden.
22
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
∆treal = {30, 30, 29, 29, 27, 27, 25, 24, 22, 20, 18, 16, 14, 13, 12, 10, 10, 9, 8, 8, 7, 6, 6, 5, 5, 4, 4} · 1ms
än
10
ideal
real
1
t
llst 10
0
10
0 1 2
10 10 10
step
Damit ist die Rampe sehr stark vom Idealzustand abweichend, erlaubt immerhin praktisch ein
etwa zehnmal schnelleres Verfahren im Eilgang als eine statische Schrittweite.
TMC222-basierte Schrittmotorsteuerung
Die interne Zählung des TMC222 basiert auf 1/16-Schritten. Bei der aktuellen Spindel gilt:
b 10 µm
32 Schritte =
vo
Überlauf nach:
65536 Schritten ≈
b 20,48 mm .
In der Firmware muß der Überlauf also korrekt behandelt werden.
3.2.6. Pulserzeugung
Die Pulserzeugung muß Grenzen der Endstufe berücksichtigen. Die Grenzen sind:
• ton,min Minimale Einschaltdauer: Die kleinste Dauer, bei der die Endstufe noch einen
un
23
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
• Tmax Maximale Periodendauer: Die Periodendauer begrenzt die Pulsrate und sollte des-
halb innerhalb sinnvoller Grenzen liegen.
Für die (realistischen) Parameter ton,min = 3µs, toff,min = 5µs, Dmax = 50% und Tmax = 100µs
sieht das erlaubte Gebiet wie in Abbildung 3.9 aus. Die Grenzen der Pulserzeugung ton,min ,
100
än
ton,min
t
90 off,min
20%
Dmax
Tmax
80
30%
70
40%
60
50%
[us]
50
off
t
40
30
20
10
llst 0
0 10 20 30 40 50 60 70 80 90 100
ton [μs]
toff,min , Dmax und Tmax können im Einstellungsmenü im EEPROM hinterlegt werden. Die Logik
der Endstufe (active high oder active low) dagegen kann nur beim build-Prozeß im Quelltext
angepaßt werden.
3.2.7. Abstandsregelung
ADC-Messung
vo
Das Datenblatt [Dat12, S.236] empfiehlt einen ADC-Takt zwischen 50 und 200kHz. Eine nor-
male Wandlung benötigt 13 ADC-Takte. (Sample & hold findet 1,5 Takte nach dem Start der
Wandlung statt.)
Mit einem Prescaler von 64 ergibt sich eine Abtastfrequenz von ca. 24kHz und der ADC-Takt
befindet sich mit 312kHz deutlich außerhalb des spezifizierten Bereichs.
Durch den ADC-Zeitmultiplex, bei dem das Stromsignal jeden zweiten Zeitschlitz und alle
anderen Signale dazwischen abgetastet werden, ergibt sich für die Strommessung eine effektive
Abtastfrequenz von 12kHz und für alle anderen Signale 2,4kHz.
un
Aus dem ADC-Abtast-Takt von 24kHz werden auch alle anderen Zeitkonstanten (Abstands-
regelung, Systemuhr, Display-refresh, Taster-Abfrage usw.) bis auf die Pulserzeugung abgelei-
tet.
24
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
3.3. Steuerteil
Der Steuerteil ist für die Benutzerschnittstelle (Schaltplan siehe Seite 39), Abstandregelung und
Pulserzeugung (auf Signalpegel) und wenige Nebenfunktionen zuständig. Er besteht aus einem
mit 16MHz getakteten ATmega32, einem TG12864B-Grafik-LCD und Schutzbeschaltung. Es
sind Anschlüsse für 4 Potenziometer und einen Drehgeber mit Taster (Benutzerschnittstelle)
än
und für den Schrittmotorteil vorhanden. Darüberhinaus sind freie Pins der MCU auf zwei
Schnittstellen (Spare I2 C und Spare Port) herausgeführt.
3.3.1. Beschreibung
llst
Abbildung 3.10.: Leiterplatte für den Steuerteil
vo
Die Top-Seite der Leiterplatte ragt in ein aus EMV-Gesichtpunkten ziemlich versautes Gehäu-
se. Auf der Bottom-Seite ist das Grafik-LCD angebracht, das auch die Größe der Leiterplatte
bestimmt.
Der ATmega32 wurde in der bedrahteten Variante verwendet, um den Prozessor nach dem
Anschluß der Firmwareentwicklung durch ein Exemplar mit noch nicht abgenutzten Flash-
RAM und EEPROM ersetzen zu können.
Alle Bedienelemente auf der Frontplatte (bis auf den großen Netzschalter) sind mit dem Steu-
un
25
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
sich das Datenblatt leider ausschweigt. Durch die Wahl der Bestückung der Widerstände R2–
R5 können beide Displayvarianten mit dem gleichen Layout benutzt werden.
SV2 ist der Anschluß für den ISP-Adapter. Hierüber kann die Schaltung bei der Firmwareent-
wicklung mit Spannung versorgt und programmiert werden.
Die Spannungsversorgung erfolgt über SV3. An diesem Stecker ist ein ca. 10cm langes Flach-
än
bandkabel. Bis auf die Versorgungsspannung, Pin11 (Sense+) und GND sind alle Leitungen
niederohmige Ausgänge.
Der Port „Spare I2C“ oder SV4 ist für die Nutzung mit einem langen Flachbandkabel mit
mehreren kHz gedacht, vorerst aber nur ein Reserveanschluß für spätere Hardwareerweiterun-
gen.
Die Eingänge X2 bis X6 sind mit verschnürten Kabeln bis ca. 10cm Länge lang an Potis (10k)
bzw. Tastern angeschlossen.
X1 ist ein Port „für alle Fälle“, der noch keinen Anwendungszweck hat. Hier sind einfach alle
übrigen Portpins hingelegt. (Bei der Leiterplattenerstellung wurde noch davon ausgegangen,
llst
daß X6 der Reserveport und X1 für den Drehgeber verwendet wird - dementsprechend ist die
Schutzbeschaltung an X6 größtenteils nicht bestückt und an X1 unterdimensioniert.)
Die Widerstände R1 und R21 dienen dazu, einen eventuellen Kurzschluß an angeschlossenen
Schaltern/Tastern/Potis olfaktorisch erfaßbar zu machen.
Der Lötjumper SJ1 hat den Zweck, den I2C-Anschluß bei Bedarf separat abzublocken und ist
nur für die Verwendung der Leiterplatte in einem anderen Projekt relevant. Im Normalfall ist
SJ1 geschlossen und L1 nicht bestückt.
3.3.2. Bauteilauslegungen
• D1, D2, D4-D7 Die maximale Eingangsspannung des AD-Wandlers des ATmega ist
VCC+0,5V, auch wenn die Referenzspannung Vref = 2,56V beträgt. BAT46 sind deutlich
vo
26
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
3.4. Schrittmotortreibermodul
tine. Zur Flexibilität gegenüber späteren Erweiterungen ist die Steckverbindung im Leiterplat-
tenlayout 20-polig ausgeführt, wird aber nur 16-polig bestückt. Noch nicht belegte Pins sind
auf die Testpads TP3 und TP4 in Konjugation mit den Massepins TP7 und TP8 geführt.
An den Steckverbinder SV202 wird das Leistungstreibermodul mit der Pulserzeugung und den
Strommonitoren angeschlossen.
Aus EMV-Gründen sind die Leiterbahnen weitestgehend an der Unterseite ausgeführt und die
Oberseite dient als Massefläche. Mehrere Testpads gewähren deshalb die Zugänglichkeit von
der Oberseite:
un
27
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
TP1 GND
TP2 Soll-Abgleich für Schrittmotrstrom
TP3 Für spätere Erweiterungen
TP4 Für spätere Erweiterungen
TP5 +12V
TP6 +5V
än
TP7 GND (für spätere Erweiterungen)
TP8 GND (für spätere Erweiterungen)
3.5. Leistungstreibermodul
llst
Abbildung 3.12.: Leiterplatte für das Leistungstreibermodul
Der Schaltplan im Anhang für die Pulserzeugung ist bewußt unvollständig gehalten. Die Grün-
de können beim Autor erfragt werden.
3.5.1. Strommessung
Die ersten Versuche mit einer Regelung nach dem Mittelwert waren zwar sehr vielversprechend,
haben sich aber insbesondere bei kleinen Tastverhältnissen als unzuverlässig erwiesen. Deshalb
werden von einer Regelung nach dem Spitzenwert bessere Ergebnisse erhofft, da in diesem Fall
die Genauigkeit der Messung nicht mehr vom Tastverhältnis abhängt, sondern allein eine Ei-
un
genschaft der Funkenstrecke ist. Da der A/D-Wandler des Controllers einen Takt von maximal
ca. 40kHz erlaubt, der zudem nicht besonders gut auf den Funkentakt von bis zu 150kHz zu
synchronisieren ist, wird die Spitzenwerterkennung als Analogschaltung nach Abbildung 3.13
auf der nächsten Seite implementiert.
Der Instrumentenverstärker AD8217 erzeugt eine Meßspannung bezogen auf das Logikpotenzial
0V/5V und liefert eine stromproportionale Spannung in diesem Bereich.
28
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Die Eingangsfilter für die Sense-Eingänge befinden sich auf der Steuerplatine, gehören jedoch
logisch zur Sensorkomponente des Leistungstreibermoduls und werden deswegen hier behan-
delt.
R L
C
un
Das Eingangsfilter wird als einfaches RLC-Filter ausgeführt. Von diesem kann die Übertra-
gungsfunktion analytisch bestimmt werden. Der Betrag lautet:
Ua 1
H(ω) = =√
Ue ω L C + ω R2 C 2 − 2 ω 2 L C + 1
4 2 2 2
29
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Optimalwerte laut Simulation sind R = 1,8kΩ, C = 4,7 nF und L = 4,7 mH (blaue Kurve).
Da Induktivitäten größer als 1mH nur schlecht erhältlich sind, werden folgende Werte gewählt
(blaue Kurve): R = 390Ω, C = 22nF und L = 1,0 mH. Es ergibt sich der Amplitudengang
aus Abbildung 3.15. Die gestrichelten Linien im Diagramm entsprechenden der Filterkurve
0
10
än
−1
10
−2
10
−3
10
−4
10
−5
10
llst
−6
10
1 2 3 4 5 6 7
10 10 10 10 10 10 10
5 22k
R ser=1 D1 D2 R4 L1 out-tp
out
U1 C2
R2 B AT54 B AT54 390 1.0m R3
in C1
22n 100k
vo
out-op
V1 LT1679 1n
1k
out
.tran 0 1m 0
Die Simulation der Sense-Schaltung am Beispiel von „Sense+“ in LTspice (siehe Abbildung 3.17
auf der nächsten Seite) zeigt starke Überschwinger des kapazitiv belasteten Operationsverstär-
kers, die so auch am Oszilloskop beobachtet werden können und bei denen es sich folglich nicht
un
um Meßfehler durch Einstrahlungen in die Meßleitung handelt. Gemäß der Simulation ist zu
erwarten, daß die Schaltung aus Spitzenwertdetektor und Filter für eine Abstandsregelung
ausreichend ist.
30
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
3.3V
V(in)
V(n003)
3.0V
V(n005)
2.7V
2.4V
2.1V
än
1.8V
1.5V
1.2V
0.9V
0.6V
0.3V
0.0V
0.0ms 0.1ms 0.2ms 0.3ms 0.4ms 0.5ms 0.6ms 0.7ms 0.8ms 0.9ms 1.0ms
Da die Spannung des Pulsgenerators durch den Transformator feststeht, beziehen sich die
Leistungsgrenzen immer auf den Strom. Hierbei sind unterschiedliche Komponenten für die
unterschiedlichen Grenzen im Spitzen-, Mittel- und thermischen Mittelwert verantwortlich.
Meßshunt
Meßhunt Isabellenhütte PBV, 0,005Ω. 3W Dauerleistung (ohne Kühlkörper), keine Berück-
sichtigung des Puls-Pausen-Verhältnisses:
s s
Pmax 3W
vo
Imax = = = 24,5A
R 0,005Ω
Instrumentenverstärker
un
Uin,max 250mV
Iˆmax = = = 50A
RShunt 0,005Ω
31
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Ladeelko
Der Ladeelko vom Typ BSA 4.700/100 wird als „schalt-und kurzschlußfest. Höchste Wechsel-
strombelastung, kleinste Impedanzwerte, niedriger ESR“ beworben. Nach den Werten müßte
es sich um den Typ LH100M4700BPF-3540 handeln mit:
Capacitance 4700µF
än
Rated Voltage 100 V.DC
Size 35×40mm
Leakage Current 3 mA
Dissipation factor (Tan δ) 0,25
Ripple 120 Hz 5750 mA
(die Größe im Datenblatt entspricht allerdings nicht den realen Abmessungen). Bei einer Tem-
peratur von 70°C darf der zulässige Rippelstrom mit dem Faktor 1,3 multipliziert werden, bei
einer Frequenz von 1–10kHz noch einmal mit dem Faktor 1,15. Damit ergibt sich ein zulässiger
Rippelstrom von:
llst Iripple = 5750mA · 1,3 · 1,15 = 8,6A
bei dem nach 2000 Betriebsstunden noch 80% der Kapazität verbleiben.
Bei dem angestrebten Strom ist der Ladeelko somit als Verschleißteil zu betrachten.
Endstufen-FET
Endstufen-FET IRFB4110, VDSS = 100V, RDS(on),max = 4,5mΩ, ID = 120A. Maximum Power
Dissipation PD,max = 370W.
Begrenzung durch Maximalstrom (Package):
ID = 120A
s s
PD,max 370W
ID,max = = = 287A
RDS(on),max 4,5mΩ
Transformator
Lasslop Ringkerntransformator20/92, LRB 566014 50-60Hz 300VA VDE 0551, Prim.230V,
SEK.1 48.5V /9.8A
Sekundärspannung Transformator:
un
32
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Gleichrichterbrücke
Type KBPC2510
än
sine-wave superimposed on rated load
llst
vo
un
33
dig
Literaturverzeichnis
än
[Bro12] Brown, Geoffrey: Discovering the STM32 Microcontroller. Online, 2012. – Projekt
muEDM
[Dat03] Datasheet: ATmega8/ATmega8L – 8-bit Microcontroller with 8KBytes In-
System Programmable Flash. 2003. – Forschungsbericht. – Datasheet
[Dat07] Datasheet: ATmega8/ATmega8L – 8-bit Microcontroller with 8KBytes In-
System Programmable Flash. 2007. – Forschungsbericht. – Datasheet
[Dat11a] Datasheet: ATmega32 – 8-bit Microcontroller with 32KBytes In-System Pro-
llst grammable Flash / Atmel. 2011. – Forschungsbericht. – Datasheet
[Dat11b] Datasheet: ATmega48/V,ATmega88/V,ATmega168/V – 8-bit Microcontroller
with 4/8/16KBytes In-System Programmable Flash. 2011. – Forschungsbericht. –
Datasheet
[Dat12] Datasheet: ATmega644/V – 8-bit Microcontroller with 64KBytes In-System Pro-
grammable Flash. 2012. – Forschungsbericht. – Datasheet
[Fle05] Fleming, Ben: The EDM How-To Book. Lindsay Publications Inc., 2005 http://
www.lindsaybks.com/bks9/edm/index.html. – ISBN 978–0976759607. – Projekt
muEDM
[Gin02] Ginzel, Jens: Funkenerosives Senken mit Neuro-Fuzzy Prozeßführung und Fehlent-
ladungsbehandlung unter Berücksichtigung der Bahn- und Planetärerosion, Ham-
vo
34
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
[Mec04] Mecklenburg, Robert: Making Projects with GNU Make. 3rd Edition. O’Reilly,
2004. – ISBN 978–0–596–00610–5
[Mis04] MISRA-C:2004. Guidelines for the use of the C language in critical systems. MIRA
Limited, 2004
[Not06a] Note, Application: AVR446 - Linear speed control of stepper motor / Atmel. 2006
än
(Rev. 8017A-AVR-06/06). – Forschungsbericht. – Application Note
[Not06b] Note, Application: AVR505 - Migration between ATmega16/32 and ATme-
ga164P/324P/644P / Atmel. 2006. – Forschungsbericht. – Application Note
[OYTY87] Ozaki, Yoshio ; Yatomi, Takeshi ; Tsurumoto, Kazuo ; Yamamoto, Masahiro:
Elektrische Funkenerosionsmaschine. 1987
[TO86] Tsurumoto, Kasuo ; Ozaki, Yoshio: Energiezuliefereinheit für eine Funkenerosi-
onsmaschine. 1986
[WB06a] Weck, Manfred ; Brecher, Christian: Werkzeugmaschinen - Maschinenarten und
llst Anwendungsbereiche. Springer Berlin Heidelberg, 2006. – ISBN 978–3–540–22502–
7. – Projekt muEDM
[WB06b] Weck, Manfred ; Brecher, Christian: Werkzeugmaschinen 3: Mechatronische
Systeme, Vorschubantriebe, Prozessdiagnose. Springer Berlin Heidelberg, 2006. –
ISBN 978–3–540–22506–5. – Projekt muEDM
[Wik11] Wikipedia: Funkenerodieren. http://de.wikipedia.org/wiki/
Funkenerodieren. Version: 2011. – [Online; zugriff Juli 2011] Projekt mu-
EDM
[Wik13] Wikipedia: Drahterodieren. http://de.wikipedia.org/wiki/Drahterodieren.
Version: 2013. – [Online; zugriff Dezember 2013]
[Wit97] Witzak, Michael P.: Verbesserung der Prozeßführungssysteme für funkenerosive
vo
35
dig
A. Schaltpläne
än
llst
vo
un
36
1 2 3 4 5 6 7 8
IC1PORTA_L
FT PA0 23 PA0 WKUP Benutzerschnittstelle LCD101 TG12864B
24 R101
PA1: USART2_RTS/ADC12_IN1/TIM2_CH2 FT PA1
FT PA2 25 PULSE3 33k
26 PULSE2 E B A
GND1
FT PA3
29 nur übrig*) 3 IC5A
PA4: SPI_NSS/USART2_CK/ADC12_IN4 FT PA4
30 nur übrig*) 1 GLCD_V0
PA5: SPI_SCK/ADC12_IN5 FT PA5
FT PA6 31 PULSE1 2 C117
32 TS219D
1
3
5
7
PULSE0
SV8
FT PA7
X1-1
X2-1
X3-1
X4-1
X5-1
TS219D100n
A A
+5V/1
R102
10k
IC1PORTA_H
2
4
6
8
67
GND1
C119 100n
PA8: USART1_CK/TIM1_CH1/MCO PA8 TG12864B-05
R103
3,9k
R104
3,9k
R105
3,9k
R106
3,9k
+3V3
68
8
PA9: USART1_TX/TIM1_CH2 PA9 Belegung von Pin19/20 variiert!
PA10: USART1_RX/TIM1_CH3 PA10 69 6
PA11: USART1_CTS/CANRX/USBDM/TIM1_CH4 PA11 70 C107 7
PA12: USART1_RTS/CANTX/USBDP/TIM1_ETR PA12 71 C106 C102 C103 C104 C105 5
72 JTMS 100n IC5B
GND1
4
+3V3
PA13 100n
76 100n 100n 100n 100n
LED_MP
LED_PM
VEE
RET
CS2
CS1
DB7
DB6
DB5
DB4
DB3
DB2
DB1
DB0
E
R/W
D/I
V0
VDD
VSS
PA14 JTCK
PA15 77 JTDI +5V/1
2k2
R107 C115
10n
C111
GND1
IC1PORTB_L C112C113C114 R108
GLCD_VEE
10n
10n
10n
GND1 GND1 GND1 GND1
C110
C108
C109
nicht FT PB0 35 SENSE3 100n 10µ
TAST
ENC_B
ENC_A
POTI1
POTI2
POTI3
POTI4
36 SENSE2 GND1 R113
C116
R109
nicht FT PB1
PB2 37 BOOT1 R114 +5V/1 GND1
GLCD_V0
un 89 JTDO
GLCD_VEE
PB3 2x15R
GLCD_RES
GLCD_CS2
GLCD_CS1
GLCD7
GLCD6
GLCD5
GLCD4
GLCD3
GLCD2
GLCD1
GLCD0
GLCD_EN
GLCD_RW
GLCD_RS
PB4 90 JNTRST GND1
GLCD_PWM
91
PB5: I2C1_SMBAI//TIM3_CH2**)/SPI1_MOSI FT PB5
PB6 92 I2C1_SCL/2.1B
B 93
B
PB7 I2C1_SDA/2.1B
JTAG,RESET und Boot select
+3V3
IC1PORTB_H
95 ENC_A JTAG
PB8
PB9 96 ENC_B 1 2 C101
PB10 47 I2C2_SCL/2.1D JNTRST 3 4
PB11 48 I2C2_SDA/2.1D JTDI 5 6 100n
PB12: SPI2_NSS/I2C2_SMBAI/USART3_CK/TIM1_BKIN PB12 51 JTMS 7 8
52 PB12
GLCD_RS 9 10
PB13 JTCK
PB14 53 GLCD_RW R110 11 12
54 GLCD_EN GND1 10k 13 14 4
S1 1
JTDO
vo PB15
15
17
16
18
3 2
BOOT1 GND1 R111 C118
IC1PORTC_L R112 19 20
15 POTI4 GND1 10k 100n
nicht FT PC0
nicht FT PC1 16 POTI3 SV1 GND1
nicht FT PC2 17 POTI2 R116 IC1RESET GND1 GND1
18 POTI1 10k 14
nicht FT PC3 NRST +3V3
C nicht FT PC4 33 SENSE1 3 C
34 SENSE0 94 R115 2 serial bootloader
nicht FT PC5 BOOT0 normal
PC6 63 GLCD_CS1 10k 1
PC7 64 GLCD_CS2 STM32F10XVXT6 C120 JP1
100n +5V/1 +12V
IC1PORTC_H GND1
C121
100n
L5
65
L6
PC8 GLCD_RES
PC9: -||TIM3_CH4 PC9 66 GLCD_PWM Schnittstelle zur Treiberstufe
PC10: -||USART3_TX PC10 78 SPARE3
SMB001
+3V3
8 C132 PULSE0 PUL0 IC2A SENSE- GND_5V
(siehe DB S.27ff) FT PC14 GND1
llst
FT PC15 9 100n 9 8 +5V 1 2 GND_5V
2 3
none
10R
R125
10
R122
R123
R124
PD9 56 GLCD1 IC2D
C126 C125
57
10µ 100n
PD13 1k
61 47µ 20
13
62 18
C137
C138
C139
PD15 GLCD7 PULSE2 17
GND1 16
PULSE1 15
none
C128
2n2
GND1
C127
14
none
PULSE0 13
än IC1PORTE_L
97 TAST
gefädelt
R118 330R
+12V 11 12
10
PE0 GND1 SEN1 L2 GND1 SENSE0 9
PE1: -//- PE1 98 nur übrig*) SENSE1 R119 SENSE1 7 8
PE2: TRACECK PE2 1 PE2 1m 390R +5V 5 6
PE3: TRACED0 PE3 2 PE3 R120 SENSE2 3 4
PE4: TRACED1 PE4 3 PE4 TRACE IC1PORTE_H IC1PORTD_L R121 SENSE3 1 2
C131
22n
C130
4 39 81
none
PE5: TRACED2 PE5 PE5 PE8: //TIM1_CH1N FT PE8 PD0: //CANRX FT PD0 390R
PE6: TRACED3 PE6 5 P6 PE9: //TIM1_CH1 FT PE9 40 PD1: //CANTX FT PD1 82 390R GND1
+3V3
PE7: -//TIM1_ETR PE7 38 PE7 nur übrig*) PE10: //TIM1_CH2N FT PE10 41 PD2: TIM3_ETR FT PD2 83 SEN2 L3 GND1
PE11: //TIM1_CH2 FT PE11 42 PD3: //USART2_CTS FT PD3 84 SENSE2 C133
PE12: //TIM_CH3N FT PE12 43 PD4: //USART2_RTS FT PD4 85 1m
BAV199
BAV199
BAV199
BAV199
22n
C135
46 SV6 88 SV7
none
I2C Versorgung
+24V +5V/1
+3V3
D2 GND1
I2C-Devices U1 U3
A L7 TSR_1-2450 LM1117-3,3 A
X7-1 D1 1 VI VO 3 IN OUT C122
+5V/1 SK34
SMB001
+
+
+
+
auch C25 C01 C02 C232 GND C233 C234 ADJ C235 10p
2
2
C201
10µ
IC1OSC
+5V/1 + 470µ 4µ7 100n 100n 10µ 10µ 12
L201 X7-2 OSC_IN Q1 8MHz HC49US
C202
R201
R202
4k7
1
C205
BAV199
BAV199
BAV199
TSR_1-24120
100n
L8 10p
D201
D202
D203
1 VI VO 3
GND1
+
+
I2C1_SCL/1.2B R203 1 2 C03 C227 C228 C04 GND1
R204 3 4 SPARE_I2C SMB001 GND
I2C1_SDA/1.2B
2
100R 5 6 4µ7 100n 100n 10µ
7 8
un SPARE_I2C_LINE/1.5E R205 9 10 GND1
100R
SV4 GND1
B B
+5V/1 +5V/1
+5V/1 +5V/1
14
VCC
C217
IC3
8
C206 IC2P
6 SCL VCC 100n
100n
150R
R208
Versorgung
Pegelwandler
7
GND
7
WP
vo
D3
5,6
+5V/1 3 5
GND1 A2 SDA
2 A1 GND1
LED1
Yellow
3
EEPROM
Array
1 A0
2 GND TP_GND
4
JP2 24CL04BSM
1
I2C-Addr: 0xA0 GND1 GND1 +3V3
R206
R207
0R
GND1
C GND1 C38 C
+3V3
100n IC1BAT_AN
6 VBAT
GND1
L9 SMB001
73 NC
+
+
C207 C208 C209 C05
+
GND1
12
19
11
IC4 GND1 GND1 GND1
GND1
llst
IC1POWER
50 VDD_1
R209
R210
4k7
VCP
VBAT
VBAT
CPP 10 C214 75 VDD_2
I2C2_SDA/1.2B 1 SDA
2 9 200n 100
I2C2_SCL/1.2B SCL CPN VDD_3
D R212 C31 28
D
R213 C32 VDD_4
20 SWI OA1 18 SV5 C33
8 HW OA2 16 1 C34 11 VDD_5
C35
+3V3
1k 2
+
GND1 3 C220
5 TST OB1 15 4
6 13 10µ 100n49
än OPEN OB2 VSS_1
TMC222-SI
74 VSS_2
4 GND VDD 3 GND1
+
7 GND C218 C219 99 VSS_3
14 GND
17 100n 1µ 27
GND VSS_4
E E
µEDM DL1DOW
Steuerteil
Rev. 0.7-2
dig
I2C,Versorgung
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
+5V/1
SPARE PORT
R1
10R
X1-1
X2-1
X3-1
X4-1
X5-1
C1
10n 10n 10n
A 100n A
C2
C3
C4
C5
C6 C7 C8 TG12864B-05
10n
10n
10n
10n
GND1 GND1 GND1 GND1
GND1 Belegung von Pin19/20 variiert!
+5V/1
PA4
PA5
PA6
PA7
PA1
PA2
PA3
+5V/1
SV1
GND1
9
8
7
6
5
4
3
2
1
20
19
18
17
16
15
14
13
12
11
10
R2 C9
R3 100n
GND1
R4
E
R5
2x15R S
GLCD_VEE
GLCD_RES
GLCD_CS2
GLCD_CS1
GLCD_DB7
GLCD_DB6
GLCD_DB5
GLCD_DB4
GLCD_DB3
GLCD_DB2
GLCD_DB1
GLCD_DB0
GLCD_EN
GLCD_RW
GLCD_RS
10k
R6
A
GND1
2 1
3
un 4
RN1
5
6
B 7
B
8
9
none
1k8
1k8
1k8
1k8
1k8
1k8
1k8
1k8
GND1
R7
R8
R9
R10
R11
R12
R13
R14
+5V/1
vo +5V/1
1
3
2
4
GLCD7
GLCD6
GLCD5
GLCD4
GLCD3
GLCD2
GLCD1
GLCD0
5 6
10k
Motor current 13
R15
IC1 motor enable 11 12
C 9 RESET (ADC7)PA7 33 PA7 motor dir 9 10 Achtung, Pinbelegung gegenüber Rev. 0.5 geändert C
(ADC6)PA6 34 PA6 motor step 7 8
C10 (ADC5)PA5 35 PA5 pulse 5 6
2
22p 12 XTAL2 (ADC4)PA4 36 PA4 sense 3 4
Q1 (ADC3)PA3 37 PA3 +5V/1 +5V in 1 2
13 XTAL1 (ADC2)PA2 38 PA2
1
16MHz
GND1 C11 39 PA1
(ADC1)PA1
L1
22p 32 AREF (ADC0)PA0 40 PWR_SENSE
none
30 AVCC
C12
100n
+5V/1 31 GND (SCK)PB7 8 GLCD7
D1
BAT46
7 GLCD6
+5V/1
(MISO)PB6 R16 1m GND1 R17
C13
10 6
100n
100n
100n
GLCD3
llst
(AIN1/OC0)PB3
C14
C15
(AIN0/INT2)PB2 3 GLCD2
C17
D2
BAT46
22n
C16
2
C18
none
(T1)PB1 GLCD1
2
+5V/1
100n
(T0/XCK)PB0 1 GLCD0
GND1 GND1 GND1 GND1
SJ1
(TOSC2)PC7 29 M_CURRENT
1
(TOSC1)PC6 28 M_ENABLE
D (TDI)PC5 27 M_DIR D
+5V/1 26 M_STEP
D4
BAT46
D5
BAT46
L3
(TDO)PC4
R26
4k7
R27
4k7
BEAD/10-600P-YY
C25
(TCK)PC2 24 SPARE2
100n
(SDA)PC1 23 I2C_SDA R28 1 2
22 I2C_SCL R29 3 4 SPARE_I2C
R25
(SCL)PC0
150R
än 100R 5 6
+
C21 (OC2)PD7 21 SPARE3 7 8
D3
5,6
20 GLCD_RES 9 10
D6
BAT46
D7
BAT46
(ICP)PD6
TP1 10µF (OC1A)PD5 19 PWR_PULSE
(OC1B)PD4 18 GLCD_CS2 SV4 GND1
(INT1)PD3 17 GLCD_CS1 +5V/1
LED1
GND1 (INT0)PD2 16 GLCD_EN GND1 C19
GND1 (TXD)PD1 15 GLCD_RW
14 GLCD_RS 100n GND1
(RXD)PD0
none
MEGA32-P
10R
R21
C20 X6-1
R18
R19
R20
100n
E R22 E
R23
R24
EAB
1k µEDM DL1DOW
C22
C23
C24
none
Steuer-/Bedienteil
dig
Rev. 0.6
GND1
1 2 3 4 5 6 7 8
1 2 3 4 5 6
+5V/1 +5V/1 +5V/1
+5V/1
IC201
1k8
Q201
C201
100n
R201
4k7
R204
BC849 12 VCC
R202
10k
R203
22k
TP2
3 5k6
A 4k7 R205 A
2 C202 GND1 20 RESET VREF 15
R206
R207
1
TP1 3n3 16 19 R208
OSC H/F
MOTOR_CURRENT 17 CW/CCW 1k8
GND1 GND1 GND1 18 CLOCK
MOTOR_DIR
10 ENABLE
MOTOR_STEP SENS1 14
un
MOTOR_ENABLE 4 A SENS2 13
6 B
7 C CNTL 11
SV201 9 D
20 19 R213 470R 5 INH1 SYNC 1
R210
10k
R211
10k
R212
10k
18 17 R214 470R 8 INH2
R209
1k8
C204
100n
2 1 TP4 TP7
SV202 GND1
+12V
C206
100n
GND1 +12V
PULSE 9 10
+12V 7 8 GND1
GND1 SENSE+ 5 6
IC202 GND1
100n
200n
C205
C207
C203
6 ENABLE_A SEN_A 1
11 ENABLE_B SEN_B 15
C GND1 C
+5V/1
llst
5 INPUT1 OUT1 2
X201-1
100n
C208
7 INPUT2 OUT2 3
10 13
X201-2
INPUT3 OUT3 X202-1
12 INPUT4 OUT4 14
X202-2
8 GND
+12V
D205
ES2D
D206
ES2D
D207
ES2D
D208
ES2D
TP5
L298
GND1
än
R217
R218
0.5R
X203-1
B201
IC203 +5V/1 GND1
7805TV
TP6
+
+
9V~ C209 C210 C211 C212 C213 1 VI VO 3
D 10mF 470µF 100n 10n 2n2 GND D
X203-2
2
C214 C215 µEDM DL1DOW
100n 100n SCHRITTMOTOR
Rev. 0.5
GND1
dig
1 2 3 4 5 6
1 2 3 4 5 6 7 8
A A
+5V
TP_+5V
8
R101 3 IC101A
100n 10n 10k 1
+70V 2
C101 C102 OPA2340
4
X101-1 TP_GND2
D101 TP_SENSE+ SENSE+
GND2 1n
BAT54S
un R102
TP_SENSE C103
1 +IN 22k
B B
C104 5 R103 5 IC101B GND2
5m
OUT
10k 7
R104
100p 8 -IN 6
OPA2340
GND
IC102
R105 0R D102
AD8217
TP_SENSE- SENSE-
4
100n
PULSE AMPLIFIER BAT54S
R106 C105
GND2
22k
GND2
vo
6,5R 50W
+
48V~ X102-2
4700µF/70V
C C
EMV Filter
X102-1
X101-2
GND1
llst
TP_GND1
GND1
TP_+10V
12V
L101
L102
D D
BEAD-001
BEAD-001
PULSE
C110 100n
SV101
än 10 9 PULSE
GND_10V
8 7 +12V
6 5 SENSE+
4 3 SENSE-
2 1 +5V
GND_5V
100n
C112
L104
L103
BEAD-001
BEAD-001
R114 +
+5V
E 10R E
GND1 GND2
220µ
C111
µEDM
dig
LEISTUNGSTEIL
Rev. 0.8
1 2 3 4 5 6 7 8
dig
B. Neukonzeption: Kleinleistungsteil
än
Im folgenden wird eine Neukonzeption des Steuer- und Bedienteils und des Schrittmotorteils
begonnen. Zentrale Punkte dieser Neukonzeption sind:
• Neue MCU auf ARM-Cortex-M3-Basis
• Mikroschritt-Endstufe
• Zusammenlegung von Steuer- und Schrittmotorteil zum „Kleinleistungsteil“
Erhoffter Nutzen ist:
llst
• Ein schnellerer ADC (bis 1 Mhz) und eine größere Rechenleistung erlaubt den Test zeit-
gemäßer Regelkonzepte.
• Die Mikroschritt-Endstufe mit gleichzeitig höherer Betriebsspannung erlaubt eine sanf-
tere Abstandsregelung und höhere Eilganggeschwindigkeit.
• Eine Zusammenlegung von Schrittmotor- und Steuerteil schafft mehr Freiraum im Ge-
häuse für weitere Entwicklungen der Endstufe und erleichtert die Kühlung.
Erwarteter Nebennutzen ist:
• Kennenlernen der ARM-Hardwareplattform
• Entwicklung einer Rapid-Prototyping-Umgebung für ARM
Aufgrund der zahlreichen Neuerungen wird erwartet, daß Revision 0.7 mehr ein proof of concept
vo
B.1. Entwicklungsdetails
STM32-Besonderheiten
Der STM32 verfügt über zwei getrennte I2 C-Busse (I2C1 und I2C2). Für eine sinnvolle An-
steuerung ist nur einer nötig, da die einzige zeitkritische Komponente der Schrittmotortreiber
ist, der aber nur dann aktiv ist, wenn alle anderen I2 C-Geräte inaktiv sind. Trotzdem sind
un
die Schrittmotorsteuerung und der Rest an unterschiedlichen Bussen, die miteinander durch
Nullwiderstände verbunden werden können, beispielsweise um den externen I2 C-Anschluß zum
Debuggen nutzen zu können. Die I2 C-Pins sind 5 V-tolerant. Da der I2 C open drain mit pull-ups
läuft funktioniert ein I2 C-Bus auf 5 V auch ohne Levelshifter.
42
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Überzählige Pins des STM32 sind auf Stiftleisten geführt. Aus Platzgründen sind im zweilagi-
gen Layout Stiftleisten im 2 mm-Raster vorgesehen:
än
PortE-high (komplett): Timer1 (komplett)
Bootloader: Die STM32F103 sind ab Werk mit einem USART-Bootloader versehen, der mit
den Pins BOOT0 + Reset genutzt werden kann. Da ein kompletter JTAG-Port vorgesehen ist,
ist das für die Entwicklung erst einmal uninteressant, vielleicht aber für Firmware-Updates im
geschlossenen Gerät oder für die Nachbaubarkeit eine Option.
Da selbst bei aufgeschraubtem Gerät das Poti nur sehr schlecht zugänglich ist, wird eine
Verstellbarkeit des Kontrast per Firmware angestrebt. Hierzu findet die Schaltung in Ab-
bildung B.1 Verwendung. Sie nimmt auf der Leiterplatte in etwa die gleiche Fläche wie ein
liegendes Poti ein, benötigt aber keine Pads oder Durchkontaktierungen, was den effektiven
Platzverbrauch gegenüber einem Poti sogar vermindert. Zudem kann sie auf der Unterseite der
Leiterplatte angeordnet werden, so daß die Oberseite als Kühlfläche für Spannungsregler und
Schrittmotortreiber zur Verfügung steht.
Die Schaltung stammt aus unbekannter Quelle (Google Bildsuche) und bedurfte nur marginaler
Anpassungen (Bauteilwerte).
un
JTAG-Adapter
Im Gegensatz zu den AVRs ist für die STM32-MCUs mit dem ST-LINK/V2 ISOL ein ko-
stengünstiger JTAG-Adapter mit Potenzialtrennung verfügbar, der angeblich auf 2500 VRMS
Isolationsspannung ausgelegt ist. Nach einem Blick auf die Leiterplatte des kompakten Adap-
ters (siehe Abbildung B.2 auf der nächsten Seite) ist dies durchaus glaubwürdig.
43
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
Abbildung B.2.: Leiterplatten ST-Link V2/isol
Der Adapter kann JTAG und SWD. Letzeres bietet mit der sogenannten Debug-printf-Schnitt-
stelle sogar die Möglichkeit, zwischen MCU und PC potenzialgetrennt Nachrichten über UART
llst
auszutauschen, ohne das weitere Adapter notwendig wären. Die ST-Link-Programmer auf den
Discovery-Boards und der ST-LINK/VS ISOL sind im Betrieb gegeneinander austauschbar,
ohne daß das ST-Link-Utility neugestartet werden muß. Das Target-Device wird vom Pro-
grammer sofort erkannt und muß nicht erst eingestellt werden.
Alles in allem verspricht der JTAG-Adapter am STM32 eine deutlich komfortabler vorberei-
tete Entwicklungsumgebung als das ISP-Gegenstück am AVR, was den Mehraufwand beim
Layouten durch den größeren Stecker mehr als wettmacht.
vo
Ein Wannenstecker mit 2,0 mm ist deutlich kompakter als sein 2,54 mm-Pendant. Adapterkabel
mit 2,0 mm und 2,54 mm Pfostensteckern scheinen allerdings nicht einfach erhältlich zu sein.
un
Selbst sind sie recht knifflig herzustellen: Auf der 2,0 mm-Seite ist mit dem Kabel im 1,27 mm-
Raster folgendes zu machen:
• Adern auf ca. 3 cm Länge vereinzeln. Die Isolierung sollte dabei sehr gleichmäßig in der
Mitte getrennt werden.
44
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
• Für jede Einzelader die Isolierung durch Strecken dünner machen, damit sie ins 1,0 mm-
Raster paßt. Dabei aufpassen, daß sie nicht abreißt.
• Mit zwei selbstklemmenden Flachpinzetten lassen sich die Adern passend anordnen und
im Stecker verpressen.
Der Aufwand lohnt sich allerdings. In der Realität ist der Unterschied in der Größe der beiden
än
Wannenstecker deutlicher als im Layoutprogramm.
Layout
• Bestückungsdruck: Die minimale Strichstärke 0,15 mm (≈ 6 mil), entspricht Schriftgröße
40 mil, 15%.
• Vierlagiges Layout: Layer-Setup (1+2*15+16). In den inneren Lagen gibt es keinen Re-
strict. Workaround ist ein dünnes Wire, zum dem die Massefläche Abstand einhält oder
das Zusammensetzen durch Teilpolygone.
• Als minimaler Bohrdurchmesser wird 0,5 mm gewählt (Platinensammler: 0,3 mm, Haka-lp
Zwillingsangebot 0,5 mm). Damit ergibt sich durch den Restring der Vias der begrenzende
llst
Faktor für den Platz auf der Leiterplatte.
• Beim Multilayer-Nutzen haben die äußeren Layer eine dünnere Kupferauflage (18 µm vs.
35 µm.
Damit ist die Pinverteilung deutlich komplexer als am AVR, bietet aber auch große Freiheits-
grade:
• Alle ADC-Pins (bis auf PA0) sind gleichwertig in der Firmware adressierbar.
• Alle Timer können gekoppelt werden.
• Es sind viele Pins vorhanden.
Portierungsfortschritt:
• Grafik-LCD-Routinen portiert
45
PA PB
Peripherie Anz. Anforderungen 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
5V-tolerant + + + + + + + + + + + + + + + + + + + + +
GLCD 15 min. 8 zusammenhängend, × × × × × × × × × × - ×
5V-tolerant, 1 PWM
Encoder 3 Pull-ups und/oder Hard- -
ware-Encoder
2
un I C 2 5V-tolerant, × × × × × × × × × × × × × × × × × I2 C1 I2 C1 I2 C2 × × × ×
Hardware-I2 C
Potis 4 ADC (langsam)
× × × × ×
× × × × × × × × × × × ×
Pulse ≥1 PWM ⊕ ⊕ -
JTAG 5 fest × × × × × × × × × × × × × • • • × × × • • × × × × × × × × × × ×
vo
PC PD PD (nur LQFP 100)
Peripherie Anz. Anforderungen 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
5V-tolerant + + + + + + + + + + + + + + + + + + + + + + + + + +
46
GLCD 15 min. 8 zusammenhängend, × × × × × × - - -
5V-tolerant, 1 PWM
Encoder 3 Pull-ups und/oder Hard- - - -
ware-Encoder
I2 C 2 5V-tolerant, × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × ×
Hardware-I2 C
Potis 4 ADC (langsam) ⊕ ⊕ ⊕ ⊕ ⊕ ⊕ × × × × × × × × × × × × × × × × × × × × × × × × × ×
JTAG 5 fest × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × ×
möglich
än ⊕ bevorzugt
+ vorhanden
belegt
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
dig
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
• Encoder-Routinen portiert
• Menü-Routinen portiert
Firmwarebestandteile:
• Peripherietreiber
än
– Grafik-LCD-Routinen
– Schrittmotorsteuerung
– Drehgeberroutinen
– Taster-Routinen
– ADC-Routinen
• Allgemeine Funktionen
– Textfunktionen für Grafik-LCD
– Bitmapfunktionen für Grafik-LCD
– Menü
llst – Uhr
– Scope-Funktionen
• Erodierfirmware
– EDM-Zustandsmaschine
– Regelalgorithmus
– Spülbewegung
– Benutzereingabefunktionen
– Benutzerausgabefunktionen
• Prozessorspezifische Teile
– Memory-dump-Funktionen
– Systemtick-Funktionen
vo
– PWM-Routinen
– I2 C-Routinen
• Testfunktionen
Erhoffter Nutzen:
• Schnellerer ADC (bis 1Mhz) und damit Regelungsmöglichkeit nach Einzelpulsen
Details:
47
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
• Externer I2 C-Anschluß über Potezialtrennung?
• I2 C-EEPROM (STM32 hat kein internes EEPROM)
• Spannungsanpassung für AD-Wandler-Kanäle (irgendwo stand, daß er nicht R2R funk-
tioniert)
• Mit dem kleinen Package (LQFP64) könnte die Pinbelegung sogar eng werden, wenn
Mehrfachbelegungen vermieden werden sollen. Beim LQFP100-Package sind jedoch groß-
zügig ausreichend viele Pins vorhanden.
• Generell sind bei den Sonder-Pins die „default“-Pins und die „remapped“-Pins gleich-
wertig, nur die Initialisierung ist unterschiedlich.
• Pitch LQFP100: 0,5mm.
•
llst
Die Speichergrößen von ATmega644 und STM32F103 sind in etwa vergleichbar:
– Flash: ATmega 644: 64K, STM32F103V8T 64K → STM32 effektiv kleiner
– SRAM: ATmega 644: 4K, STM32F103V8T 20K ' 4 ∗ 4K → beide effektiv gleich
groß
– EEPROM: ATmega 644: 2K, STM32: keins
Flash ist beim ATmega aber nie die begrenzende Größe gewesen, also sollte der STM32
locker ausreichen.
Erwartete Schwierigkeiten:
• Lieferbarkeit STM32
Der STM32 F103VBT6 ist momentan (Januar 2014) bei mehreren B2C-Händlern erhält-
lich.
• TQFP-100-Gehäuse erfordern hochwertige Leiterplatten, MCU nicht austauschbar.
vo
werden.
• Keine Erfahrung mit STM32-Layout, evtl. höhere EMV-Empfindlichkeit
• Keine Erfahrung mit STM32-Programmierung, evtl. ist der STM32 bei I/O-Operationen
sogar langsamer als der AVR
48
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Erhoffter Nutzen:
• feinere Ansteuerung, sanftere Abstandsregelung
• Höhere Versorgungsspannung (24V) und dadurch höhere Eilganggeschwindigkeit
än
• Reduktion der Komplexität durch 2-Draht-Bus und single supply.
Details:
• Versuche mit Mikroschritt-Endstufe TMC222. Der wird TMC222 separat implementiert
und mit dem AVR-System getestet. In diesen ersten Tests stellt er sich gegenüber der
L297/298-Kombination in allen Belangen – bis auf die Reaktionszeit – als überlegen
heraus. Letztere wird also abgelöst werden.
• Der TMC222 benötigt keinen separaten Kühlkörper sondern lediglich eine große Masse-
fläche zur Wärmeabfuhr.
• Mit 800mA ist er nicht viel schwächer als der alte Treiber.
• Der TMC222 benötigt keinen Kühlkörper, sondern eine hinreichend dimensionierte Mas-
llst
sefläche.
Erwartete Schwierigkeiten
• Lieferbarkeit TCM222
Der TMC222 ist momentan bei Reichelt lieferbar, wird aber erwartungsgemäß lange vor
L297/L298 abgefkündigt werden.
• Es muß eine zweite Versorgungsspannungsebene (12V) mit geringem Strom für die Pul-
serzeugung vorgesehen werden.
Hier kommt ein integrierter Spannungswandler zum Einsatz. Die Nutzung einer weite-
ren (vorhandenen) Trafowicklung würde zuviel Leiterplattenfläche beanspruchen und das
Testen verkomplizieren.
• Eventuell ist die Steuerung über den I2 C-Bus zu langsam.
vo
Erwarteter Nutzen:
• Durch die Verkleinerung des Platzbedarfs ist bessere Kühlung und/oder ein größerer
Leistungsteil möglich.
Details:
• Schrittmotormodul direkt auf Steuerteil, neuer Name „Kleinleistungsteil“
un
• Versorgung: Steuerteil mit 19V AC, daraus erzeugt: 26V DC (ungeregelt), 5V DC über
Schaltregler, 3,3V über Linearregler, evtl. 10V (ungeregelt) für Pulserzeugung.
• Spannungsversorgung: Es werden vier Spannungen benötigt (Schrittmotortreiber 20V
ungeregelt, Puls 10V ungeregelt, 5V geregelt, 3,3V ungeregelt. Für die Erzeugung der
10V und 5V bieten sich Schaltreglermodule an, die nur unwesentlich teurer als selbst
aufgebaute Schaltregler sind (Größenordnung 6 e vs. 7 e).
49
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Erwartete Schwierigkeiten:
• Möglicherweise reicht der Platz einer zweilagigen Leiterplatte nicht für eine Zusammen-
legung.
Nach zeitraubenden Layoutversuchen ergibt sich, daß der große Ladekondensator separat
untergebracht werden muß. Dadurch ist die Baugruppe aber auch deutlich schlanker und
än
der große Ladekondensator kann an einer Stelle mit geringerer thermischer Belastung
im Gerätegehäuse untergebracht werden. Damit paßt aber alles auch bei großzügigen
Kühlflächen auf eine zweiseitige Leiterplatte.
• Drei bis vier Versorungsspannungen, teilweise mit hoher Stromtragfähigkeit, erhöhen das
Risiko bei ungewollten Kurzschlüssen.
Es ist nicht auszuschließen, daß Kurzschlüsse zwischen Pins mit unterschiedlichen Be-
triebsspannungen zu einer Zerstörung insbesondere der MCU führen.
Der Drehgeber für die Benutzereingabe vom Typ Panassonic EVEQDBRL416B ist mechanisch
mit 16 Rastungen pro Umdrehung. Die Kontakte sind nicht prellfrei. Bei einer gleichförmigen
Drehung gibt er ein nahezu ideales Quadratursignal mit 50 % Tastgrad und 90◦ Phasenverschie-
bung (siehe Abbildung B.4). Bei einem menschlichen Bediener sind die Signale umittelbar nach
einem Rastpunkt deutlich kürzer und prellen bei schnellem Drehen stark. Entsprechend häufig
muß der Drehgeber abgetastet werden. Praktisch hat sich ein Abtastintervall von 1 . . . 2 ms
bewährt.
un
50
dig
C. Entwicklungsprojekt
än
C.1. Nächste Schritte
C.2.1. Leistungsteil
51
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Zukünftige Verbesserungen
• Snubber (Ein Rechtecksignal ist ein Oberwellengenerator par excellence.)
• Experimentieren mit Greinacher-Schaltung zur Vorzündung
C.2.2. Steuerteil
än
Verbesserungen und Korrekturen Rev. 0.6 → 0.7
In Revistion 0.7 werden Steuerteil und Schrittmotorteil zusammengefaßt. Neuer Name ist
„Kleinleistungsteil“ oder weiterhin „Steuerteil“.
• Breiteren Wannenstecker vorsehen für „Sense-“ und zukünftige Erweiterungen
In Revision 0.7 sind neben einer Versorgung mit 10V und 5V auch 4 ADC-Kanäle und 4
PWM-Kanäle verfügbar. Das Footprint des Wannensteckers wurde so angepaßt, daß bei
einer Bestückung mit einem 10-poligen Wannenstecker die Pinbelegung kompatibel ist.
Ein Pegelwandler sorgt für 5 V-kompatible Ausgänge.
llst
• Kontrasteinstellung per Software ermöglichen
Der STM32 hat genügend freie PWM-Kanäle, um dies problemlos zu ermöglichen. Siehe
auch B.1 auf Seite 42
• Anordnung der Montagebohrungen für Display und Frontplatte überprüfen und ggf. kor-
rigieren
Für das Grafik-LCD wurde ein Package angelegt, so daß sich bei künftigen Layouts das
Verhältnis von Stiftleiste und Bohrungen nicht mehr verschieben kann.
remapbarer Pin)
• Freie Pins auf 0805-LEDs für Statusanzeigen
C.2.3. Schrittmotorteil
un
52
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
• Wannenstecker verbreitern
„Sense-“ benötigt eine weitere Leitung. Es direkt eine Reserve (vorerst auf Lötpunkte)
für weitere Erweiterungen vorgesehen.
• Footprint der ES2D viel zu eng
korrigiert zu Rev. 0.5
• Transistor zwischen Poti-Beinchen herausholen
än
Ist viel zu eng, korrigiert zu Rev. 0.5
Verbesserungen (zukünftig)
Zukünftige Verbesserungen für den Schrittmotorteil werden aufgrund der Zusammenlegung bei
der Steuerplatine geführt.
C.2.4. Gesamtgerät
Umgesetzte Verbesserungen
• Kabelstrümpfe mit Schrumpfschläuchen sichern
Das ergibt einen schönen, glatten Abschluß.
• Eletrodenkontakt am Bohrfutter
Ein Flachkabelstecker am Borhbutter erleichtert die Kontaktierung kleiner Elektroden.
Der Strom fließt dabei durch die Bohrfutterbacken.
un
53
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Zukünftige Verbesserungen
• Feste Gewinde für Rückwandteile
• Befestigung von Kühlkörpern und Leistungs- und Schrittmotorplatine überarbeiten
• Wacklige Griffe durch etwas Besseres ersetzen
• Zwangskühlung vorsehen (Lüfter) (?)
än
• Wanne mit Ablauf
• Solide Elektrodenklemmen
• Endlagenschalter (?)
C.2.5. Firmware
Umgesetzte Verbesserungen
• Anfahrrampe für Schrittmotor
(Atmel-Application-Note AVR 446) → umgesetzt, aber nicht nach der Appnote
• Rücksetzen der Z-Koordinate
llst
→ umgesetzt
• Berücksichtigung der Logik der Treiberstufe
→ umgesetzt
• Automatischen Rückzug
Implementiert mit einstellbarer Höhe und Häufigkeit
• Transitive Modi für einmalige Aktionen beim Moduswechsel
→ umgesetzt
• Bereich der Z-Achse absichern: 24-Bit-Istwerte oder stall detection
Implementiert als int_least24_t
• Bei der Rückkehr aus dem Menü darf der Drehgeber-Wert nicht verändert werden.
→ umgesetzt
• Funktionen auf Atomizität überprüfen
Alle ≥ 16-Bit-Variablen überprüft
vo
• Zieltiefe
→ umgesetzt
Zukünftige Verbesserungen
• Timeout für Schrittmotor großzügiger gestalten
• Scrollbare Texte
• Diagnosefunktionen
• Fehlerbehandlungsfunktionen
• Überlastabschaltung
un
• Trockenlaufdetektion
• Detektion einer Verschweißung
• Unterschiedliche „screens“ für eine übersichtliche Ansicht der Prozeßparameter
• Plotter-Funktion für Prozeßparameter; erleichtert eine Beurteilung des dynamischen Ver-
laufs
54
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
C.2.6. Firmwarebugs
än
Im Gegensatz zu Atmel Studio und Eclipse erlaubt die CooCox IDE keine globale Ansicht
der Task-Listen, also aller TODOs und FIXMEs. Deswegen werden die Bugs jetzt im Ent-
wicklungsdokument gesammelt, da für ein Ein-Mann-Projekt das Anlegen eines Bugtrackers
sicherlich übertrieben wäre.
Die Liste wurde erst sehr spät angefangen und betrifft daher von einem schon recht weit
gediehenen Softwarestand.
Der TMC222 produziert bei I2 C-Takten über 250 kHz heftiges clock stretching bis hin zu
Busfehlern. Damit sind die 250 kHz eine Systemgrenze.
DONE : Escape-Sequenz \e durch \033 ersetzen. Die Escape-Sequenz \e erzeugt eine Com-
piler-Warnung bei der Warnstufe „pedantic“.
FIXED : I2C-Scan auf dem AVR zeigt merkwürdige Symbole bei nicht-vorhandenem Busteil-
nehmer
Die Symbole sind Debug-Ausgabe bei unerwarteten Rückgabewerten der Scan-Routine.
i2c_simple_avr.c kann im Gegensatz zum STM32-Pendant beim Start ein NACK von
un
einem Timeout unterscheiden. In i2c_test.c wird der zusätzliche Fall jetzt berücktsich-
tigt.
DONE : I2C-Routinen auf AVR nutzen immer noch alte Timeout-Methoden
Routinen auf globalen Zähler glu_millis umgestellt. Da die Timeouts > 400ms sind,
muß die Differenz als 16-Bit-Wert gerechnet werden.
55
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
DONE : Enums für benannte boolesche Funktionsaufrufe vorsehen, z.B. in I2C Stop/noStop
FIXED : I2C - Differenz bei Timeouts kann ueberlaufen (da int8_t; muß mindestens in16_t
sein)
Überprüft und korrigiert in den Dateien i2c_simple_stm32.c, i2c_stm32f10x.c und
i2c_simple_avr.c
än
DONE : Refactoring der Encoder-Routinen. Zusammenlegen von AVR und STM32 sollte kei-
nerlei Probleme bereiten. (Beachten: STM32 unterstützt auch Hardware-Encoder)
Die Encoder-Routinen für den AVR sind handlich, übersichtlich und gut getestet. Es gibt
vorerst keinen Grund, sie komplizierter zu machen.
Nachtrag: Die Encoder-Routinen für STM32, AVR und den PC-Mockup wurden doch
zusammengelegt (SVN 506), um den AVR-Teil weiterhin aktuell zu halten.
DONE : key_avr_stm32.c Dokumentation bereitstellen (SVN384)
DONE : Kommentierung aller Quelltextdateien vereinheitlichen (SVN394)
llst
DONE : PWM auf STM32 mehrkanalig ausbauen
Auf dem STM32 können jetzt soviele PWMs wie Timer vorhanden sind unabhängig be-
trieben werden. Dies bedingt allerdings eine Hardwareänderung, da unglücklicherweise
die Pins für Pulse0 und die GLCD-PWM auf dem gleichen Timer liegen. Die Hardwa-
reänderung läßt sich mit Fädeldraht ohne Auftrennen von Leiterbahnen ausführen (PC9
und PE14 miteinander verbinden). Damit sind trotz Modifikation alte Firmware-Ent-
wicklungsstände weiterhin lauffähig. (SVN392)
TODO : ADC beschleunigen, um mit voller Abtastrate für höherwertige Regelalgorithmen
arbeiten zu können.
TODO : Makefile fuer STM32-Version schreiben
vo
56
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
DONE : menu.c - Menü für Einstellungen auf andere Datentypen erweitern (nicht nur int16_t),
um Konfigurationsdaten im EEPROM und im SRAM effizient hinterlegen zu können.
Jetzt können Zeiger auf die Datentypen uint8_t, uin16_t, int8_t, int16_t oder auf
void-void-Funktionen im gleichen Feld im Menü-Struct hinterlegt werden. Bei den 8-Bit-
Datentypen wird auf Üeberlauf geprüft und dieser verhindert. Bei den 16-Bit-Datentypen
än
wird davon ausgegangen, daß
1. die oberen und unteren Grenzen richtig gesetzt sind und/oder
2. niemand die Geduld hat, den Drehgeber um mehr als 32768 Rastpunkte in eine
Richtung zu drehen.
EDIT: Nichtsdestotrotz werden auch 16-Bit-Werte begrenzt.
FIXED : EDM-Menue - „Achse Z=0“ bleibt hängen.
Im nicht-initialisierten Zustand wurde ewig auf die Antwort des Motortreibers gewartet.
Jetzt existiert eine Zustandsvariable, die den Reset direkt abbricht, wenn der Motortrei-
ber noch nicht initialisiert ist.
llst
DONE : Klären, was asserts auf dem AVR und dem STM32 genau machen.
Auf dem STM32 müssen sie selbst implementiert werden - vorher sollte fwrite imple-
mentiert werden. Auf dem AVR sind sie schon korrekt vorhanden, unterstützen aber
natürlich nicht die Anforderung des GLCD-refresh.
DONE : Matlab-Mock-up wieder lauffaehig bekommen.
Der Fehler im Mock-up mit Matlab-mex-Funktionen hing u.A. mit einer Division durch
Null in menu.c bei der Erzeugung des Scrollbalkens zusammen. (SVN 364)
DONE : SVN-Versionsstand hinterlegen
Das Skript getsvnversion.bat fragt vor jedem Build den aktuellen Versionsstand des
Repositorys ab und erzeugt die Headerdatei svn_version.h. Diese Datei sollte aus die-
vo
FIXED : Schnelles Verfahren im EDM-Modus - Achse fährt immer nur in eine Richtung (ge-
testet bei ARM-Firmware).
Problem hat sich mit dem Beheben des Puffer-Bugs in der TMC222-Init-Funktion (s.u.,
SVN 380) erledigt.
57
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
FIXED : Beim Start des EDM-Modus führt die Achse manchmal eine Verfahrbewegung aus
(getestet bei ARM-Firmware)
Problem hat sich mit dem Beheben des Puffer-Bugs in der TMC222-Init-Funktion (s.u.,
SVN 380) erledigt.
FIXED : Beim Start des EDM-Modus werden nur noch seltsame Symbole auf dem Display
än
dargestellt (nur bei AVR-Firmware).
Problem hat sich mit dem Beheben des Puffer-Bugs in der TMC222-Init-Funktion (s.u.,
SVN 380) erledigt.
DONE : Schnelles Verfahren: Einstellbarer Sicherheitsbereich für die schnelle Bewegung. Mo-
mentan wird dem Motortreiber für die schnelle Bewegung immer die maximal einstellbare
Distanz vorgegeben. Bremsen erfolgt mit dem Soft-Stop-Kommando über I2C. Wenn die
Busübertragung während der Bewegung unterbrochen wird, kann der Vorschub so noch
eine beachtliche Strecke (10,2 mm) zurücklegen. Sicherer wäre es, wenn nur eine minimale
Mehrdistanz über das nächste planmaessige Buspaket hinaus vorgegeben würde.
llst
Der nötige Vorhalt wird jetzt geschwindigkeitsabhängig so berechnet, daß er 125 ms be-
trägt. Im Eilgang bei 4,9 mm/s sind das immerhin immer noch 0,6 mm Auslaufstrecke. Ein
kürzerer Vorhalt in der Größenordnung der Zykluszeit veranlaßt allerdings die Geschwin-
digkeitsplanung des TMC222, nicht bis zur vollen Endgeschwindigkeit zu beschleunigen.
Die 125 ms sind ein empirisch ermittelter Kompromiß. (SVN409)
DONE : Brutale Fehlerbehandlung mit assert() und error() implementieren.
Die Makros assert und error sind jetzt für beide Plattformen verfügbar. Sie mußten
komplett neu implementiert werden, da die Eigenheiten der Display-Darstellung berück-
sichtigt werden müssen. Ebenso ist eine eigene Implementierung von fwrite für den
STM32 notwendig. (SVN402)
NICE TO HAVE : I2C-Reset für AVR-Routinen enthält noch kein freitakten.
vo
FIXED : eeprom_read_block liefert völlig falsche Werte zurück (Fehler bemerkbar in Test
„EEPROM-TEST (RB)“.
Beim Lesen werden über den Bus nach dem ersten (richtigen) Byte nur noch 0xFF über-
tragen. Der Fehler ist in der Version 351 ist auch schon vorhanden, wenn mit den blockba-
sierten I2C-Routinen getestet wird. Wahrscheinlich hat diese Funktion also noch nie funk-
tioniert und wurde bisher nicht im Verbindung mit den Send-/Receive-Blockfunktionen
58
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
getestet.
Hängt der AVR mit am I2C, sendet der STM32F103 bei allen Kombinationen Sendbuf-
fer -> Receivebuffer ein NACK hinter jedem empfangenen Byte. Im Gegensatz zum EE-
PROM mach das dem TMC222 aber wohl nichts aus (oder gefällt es ihm sogar???). Ohne
den AVR sendet eeprom_read_block nach dem ersten empfangenen Byte ein NACK,
tmc222_SendCommandAndRead dagegen ein ACK, obwohl beide Funktionen extrem ähn-
än
lich sind.
Das erste Lesen von mehr als einem Byte nach der Initialisierung schlägt bei der device-
spezifischen Implementierung für den STM32F10x fehl. Die vorherige Test-Routine sah
nach jedem Fehler einen Bus-Reset und eine Neu-Initialisierung vor, so daß jedes Lesen
das Erste war. Workaround ist, nach der Initialisierung ein Dummy-Lesen auszuführen.
(SVN377)
FIXED : Test EDM: Verfahren (AVR): Initialisierung schlägt fehlt mit Fehlermeldung 0x0003.
• Der Schrittmotortreiber ist hörbar initialisiert.
• Es wird erfolgreich durchgefürht:
llst – 89 SetMotorParam
– 81 GetFullStatus1 mit Antwort
– FC GetFullStatus2 mit Antwort
– FC GetFullStatus2 mit Antwort
dann wird ein 0xAA gesendet (sAAn).
• Der „Test TMC222“ läuft korrekt durch. Nach dem Knopfdruck zum Beenden star-
tet anschließend aber in den CRC-Test! Wird der CRC-Test durch Knopfdruck
beendet, ist das Menü wieder in Position 1. Der SRAM-Dump zeigt danach aber
keine Auffälligkeiten. Es ist auch noch genügend Platz zwischen Stack und Heap
vorhanden.
– Das Verhalten ist so merkwürdig, daß man einen marodierenden Zeiger vermu-
ten könnte.
– Die Tmc222-Routinen sind frei von dynamischer Speicherverwaltung
vo
– Wird die Menüzeile mit dem CRC-Test, die sich direkt oberhalb der Menüzeile
mit dem TMC222-Test befindet, entfernt, wird nach dem Verlassen eine andere
Routine aufgerufen(!)
Lösung: Die Routine tmc222_init enthält einen festen Puffer, der die Parameter-Structs
aufnimmt. Zwei Parameter-Structs wurden in der Entwicklungsgeschichte vergrößert, oh-
ne daß der Puffer angepaßt wurde. Die Größe wird jetzt mit einem static_assert ge-
prüft (SVN 380).
DONE : In delay.h muß der Systemtakt einzeln eingestellt werden.
un
Systemtakt wird jetzt über main.h global eingestellt. Die system_stm32f10x.c bezieht
ihre Takteinstellung jetzt auch über main.h. Damit ist der Stand immer konsistent.
(SVN395)
DONE : RCC_APBxPeriphClock wird an vielen verschiedenen Stellen in eigenen Codezeilen
eingeschaltet.
59
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
DONE : edm_statemachine muß refaktoriert werden (inkl. Formatierung). (SVN415)
DONE : glcd_textfun muß refaktoriert werden (inkl. Formatierung).Aber nur bei etwas Lan-
geweile. (SVN416)
DONE : menu refaktorieren. (SVN409)
DONE : Projektbeschreibung (Kopfzeile) in main.c anpassen. (SVN 403)
NICE TO HAVE : Logik der Endstufe (active low oder active high) über Menü einstellbar
machen.
FIXED : Build aller Module, die EXIT_SUCCESS oder EXIT_FAILED enthalten, schlägt für den
llst
AVR fehl.
Die <stlib.h> für den AVR enthält die beiden Symbole nicht. Ist wieder in datatypes.h
definiert. (SVN 402)
FIXED : SVN-Versionsupdate beim Build funktioniert nicht. Es wird immer eine alte Version
angezeigt.
Das Script prebuild.bat hat versucht, getsvnupdate.bat im falschen Verzeichnis auf-
zurufen. (SVN 402)
FIXED : Vorschub fährt im EDM-fast-feed-Modus bei schnellen Richtungswechseln ohne Zwi-
schenstop manchmal in die ursprüngliche Richtung weiter.
Es wird sichergestellt, daß bei Vorzeichenwechseln des schnellen Verfahr-Modus garantiert
ein Zyklus mit Stop eingelegt wird. (edm_userinput.c, SVN 419)
vo
TODO : Einfache Abstandsregelung bei die bisherigen ADC-Samplerate für beide Plattformen
implementieren.
FIXED : Heartbeat-Uhr funktioniert auf dem STM32 nicht. (SVN 458)
TODO : Nachsehen, ob Pwmdata_t (pwm.h) incomplete type sein darf.
DONE : Keine Casts von malloc.
FIXME : AVR-Version: Kann sich im EDM-Modus aufhängen, wenn kein Motor angeschlossen
ist.
un
60
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
DONE : Schreiben des EEPROMs überprüft nicht, ob Daten wirklich geschrieben sind, son-
dern nur, ob die CRC-Prüfsumme stimmt. Das führt zu einem falschen Positiven, falls
nur Nullen rückgelesen werden (z.B. das EEPROM gar nicht angeschlossen ist).
Die EEPROM/NVRAM-Routinen sind jetzt ausgelagert und überprüfen mithilfe einer
Magischen Zahl und CRC, ob die Datensätze korrekt sind. (SVN 459)
än
DONE : Das Konstrukt mit der control.h kann entfallen, wenn die Standard-Funktion exit()
Verwendet wird. Dadurch wird der Mock-up übersichtlicher. (SVN 501)
DONE : An mehreren Stellen (Menüs, Testroutinen) wird der Encoder dazu genutzt, einen
Wert in begrenztem Rahmen zu verändern, wobei dieser Teil überall jeweils einzeln im-
plementiert ist. Es ist sinnvoll, dies in eine separate Routine auszulagern.
Es gibt jetzt eine Routine, encoder_get_diff(), die die Veränderung seit dem letzten
Aufruf zurückgibt. Zusammen mit den limadd-Funktionen ergibt sich dann ein Einzeiler
für diese Funktionalität. (SVN 509)
FIXED : Geister-Strings im EDM-Bildschirm auf der STM32-Version. Auch der AVR-Version
llst
und der PC-Version sind diese nicht vorhanden.
Die dem STM32-SDK beiliegende Version von vsnfprintf unterstützt das Leerzeichen-
Flag nicht.
Bei einer Zeile ähnlich dieser:
csign = ’?’;
mm = 30;
um = 77;
snprintf(glstr_Buf,N_TEXTBUF,"Z:%c% 3i,%03i\bmm",csign,mm,um);
überschreibt die dem CooCox-SDK beliegende Funktion snprintf glstr_Buf nur bis
Z:? und beläßt ansonsten die alte Zeichenkette darin, während
vo
csign = ’?’;
mm = 30;
um = 77;
snprintf(glstr_Buf,N_TEXTBUF,"Z:%c%3i,%03i\bmm",csign,mm,um);
die korrekte (wenn auch nicht besonders gut ausgerichtete) Ausgabe liefert. Das CooCox
1.7.6 beiliegende vsnprintf unterstützt das Flag ’ ’ nicht - die Nachimplementierung
ist aber relativ einfach. (SVN 458)
FIXME : Die dem STM32-SDK beiliegende Version von vsnfprintf muß mindestens zwei
Zeichen drucken, sonst wird eine andere Library zu linken versucht.
un
61
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
toolchain unter Windows ist. (SVN 536 im Rahmen des FTM25/6-Rotor-Projekts)
DONE : In Menü andere Inkremente als 1 erlauben.
Ist umgesetzt: Inkrement kann als int8 gewählt werden. Build wird noch fehlschlagen.
(SVN 536 im Rahmen des FTM25/6-Rotor-Projekts)
NO BUG : Beim EEPROM-Schreiben der settings wird selbst im Mockup ein OK zurück-
gemeldet, obwohl nicht geschrieben worden sein kann (erkannt im FTM25/6-Rotor-
Projekt).
Es handelt sich nicht um einen Fehler in den Routinen, sondern um eine bis dahin fehlende
Implementierung der settings_read und settings_write-Funktionen, deren Dummy
llst
immer ein SUCCESS zurückgab.
DONE : GPIO-Funktionen mit einem sinnvollen Namensschema versehen
Die GPIO-Funktionen in der io.h und den Plattformspezifischen include-Dateien wurden
neu benannt. Für AVR-Controller, bei denen die Portregister PORTx, DDRx und PINx
im gleichen Abstand liegen, liegt eine neue Implementierung vor, die beim Aufruf mit
variablen Ports und Pins besser optimiert wird. (SVN 556 im Rahmen des FTM25/6-
Rotorprojekts)
printf() immer mit mindestens zwei Zeichen aufrufen! Die bei CooCox mitgelieferte Vari-
vo
ante von printf() ist buggy. Nicht nur unterstützt sie kein Leerzeichen ’ ’ als Flag
(was sich noch verhältnismäßig einfach nachrüsten läßt), sondern auch sobald irgendein
Aufruf mit nur einem Zeichen, z.B. printf("\a"); erfolgt wird versucht, die Funktion
aus der lib.a einzubinden. Das Resultat ist ein Linkerfehler.
Funktionen außerhalb der Hauptschleife nicht optimieren! Nicht-zeitkritische Funktionen soll-
ten nicht optimiert werden. Insbesondere sind die Datentypen mit plattformabhängiger
Breite (u)int_fastXX_t und (u)int_leastXX_t zu vermeiden.
Ein Fehler, der mit I2 C zusammenhängt ist nie zu einfach, um den Bus mitzuloggen! Der
I2 C-Datenlogger ist ein schnell und einfach angebrachtes Hilfsmittel. Hängt ein Fehler ir-
un
gendwie mit einem per I2 C angebundenen Gerät zusammen (z.B. EEPROM oder Motor)
sollte sofort mitgeloggt werden. Zehn Sekunden loggen helfen oft mehr als zehn Minuten
Quelltext durchsuchen.
62
dig
D. Entwicklungstagebuch
än
9.11. – 27.11.2011
• Projektstart. Es entstehen erste Versuche einer Pulserzeugung mit der Prototypenleiter-
platte vom Mikrocontrollerseminar II und einem FET auf einem Holzbrett.
• Schon sehr früh entsteht die Mechanik für den Vorschub mit einem Schrittmotor für
einen 43mm-Eurohals-Bohrständer. Sie besteht aus einem koaxialen Aufbau mit einer
M6-Gewindestange und einem Gleitlager aus Messing.
• Eine neue Steuerplatine (Rev.0.1) mit einem ATmega16 und einem Grafikdisplay ent-
llst
steht.
15.12.2011
Die Funkenerzeugung und der Schrittmotortreiber scheinen eine gewisse räumliche Trennung
zu benötigen. So haben zwei (unterschiedlich) aufgebaute Leistungsteile nie funktioniert, wenn
sie normal in Betrieb genommen wurden, aber auf Anhieb, wenn der Schrittmotorteil und der
FET-Teil jeweils der anderen Baugruppe gemeinsam in Betrieb genommen wurden.
5.01.2012
Versuche mit einem High-Side-Switch-Treiber schlagen fehl. Es entstehlt etwas Geruchsbelä-
stigung.
vo
6.01.2012
Erster erfolgreicher Probelauf (6mm-Fräser durcherodiert) mit dem Low-Side-Switch-Trei-
ber.
7.01.2012
Neuer Entwicklungszyklus. Es stellt sich heraus, daß das Projekt durchaus aufwendiger ist als
zunächst anhand der dünnen Rechercheergebnisse absehbar war.
• Aufteilung des „Leistungsteils“ in einen Teil zur Funkenerzeugung und einen Schrittmo-
un
63
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
11.01. – 15.01.2012
• Die Frontplatte aus Aluminium ist hergestellt. Damit ist die Anordnung der Bedienele-
mente und der Name „µEDM“ endgültig. Das Grundgerät hat äußerlich (zumindest vorn)
sein endgültiges Aussehen.
• Es zeigt sich, daß die Frontscheibe aus Acrylglas gegen „CRC Quickleen“ extrem emp-
än
findlich ist und sofort zersplittert.
• Leistungsplatine Rev. 0.6 ist hergestellt.
• Kleine Korrekturen im Layout der Steuerplatine
18.01.2012
• Mit dem neuen Leistungsteil wird zum ersten Mal ein 12mm-Fräser mit einer 3mm-Elek-
trode komplett penetriert. Dielektrikum ist destilliertes Wasser, das mit einer Spritzflache
zugeführt wird.
llst
• Die jetzige Hardwareversion wird bis zum Juni 2013 unverändert gelegentlich für kleine
Erodierarbeiten eingesetzt.
1.08.2012
• Migration der Firmware von AVR-Studio 4 auf Atmel-Studio 6.
• Korrektur von Fehler in der Displayausgabe, nicht geflasht.
20.06.2013 – 6.07.2013
• Start eines neuen Entwicklungszyklus. Die Steuerplatine wird neu geroutet (jetzt Rev.
0.6), der I2 C-Bus des ATmega32 wird harausgeführt. Alle freien Pins werden auf Steck-
kontakte mit Schutzbeschaltung herausgeführt. Die Eagle-Dateien für Steuerplatine und
Schrittmotorplatine werden getrennt.
vo
8.07.2013 – 16.07.2013
• Firmware:
– Anpassen der Firmware an die veränderte Pinbeledung von Rev. 0.6
un
64
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
– Kleine Korrekturen in Grafik-LCD-Anzeige; dabei ist auch wichtig, daß am Ende des
Anzeigezyklus’ der Cursor an Displayposition „0“ stehen sollte, da sonst Teile der
Schrift unterschiedlich lange angezeigt werden, was sich in einem Flackern äußert.
17.07.2013
än
• Firmware:
– Alle Grundfunktionen, die ohne die neue Leiterplattenrevision getestet werden kön-
nen funktionieren jetzt: Menüsystem, EEPROM-Speichern von Einstellungsdaten
und schnelle A/D-Wandlung mit 38 kHz
20.07.2013
• Firmware:
– Die Grafik-LCD-Textfunktionen unterstützen jetzt Escape-Sequenzen und mehrere
Schriftarten.
llst
11.08.2013
• Firmware:
– Korrekturen in der Drehgeberroutine
23.08. – 25.08.2013
• Firmware:
– Rafactoring der Firmware. Viele Strings ins Flash ausgelagert, mehr als 1k SRAM
ist dadurch freigeworden!
– Grafik-LCD geht jetzt auch mit Framebuffer, was eine Grafik-LCD-Darstellung un-
abhängig von der Hauptschleife ermöglicht
vo
17.09.2013
• Firmware:
– Neue Schriftgröße 8×8 und Proportionalschrift
– Umbau Menüsystem
26.09.2013
• Firmware: Einbindung eines SHT11-Sensors
un
65
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
27.09.2013
• Stromsensor
– Stromsensor bestehend aus Isabellenhütte-Meßshunt und AD8217 funktioniert er-
staunlich gut. Hauptschwierigkeit ist die Messung mit dem Oszilloskop wegen mas-
siver Störaussendungen. Die Masseklemme hat erhebliche Einstrahlungen. Getestet
än
bislang ohne RC-Glied am Instrumentenverstärker-Eingang.
– Der Spitzenwertdetektor mit OPA2340 und BAT46 funktioniert hervorragend, auch
in Kombination mit dem Stromsensor.
– Gemessen an externem Lastwiderstand 6,5Ω wurden ca. 0,8V detektiert, was einem
Strom von ca. 8A entspricht, was sehr glaubhaft ist.
– Allgemein sieht die Kombination aus 5mΩ-Meßshunt und Meßverstärker im High-
Zweig sehr vielversprechend aus.
• Firmware:
– ISR-Funktionen funktionieren jetzt mit einer Taskliste, so daß sich Funktionen dy-
llst namisch hinzufügen und entfernen lassen
28.09.2013
• Aufbau Leistungsendstufe Rev. 0.6b
– Revisionsnummer 0.6 ist versehentlich doppelt vergeben, Leiterplatten vom Plati-
nensammler müßten eigentlich Revision 0.7 sein.
– D1 BAT47 → BAT 46, vermutlich war im Schaltplan ein Tippfehler
– L1, L2 könnten für Ferritperlen etwas weiter auseinander
– Bohrungen für Diode SB 360 viel zu klein
– Luftlinie zwischen C39 und C42 vergessen
– LED1 hat eine falsche Logik (an im Ruhezustand)
– Die Logik der Endstufe ist andersherum als in vorherigen Versionen. Deshalb geht
vo
oder -Kondensatoren bieten keine Verbesserung, Berührung mit den Fingern schon.
Maßnahme: Ansteuerung des Displays komplett neu implementieren (erledigt).
– Widerstandsnetzwerk entfernt. Wird jetzt in Firmware berücksichtigt.
• Firmware
66
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
satz zum großen internen Lastwiderstand) ohne große Erwärmung weg. Die Störungen
scheinen auch weitaus geringer als bei der alten Kombination zu sein.
29.09. – 3.10.2013
• Neue Version Leistungsendstufe Rev. 0.8
– Zur besseren Leiterplattenbestellung sind die Leistungsendstufe und die Schrittmo-
torplatine in eine gemeinsame Eagle-Datei gewandert (Leistungsteil).
– Die Strommessung wurde komplett neugestaltet. Hinzugekommen ist ein Meßver-
stärker und ein zweikanaliger Spitzenwertdetektror für Minima und Maxima (oben-
genannter „Stromsensor“). Der Meßshunt ist jetzt im positiven Zweig und deutlich
llst niederohmiger.
– Die Leiterplatte wurde bezüglich des Kühlkörpers etwas verschoben. Jetzt werden
die beiden Leistungskomponenten (FET und Diode) frontal vor den Kühlkörper
verschraubt.
– Alle nicht-Leistungs-Bauteile sind jetzt SMD
– Leistungsteil nicht groß geändert, nur bedrahtete Bauteile durch SMD ersetzt und
Pull-down für sicheren Zustand hinzugefügt.
• Neue Version Schrittmotorendstufe Rev. 0.4
– Zur besseren Leiterplattenbestellung sind die Leistungsendstufe und die Schrittmo-
torplatine in eine gemeinsame Eagle-Datei gewandert (Leistungsteil).
– Leiterplatte wurde deutlich verkleinert (von 100×80mm auf 100×48mm), da der
Platz für den ehemals vorgesehenen Leistungsteil entfallen ist und alle passiven
vo
4.10. – 20.10.2013
• Steuerplatine
un
67
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
– ADC ist jetzt freilaufend und aus Hauptschleife ausgelagert; gewichtetes Multiplexen
läuft im ADC-Interrupt, der jetzt im EDM-Modus das gesamte Timing übernimmt.
– Kleine Aufräumarbeiten (I2C-Routinen sortiert, Textfunktionen kennen jetzt Tabs
und Linefeed, edm.c ist nicht mehr auf Interrupts in anderen Modulen angewiesen
und schaltet sie ab, separate ADC-Routinen entfernt, . . . )
– Anzeige des Vorschubs in Millimetern
– Vorschub ist jetzt Regelung (soll/ist), nicht mehr Kommando (step up/down). Kom-
mandos wirken jetzt nur noch auf Soll-Wert.
21.10. – 29.10.2013
llst
• Firmware
– Schrittmotorsteuerung:
∗ Implementierung einer Beschleunigungsrampe. Damit ist der Eilgang etwa zehn-
mal schneller als im statischen Fall.
∗ Sollwertvorgabe auf Geschwindigkeitsebene. Damit ist ruckelfreier Eilgangbe-
trieb möglich.
∗ Positive Z-Richtung geht jetzt nach unten
– Aufräumen der Firmware: Firmwarekomponenten, die für ein Erodiergerät nie be-
nötigt werden oder nicht mehr vorhandene Hardwarekomponenten berücksichtigen
wurden entfernt (bis auf I2 C-Routinen).
– Es gibt nur noch eine Interrupt-Taktquelle (ADC-Interrupt), von der alle hart getak-
teten Prozesse (Schrittmotorsteuerung, Abstandsregler, Pollen der Eingabegeräte)
vo
abgeleitet sind.
– Eigenes Menü für EDM-Funktionen (Reset-Z, . . . )
– Firmwareentwicklung findet jetzt im Fertiggerät und nicht mehr im Frontplatten-
Mock-Up statt. Zu diesem Zweck wurde ein Verschleiß-ATmega32 eingesetzt. Für
normale Versuche mit ohmscher, potenzialgetrennter Belastung und Schrittmotor-
bewegung kann der AVRISPmkII eingesteckt bleiben trotz durchgeschleifter 5V-
Versorgung.
30.10. – 2.11.2013
un
• Firmware
– Beim Verlassen der EDM-Routinen parkt der Schrittmotor jetzt in einem Rastpunkt
und schaltet sich ab.
– Die Schrittmotor-Positionsregelung beruht jetzt auf einer 24-Bit-Schrittvariablen.
68
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
– Die Anzahl der EDM-Modi ist auf 9 erhöht werden, da jetzt auch Übergangsmodi
vorhanden sind. Die Modus-Umschaltung ist damit etwas komplexer geworden.
– Konfigurationsmenü implementiert
– Fast alle Texte auf deutsch geändert (war vorher gemischt)
– Automatischer Rückzug implementiert
– Für alle Hauptbetriebsmodi (Verfahrmodus, Handvorschub, automatischer Vorschub
än
und automatischer Rückzug) sind jetzt eigene Piktogramme vorhanden, um den Be-
triebszustand auf einen Blick erkennbar zu machen.
3.11. – 8.11.2013
• Firmware
– Prozeßgrenzen werden bei Sollwerteingabe berücksichtigt.
– Automatischer Rückzumodus jetzt deaktivierbar.
– Neue extra-schmale Schriftart
– Darstellung auf LCD jetzt übersichtlicher
llst– Schrittmotorroutinen: Alle Variablen > 8 Bit auf Atomizität geprüft.
– Die Firmware hat jetzt einen ausreichenden Reifegrad für die nächsten nassen Sy-
stemtests
• Leistungsteil
– Leistungsteil (FET-Treiber) in LTspice simuliert. Mit den optimierten Bauteilpara-
metern ist zu erwarten, daß sich der Takt auf bis zu 400 kHz erhöhen läßt.
9.11. – 14.11.2013
– Leistungsteil
∗ Neue Bauteilwerte für die Pulserzeugung: R109 auf 2k2, R108 auf 2k2, R111
auf 100Ω, T101, T102 und T103 auf BC817, letzteres war nicht besonders er-
vo
folgreich, also wieder zurückgewechselt auf BC849. LED101 entfernt. R112 auf
180 Ω, 100nF parallel. Ergebnis: Der Puls ist fast so steilflankig wie in der
Simulation, Pulsweiten von 2 µs sind kein Problem mehr.
∗ Aus bislang ungeklärter Ursache ist der AD8217 zerstört worden, vermutlich
beim Verschalten. Bei Reichelt ist dieser momentan nicht lieferbar.
– Firmware
∗ Strommessung ist mit dem momentanen digitalen Tiefpaß extrem langsam.
17.11.2013
un
• Nasse Versuche mit dem Gesamtsystem. Folgende Parameter funktionieren recht gut:
tON = 5µs, tOFF = 8µs, ISoll = 48, trück = 40s. Ca. 8mm/h, 3mm Messingelektrode.
69
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
21.11.2013
Entwicklung eines Isolators zur Potenzialtrennung zwischen Zielschaltung und ISP-Adapter.
So läßt sich die Firmware guten Gewissens im laufenden System neu flashen.
26.11.2013
än
• Steuerteil: Umstellung auf einen ATmega644 und ein anderes Grafikdisplay, da der AT-
mega32 für eine geplante Scope-Funktion über zuwenig SRAM verfügt.
– Neuer Quarz (20 MHz)
– Neues Grafikdisplay (LCD 64128A von Reichelt). Das Display hat andere Befesti-
gungsbohrungen (gleiche Stelle, aber nur 2,5mm Durchmesser; aufgebohrt auf 3mm)
und eine andere LED-Pinbelegung als das vorherige TG12864B-GLCD. Und die An-
steuerroutinen von diesem funktionieren auch nicht. Aber das Kontrastverhältnis
sieht auf den ersten Blick besser aus.
– Kleinere Vorwiderstände für die GLCD-Hintergrundbeleuchtung
llst
• Firmware: Da beim ATmega644 viele Register anders als beim ATmega32 oder AT-
mega16 heißen, werden einige Präprozessorweichen ATmega32/ATmega644 hinzugefügt.
Dank eines migration guides von ATmel geht die Umstellung jedoch sehr schnell und
handlich. Einige Anpassungen für den höheren Takt (20Mhz läßt sich nicht mehr durch
Teilen auf ganze Millisekunden bringen) sind nötig.
Das neue Grafik-Display ist beim busy timing deutlich empfindlicher als das alte Pollin-
Display. Nach einer Modifikation in der Auslesung des Statusflags funktionieren jedoch
beide Displaytypen mit den gleichen Routinen.
Die Hilfsfunktionen zur Darstellung der Speicherbelegung funktionieren ohne Modifika-
tionen mit dem größeren Prozessor.
Insgesamt ist das neue Display deutlich kontraststärker und besser ablesbar und mit
der MCU mit größerem SRAM sind neue Komfortfunktionen (Scope) deutlich einfacher
vo
realisierbar.
Nach der Klärung der beiden obigen Punkte wird es langsam wieder Zeit, das Projekt
für ein paar Wochen ruhen zu lassen.
1.12.2013
„Entdeckung“ der Dissertation von Jens Ginzel [Gin02]: Entgegen den durch den Titel geschür-
ten Erwartungen ist sie gut lesbar und die Erodier-Kapitel wirken sehr fundiert.
Ginzel ist Anhänger der Aufschmelztheorie. Der unterschiedliche Abtrag von Anode (Werkzeu-
un
gelektrode) und Kathode (Werkstück) sei darauf zurückzuführen, daß Ionen massereicher als
Elektronen seien – wobei der Abtrag der Werkzeugelektrode zeitlich früher als der Abtrag es
Werkstück einzuordnen sei. Bei einer Fehlentladung (Lichtbogen) ist es die Aufgabe der Steue-
rung, den Lichtbogen sofort zu unterbrechen, um Beschädigungen an Werkstück und Elektrode
70
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
zu vermeiden. Der Elektrodenverschleiß hat zu diesem Zeitpunkt schon stattgefunden, nicht je-
doch der Abtrag. Damit erhöht sich auch bei einer wirksamen Lichtbogenerkennung der relative
Verschleiß (Werkzeugverschleiß im Verhltnis zum Abtrag).
Enthalten ist ein kurzer Abriß über Generatortechnologien – hätte ich den mal früher gefun-
den.
än
Inhaltlich gibt es viele Ähnlichkeiten zur Dissertation von Michael P. Witzak [Wit97] (vermut-
lich gleiche Schule). Zentrales Thema ist die Unterscheidung zwischen Fehlentladungen (Licht-
bogen oder Kurzschluß) und abtragwirksamen Entladungen, wobei dort nicht das Fachgebiet
des Autors zu liegen scheint. Als klassische Methode wird hierbei ein von der Materialpaa-
rung und dem Arbeitsstrom abhängiger Brennspannungsschwellwert BS dargelegt und mit der
tollen, neuen Fuzzy-Methode aber kaum dargelegten verglichen.
Dabei ist bei Graphitelektroden ein sinnvoller Brennspannungsschwellwert nahezu Stromun-
abhängig bei 24V.
Es wird die These aufgestellt, daß jede Entladung in eine lichtbogenartige Fehlentladung über-
llst
gehen kann, wenn die Entladedauer übermäßig ausgedehnt wird [Gin02, S. 43]. Bei einer Ent-
ladedauer von ≤ 10µs können Lichtbögen weitgehend vermieden werden, so daß ein stabiler
Erosionsprozeß gewährleistet ist [Gin02, S. 49] (andere Teile sprechen von stabilem Prozeßzu-
stand auch noch bei te = 30µs bei der Materialkombination Kupfer/Stahl bei einer akzeptieren
Lichtbogenhäufigkeit von 25% sogar bis te = 57µs).
Einstellreihenfolge:
• Entladestromstärke Ie und Entladedauer ti : Durch Verringerung der Entladeenergie läßt
sich eine bessere Oberfläche erzielen - eine verkürzte Entladedauer verringert zwar die
Abtragsrate, führt aber auch zu einem stabileren Prozeß. So kann es aus Gründen
der Oberflächenqualität sinnvoll sein, eine geringere als die optimale Entladedauer zu
wählen[Gin02].
• Leerlaufspannung U0 : So klein wie möglich. Die Leerlaufspannung bestimmt die Spalt-
vo
weite. Ein großer Spalt erleichtert die Spülung, ein kleiner Spalt führt zu einer besseren
Abbildungsgenauigkeit
• Pausendauer t0 : Für einen abtragsintensiven Prozeß sollte die Pausenzeit möglichst kurz
sein, eine zu kurze Zeit kann allerdings zur Lichtbogenbildung beitragen. Eine lange
Pausenzeit stabilisiert den Prozeß.
In der industriellen Anwendung wird die Zündverzögerungszeit td als Reglereingangsgröße für
die Abstandregelung verwendet. Beschreibung eines td -basierten Spaltweitenreglers ab Seite
69.
Leerlauf-/Kurzschlußbasierter Regler: Detektion der Leerläufe und Kurzschlüsse im Betrach-
un
tungsintervall und Regelung des Abstandes. Funktioniert leicht besser als Zündverzögerungs-
basierte Regelung.
Fuzzy-Regelung wird ohne konkrete Implementierungsdaten behandelt – vermutlich nur Ab-
tippwissen und die eigentliche Forschungsarbeit lag in der Bahnsteuerung.
71
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
15.12.2013
Versuche mit einem neuen Schrittmotortreibe (TMC222 von Trinamic) laufen äußerst erfolg-
reich. Die Laufruhe ist wesentlich besser als bei der alten L297/L298-Kombination. Die ma-
ximal mögliche Schrittfrequenz ergibt eine in etwa ähnliche maximale Verfahrgeschwindigkeit
wie beim Vorgänger, auch bei der bisherigen Versorgungsspannung von 12V. Die Ansteue-
rung ist relativ problemarm. Bei der Positionsangabe muß controllerseitig mitgeloggt werden.
Nervig ist, daß eine softwareseitiger shutdown völlig zu fehlen scheint – sobald der Baustein
inititalisiert ist scheint es keine Möglichkeit zu geben, ihn wieder zum schweigen zu bringen.
Unter Umständen führt das Bringen in einen deadlock state – z.B. nach Datenblatt-Kapitel
llst
6.8.8 RunInit - zu einem shutdown-ähnlichen Zustand.
Damit hat der TMC222 seine Eignung als Schrittmotortreiber für das µEDM bewiesen.
16.12.2013
Ein Wechsel des Mikrocontrollers auf einen STM32 verspricht deutlich höhere ADC-Samp-
leraten und würde auch Versuche erlauben, andere Regelkonzepte als eine Mittelwert- oder
Spitzenwertregelung mit analoger Signalkonditionierung auszuprobieren.
Versuche mit dem Evaluationsboard STM32VLdiscovery zeigen, daß eine Portierung der AVR-
Firmware mit vertretbarem Aufwand möglich sein sollte. Auf dem Board ist ein STM32F100RB,
der „schnelle“ Bitwechsel in der main-Loop von gerade einmal ca. 400kHz erreicht.
Die STM32F103 sind pinkompatibel – eventuell bietet es sich an, die MCU auf dem Eval-Board
vo
zu ersetzen.
Die Ansteuerung des Grafik-LCDs läßt sich nahezu problemlos portieren. Etwas problematisch
ist nur die Handimplementierung der delay-Routinen, die momentan noch optimierungsab-
hängig sind.
Es gibt ADC-Sample-Modes, die durch ein Ereignis getriggert werden können. Bei einer Samp-
lerate von bis zu 1 MHz stünde dann einer zeitlichen Auflösung der einzelnen Erodierimpulse
mit einer anschließenden Klassierung nichts mehr im Wege.
Insgesamt scheint ein neuer Ansatz mit einem kombinierten Steuer- und Schrittmotorteil mit
un
STM32 und TMC222 sehr vielversprechend, wenn auch mit ordentlich Lernaufwand verbun-
den.
72
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
19.12.2013
Der Pulserzeugungsteil ist für 12V ausgelegt. Eine Versorgung mit 24V würde die maximale
gate-to-source-voltage des Entstufen-FETs überschreiten, kommt also nicht in Frage. Sollte der
Schrittmotorteil mit 24V versorgt werden, muß für die Pulserzeugung eine separate Spannungs-
versorgung mit min. 400mA Stromtragfähigkeit (simuliert mit LTspice) zur Verfügung gestellt
än
werden. Dies ginge mit der Nutzung aller Trafospulen oder mittels Schaltregler.
Schaltreglermodule 24V → 5V kosten ca. 7 e, der Aufbau einer eigenen Schaltreglerbaugruppe
auf der Leiterplatte ca. 5 e. Bezüglich der Bauraums ist ein Fertigmodul günstiger. Sinnvoller-
weise wird also auf ein fertiges Modul zurückgegriffen.
Die Aufteilung der Firmware in den generischen und den AVR-spezifischen Teil hat begonnen.
Das Grafik-LCD funktioniert jetzt – inklusive aller Textfunktionen – auf AVR, STM32F40x und
STM32F100. Unklar ist noch, wieviel Speicherplatz character arrays auf dem ARM kosten.
Informationsfetzen zur Steuerbaugruppe:
• LQFP100 hat einen pitch von 0,5mm, SO16 hat einen pitch von 1,27mm, die Steckerlei-
llst
sten von 2,54mm. Es bietet sich also ein routing im Zollraster an.
• Die Pins für den ST-Link-Debugger liegen auch auf dem JTAG-Anschluß. Hier sind also
keine Besonderheiten zu beachten.
Informationsfetzen zur Firmware:
• Zu einem Projekt mit Atmel Studio lassen sich bestehende Ordner über die Ansicht „alle
Ordner anzeigen“ hinzufügen. Quelltexte außerhalb des Projektordners lassen sich mit
„Add as link“ (Zweitauswahl von „Add“ im Dateidialog) hinzufügen. Für das include
müssen sie dann allerdings mit vollem Pfad eingefügt werden.
Es ist toll, daß Atmel zu Sachverhalten, die man mit fünf Zeilen Text gut erklären kann
Youtube-Videos anbietet.
• Die CooCox ist nicht für AVR-Projekte gedacht. Eine komplette Migration von Atmel-
Studio zu CooCox scheidet damit aus.
vo
20.12.2013
Lästig ist, daß bei hierarchichen Pfaden der Softwarekomponenten alle includes in unüber-
sichtlichen relativen Pfaden eingebunden werden müssen. Dafür erleichtern sie allerdings die
parallele Entwicklung der Firmware für zwei unterschiedliche Hardwareplattformen.
Hauptschwierigkeitsgrad für den geplanten Steuerteil wird es sein, die zahlreichen bedrahteten
Anschlüsse mit den Platzanforderungen in Einklang zu bringen, da Leiterplattenplatz außer-
halb der Kontakte nicht effektiv genutzt werden kann. Die verbleibende tatsächliche Routing-
un
fläche liegt dann bei maximal 73 × 56mm. Notwendigerweise bedrahtete Bauelemente sind:
• Schalter- und Poti-Anschlüsse
• Anschlüsse Schrittmotor
• Anschluß der Spannungsversorgung
• JTAG-Anschluß
73
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
Unklar ist, ob Schrittmotortreiber und MCU gegenüberliegend angeordnet werden dürfen oder
ob dies zu EMV-Problemen führen kann.
Unter Umständen ist es sinnvoll, den Anschluß für I2 C in Bestückungsvarianten entweder mit
Pegelwandler oder Potenzialtrennung auszustatten. Dies dürfte nicht mehr Platz als der reine
Potenzialtrenner beanspruchen.
• Wie kann in der CoCox-IDE der Debug-Build ausgeschaltet werden?
• Ist es sinnvoll, die Menüstruktur so zu ändern, daß konstante Zeiger auf Variablen ver-
wendet werden? → Nein, Funktionszeiger können nicht ins PROGMEM.
• Passen bei Handlötung 0805-Bauteile auf 0603-Pads? → Ja, überhaupt kein Problem
llst
• Vernünftige delay-Routinen → OK, ein bischen Assembler
23.12.2013 – 9.01.2014
Layoutversuche für die kombinierte Platine. Begrenzender Faktor ist die Größe der Ladekon-
densatoren. Eine überschlägige Berechnung des Stromverbrauchs ergibt:
GLCD-Hintergrundbeleuchtung 5V 100mA1
Pulserzeugung 10V 140mA2 bei 200kHz
STM32 3,3V 50mA ohne I/O
TMC222 24V 570mA (RMS, Maximaleinstellung)
EEPROM 3,3V 2mA
Potis 3,3V 1,2 mA
vo
Auf eine voll ausgestattete 10V-Schiene kann also verzichtet werden, stattdessen werden die
wenigen Milliampere mit einem Schaltregler erzeugt. Für eine Restwelligkeit von unter 1V ist
bei einem Bemessungstrom von 700mA ein Ladekondensator von mindesten 10mF notwendig.
Ein Kondensator dieser Größe hat Abmaße von 35×30mm und wird separat untergebracht.
Damit enthält die Steuerplatine keinen Gleichrichter sondern nur einen Verpolschutz.
Die Kontrasteinstellung per PWM funktioniert hervorragend. Getestet mit einer PWM-Fre-
quenz von ca. 2,5kHz ergibt sich der volle Einstellbereich. Ein guter Startwert ist ein Tastver-
hältnis von 70/128. PWM ist generell auf dem STM32 genauso einfach wie auf einem AVR,
un
2
Gedimmt mit Vorwiderständen, sonst bis zu 600mA!
2
140mA simuliert bei 200kHz, bei 100Khz noch 25mA
74
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Aus irgendeinem Grund ist HCT-Logik in SMD nicht bei Reichelt erhältlich. Kessler electronik
bietet aber eine gute Auswahl. Ungeeignet laut Spezifikationen sind LVX, VHC, HC, und AC.
Geignet laut Spezifikation sind HCT und ALS, letztere dürften aber recht langsam sein.
Das Grafik-LCD bekommt eine eigene Bauteildefinition, damit Stiftleiste und Bohrungen nicht
mehr zueinander verschoben werden können.
än
Alle interessant aussehenden Pins werden auf SMD-Pads oder Stiftleisten herausgeführt, um
die Möglichkeiten der neuen Plattform besser testen zu können. Die Stiftleiste für ungenutzte
Pins/Ports müssen aus Platzgründen im 2,0 mm-Raster ausgeführt werden. Alle ADC-Pins sind
gleichwertig und können beliebig gruppiert werden. Eine Berücksichtigung unterschiedlicher
ADC-Modi im Layout ist damit nicht notwendig. Anders sieht es bei den PWM-Pins aus, die
mit Timern hart verknüft sind. Deshalb wird eine möglichst gute Mischung aus gekoppelten und
ungekoppelten Timern für zukünftige Erweiterungen vorgesehen. Der Kleinleistungsteil enthält
damit 4 ADC-Inputs und PWM-Outputs für künftige Erweiterungen des Leistungsteils, wobei
das Stecker-Layout kompatibel zum 10-Pin-Anschluß mit einer PWM und zwei ADC-Kanälen,
das vorher auf dem Schrittmotorteil untergebracht war, ist.
llst
Ein vierlagiges Multilayer-Layout bietet völlig ungewohnte Gestaltungsfreiheit beim Routen,
so daß plötzlich wieder Platz für Stiftleisten im 2,54 mm-Raster vorhanden ist. Nach der Mei-
nung von DF3DCB hat der zweilagige Entwurf unter EMV-Gesichtpunkten allerdings kaum
Nachteile und kann sollte deshalb problemlos verwendbar sein.
Bestellt für den ersten Entwurf der STM32-Kleinleistungsplatine (Steuerplatine Rev. 0.7) wird
wegen der Gelegenheit allerdings der Multilayer-Entwurf, um einmal Erfahrung damit zu sam-
meln. Zwei kleine Designfehler (EEPROM-Write-Enable Pin und I2 C-Pin nicht 5 V-kompati-
bel) mußten noch behoben werden.
10.01.2014
Der JTAG-Adapter ST-LINK/V2 ISOL sieht bei ersten Versuchen extrem vielversprechend
aus. Er wird wegen der zuvor installierten STM32Fxxdiscovery direkt erkannt und ist auch
vo
beliebig gegen diese austauschbar, ohne daß das ST-Link-Utility neugestartet werden muß. Die
Leiterplatte ist trotz ihrer kompakten Abmessungen mit ordentlichen Kriechstrecken versehen.
Der Aufbau sieht auch recht ordentlich aus. Die Potenzialtrennung ist also mehr als bloße
Makulatur.
1.02.2014
Die Leiterplatten für den neuen Kleinleistungsteil sind angekommen. Der Aufbau ist recht
problemlos, das LQFP-100-Package läßt sich recht problemlos löten (keine Kurzschlüsse ent-
standen, allerdings waren einzelne Pins nicht kontaktiert). Im Bestückungsdruck sind Bauteil-
un
75
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
Aufgegeben muß der Wunsch nach einer frei konfigurierbaren PWM. Pins und Timerbezeich-
nungen sind eng miteinander verwoben.
Beim Layouten wurde nicht berücksichtigt, daß das remapping der Pins nicht unabhängig von-
einander erfolgen kann (Reference manual S.173f). Ob das ein Problem ist wird sich zeigen.
än
17.02. – 20.02.2014
I2C + 5V
I2C-Buchse
I2C-Buchse
LM75
I2C2 I2C1 I2C 0x90
Stepper EEPROM
TMC222 ARM 24CL04 AVR
0xC0 STM32F103 0xA0 ATmega32 5V
Potenzial-
trennung
I2C
9-24V Spannungs- Spannungs-
regler 5V regler 3,3V
llst
JTAG Potenzial-
mit trennung I2C-
AVRISP
Potenzial- Sniffer
ISP
USB trennung
PC
Abbildung D.1.: Gesamtaufbau von ARM- und AVR-Mock-up für die Firmwareentwicklung
Für die ARM-Version existiert jetzt ein vollständiges Mock-up mit Bedienelementen, Schritt-
motortreiber, Spannungsreglern und externer 12 − 24 V-Versorgung. Bis auf die Funkenerzeu-
gung kann mit dem Mock-up also alles getestet werden. Das AVR-Mock-up enthält nur die
Komponenten der alten AVR-Steuerplatine (Bedienelemente und Steuerung). Die AVR- und
vo
die ARM-Version können mit einem I2 C-Kabel verbunden werden für parallele Firmwaretests.
So kann das AVR-Mock-up mit 5 V versorgt werden und die I2 C-Routinen auf dem AVR mit
der Hardware des ARM-Mock-ups getestet werden. Die beiden separaten I2 C des ARMs sind
noch miteinander verbunden, um mit dem Bus-Sniffer komfortabel arbeiten zu können und
dem AVR Zugriff auf den TMC222 zu geben.
Die Firmwareentwicklung läuft zunächst in die Richtung, jeweils AVR- und ARM-Version
parallel zu halten. Auf beiden Plattformen identisch läuft jetzt:
• Grafik-LCD-Treiber
un
76
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
än
Das TMC222 Datenblatt vom Oktober 2005 ist bei der Antwort auf getfullstatus1 fehler-
haft (oder entspricht einer älteren Bausteinversion). Das erste Antwortbyte lautet 0xE0 und
nicht, wie im Datenblatt geschrieben 0x00 (und auch nicht 0xF0, wie das deutsche Datenblatt
behauptet). Im Datenblatt vom März 2011 steht es korrekt.
Leider konnte noch keine Möglichkeit gefunden werden, den Schrittmotortreiber nach erfolgrei-
cher Initialisierung wieder abzuschalten, was insbesondere in in Bezug auf das Betreibsgeräusch
erstrebenswert wäre:
• Absichtliches Bringen in einen deadlock-Zustand nach Datenblatt-Kapitel 6.8.8 schaltet
den Treiber nicht ab.
llst
• Der Befehl hardstop nach Datenblatt-Kapitel 6.8.5 schaltet die Spulen auch nicht ab.
• Die im „RoboterNetz“-Forum kursierende Behauptung, IHold auf 15 zu setzen schalte
die Spannung ab, ist ebenfalls nicht haltbar. Durch den hohen Haltestrom ist lediglich
der Chopper nicht mehr hörbar.
Die komplette Befehlsstruktur für den TMC222 ist in der Firmware für beide Plattformen
implementiert. Zu beachten ist jedoch, daß der Befehl setoptparam nur bei einer Betriebs-
spannung zwischen 8, 5 und 9,5 V erfolgen darf. Der ARM-Mock-Up kann bei dieser Betriebs-
spannung problemlos betrieben werden.
1.03.2014
Firmware: Alle einfachen GPIO-Befehle sind jetzt für beide Plattformen (AVR und STM32)
identisch verfügbar. Damit konnten die beiden Varianten der Routinen für das KS0108-Gra-
vo
fikdisplay für die beiden Plattformen zusammengelegt werden. Das Auslesen der Status-Flags
funktioniert jetzt durchgehend. Außderdem ist jetzt für beide Plattformen mit dem SED1520
ein weiteres Display verfügbar. Beide können parallel betrieben werden; mit Header-Defini-
tionen läßt sich das Hauptdisplay auswählen. Für alle anderen Routinen ist die Änderung
transparent.
Die Debug-Hilfsfunktionen für SRAM-Dump, EEPROM-Dump und Flash-Dump sind jetzt
auch auf dem STM32 verfügbar. Damit ist das Hilfsmenü für beide Plattformen (bis auf die
am AVR nicht benötigte PWM-Verstellung für das Grafik-LCD) identisch.
Die EDM-ADC-Routeien für den AVR sind aus dem edm-Durcheinander herausgelöst und
un
können auch separat getestet werden. Die Funktion edm_adc_deinit() kann vorher noch nie
funktioniert haben, da sie in einer Endlosschleife gemündet hat.
77
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
8.03.2014
Noch nie zuvor ist mir aufgefallen, daß der Compiler \n am Ende von Zeichenketten, die per
printf ausgegeben werden, entfernt.
Auch an anderen Stellen kann man in lange und zuverlässig laufendem Quelltext immer wieder
Überraschungen erleben, wenn man auf eine andere Plattform portiert. So sind die gefürch-
än
teten signed integer overflows zumindest für uin16_t auf dem AVR kein Problem- auf dem
ARM dagegen verbringt man etwas Zeit mit dem Debugger, bis man eben jene in einem gut
geglaubten alten und getesteten Quelltext entdeckt.
Aber man entdeckt nicht nur unangenehme Überraschungen. Es zeigt sich, daß sich die Menü-
daten (Funktionszeiger, Zeiger auf globale Variablen und Zeiger auf Flash-Konstanten) pro-
blemlos komplett ins Flash transferieren lassen, ohne daß in den Menüfunktionen mehr als der
Header geändert werden muß.
Auch sehr angenehm ist es, daß der AVR-GCC mit _crc16_update() in Assembler geschrie-
bene CRC-Routinen mitbringt - samt äquivalentem C-Quelltext.
llst
Alle Einstellungen des Schrittmotortreibers sind nicht mehr fest als Präprozessorkonstanten
im Quelltext eingebaut, sondern werden über ein struct konfiguriert. Da ist es sehr praktisch,
daß der TMC222 es erlaubt, die Zählrichtung mit den Motorparametern zu konfigurieren. Das
spart einige Fallunterscheidungen zur Laufzeit.
Die Anzahl der Quelltextdateien, die noch nicht vom AVR auf den STM32 portiert sind, ist
sehr überschaubar geworden.
26.03.2014
Im Newsletter von Mathworks wurde ein Werkzeug zur statischen Codeanalyse (Polyspace)
beworben. Dies ist ein Anlaß, sich mit dieser Kategorie von Werkzeugen in Bezug auf die
Eignung für den Hobby-Firmwareentwickler auseinanderzusetzen.
vo
Polyspace ist von MathWorks, und scheint schon allein aus diesem Grund ein eher hochprei-
siges Produkt zu sein. Damit fällt es aus dem Betrachtungsrahmen.
PC-Lint ist ein kommerzielles Werkzeug und mit 520 e für kommerzielle Zwecke sicherlich
in einer sinnvollen Preisregion, für Hobbyzwecke – durch das Fehlen einer educational-
Version – allerdings nicht.
Cppcheck hat erst einmal eine niedrige Einstiegshürde. Es ist ein Windows-Installer und eine
intuitive graphische Bedienoberfläche verfügbar. Sehr komfortabel ist ein Fenster, das
„Scratchpad“ heißt, in dem sich Codeschnipsel schnell testen lassen.
un
Leider läßt die Suchleistung im C-Quelltext zu wünschen übrig. Selbst offensichtlich frag-
würdige Konstrukte werden nicht entdeckt. Insgesamt wurde in der gesamten Codebasis
des µEDM nur ein einziger Fehler korrekt identifiziert (zweimal gleiche Bedingung in
if,else if). Obwohl es schön ist, daß dieser Fehler gefunden wurde, kann Cppcheck
damit für meine Zwecke als untauglich eingestuft werden.
78
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
splint ist ein klassisches Lint-Werkzeug, das auch im WinAVR-Paket enthalten ist. Das Projekt
scheint jedoch verwaist zu sein, die letzte Änderung ist auf den Juli 2007 datiert.
Clang-Analyzer hat eine deutlich höhere Einstiegshürde auf einem Windows-System (bei BSD
ist es der Standardcompiler). Die Sourcen müssen aus dem Versionsverwaltungssystem
heruntergeladen und mit Visual Studio 2012 kompiliert werden.
än
Außerdem scheint das Werkzeug auf ein makefile zu bestehen. Für die AVR-Version
sollte das kein Problem sein, für die STM32-Version müßte das passende makefile erst
geschrieben werden. Das Schreiben von makefiles gehört allerdings zu den Dingen, die zu
lernen ich eher in die fernere Zukunft legen will.
Die Bewertungen in den Foren scheinen jedoch ausgezeichnet zu sein. Damit ist es auf
jeden Fall wert, sich zu passender Gelegenheit mit diesem Werkzeug auseinanderzusetzen.
Understand von SciTools ist ein kommerzielles Tool mit einer intransparenten Preisgestaltung
(Preis nur auf Anfrage). Es gibt eine Demo-Version.
llst
1.04.2014
Nachdem die Weiterentwicklungen der Firmware in den vergangenen Monaten primär darauf
abzielten, eine Codebasis (GLCD-Treiber, ADC-Funktionen, Menüstrukturen, Plot-Funktio-
nen, Konfigurationsdaten) für ein anderes Projekt (Fifi-Raditektor) zu bilden, zielt die Ent-
wicklung jetzt wieder primär darauf ab, die µEDM-Firmware weiterzuentwickeln.
Dabei ist mir jetzt auch ein kleiner USB-Logikanalyzer behilflich mit dem sich das Busverhalten
deutlich detaillierter als mit dem Datenlogger betrachten läßt. Nachteilig ist die Unmöglichkeit
der live-Betrachtung, d.h. Messungen müssen immer vorher getriggert werden.
Die Schrittmotoransteuerung weist noch einige zäh zu findende Fehlfunktionen auf, die nur bei
höheren Taktfrequenzen des I2 C-Busses (> 250 kHz) zutagetreten. Scheinbar ist meine naive
I2 C-Implementierung (i2c_simple_stm32.c nicht zu gebrauchen, sobald clock-stretching auf-
tritt. Die errata sheets des STM32F103 sind aber im Bereich der I2 C-Peripherie gut gefüllt.
vo
3.04.2014
Generell bin ich mit der ARM-Steuerplatine sehr zufrieden. Für den Fall einer neuen Revision
wrde ich allerdings trotzdem einige Sachen anders machen:
un
79
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
5.04.2014
Die I2C-Routinen wurden auf dem STM32F103 noch einmal neu implementiert mit allen Inter-
rupt-Unterbrechungen wie in der Application Note AN2824. Fazit ist: Entgegen den Angaben
im Datenblatt liegt die Grenze des TMC222 schon bei 250 kHz und nicht bei 350 kHz. Dar-
über fabriziert er sehr langes clock stretching. Getestet wurde natürlich nur ein Exemplar des
Schrittmotortreibers; aber dafür mit drei I2 C-Routinen (eine auf dem AVR, zwei auf dem
än
STM32).
Timeouts müssen mit einer eigenen Variable glu_millis implementiert werden, da der Sy-
sTick-Zähler nur 24 Bit hat und bei 32 MHz schon nach 0,5 s überläuft. Der 24- oder 32-Bit-
Zähler glu_millis wird jede Millisekunde inkrementiert und läuft nach 4 Stunden bzw. 50
Tagen über.
10.04.2014
Die CooCox-IDE nervt. Und Atmel Studio ist besser als gedacht.
llst
Atmel Studio 6.1 ist bei der Installation sehr großzügig, was den verwendeten Speicherplatz
angeht. Allein die von mir nicht verwendete ARM-GCC-Toolkette schlägt mit mehr als einem
GigaByte zu Buche. Man kann diese Komponenten allerdings völlig problemlos entfernen.
Werden die beiden Verzeichnisse
[...]/Atmel/Atmel Toolchain/AVR32 GCC
[...]/Atmel/Atmel Toolchain/ARM GCC
gelöscht, gibt dies schon ordentlich Festplattenplatz frei. Durch das Löschen der folgenden
Verzeichnisse
[...]/Atmel/Atmel Studio Extension/AVR32 GCC
[...]/Atmel/Atmel Studio Extension/ARM GCC
sieht es das Atmel Studio auch ein, nicht mehr nach diesen Komponenten zu fragen und zu
suchen.
Bei einer Installation wird noch ein weiterer Brocken hinterlegt: Der folgende Order
vo
Deshalb werden die entdeckten Fehler jetzt extern im Entwicklungsdokument gepflegt. Unschön
ist daran natürlich, daß
1. die Liste der Bugs im Entwicklungsdokument zu einem willkürlichen Versionsstand be-
ginnt,
80
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
13.4.2014
än
Eine komplette Installation eines Entwicklungsrechners fertig in einer virtuellen Maschine –
das hat etwas verlockendes. Genau eine solche wurde in den vergangenen Tagen erstellt und
genutzt.
Mit Atmel Studio 6.1 läßt sich so auch gut arbeiten. Der Start dauert zwar einen Hauch länger
als bei der Normalinstallation auf einer SSD, die normale Arbeit ist aber ausreichend zügig.
Auch der Build- und der Flashvorgang gehen von der virtuellen Maschine gut.
Die STM32-Entwicklung unter CooCox geht dagegen recht zäh. Insbesondere der Flash-Vor-
gang dauert eine gefühlte Ewigkeit.
Die ganze Übung hatte aber auch etwas Gutes: Zumindest für die Elektronikentwicklung hat
llst
durch das Aufsetzen der virtuellen Maschine die Neuinstallation des PCs ihren Schrecken ver-
loren.
Die plattformspezifische Neuimplementierung der I2 C-Funktionen für den STM32F10x hat sich
mittlerweile bewährt. Im Gegensatz zur „simple“-Implementierung, die auf beiden Plattformen
gröstenteils identisch ist, ist bei maximaler Taktrate (250 kHz) keinerlei Kommunikationsfehler
mehr aufgetreten.
14.4.2014
Es ist interessant, was sich Menschen einfallen lassen, nur um goto zu vermeiden. So findet
sich ein weiterer Nutzen für die do-while-Schleife (neben swallowing the semicolon):
do {
vo
// Code a u s f u e h r e n
[...]
} while 0;
// F e h l e r b e h a n d l u n g
[...]
Ähnlich phantasievoll ist ein Konstruct mit switch (Das case 0: stellt Compiler zufrieden,
die mindestens einen case haben wollen):
un
// Code a u s f u e h r e n
[...]
}
81
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
// F e h l e r b e h a n d l u n g
[...]
Statt goto error kann man bei beiden mit einem break herausspringen.
20.4.2014
än
Alle „FIXMEs“ in der Bug-Liste sind erledigt. Also können endlich wieder neue Features hin-
zugefügt und neue Fehler eingebaut werden.
Als nächstes steht die PWM auf dem Plan. Bislang gibt es die PWM für die Kontrasterzeugung
des GLCDs. Jetzt geht es daran, die PWM mehrkanalig zu machen. Zu allem Überfluß ist das
PWM-Signal Pulse0, das dem Pulse-Signal auf der alten Steckerbelegung entspricht, auf dem
gleichen Timer (TIM3) wie die PWM für das Grafik-LCD. Allerdings nicht auf dem selben
Port, da die PWM für das GLCD remapped ist.
Wenn man 80 Pins frei verteilen kann, muß man natürlich genau die Kombination finden,
die ausreichend Ärger macht. Das kleine Programm „MicroXplorer“ hilft übrigens keineswegs
llst
dabei, die Pins irgendwie zu sortieren. Eigentlich ist es sogar komplett unbrauchbar. CooCox
CoSmart unterstützt keine MCUs von STmicro. Es gibt also keinen Weg um die manuelle
Durchsicht herum.
Eigentlich sieht die Lage nicht übel aus. Für die Funkenerzeugung sind nur zwei Timer vorge-
sehen:
Andere Timer können großzügig verteilt werden, da z.B. der Drehgeber nicht per Hardware
vo
abgefragt wird.
Auf dem Steckverbinder PV6 sind alle remapten PWM-Kanäle von TIM1 verfügbar. Fur erste
Tests der Multi-PWM bieten sie sich also an.
Der Timer TIM4 läßt sich nur komplett remappen. Der partial remap von TIM3 führt auf
einen JTAG-Pin und einen Pin, der einen extra-Eintrag im errata sheet hat. Dieser Modus
sollte also schnell vergessen werden.
24.04.2014
un
Das erste selbstgeschriebene makefile ist eine völlig neue Erfahrung und sicherlich Wert, in der
Gruppe diskutiert zu werden.
82
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
28.04.2014
Auf dem AVR definiert assert.h ein Makro assert, das ähnlich der Definition der JPL „power
of ten“ ist. Wenn __ASSERT_USE_STDERR vor der Headerdatei definiert ist, wird die Fehlermel-
dung ausgegeben, ansonsten nur abort() aufgerufen.
Bei Standard-C wird die Fehlermeldung auf stderr ausgegeben, ansonsten genau wie auf dem
än
AVR.
Deutlich kniffliger ist das beim ARM. Zwar unterstützt der leichtgewichtige stdio-Ersatz Stre-
ams (in fputs() wird zwischen stdout und stderr unterschieden), sobald jedoch fprint()
oder assert() benutzt werden, entsteht erst einmal ein Linker-Fehler, weil zwei Variablen, die
in printf.c definiert sind, noch einmal extern dazugelinkt werden. Sind diese Variablen ent-
fernt, funktioniert printf(), fprintf() jedoch nicht. Selbst wenn printf() seinerseits wieder
auf fprintf() zugreift, wird fprintf() aus anderen Modulen gar nicht angesprungen.
Hintergrund ist der, daß fprintf bei einem konstanten String in den fwrite umgewandelt
wird, das extern über die libg.a dazugelinkt wird, die Umleitung über PutChar allerdings
llst
nicht unterstützt. Abhilfe schafft hier eine eigene Implementierung von fwrite.
30.04.2014
Bei vielen Quelltextteilen wurde auf C89-Kompatiblität geachtet, um Modultests in Matlab
ausführen zu können. Mit GnuMex steht jetzt allerdings erstmals ein C99-fähiger Mex-Compiler
für Matlab unter Windows 7 zur Verfügung, so daß dieser Zopf endlich abgeschnitten werden
kann. Das erspart einige umständliche Konstrukte und Compilerwarnungen.
Aber keine Neuerung ohne Wermutstropfen: Durch die Abkehr vom MS-Visual-C-Compiler
entfällt die Unterstützung dieses exzellenten Debuggers. Der GDB läßt sich auf dem 64-Bit-
Windows nicht zur Zusammenarbeit mit Matlab überreden. Also muß Debuggen auf dem ARM-
Target oder auf einer virtuellen Linux-Maschine stattfinden.
vo
1.05.2014
Der ADC-Eingangsfilter muß für die neue Steuerplatine neu dimensioniert werden. Der In-
strumentenverstärker AD8217 bietet eine Ausgangsimpedanz von ROut = 2 Ω und hat eine
Grenzfrequenz f−3 dB = 500 kHz.
Der STM32F103 benötigt für die kürzeste Sampledauer ∆T = 15 ADC-Zylekn eine Quellim-
pedanz von < 400 Ω.
Die SMD-Induktivitäten vom Typ L1210F haben eine Toleranz von ±10 %.
Die Kondensatoren vom Typ ??? haben eine Toleranz von ±5 %.
un
Für die Klemmschaltung am Eingang wird ein Vorwiderstand von mindesten 100 Ω benötigt.
83
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
14.12.2014
Experimente mit GnuMex und SDL: GnuMex ist ein Softwarepaket, daß die Nutzung des GCC
als MEX-Compiler für Matlab unter Windows erleichtert. Die Installation ist geradeheraus wie
in der Anleitung. Vorteilhaft ist hier gegenüber dem Microsoft Visual C Compiler, daß hier der
C99-Standard unterstützt wird. Es basiert auf MinGW. Der Menü-Mockup läuft auf Anhieb.
än
Dummerweise ist Avira AntiVirus bei jeder damit erzeugten Datei der Meinung, es erst einmal
an seinen Hersteller schicken zu müssen. Das nervt.
SDL ist eine Grafik-Library für Windows und Linux. Mit direktem Kompilieren durch MinGW
funktioniert es wunderbar, beim Kompilieren für Matlab müssen *.a-Dateien in den Build-
Ordner kopiert werden. Leider ist das erzeugte Fenster in Matlab erst einmal im Hintergrund.
Da in der Zwischenzeit auf die Variante als Matlab-Plot recht zügig ist, wird SDL für Tests
des µEDM erst einmal ad acta gelegt.
Dafür hat es sich als erstaunlich einfach herausgestellt, das MEX-Programm per Tastatur
aus dem Plot-Fenster heraus zu steuern. Damit werden weitere Offline-Tests mit Matlab und
GnuMex ohne SDL stattfinden.
llst
29.12.2014
Das Buch „Managing Projects with GNU Make“ [Mec04] konnte einige Wissenslücken füllen.
Damit steht künftig einem Testsystem auf dem PC nichts mehr im Weg. Das EDM-Menü
funktioniert jetzt einwandfrei unter Windows mit SDL, mit und ohne Matlab-Unterstützung.
Sehr störend ist es, daß Avira AntiVirus bei jedem erstellten Binary ein Sample anfordert, und
vorher nicht gewillt ist, die erzeugte .exe-Daten zu starten.
9.4.2015
Installation von SDL2 ist unter Linux recht einfach: apt-get install libsdl2-dev. Etwas
kniffliger ist es, einen funktionsfähigen Build zu erzeugen (siehe makefile). SVN-externals funk-
tionieren auch unter RapidSVN, so daß kein Grund besteht, für eine Linux-Version davon
vo
abzuweichen.
Der Mock-Up mit SDL läuft deutlich flüssiger als der mit Matlab. Außerdem ist so ein Build
unter Linux möglich. Screenshots sehen auch deutlich realistischer aus.
12.04.2015
Eine statische Codeanalyse der Linux-Version funktioniert jetzt. Erstellt wurden zahlreiche
Stubs, um den Quelltext des µEDMs am PC bauen und laufenlassen zu können, die Anwen-
dungskomponenten sind so jedoch gut überprüfbar: Insbesondere bietet der Clang-Compiler
un
zahlreiche Warnungen, die der GCC nicht bietet, und die statische Codeanalyse mit
scan-build make
84
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
fördert weitere Kleinigkeiten zutage. Getestet wurde mit einem Clang 3.5 auf einem Debian
Linux.
Etwas enttäuschend ist das Suchergebnis der statischen Codeanalyse: Die Zahl der false po-
sitives hält sich in Grenzen, aber es wurden kaum echte mögliche Problemfälle erkannt. An
meiner Codequalität liegt das vermutlich nicht.
än
Mit dem Aufruf make -s kann die Build-Ausgabe recht übersichtlich gehalten werden und
Warnungen fallen sofort ins Auge.
Der Mock-up für den PC hat jetzt weder unter Clang noch GCC noch der Codeanalyse nur noch
eine Warnung (betreffend den Zeichensatz des Quelltextes). Der Exkurs Codeverbesserung ist
damit abgeschlossen und die normale Weiterentwicklung kann wieder fortgesetzt werden, jetzt
mit neuen Testmöglichkeiten am PC.
Mit dem Compiler-Flag -Wsign-conversion lassen sich noch allerhand mehr Unstimmigkeiten
aufdecken – und meine Lücken, was die Integer-Regeln von C angeht.
Beispiel aus der gpio.h:
llst
static inline __attribute__((always_inline)) void
ClearBit(GPIO_TypeDef * const GPIOx, const uint16_t bit)
{
GPIOx->BSRR = bit<<16U;
}
Das Feld BSRR ist als uint32_t deklariert. Hier warnt der ARM-GCC zu der einzigen aktiven
Zeile, daß eine Konvertierung von int in uint32_t einen Vorzeichenwechsel erzeugen könne.
OK, was passiert hier? bit paßt in einen 32-Bit-Integer, wird also in einen solchen konvertiert.
16U paßt nicht hinein und bleibt deshalb ein unsigned int. Um die Schiebeoperation durch-
führen zu können, wird bit vom Int in ein unsigned Int konvertiert - hier tritt der mögliche
vo
wird bit direkt passend kovertiert und der Zwischenschritt über einen signed integer bleibt
aus.
un
85
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de
13.04.2015
Firmware:
• Funktionen aus Libraries von STmicro: Implizite Typkonvertierungen in explizite Typ-
konvertierungen geändert und Konstanten als unsigned festgelegt, um Compiler-Warnungen
auszuschalten.
än
• Timeouts in I2C-Routinen auf etwas generischere Variante mit Funktionen aus clock.c
umgestellt
Die MISRA-C-Richtlinien von 2004 sind erstaunlich gut lesbar und ein paar Tipps lassen sich
direkt umsetzen.
23.04.2015
Ich den MISRA-C-Richtlinien wird an einigen Stellen auf das Buch „C Traps and Pitfalls“[Koe89b]
verwiesen. Dieses Buch ist die Langversion eines Artikels[Koe89a].
Mit ca. 40 e ist das Buch für seine gerade einmal 147 Schreibmaschinenseiten als überteuert
llst
anzusehen – zumal er nur eine Erweiterung und Detaillierung eines Artikels ist, den man frei
herunterladen kann.
Inhaltlich ist an diesem Buch allerdings nichts auszusetzen. Das Buch ist gut geschrieben und
auch wenn es vor der Standardisierung von ANSI-C verfaßt wurde, haben die meisten Themen
immer noch Aktualität. Es ist so angenehm geschrieben, daß man es an einem Samstag kom-
plett lesen kann. Auch praktisch ist der letzte Anhang, in dem alle Eigenheiten und Parameter
von printf gut erklärt sind. Die beste Ergänzung im Verhältnis zu dem Artikel ist jedoch eine
Anekdote über einen Spinett-Bausatz.
7.05.2015
Trotz der vielen Tests zeigte sich ein alter Hardware-Designfehler erst jetzt: Die Pull-Ups für
den I2C-Bus waren für den Betrieb des TMC222 zu klein. Bislang unbeobachtet blieb dieser
vo
Fehler, da bisher zu Tests immer weitere Geräte mit eingebauten Pull-Ups am Bus hingen.
Bemerkbar machte sich der Fehler durch einen hängen des Busses (der TMC222 hielt SCL
fest).
Neuauslegung der Vorwiderstände: Der I2 C ist auf 5-V-Pegeln, der Pull-Up bisher 4,7 kΩ.
Die Pins des STM32 können maximal 25 mA herunterziehen. Damit ist der minimale Gesamt-
Pull-Up am I2 C:
6V
Rmin = = 240 Ω
25 mA
un
Der neue Pull-Up wird mit 1,8 kΩ gewählt. Damit läuft der TMC222 bei 250 kHz stabil.
86