Sie sind auf Seite 1von 86

dig

än
µEDM - Dokumentation

Nicolas Sänger, DL1DOW

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.

1.1. Der Erodierprozeß


llst
Zum Erodierprozeß sind in der Literatur unterschiedliche Theorien verbreitet. Allen Theorien
gemeinsam ist, daß der Erodierprozeß in vier zylklisch ablaufende Phasen unterteilt ist:
I: Ionisierung des Dielektrikums
II: Ausbildung des Entladekanals
III: Brennphase
IV: Zusammenbruch des Entladekanals
Die Aufschmelztheorie wird z.B. von [Wit97, Wik11] vertreten: Demnach findet der Abtrag-
vorgang hauptsächlich in der Brennphase statt. In die beiden Elektroden findet ein Ener-
gieeintrag durch die beweglichen Ladungsträger statt. Der unterschiedliche Abtrag von Anode
vo

(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

Abbildung 1.1.: Prozeßparameter beim Erodieren


llst
Ein Lichtbogen ist beim Erodieren ein unerwünschtes Ereignis und sollte weitgehend vermieden
werden, da damit eine hohe lokale Erhitzung und eine Beschädigung der Oberfläche verbunden
ist – oft mit einer charakteristischen dunklen Oberflächenfärbung („Verkohlung“ oder „Schat-
ten“). So spielt die Erkennung von Lichtbögen eine zentrale Rolle in der Literatur zur Regelung
von Senkerodieranlagen (z.B. [Gin02] und [WB06b] ).
Abbildung 1.1 zeigt einen idealiserten Spannungs- und Stromverlauf beim Erodieren, an dem
sich die Prozeßparameter definieren lassen.
250 35

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

Detailliertere Informationen zur Parameterwahl beim Erodierprozeß finden sich in [Gin02].


Hier werden die Einflußgrößen nur kurz diskutiert:
• Das Produkt aus Entladestromstärke Ie und Entladedauer ti ist ein Maß für die Entla-

ä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

Abbildung 2.1.: Frontansicht des Grundgeräts mit Bedienelementen

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

und eine auswechelbare Kleinsicherung.

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

– Werkstück und Elektrode zueinander ausrichten


– Werkstück festspannen
– Elektrode und Werkstück anschließen. Die Verkabelung darf sich bei der Bewegung
nicht lösgen.
– Spülung ausrichten.
• Grundgerät einschalten und alle Potenziometer auf korrekte Einstellung prüfen.

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

• Vor dem Öffnen des Gerätes Netzstecker ziehen!


• Vor dem Wechseln der Gerätesicherung Netzstecker ziehen!
• Niemals darf Feuchtigkeit in der Geräteinnere gelangen! Ist versehentlich doch Feuch-
tigkeit in oder auf das Gerät gelangt, ist es unverzüglich durch Ziehen des Netzsteckers
außer Betrieb zu nehmen!
• Gerät nur im abgeschalteten Zustand mit einem feuchten, fusselfreien Tuch abwischen!
llst
• Kabel sind so zu verlegen, daß die Bedienelemente jederzeit bedienbar bleiben und auch
bei Bewegung der Kabel nicht verstellt werden!
• Nach dem Essen zähneputzen!
vo
un

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

Abbildung 3.1.: Schematischer Systemaufbau

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

Der Vorschubantrieb ist ein schrittmotorgetriebener Spindelantrieb, der in jeden 43-mm-Euro-


hals eingespannt werden kann. Gesteuert und versorgt wird er durch das Grundgerät. Durch
den Verzicht auf Endlagenschalter o.ä. ist er äußerst einfach und robust aufgebaut. Die aktuelle
Vorschubposition wird von der Steuerung berechnet.

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

Abbildung 3.2.: Zustände des EDM-Modus

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.

Verfahrmodus Die Z-Achse läßt sich mit dem Rückstellpotenziometer unterschied-


lich schnell verfahren (Eilgang) oder mit dem Drehgeber sehr genau verstellen. Die
Funkenerzeugung ist abgeschaltet. Mit einem kurzen Tastendruck kann in den Hand-

ä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 Vorschub Die Funkenerzeugung ist eingeschaltet. Der Abstand der


Elektrode wird nach dem vorgebenen Spitzensollstrom eingeregelt. Nach Ablauf des
Rückzugtimers wird in den automatischen Rückzugmodus gewechselt. Mit einem kur-
zen Tastendruck kann in den Verfahrmodus und mit einem langen Tastendruck ins Menü
gewechselt werden.
Initialisierung des automatischen Rückzugmodus Die Abstandsregelung nach dem Sollstrom
wird angehalten, eventuell vorhandene Verfahrbewegungen gestoppt. Die Pulserzeugung bleibt
in Betrieb.

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

3.2.2. Andere Betriebsmodi

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.

Einstellungsmenü Einstellungen für den Senkerodierprozeß werden hier vorgenommen


werden. Mit dem Drehgeber kann der entsprechende Menüpunkt ausgewählt werden,
durch Tastendruck wird die hinterlegte Variable als veränderbar markiert und kann mit dem
llst
Drehgeber verstellt und mit einem Tastendruck übernommen werden.

Abbildung 3.3.: Einstellungsmenü

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

Er limitiert im EDM-Prozeß die Einstellmöglichkeiten.


• Dmax Maximaler Tastgrad: Dieser Wert ist durch die Endstufe bedingt und bezeichnet
den maximalen Tastgrad, den die Endstufe kurzfristig aushält. Er limitiert im EDM-
Prozeß die Einstellmöglichkeiten.

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

EDM- EDM- EDM- EDM- EDM-

ä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

hardwarespezifisch I2C PWM ADC Encoder Taster GLCD


generisch

Abbildung 3.5.: Firmwarmodule

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

\ed Umschalten auf extrem gequetschte Schriftart, 4 × 8 Pixel


• Umschalten der Schriftbreite
\ef Umschalten Festschriftweite
\ev Umschalten variable Schriftbreite (schmalere Zeichen werden schmaler dargestellt)

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

Abbildung 3.6.: Displayauflösung (links) und Speicheradressen markanter Punkte (rechts)

• 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)

Abbildung 3.7.: Schriftarten

da si+1 − si = 1. Eine angemessene Beschleunigung ā ergibt sich über den Schrittabstand t1 −


t0 = ∆t̄0 mit t0 = 0, bei dem sich der Schrittmotor noch statisch (ohne Beschleunigungsrampe)
bewegen läßt:
vo

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

∆ti+1 = t2i + ∆t̄0 − ti

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

Damit wurden folgende reale Zeitabstände gewählt:

∆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

was in doppelt logarithmischer Darstellung wie in Abbildung 3.8 aussieht.


Schrittabstaende
2

än
10
ideal
real

1
t

llst 10

0
10
0 1 2
10 10 10
step

Abbildung 3.8.: Zeitlicher Abstand der Motorschritte

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

ordentlichen Puls erzeugt.


• toff,min Minimale Ausschaltdauer: Die kleinste Dauer, bei der die Endstufe noch den
Stromfluß unterbrechen kann.
• Dmax Maximaler Tastgrad: Der Tastgrad ist durch das 70V-Netzteil und dessen Maxi-
malstrom begrenzt.

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]

Abbildung 3.9.: Erlaubte Betriebsparameter für ton und toff

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

erteil verbunden und haben keine direkte Verbindung zu den Leistungskomponenten.


An SV1 hängt das Grafik-LCD, das zusammen mit der Steuerplatine eine kompakte Einheit
bildet. Für das (bei einem bekannten Lieferanten aus Pförring erhältliche) TG12864B-Grafik-
LCD existieren zwei unterschiedliche Pinbelegungen für die Hintergrundbeleuchtung, worüber

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

leichter erhältlich als die besser geeigneten BAT49.


• D3 Z-Diode 5,6V hat eine ausreichend gerade Kennlinie, absolute Maximum Rating
ATmega 6,0V, LCD 7,0V.
• R3,R4 (Variante grün) 10Ω. Das TG12864B-05 braucht eigentlich keine Vorwiderstände
und kann direkt an 5V.
• R7–R14 Der Displaycontroller kann je nachdem, welches Datenblatt konsultiert wird, 4
oder 6 mA treiben. Der ATmega 20mA. Bei ca. 1kΩ wird der Displaytreiber auch dann
nicht zerstört, wenn beide Treiber gegeneinander arbeiten.
• R25 LED mit ca. 15mA
un

• R26,R27 4,7kΩ; typischer Pull-up für I2C


• R28,R29 100Ω, typische Angstwiderstände für I2C
• RN1 nicht bestückt. Das hier verwendete Display benötigt keine Pull-Down-Widerstände.
Die Auslegung des Eingangsfilters aus R16, R17, L2, C16 und C17 ist im Kapitel 3.5.2 auf
Seite 29 beschrieben.

26
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de

3.4. Schrittmotortreibermodul

än Abbildung 3.11.: Leiterplatte für das Schrittmotortreibermodul

Die „Schrittmotortreibermodul“ genannte Baugruppe (siehe Schaltplan im Anhang) enthält


llst
einen Schrittmotortreiber und sorgt für die 5V-Versorgung des Steuerteils und des Leistungs-
treibermoduls und bei letzterem auch für die 12V-Versorgung. Darüberhinaus stellt er auch
die Signalverbindungen zwischen beiden Teilen her.
Der Schrittmotortreiber ist eine klassische L297/L298-Kombination für Halb- oder Vollschritt-
betrieb, wobei durch einen schaltbaren Spannungsteiler ein Haltemodus mit Stromabsenkung
vorhanden ist.
Der Soll-Strom kann durch einen zehngängigen Spindeltrimmer von außen eingestellt werden.
Die Spannungsversorgung erfolgt durch 9V Wechselspannung an den Klemmen X203.
Der Anschluß des Schrittmotors erfolgt an den Klemmen X201/X202.
Der Steckverbinder SV201 dient dem Anschluß und der Versorgung des Bedienteils/Steuerpla-
vo

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

Das Leistungstreibermodul enthält die FET-Endstufe zur Pulserzeugung und Komponenten


zur Strommessung. Trotz des kompakten Aufbaus ist er Aufgrund des zu erwartenden erheb-
lichen Störpotenzials räumlich etwas vom Schrittmotortreibermodul entfernt.
vo

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

än Abbildung 3.13.: Instrumentenverstärker und Spitzenwertdetektor


llst
Mit einem OPA 2340 sind zwei Spitzenwerkdetektoren implementiert. Der obere Zweig erzeugt
eine positive Spannung, die dem Spitzenwert der Meßspannung entspricht und langsam ab-
fällt. Diese Spannung dient der Abstandsregelung und wird mit dem A/D-Wandler mit dem
maximalen Takt abgetastet.
Der untere Zweig erzeugt eine positive Spannung, die dem unteren Spitzenwert der Meßspan-
nung entspricht und langsam ansteigt. Bei einer korrekt funktionierenden Endstufe muß dieser
Wert immer bei 0V sein, steigt er an ist dies ein Zeichen dafür, daß der Stromfluß nicht mehr
zuverlässig unterbrochen wird. Daher wird diese Spannung als Diagnosegröße mit normalem
Takt abgetastet.
vo

3.5.2. Eingangsfilter für die „Sense“-Eingänge

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

Abbildung 3.14.: RLC-Filter für den Sense-Eingang

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

Abbildung 3.15.: Amplitudengang des RLC-Filters mit Bauteiletoleranzen

bei maximalen Toleranzabweichungen (Toleranz X7R-Keramikkondensator ±10%, Toleranz


Induktivität LMICC 1,0mH, ±10%, Kohleschichtwiderstand ±5%).
V2
R1

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

PU LSE(0 1.5 50u 0.25u 0.25u 50u 100u)

out
.tran 0 1m 0

Abbildung 3.16.: Aufbau der Simulation des Sense+-Zweigs in LTspice

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

Abbildung 3.17.: Simulierte Spannungsverläufe an der Quelle (grün), am Operationsverstärke-


rausgang (blau) und hinter dem Filter (rot)
llst
3.5.3. Leistungsgrenzen

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Ω

10W Dauerleistung (mit Kühlkörper), keine Berücksichtigung des Puls-Pausen-Verhältnisses:


s s
Pmax 10W
Imax = = = 44,7A
R 0,005Ω

Instrumentenverstärker
un

Instrumentenverstärker AD8217, Uin,max = 250mV. Meßshunt 0,005Ω. Scheitelwert:

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

Begrenzung durch themische Leistung (ideale Kühlung):


vo

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

Uprim = 48,5V, Iprim,max = 9,8A


Nach Zweiwegegleichrichtung und Siebung:

Ugleich ≈ Uprim · 2 = 68V
Iprim,max
Igleich,max ≈ √ = 6,9A
2

32
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de

Gleichrichterbrücke
Type KBPC2510

maximum average forward output current 25A

peak forward surge current, 8.3ms single half 300A

ä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

burg, Diss., 2002. – Projekt muEDM


[Gre11] Grenning, James W.: Test Driven Development for Embedded C. 1st Editi-
on. O’Reilly Vlg. Gmbh & Co., 2011 (Pragmatic Programmers). – ISBN 978–
1934356623
[Grü13] Grünfelder, Stephan: Software-Test für Embedded Systems: Ein Praxishandbuch
für Entwickler, Tester und technische Projektleiter. dpunkt.verlag, 2013. – ISBN
978–3864900488
[HH15] Horowitz, Paul ; Hill, Winfield: The Art of Electronics. 3rd. Cambridge Universi-
un

ty Press, 2015 http://artofelectronics.net/errata/. – ISBN 978–0521809269


[Koe89a] Koenig, Andrew: C Traps and Pitfalls. AT&T Bell Laboratories Murray Hill,
New Jersey 07974, 1989
[Koe89b] Koenig, Andrew: C Traps and Pitfalls. Addison-Wesley, 1989. – ISBN 0201179288

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

Senkanlagen unter Einbeziehung von Fuzzy-Technologien, Hamburg, Diss., 1997. –


Noch nicht gelesen Ausdruck mit Notizen
un

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

10n 10n 10n


+

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

PC11: -||USART3_RX PC11 79 SPARE1 PULSE3 PUL3 PULSE 9 10 GND_12V


PC12: -||USART3_CK PC12 80 SPARE2 Reserve PULSE2 PUL2 74HCT125D +12V 7 8 GND_12V
SMB001

7 PULSE1 PUL1 IC2C SENSE+ 5 6 GND_5V


wenig Treiberleistung FT PC13 3 4

+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

IC1PORTD_H C134 X6-1


1

PD8 55 GLCD0 100n


GND1

R122
R123
R124
PD9 56 GLCD1 IC2D
C126 C125

57
10µ 100n

D PD10 GLCD2 SPARE1 R126 IC2B D


58 GLCD3 SPARE2 R127 12 11 +
PD11
PD12 59 GLCD4 SPARE3 R128 SEN0 L1 5 6
60 GLCD5 SENSE0 SV3
SPARE PORT

PD13 1k
61 47µ 20
13

PD14 GLCD6 PULSE3 19


4

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

PE13: //TIM1_CH3 FT PE13 44 PD5: //USART2_TX FT PD5 86 100n


D101
D102
D103
D104

E PE14: //TIM1_CH4 FT PE14 45 PD6: //USART2_RX FT PD6 87 E


C136

22n
C135

46 SV6 88 SV7
none

PE15: //TIM1_BKIN FT PE15 PD7: // USART2_CK PD7 GND1


2 1 2 1
4 3 4 3 SEN3 L4 GND1 µEDM DL1DOW
PXx: default//remap 6 5 6 5 SENSE3
FT: nicht 5V-tolerant 8 7 8 7 22n 1m C141 Steuerteil
*) Pin hat keine besonderen Eigenschaften, die ihn disqualifizieren 10 9 +3V3 10 9
+3V3 GND1 GND1 C140 none
**) PB5 als TIM2_CH2 hat eigenen Abschnitt im Errata-Dokument Rev. 0.7-2
dig
SPARE_I2C_LINE/2.2B
100n C129 100n C123 GND1
I/O
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8

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

GND1 GND1 OSC_OUT 13 R117


SMB001 100n C124
U2 +12V 1k8

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
+

+24V C212 C37


22 VDDA
10µ 100n 19 VSSA
R211
48R

+
C207 C208 C209 C05
+

GND1

C215 C36 21 VREF+


+5V/1
+5V/1 100n 200n 100n 10µ 20 VREF-
10µ 100n

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

GND1 I2C-Addr: 0xC0 GND1 10 VSS_5

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

SV2 GND1 SV3


14

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

VCC (MOSI)PB5 GLCD5 GND1


11 GND (SS)PB4 5 GLCD4 100R L2 390
4

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

+5V/1 (TMS)PC3 25 SPARE1 C26


100n

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

16 15 R215 470R HOME 3


B 14 13 R216 470R GND1 GND1 GND1 2 GND B
12 11 PULSE
10 9 SENSE+
vo 8 7
GND1 L297 GND1
6 5 SENSE- +5V/1 +12V
4 3 TP3 TP8

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

+5V/1 SENSE- 3 4 100n


1 2 9 VCC VS 4
D201
ES2D
D202
ES2D
D203
ES2D
D204
ES2D

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

als eine echte Weiterentwicklung wird.

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:

PortA-high (Teile): USART1 + USB + CAN


PortD-low (komplett): CAN + USART2
PortE-low: Trace, vorerst eher uninteressant, deswegen nur Lötpads

ä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.

Kontrasteinstellung des Grafik-LCDs


Das Grafik-LCD TG 64128A benötigt eine Kontrastspannung V0 von −3,4 V bis −4,2 V (ge-
genüber GND) und stellt dazu eine Ladungspumpe VEE mit −14,5 V zur Verfügung, an die
llst
normalerweise ein Poti gegen VDD angeschlossen wird.

Abbildung B.1.: Kontrasteinstellung per PWM


vo

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

Abbildung B.3.: JTAG-Adapterkabel

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.

Planung der Pinbelegung


Bei der Planung der Pinbelegung sind für das LQPF100-Package ca. 80 Pins sinnvoll verwend-
bar. Wichtige Kriterium für die Pinverteilung sind:
• 5 V-Toleranz
• Sonderfunktionen (I2C, Timer, etc.)
• Belegte Funktionen (Boot, . . . ).
• Andere Besonderheiten einzelner Pins (beispielsweise haben PC13, PC14 und PC15 we-
niger Treiberleistung, bei PA0 ist die ADC-Genauigkeit erheblich schlechter . . . )
vo

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.

Portierung der Firmware


• ARM und AVR sind beide little-endian
un

• Der Artikel „Plattformunabhängige Programmierung in C“ liefert viele hilfreiche Infor-


mationen zu diesem Thema.

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) × × × × ×    ×   × × × × × × × × × × ×

Sense ≥2 ADC (schnell) × × × × ×    ⊕ ⊕ ×   × × × × × × × × × × ×

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) ⊕ ⊕ ⊕ ⊕ ⊕ ⊕ × × × × × × × × × × × × × × × × × × × × × × × × × ×

Sense ≥2 ADC (schnell) ⊕ ⊕ ⊕ ⊕ ⊕ ⊕ × × × × × × × × × × × × × × × × × × × × × × × × × ×


llst
Pulse ≥1 PWM - - -

JTAG 5 fest × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × × ×

Tabelle B.1.: Mögliche Pinkombinationen


• fest vorgesehen

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

B.2. Neukonzeption des Steuer- und Schrittmotorteils


un

B.2.1. Neukonzeption Steuerteil

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

• MCU ARM-Cortex M3 bei 75MHz


• Clamping-Dioden und Schutzbeschaltung an allen Eingängen.
• I2C-Bus auf 3,3V-Pegel
• Line driver 5V für Pulssignale
• Direkt mehrere ADC-Kanäle für Regelung reservieren
• Grafik-LCD funktioniert mit 3,3V-Pegeln

ä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

• Unklar, ob Programmierung bei laufendem System möglich


Mit dem ST-Link/V2 ISOL ist ein JTAG-Adapter mit Potenzialtrennung verfügbar.
• Debug-Möglichkeiten
Die Debug-Möglichkeiten mit dem JTAG-Adapter überschreiten die Möglichkeiten per
ISP bei weitem.
• MCU kann nach der fertigen Entwicklung nicht gegen ein weniger verschlissenes Teil
ausgetauscht werden
Die MCU im LQFP100-Pacakge kann nicht gesockelt werden. Der Flash ist mit 10000
Schreibzyklen spezifiziert, die MCU verfügt über Hardware-Breakpoints. Falls das Bauteil
nicht anderweitigem Streß ausgesetzt ist, kann es nach der Entwicklung weiterverwendet
un

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

B.2.2. Neukonzeption Schrittmotorteil

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

B.2.3. Zusammenlegung von Steuer- und Schrittmotorteil

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.

B.3. Unzusammenhängende Details


llst
B.3.1. Drehgeber

Abbildung B.4.: Drehgeber-Signal: Gleichmäßiger, mechanischer Antrieb (links) und Handbe-


dienung durch einen Menschen (mitte und rechts)
vo

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

• Projektaufbau ruhen lassen, neue Literaturlage sichten


• ADC-Eingangsfilter und -Impedanz berechnen
• Lieferung Leiterplatte Kleinleistungsteil Rev. 0.7 abwarten
• STM32: ADC für Potis
llst
• STM32: ADC für Prozeßregelung
• TMC222: Abschaltung ausprobieren
• „Nasse“ Versuche für die Implementierung der finalen Abstandsregelung
• Mechanischen Aufbau des Grundgeräts finalisieren
• Verbesserungen des Gesamtaufbaus umsetzen
• Leiterplatten von Flußmittel reinigen und lackieren

C.2. Verbesserungen und Korrekturen


vo

C.2.1. Leistungsteil

Bis Rev. 0.9


• Elko für 5V-Schiene → umgesetzt
• Pull-down für sicheren Zustand → umgesetzt
• Diode liegend vorsehen zugunsten der mechanischen Festigkeit. Wurde nicht umgesetzt,
stattdessen die Diode jetzt mit dem Kühlkörper verschraubt.
• Rückschwingdiode im Lastkreis nicht umgesetzt, da der Gleichrichter bei 70V völlig aus-
reichend belastbar ist.
un

• Logik der LED umdrehen → umgesetzt für Rev.0.9


• Ansteuerung des FETs
Die Anpassung der Transistoren und Widerstände an die durch Simulation optimierte
Version erlaubt problemlos einen Pulstakt von über 200kHz.

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.

Verbesserungen Rev. 0.7 → 0.8 (zukünftig)


• JTAG-Stecker im 2,0 mm-Raster
• Kleinerer JTAG-Stecker (z.B. ARM-10-Pol)
• PWM für Kontrasteinstellung auf anderen Pin legen (anderer Timer und/oder einzeln
vo

remapbarer Pin)
• Freie Pins auf 0805-LEDs für Statusanzeigen

Nicht umgesetzte Verbesserungen


• Poti für die Kontrasteinstellung von außen zugänglich machen
Entfällt durch die Software-Kontrasteinstellung ab Rev. 0.7.

C.2.3. Schrittmotorteil
un

Bis Schrittmotorteil Revision 0.5


• Adjust-Poti anwinkeln
Der Soll-Strom kann so im eingebauten Zustand besser eingestellt werden.
• Meßpunkte für GND, +5V, +10V, adjust

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 und Korrekturen Schrittmotorteil Rev. 0.5 → Kleinleistungsteil 0.7


Der Schrittmotorteil entfällt als separate Baugruppe und wird in den Steuerteil integriert.
• Mikroschritt-Endstufe
Der Kleinleistungsteil integriert eine Mikroschritt-Endstufe, die eine deutlich höhere
Laufruhe als die Halbschritt-Endstufe aufweist.
• Höhere Versorgungsspannung
Die Schrittmotorendstufe im Kleinleistungsteil kann mit 24 V versorgt werden. Das ver-
llst
spricht größere Reserven im Eilgang und ein angenehmeres Betriebsgeräusch des Chop-
pers.

Verbesserungen (zukünftig)
Zukünftige Verbesserungen für den Schrittmotorteil werden aufgrund der Zusammenlegung bei
der Steuerplatine geführt.

Nicht umgesetzte Verbesserungen


• L297 als SMD
Nicht umgesetzt, da schlecht erhältlich
• Größerer Gleichrichter für 12V-Schiene
Der Gleichrichter ist schon stärker als Trafospule, deshalb ist das nicht sinnvoll.
vo

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

• Berücksichtigung der Logik der Treiberstufe (erneut)


Einstellbarkeit über Menü, nicht über Quelltextdirektiven
• EEPROM-Update: eeprom_update Funktion statt ständigem Überschreiben

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.

DONE : EDM-statemachine auslagern. (SVN 341)


FIXED : Schrittmotortreiber wird nur erkannt, wenn I2C-Logger angestöpselt ist. (SVN355)
llst
FIXED : edm_test.c - Verfahrtest läßt sich auf dem AVR nicht auf Knopfdruck verlassen
Fehler in key_avr_stm32.c. Der Taster reagierte nur korrekt auf Tastendruck an Pin 0.
Hintergrund ist, dass beim Makro BitIsSet die logische 1 nicht immer 0x01 sein muss.
Blieb lange unentdeckt, weil auf dem STM32-Board der Taster an Pin 0 ist und auf
dem AVR-Board die Vorgängerversion mit fehlerbehaftetem Erkennen von Flanken noch
lange verwendet wurde.
FIXED : gpio.h - Inkonsistenz der Makros fuer AVR (betrifft SetBit, ClearBit und BitIsSet)
Alle Befehle erwarten jetzt konsistent eine Bitmaske. Die Funktionen für die Display-
Routinen wurden angepasst.
WON’T FIX : Verfahren mit Schrittmotor schlägt bei I2C-Takt>200kHz fehl.
vo

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

DONE : Schrittmotorparamter (z.B. iHold, iRun, Direction, I2C-Adresse) in Einstellparame-


tern übernehmen. (SVN380-0)
FIXED : menu.c - strncpy stellt keine Terminierung mit \0 sicher.
Nullzeichen (’\0’) wird manuell am Stringende angefügt.
DONE : Eingangsfilter für ADC auslegen und einbauen
Der ADC-Eingangsfilter für die direkte Abtastung des Funkenstroms ist auf eine Grenz-
frequenz von 500 kHz ausgelegt.
un

DONE : IRQs für I2C-Fehler


IRQ stoppt das Gerät. (SVN 405)

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

sem Grund nicht versioniert werden. (SVN372)


FIXED : STM32-Firmware quittiert Start der EDM-Routine immer mit der Fehlermeldung
„EEPROM-Daten nicht korrekt“.
Hat sich mit der Behebung des Fehlers in eeprom_read_block (siehe unten, SVN 377)
erledigt.
FIXED : Fehlermeldung „EEPROM-Daten nicht korrekt“ hat kleine Schriftart.
Schriftart wird am Anfang der Fehlermeldung auf „normal“ zurückgesetzt.
un

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

DONE : gpio.h Makros durch inline-Funktionen ersetzen


Alle GPIO-Funktionen für alle Plattformen sind jetzt in der io.h und basieren auf inline-
Funktionen. (SVN 535 im Rahmen des FMT25/6-Projekts)
DONE : EEPROM-schreiben mit eeprom_update anstelle eeprom_write. Diese Funktion muß
für den STM32 erst implementiert werden.
Die Funktion eeprom_update_block() ist jetzt für ein externes EEPROM verfügbar.
(SVN 377)
un

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

In gpio_stm32f10x.c existieren jetzt Funktionen, um den Takt generisch einzuschalten.


(SVN 397)
DONE : edm_display muß refaktoriert werden (inkl. Formatierung). (SVN409)
DONE : edm_help muß refaktoriert werden (inkl. Formatierung). (SVN414)

ä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

DONE : Logik des Menü-Scrollens umdrehen


Benutzt man das Menü mit einem Jahr Abstand erscheint es unlogisch, daß bei einer
Drehung nach links das Menü zu höheren Punkten wechselt. Eine andere Richtung sollte
ausprobiert werden.

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

FIXED : Der I2 C-Reset/freitakten am STM32 funktioniert noch nicht richtig.


Es handelte sich um ein Hardwareproblem (Pull-Ups zu groß).

61
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de

FIXED : menu.c Fehler beim kompilieren: „unrecognizable insn“ (AVR).


Der Fehler beim Build ist auf einen bekannten Compilerfehler in der AVR-GCC-Version
4.8.1 zurückzuführen (https://gcc.gnu.org/PR61443), der in späteren Versionen be-
hoben ist. Ein Workaround, der jede Zeichenkette kopiert, ist implementiert und bleibt
mindestens so lange bestehen, wie die AVR-GCC-Version 4.8.1 die aktuellste erhältliche

ä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)

C.2.7. Lessons learned

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

torteil. Von einer „Leistungsteil“-Baugruppe (Rev. 0.5) wird der Funkenerzeugungsteil


entstückt und eine neue „Leistungsplatine“ (Rev. 0.6) entworfen, die über Jumperkabel
angeschlossen ist.

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

• Der Leistungsteil wird neu geroutet.


• Für den Steuerteil und den Leistungsteil wird eine kommerziell hergestellt Leiterplatte
bestellt.

8.07.2013 – 16.07.2013
• Firmware:
– Anpassen der Firmware an die veränderte Pinbeledung von Rev. 0.6
un

– Implementierung einer linearen Adressierung des Grafik-LCDs


– Implementierung eines scrollbaren Menüsystems
– Implementierung eines Kalibrier-/Einstellmenüs
– Neue Routinen zur Abfrage des Drehgebers (wackliger Pollin-Drehgeber)
– Versionsscreen implementiert
– Anzeigemöglichkeit SRAM-dump als Diagnosemöglichkeit (scrollbar)

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

• Leistungsteil: Proof-of-concept: Spitzenwertdetektor zur Messung des Spitzenstroms

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

Soft-Aus momentan nicht mehr!


– Auf die Shunt-Widerstände wurde verzichtet, da künftig ohnehin ein High-level
Stromsensor vorgesehen ist.
– Der Snubberwiderstand R4 wird recht warm. Evtl. anderen Wert oder Snubber-R-
C-Kombination vorsehen.
• Steuerplatine (Rev. 0.6)
– Steuerplatine funktionierte immer nur, wenn Programmer angesteckt war. (Andere
Fälle mit Rev. 0.6 nie getestet!) Sobald Leitung PB7 (ISP SCK/GLCD busy-Pin)
nicht verbunden ist sind GRafikfehler die Folge. Pull-up oder Pulldown-Widerstände
un

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

– Firmware für Grafik-LCD-Datenübertragung neu aufgesetzt, akurat nach Daten-


blattangaben.
• Fazit
Die neue Endstufe mit einem IRFB 4110 funktioniert nach den ersten Tests erstaunlich
gut. Auch ein versehentliches Dauer-An an 6,5Ω Lastwiderstand steckt sie (im Gegen-

ä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

Bauteile auf SMD umgestellt wurden.


– Adjust-Poti ist jetzt von oben erreichbar.
– Freilaufdioden durch ES2D ersetzt
– Mehrpolige Verbindung zu Leistungsendstufe wegen zweikanaligem Meßverstärker.
Verbindung wird nur noch durchgereicht, Filterung ist jetzt auf der Leistungsplatine.

4.10. – 20.10.2013
• Steuerplatine
un

– Auslegung Eingangsfilter für Sense+ und Sense-.


– Die Simulation von Spitzenwertdetektor und Filter zeigen, daß die Spikes, die wie
Einstrahlungen in die Meßleitungen aussahen auch in der Simulation erscheinen und
somit reale Effekte der Operationsverstärkerschaltung sind.
– Umlagerung Drehgeber von X5 auf X6, um AD-Kanal für Sense- freizumachen. Für
Sense- liegt jetzt ein LRC-Glied vom neuen Steckereingang zu PA1.

67
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de

– Neuer Steuerteil in Frontplatte eingepaßt, Kabelbaum mit Wachsschnur, Frontplatte


komplett mit Imbusschrauben.
• Firmware
– Fehler in Abschaltung JTAG korrigiert
– Pulsgenerator hat jetzt Logik (active high oder active low) umschaltbar

ä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

Bewegungsspülung: Oszillation der Elektrode im Spaltbereich, um Verwirbelungen zu erzeugen,


dann Anheben auf bis 1mm über Werkstück.
Planetärerosion: Seitliche Verfahrbewegungen erhöhnen die Flexibilität und verbessern die
Spülbedingungen.
Alles in allem ist die Diss hervorragend lesbar und bis Seite 76 sehr nützlich.

ä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

• Stiftleiste für das GLCD


• Anschluß Pulserzeugungsteil
• Anschluß I2 C
• große Stützelkos für 12V und 24V
• Spannungsregler
• (Brückengleichrichter)

ä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

nur mit mehr Möglichkeiten.

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

richtung und -Bezeichnung nicht besonders gut erkennbar.


Ohne Jumper läuft die MCU nicht an, ist jedoch schon per JTAG erreichbar. Im Gegensatz
zum AVR ist Erreichbarkeit per JTAG kein Indiz dafür, ob die MCU läuft. Portierung der
LCD-Ansteuerung, Drehgeber, Taster, I2 C und die Kontrasteinstellung per PWM laufen pro-
blemlos.

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

ARM-Mock-up AVR-Mock-up Sensor

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

• Taster und Drehgeber


• Einfacher I2 C (Polling) mit Bus-scannen
• Ansteuerung eines externen EEPROMs (lesen, schreiben, single byte und blockweise)
• Auslesen eines LM75 Temperatursensors
• Menü mit Hardwaretests
• Einfaches Auslesen des ADC (Polling)

76
dig
µEDM – unvollständige Dokumentation – 3. September 2015 – aktueller Stand bei www.DL1DOW.de

• Ansteuerung des TMC222-Schrittmotortreibers


Die implizite Annahme, der STM32 hätte eine interne ADC Referenzspannung von 2,4 V
stimmt nicht- die Referenzspannung muß extern zugeführt werden. Die vom Spannungsreg-
ler LT1117 erzeugte Spannung ist genauer als alle hier verfügbaren Meßgeräte und sollte somit
als Referenzspannung ausreichen.

ä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

Im Bereich der I2 C-Kommunikation wird auf DMA-Transfers verzichtet werden müssen, da


diese nur mit dem DMA-Channel-1 möglich ist, der allerdings mit dem ADC deutlich sinnvoller
beschäftigt ist. Ob die Nutzung von IRQs sinnvoll ist, muß noch entschieden werden. Immerhin
kann die längere Operation – das Pollen des Status – ruhig mit weniger als 10 Hz stattfinden.

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

• Eine oder mehrere LEDs, die Fehlerzustände signalisieren können


• Kleinerer JTAG-Stecker (wahrscheinlich ARM-10-pol)
• Schaltbare Spannungsversorgung für den TMC222

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

C:\Program Files (x86)\InstallShield Installation Information\...


...{71D5A296-D77E-4BC5-BB75-12AD20001A61}
enthält noch einmal eine Kopie der Installationsdaten und läßt sich löschen, solange der Dein-
staller für Atmel Studio nicht mehr gebraucht wird. Vor einer Deinstallation von Atmel Studio
6.1 muß es aber erst einmal wieder mit dem Original-Installer darüberinstalliert werden.
Über CooCox dagegen ist die Enttäuschung nicht zu verbergen. Obwohl sich das Werkzeug als
extrem mächtig und komfortabel herausgestellt hat, fehlt soetwas einfaches wie die Möglichkeit,
„Tasks“ (also die Sammlung aller FIXMEs und TODOs, die im Quelltext verstreut sind)
übersichtlich in einer Liste darzustellen.
un

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

2. Doku und Quelltext immer parallel eingecheckt werden müssen und


3. lange und häßliche Seiten mit Nichtproportionalschrift entstehen.
Was soll’s.

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

switch (1) { case 0: default :

// 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:

Pulse0 TIM3 CH2 PA7


Pulse1 TIM3 CH1 PA6
Pulse2 TIM2 CH4 PA3
Pulse3 TIM2 CH3 PA2

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

Datenverlust auf und der GCC warnt.


Mit der Änderung

GPIOx->BSRR = (uint32_t) bit<<16U;

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