Schaltung

Digitalteil

Die Schaltung wird gesteuert von einem ATMega324, einem relativ kleinen Bruder der ATMega-Sippe, der sich jedoch als aus­reichend erwies. Als Takt­frequenz habe ich mich für 7.3728 MHz entschieden. Für diese Anwen­dung reicht das aus und unnötig hohe Takt­frequen­zen würden nur EMV-Probleme provo­zieren ohne einen wirk­lichen Nutzen zu erzielen. Erste Versionen verwendeten sogar nur 3,6864 MHz aber um schnell genug auf Veränderungen der Lastsituation (speziell einem hot connect, also dem Anschluß an eine Quelle nachdem bereits der Laststrom eingestellt wurde) reagieren zu können habe ich mich entschieden, diese zu verdoppeln. Erst dann kann der Laststrom in weniger als einer Millisekunde an die SOA angepasst werden.

Die Software wurde mit dem Atmel Studio 6.2 erstellt. Für mich gibt es keinen ratio­nalen Grund etwas anderes zu ver­wenden (ausser viel­leicht die neuere Version...).

Anmerkung: Atmel Studio 7 behauptet bei der Installation unter XP "Dieses Programm erfordert eine neuere Version von Windows". Schade, dass bei Microsoft aus 'Experience' so schnell 'obsolete' wird. Ich hätte es gerne ausprobiert... aber die Zusatzkosten und vor allem der Zusatzärger sind die Neugier nicht wert. 6.2 ist o.k. für mich! Ich müsste drei oder vier Rechner aktualisieren und speziell bei Laptops (Alter 7 Jahre oder mehr, immer noch mit dem ersten Akku und immer noch schnell und gut genug für alles, was ich mache) weiss ich nicht, ob danach alles wieder funktioniert.

Display

Als Display ist ein weit ver­brei­teter und deshalb bil­liger 4x20-Zeichen-Typ sicherlich aus­reichend wenn­gleich die Dar­stellungs­modi ziemlich veraltet sind (es gibt nicht­mal eine Reverse-Dar­stel­lung und schon gar keine Graustufen und auch die Cursor-Optionen sind ziemlich be­schränkt). Der Display-Controller stammt eben aus einer Zeit als ein Kilo­byte RAM noch richtig teuer war und man sich jedes einzelne Flipflop zweimal überlegte bevor man es in Silizium brannte aber er hat sich bis heute ge­halten und ist heute popu­lärer und bil­liger denn je...

Erstaunlich finde ich es jedoch, dass es keinen (halbwegs) kom­patiblen Nach­folger mit den er­wähnten Eigen­schaften gibt!

Das Display wird hier im 4-Bit-Mode betrieben. Mir ist kein Daten­blatt irgend­eines (kompa­tiblen) Chips be­kannt, das an­gibt was mit den unbe­nutzten Pins zu machen ist! Im Internet gibt es Leute, die sie Grounden ohne zu wissen ob sie bei einem Read als Ausgang agieren, ich habe sie aus genau diesem Grund stets offen gelassen. Aus meiner Sicht machen Sie damit nichts falsch.

LEDs

Erst in der zweiten Version der Schal­tung entschied ich mich dazu, 8 LEDs als Status­anzeige hinzu zu fügen. Da der Con­trol­ler keine Pins mehr frei hat wurde ein bil­liges 8-Bit Schiebe­register (~20 Euro-Cents) in die SPI-Leitung zum DAC ein­ge­schleift.

Sie werden über Licht­lei­ter durch die Front­platte ge­führt. Zwei­mal zwei LEDs lie­gen unter dem glei­chen Licht­lei­ter so dass nur sechs davon nötig sind.

Power (grün) und Fehler (rot) wurden zusammen gelegt, ebenso wie Range Low (grün) und Range High (blau).

Die sechste LED hat bisher keine Funktion.

Tastatur

Dafür wurde auf eine übliche Telefon­tastatur zurück­gegriffen wie sie von ver­schie­denen Her­stel­lern erhältlich ist. Die Anordnung des Steck­verbinders ist teilweise unter­schiedlich, auf der Leiter­platte wurden zwei Buchsen­leisten vor­gesehen, die für zwei gängige Typen passen.

Die Tastatur hat natürlich 10 Ziffern­tasten und zwei zu­sätz­liche (# und *) die ich hier für Enter/Cancel bzw. Yes/No benutze. Sie sind in einer 3x4 Matrix angeordnet so dass zur Abfrage 7 Leitungen benötigt werden. Wir verwenden drei Scanlines (die nacheinander auf '0' gelegt werden) und vier Returnlines welche die Zustände der dadurch an­ge­sprochenen Tas­ten liefern.

Die Return-Lines liegen nicht zu­fäl­lig an Port A (der auch den in­ternen AD-Con­ver­ter hosted). Damit werden Stö­rungen auf die Zeit begrenzt, in denen tat­sächlich eine Taste der Zehner­tastatur gedrückt ist und damit an den Analog­eingängen zeitlich minimiert.

Sie werden alle 10 ms im Timer Inter­rupt ab­gefragt der gleich­zeitig für die Ent­prel­lung der Tasten sorgt. Einfach aus­gedrückt, wenn die Tasten nur alle 30 ms abgefragt werden (drei Scan­lines × 10 ms) könn­en sie auch 30 ms lang prellen ohne dass es stört.
Dies ist die (aus Softwaresicht) billigste Methode der Entprellung, mit minimaler CPU-Last und kleinster Code­größe. Im Internet habe ich Artikel gefunden, die aus Mehr­fach­scans mit deutlich höherer Rate mit mehr oder weniger auf­wän­digen Al­go­rithmen den Tasten­druck er­ken­nen um Fehl-Erken­nungen durch Spikes zu ver­hin­dern. Nach meiner Er­fahrung ist dies bis auf wenige Spezial­fälle (Tas­tatur relativ weit vom Con­troller ent­fernt in EMV-ver­seuchter Um­gebung) unnötig. Wenn Sie hier Pro­bleme mit Spikes be­kom­men liegt ein Hard­ware-Problem vor, das Sie lieber mit einem bes­seren Layout, ge­eig­neten Pullup-Wider­ständen oder 100 pF-Kon­den­sa­toren an den Re­turn-Lines lösen sollten! Wenn Sie hier nur die Tas­tatur per Soft­ware ent­prel­len ist es nur eine Frage der Zeit bis ein an­deres Signal Probleme macht.

Lösen sie Hardware-Probleme mit Hardware und Software-Probleme mit Software! Hardware-Probleme mit Software zu lösen bringt meist nur zusätzliche Probleme.

Das Abfrageintervall bestimmt gleich­zeitig auch die Re­aktions­zeit bzw. die maximale Eingabe­frequenz die hier etwa 15 Hz beträgt. Da Drücken und Los­lassen der Taste je­weils einen Scan erfor­dern ergibt das maximal 15 Tasten­drücke pro Sekunde. Das ist ein guter Kom­promiss zwi­schen dem langen Prellen bil­liger Kon­takte und der hohen Tipp­rate einer profes­sionellen Sekretärin :-)

Die Abfrage-Routinen wurden um eine Repeat-Funktion sowie einem "Key Pressed Long"-Event erweitert. Alle Funk­tionen können per #define ak­ti­viert werden, was mö­gli­cher­wei­se ein paar zig Bytes Pro­gramm­speicher sparen kann. Beachten Sie: wenn sie das Key Pressed Long-Event nutzen wollen soll­ten kurze Tasten­drücke nur mit dem Key Released-Event er­kannt wer­den um sie von lan­gen Tas­ten­drücken unter­scheiden zu können. Werfen Sie einen Blick auf die Source-Code-Do­kumen­tation um ge­naueres zu er­fahren.

Encoder

Der Encoder ergänzt in dieser An­wen­dung die Tas­tatur für ein freund­liches User Inter­face.

Als Dreh­geber habe ich den ALPS STEC11B03 vor­gesehen. Die De­co­dierung ist ziem­lich ein­fach wenn man sich ein­mal ein paar Ge­dan­ken da­rüber macht wie so ein Ding funk­tioniert und Dreh­geber-Ereig­nisse wer­den als Tas­ten­drücke an die Haupt­schleife weiter­gege­ben. Der Druck­knopf des Dreh­ge­bers wird als <Enter>-Taste gesen­det. Er könnte na­tür­lich auch ei­nen spe­ziel­len Tasten­code bekom­men aber in dieser An­wen­dung macht dies keinen Sinn.

USB-Schnittstelle

Die USB-Schnitt­stelle wurde mit einem FTDI FT232RL re­ali­siert, der sich schon mehr­fach zuver­lässig be­währt hat. Er ermöglicht die einfache Um­setzung einer seriel­len Schnitt­stelle über USB auf einen COM-Port am PC, den man wiederum mit einem be­liebigen Terminal­pro­gramm be­die­nen kann.

In einer An­wen­dung wie dieser, in der unbe­kannte Strom­kreise mit der Schal­tung ver­bunden wer­den, ist es unum­gänglich ex­terne Schnitt­stellen gal­vanisch von der Schal­tungs­masse zu tren­nen. In der zweiten Version habe ich dafür den Analog Devices ADuM 1201 eingesetzt, der deutlich billiger als der HPCL-0931 ist und für den auch von NVE eine second source erhältlich ist. Die drei 150 kΩ-Wider­stände zie­hen die Schal­tungs­masse gegen die USB-Masse (i.d.R. ei­nem PC dessen Masse ge­erdet ist) und ver­hin­dern so­mit ein Wegdriften der Schaltungs­masse z.B. durch statische Aufladung und er­lauben doch eine Potential­differenz von bis zu 600 VDC (drei mal die maximal zuläs­sige Spannung gängiger 1206-Widerstände von 200 V oder der Spanungs­festigkeit des Kondensators, je nachdem was eben geringer ist). Der 2,2 nF-Kon­den­sa­tor ver­bin­det die bei­den Massen HF-mäßig und schließt damit indu­zierte Stö­rungen durch den Koppler kurz.

Beachten Sie jedoch: Die Schaltungs­masse ist, genauso wie die Front­platte, in jedem Fall elek­trisch mit dem Minuspol der an­geschlos­senen Last ver­bunden. Diese darf auf kei­nen Fall auf gefähr­lichem Poten­tial liegen um den Be­nutzer nicht zu ge­fährden!

Analogteil

Stromquelle

Der Sollwert wird von einem 12-Bit DAC vorge­geben. Dessen Span­nung wird von ei­nem OP mittels des Span­nungs­ab­falls an einem Sense-Wider­stand in einen kon­stanten Last­strom um­ge­wan­delt. Um sowohl klei­ne Ströme als auch re­la­tiv große hinrei­chend genau dar­stel­len zu kön­nen wur­den zwei Sense-Wider­stände in Reihe ge­schaltet. Der größere kann durch einen MOS­FET über­brückt werden. Die­ser führt na­türlich mit sei­nem RDSon zu ei­nem Stell­fehler, der aber per Soft­ware ausge­re­gelt wer­den kann. Ge­mes­sen wird dif­ferentiell über dem jeweils aktuellen Sense-Wider­stand. Für den Fall des über­brückten, relativ hoch­ohmigen Wider­stands kann die Schal­tung den Strom über dem Span­nungs­abfall an R23 mes­sen und anhand der Span­nung über dem FET (gleich der Span­nung über R25) die Paral­lel­schal­tung aus dem Kanal-Wider­stand des Fets und R25 be­rech­nen. Dies wird konti­nuier­lich im Hinter­grund durch­ge­führt so dass auch Än­der­ungen des Kanal-Wider­standes mit der Tem­peratur oder durch Exemplar-Streu­ung ausge­glichen werden kön­nen.

Durch diesen zusätz­lichen Schritt wird die Band­breite bei höheren Strö­men natür­lich etwas reduziert.

Versuche, Simu­lationen und Daten­blätter haben gezeigt, dass als strom­regeln­der Tran­sis­tor ein bipolarer Typ besser geeignet ist als ein MOSFET (und zudem billiger). Ein 40-Cent-TIP102 hat nicht nur kei­ne nen­nens­werte Ein­gangs­kapa­zi­tät, er ist auch im li­ne­aren Be­trieb einem 2-Euro-IRFP4110 (100 V/120 A!) in der SOA weit überlegen. Simu­lationen haben aller­dings gezeigt, dass bei großen in­duk­tiven Kom­ponenten der Quel­le die Stabi­lität durch Hin­zu­fügen eines Kon­den­sa­tors zwi­schen Basis und Emitter ver­bessert werden kann.

Anfäng­lich versuchte ich zu meiner Schande (ohne groß darüber nach­zu­den­ken) den TLC272 für die Strom­reglung ein­zu­setzen (weil er nun mal bei uns im Lager war...). Dieser kann jedoch bis zu 10 mV Offset aufweisen was am 100 mΩ-Wider­stand auch 100 mA aus­macht (oder 3 mA am 3.3 Ω-Wider­stand) oder etwa 75 LSBs des AD-Wandlers! Dieser Fehler könnte zwar per Soft­ware im Rahmen der Kali­brierung ausge­glichen werden, es kann jedoch sein dass 0 mA nicht einge­stellt werden können und auch bei 0-Vorgabe ein ge­wis­ser Min­dest­strom fliesst, der Fehler kann eben auch +75LSB sein und war es tat­sächlich auch bei einem der bei­den Proto­typen!

Deshalb tauschte ich ihn gegen einen Prä­zisions­verstärker vom typ LT2078. Dieser ist zwar deutlich teuerer, sein Offset­fehler beträgt jedoch maximal 120 µV (typisch 40 µV) und er kommt natürlich mit Eingangs­span­nungen um 0 V zurecht! Alternativ könnte man na­türlich auch einen OP mit Offset-Ab­gleich nehmen aber mit den Zusatz­kosten für den 20-Gang-Trimmer und den manuel­len Ab­gleich... ist der auch nicht viel bil­liger, abgesehen von dem zusätzlich benötigten Platz auf der Leiter­platte. Moderne OPs können sol­chen Zusatz­aufwand relativ günstig eliminieren, wenn man sie rich­tig aus­wählt, in diesem Fall heißt das: mög­lichst ge­ringe Offset-Span­nung und einem Input Voltage Range ab der nega­tiven Ver­sor­gung (besser noch, etwas darunter). Der LT2078 macht das ganz gut.
Die Aus­wahl war den­noch nicht einfach. Ein LT1112 z.B. hat die gleiche Pin­bele­gung, eine sehr niedrige Offset-Span­nung aber er kann nicht bis 0 V! Andere OPs können das, haben aber eine andere Pinbelegung! Es hat schon eine Weile gedauert bis ich auf den LT2078 gekommen bin, zumal ich auch noch einen OP suchte, der relativ einfach erhält­lich ist.

So ging ich schließlich im dritten Layout 'back to the roots' und verwendete den OP07. Dieser klassische Operationsverstärker hat den richtigen 'Drive' selbst für hoch kapazitive Gates von MOSFETs und es gibt zahlreiche (weitgehend) pinkompatible Alternativen zum Ausprobieren. Selbst ein Trimmpoti zum Offset-Abgleich habe ich vorgesehen, obwohl der OP07 auch ohne Abgleich maximal 75 µV Offset­fehler hat.

Temperaturmessung

Die Schaltung enthält zwei Temperatur­sensoren:

  1. Einen NTC auf der Leiter­platte. Er misst die Tem­peratur inner­halb des Ge­häuses und kann benutzt werden um den Kon­trast des Dis­plays anzu­passen (bisher nicht imple­men­tiert).
  2. Einen externen NTC der am Leistungs­transis­tor platziert ist und die Tem­pe­ratur des Kühl­körpers messen kann. Er wird be­nutzt um einen 'Thermal Shut­down' auszu­lösen falls der Tran­sis­tor zu heiß wird. In diesem Fall wird der Strom auf 0 einge­stellt. Er kann jeder­zeit per Kom­mando wieder er­höht werden, wird je­doch sofort wieder auf 0 ge­setzt so­fern die Kühl­körper-Tempe­ratur zu hoch ist.

Ich habe mit NTCs im Schraub­gewinde ex­peri­mentiert, es zeigte sich jedoch, dass deren ge­messene Tem­peratur erheb­lich von der Wärme­ablei­tung über die An­schlüsse abhängt so dass ich mich letztlich für einen NTC im Kabel­schuh ent­schied, der 'von oben' auf den Transistor und dem Kühlkörper montiert wird. So misst er mög­lichst direkt die Tem­peratur der Kühl­fahne (dem 'Tab') des Tran­sis­tors und ist so nahe am Chip wie irgend möglich.

Schutzbeschaltung

Wie wahrscheinlich ist es, dass die Schutz­dioden einen Kurz­schluß über­leben? Nun, die Sicherung hat ein I2t von 44.5 A2s. Für die ES1D ist im Daten­blatt kein Grenz­last­integral angegeben. Eine andere Diode, die GL1M spezi­fiziert 3.6 A2s, also gerade mal ein zwölftel. Auch wenn drei Dioden in Serie liegen, durch jede von ihnen fließt der gleiche Strom und damit das gleiche I2t! Die Über­lebens­chance ist also äußerst gering. Aller­dings sind diese Bau­teile billig und relativ ein­fach aus­zu­tau­schen.

Schutzdioden

Anfangs dachte ich, Diode ist Diode. Doch ich führte Messungen durch und sah beträchtliche Unterschiede zwischen verschiedenen Typen. Bei ca. 530mV Vorwärtsspannung habe ich bei der ES1D etwa 4 mA gemessen während die BYM10-1000 bei unter 500 µA blieb! 500 µA sind jedoch immer noch 12 LSBs, deshalb die zwei in Reihe, erst dann ist der Reststrom für die Messung vernachlässigbar und die Schutzwirkung trotzdem gegeben.

Strommessung

Der Stellwert für den Strom wird von einem DAC von 0 bis etwa 500mV vorgegeben.

Gemessen wird der Strom durch den entspre­chenden Span­nungs­abfall an

Kleine Ströme

Ströme bis etwa 160 mA werden dif­ferenziell über den 3.3 Ω Sense-Wider­stand R25 ge­mes­sen. In der DAC-Kalibrierung wird dabei R23 berück­sichtigt so dass hier der Stell­vor­gang durch den DAC ziem­lich ge­nau den rich­ti­gen Wert 'trifft'. In die­ser Konfi­guration ist die (Mess-) Auf­lösung etwa 40 µA. An­ders ist dies im an­de­ren Fall:

Große Ströme

Zum Einstel­len größerer Strö­me wird R25 durch einen FET über­brückt und der fließende Strom dif­feren­ziell über R23 ge­mes­sen. Der DAC kann da­bei den Wert nicht ohne weiteres ein­stellen da der Kanal­wider­stand des FETs in Rei­he mit dem Sense-Wider­stand liegt. Dieser liegt in der Größen­ordnung des Sense-Wi­der­stan­des und ist Exemplar- und Tem­pe­ratur­ab­hängig. Der Con­trol­ler kann jedoch den Strom messen (durch dem Span­nungs­abfall an R25) und kann auch den Span­nungs­abfall über R25 messen, der einer Parallel­schaltung von R25 und dem Kanal­wi­der­stand ent­spricht und so den ak­tuel­len Kanal­wi­der­stand be­rech­nen und in einem zwei­ten Schritt kom­pen­sieren. Das wird der­zeit mit jeder Ein­stel­lung der Stromvorgabe durchgeführt, d.h. beim ersten Ein­stel­len kann der Strom etwas da­neben liegen, bei noch­maligem Ein­stel­len des glei­chen Wer­tes wird er aber ziem­lich genau stimmen. Die Auf­lösung in die­ser Konfi­guration liegt bei etwa 1.3 mA, der ma­xi­ma­le Strom bei 4 A (be­dingt durch die maxi­male Ver­lust­lei­stung des Sense-Wider­stands von 2 W, es könn­ten tat­säch­lich gut 5 A ein­ge­stellt wer­den).

Sollwert-Vorgabe

Der Sollwert kann in 100 µA-Schrit­ten ein­ge­stellt wer­den. Dies ist unab­hängig vom ak­ti­ven Be­reich, auch wenn im Hoch­strom-Bereich eine Veränderung um 100 µA häu­fig nicht in einer tat­säch­lichen Ver­än­derung des Stro­mes en­det da ein DAC-Bit hier rund einem mA ent­spre­chen. Dies wur­de zu­gunsten der ein­facheren Firm­ware in Kauf genom­men. Der Be­nutzer sollte sich der Grenzen dieser Schal­tung be­wusst sein. Der gemes­sene Strom wird jedoch stets mit der er­reich­baren Mess­auf­lösung ange­zeigt.