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 Last­si­tua­tion (spe­ziell ei­nem hot con­nect, also dem An­schluss an eine Quel­le nach­dem be­reits der Last­strom ein­ge­stellt wur­de) re­agie­ren zu kön­nen ha­be ich mich ent­schie­den, die­se zu ver­dop­peln. Erst dann kann der Last­strom in we­ni­ger als ei­ner Milli­se­kun­de an die SOA an­ge­passt wer­den.

Die Soft­ware wur­de mit dem At­mel Stu­dio 6.2 er­stellt. Für mich gibt es kei­nen ra­tio­na­len Grund et­was an­de­res zu ver­wen­den (außer viel­leicht die neu­ere Ver­sion...).

An­mer­kung: At­mel Stu­dio 7 be­haup­tet bei der In­stal­la­tion un­ter XP Die­ses Pro­gramm er­for­dert ei­ne neu­ere Ver­sion von Win­dows. Scha­de, dass bei Micro­soft aus Ex­pe­ri­ence so schnell ob­so­lete wird. Ich hät­te es ger­ne aus­pro­biert... aber die Zu­satz­kos­ten und vor al­lem der Zu­satz­är­ger sind die Neu­gier nicht wert. 6.2 ist o.k. für mich! Ich müsste drei oder vier Rech­ner ak­tu­ali­sie­ren und spe­ziell bei Lap­tops (Al­ter 7 Jahre oder mehr, im­mer noch mit dem ers­ten Akku und im­mer noch schnell und gut ge­nug für al­les, was ich ma­che) weiß ich nicht, ob da­nach al­les wie­der funk­tio­niert.

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 Grau­stu­fen und auch die Cur­sor-Op­tio­nen sind ziem­lich be­schränkt). Der Dis­play-Con­trol­ler stammt eben aus ei­ner Zeit als ein Kilo­byte RAM noch rich­tig teu­er war und man sich je­des ein­zel­ne Flip­flop zwei­mal über­leg­te be­vor man es in Si­li­zi­um brann­te aber er hat sich bis heu­te ge­hal­ten und ist heu­te popu­lärer und bil­li­ger denn je...

Erstaunlich finde ich es je­doch, dass es kei­nen (halb­wegs) kom­pati­blen Nach­fol­ger mit den er­wähn­ten Ei­gen­schaf­ten gibt!

Das Display wird hier im 4-Bit-Mode betrie­ben. Mir ist kein Da­ten­blatt ir­gend­ei­nes (kom­pa­ti­blen) Chips be­kannt, das an­gibt was mit den unbe­nutz­ten Pins zu ma­chen ist! Im Inter­net gibt es Leu­te, die sie Groun­den ohne zu wis­sen ob sie bei ei­nem Read als Aus­gang agie­ren, ich ha­be sie aus ge­nau die­sem Grund stets of­fen ge­las­sen. Aus mei­ner Sicht ma­chen Sie da­mit nichts falsch.

LEDs

Erst in der zwei­ten Ver­sion der Schal­tung ent­schied ich mich da­zu, 8 LEDs als Status­an­zei­ge hin­zu zu fü­gen. Da der Con­trol­ler keine Pins mehr frei hat wur­de ein bil­liges 8-Bit Schie­be­re­gis­ter (~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 un­ter dem glei­chen Licht­lei­ter so dass nur sechs davon nötig sind.

Power (grün) und Fehler (rot) wur­den zu­sam­men gelegt, eben­so wie Range Low (grün) und Range High (blau).

Die sechste LED hat bis­her kei­ne Funk­tion.

Tastatur

Dafür wur­de auf eine üb­li­che Te­lefon­tas­ta­tur zu­rück­gegrif­fen wie sie von ver­schie­de­nen Her­stel­lern erhältlich ist. Die An­ord­nung des Steck­ver­bin­ders ist teil­wei­se unter­schied­lich, auf der Leiter­plat­te wur­den zwei Buch­sen­leisten vor­gesehen, die für zwei gängige Typen passen.

Die Tastatur hat na­tür­lich 10 Zif­fern­tasten und zwei zu­sätz­liche (# und *) die ich hier für Enter/Cancel bzw. Yes/No be­nutze. Sie sind in einer 3x4 Matrix angeordnet so dass zur Abfrage 7 Lei­tun­gen be­nö­tigt wer­den. Wir verwenden drei Scanlines (die nacheinander auf 0 gelegt wer­den) und vier Re­turn­lines welche die Zustände der dadurch an­ge­spro­che­nen Tas­ten lie­fern.

Die Re­turn-Lines lie­gen nicht zu­fäl­lig an Port A (der auch den in­ter­nen AD-Con­ver­ter hos­tet). Damit wer­den Stö­rungen auf die Zeit be­grenzt, in de­nen tat­säch­lich eine Tas­te der Zehner­tas­ta­tur ge­drückt ist und da­mit an den Analog­ein­gän­gen zeit­lich mi­ni­miert.

Sie werden alle 10 ms im Timer Inter­rupt ab­ge­fragt der gleich­zei­tig für die Ent­prel­lung der Tas­ten sorgt. Ein­fach aus­ge­drückt, wenn die Tas­ten nur alle 30 ms ab­ge­fragt wer­den (drei Scan­lines × 10 ms) könn­en sie auch 30 ms lang prel­len ohne dass es stört.
Dies ist die (aus Soft­ware­sicht) bil­ligs­te Me­tho­de der Ent­prel­lung, mit mi­ni­ma­ler 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 we­ni­ger auf­wän­digen Al­go­rithmen den Tas­ten­druck er­ken­nen um Fehl-Erken­nungen durch Spikes zu ver­hin­dern. Nach meiner Er­fah­rung ist dies bis auf we­nige Spe­zial­fäl­le (Tas­tatur relativ weit vom Con­troller ent­fernt in EMV-ver­seuchter Um­gebung) un­nö­tig. Wenn Sie hier Pro­bleme mit Spikes be­kom­men liegt ein Hard­ware-Problem vor, das Sie lieber mit einem bes­seren Lay­out, ge­eig­neten Pull­up-Wi­der­stän­den 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 Fra­ge der Zeit bis ein an­deres Sig­nal Pro­ble­me macht.

Lösen sie Hardware-Probleme mit Hardware und Software-Probleme mit Software! Hard­ware-Pro­ble­me mit Soft­ware zu lö­sen bringt meist nur zu­sätz­li­che Pro­ble­me.

Das Abfrage­inter­vall be­stimmt gleich­zeitig auch die Re­aktions­zeit bzw. die ma­xi­ma­le Eingabe­frequenz die hier etwa 15 Hz beträgt. Da Drücken und Los­lassen der Taste je­weils einen Scan erfor­dern er­gibt das ma­xi­mal 15 Tas­ten­drücke pro Se­kun­de. Das ist ein guter Kom­promiss zwi­schen dem lan­gen Prel­len bil­liger Kon­takte und der hohen Tipp­rate einer profes­sionel­len Se­kre­tä­rin :-)

Die Abfrage-Routinen wurden um eine Repeat-Funk­tion so­wie einem Key Pressed Long-Event er­wei­tert. Alle Funk­tionen können per #define ak­ti­viert werden, was mö­gli­cher­wei­se ein paar zig Bytes Pro­gramm­spei­cher spa­ren 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ön­nen. Wer­fen Sie einen Blick auf die Source-Code-Do­ku­men­ta­ti­on um ge­naueres zu er­fah­ren.

Encoder

Der Encoder er­gänzt in die­ser An­wen­dung die Tas­ta­tur 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 zwei­ten Ver­sion habe ich dafür den Analog Devices ADuM 1201 ein­ge­setzt, der deut­lich bil­li­ger als der HPCL-0931 ist und für den auch von NVE eine second source er­hält­lich 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 V= (drei mal die maximal zuläs­sige Spannung gängiger 1206-Widerstände von 200 V oder der Spannungs­fes­tig­keit des Kond­en­sa­tors, je nach­dem was eben ge­rin­ger 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 je­doch: Die Schal­tungs­masse ist, ge­nau­so wie die Front­plat­te, in je­dem Fall elek­trisch mit dem Mi­nus­pol der an­geschlos­senen Last ver­bunden. Diese darf auf kei­nen Fall auf ge­fährli­chem Poten­tial lie­gen um den Be­nutzer nicht zu ge­fähr­den!

Analogteil

Stromquelle

Der Sollwert wird von einem 12-Bit DAC vor­ge­ge­ben. Dessen Span­nung wird von ei­nem OP mittels des Span­nungs­ab­falls an einem Sense-Wider­stand in ei­nen kon­stan­ten Last­strom um­ge­wan­delt. Um sowohl klei­ne Ströme als auch re­la­tiv große hin­rei­chend ge­nau dar­stel­len zu kön­nen wur­den zwei Sense-Wider­stän­de in Rei­he ge­schal­tet. 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­de­run­gen des Ka­nal-Wider­stan­des mit der Tem­pe­ra­tur oder durch Exem­plar-Streu­ung aus­ge­gli­chen wer­den kön­nen.

Durch diesen zusätz­lichen Schritt wird die Band­breite bei hö­he­ren 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 ge­zeigt, dass bei großen in­duk­tiven Kom­po­nen­ten der Quel­le die Stabi­lität durch Hin­zu­fügen eines Kon­den­sa­tors zwi­schen Ba­sis und Emitter ver­bessert werden kann.

Anfäng­lich ver­such­te ich zu mei­ner Schan­de (ohne groß da­rü­ber nach­zu­den­ken) den TLC272 für die Strom­reglung ein­zu­setzen (weil er nun mal bei uns im La­ger war...). Die­ser kann je­doch 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-Wand­lers! Dieser Fehler könnte zwar per Soft­ware im Rah­men der Kali­brierung ausge­gli­chen wer­den, es kann je­doch sein dass 0 mA nicht einge­stellt werden können und auch bei 0-Vorgabe ein ge­wis­ser Min­dest­strom fließt, der Feh­ler kann eben auch +75LSB sein und war es tat­säch­lich auch bei ei­nem der bei­den Proto­typen!

Deshalb tauschte ich ihn ge­gen einen Prä­zisions­ver­stär­ker vom Typ LT2078. Die­ser ist zwar deut­lich teurer, sein Off­set­feh­ler beträgt je­doch ma­xi­mal 120 µV (typisch 40 µV) und er kommt na­tür­lich mit Ein­gangs­span­nun­gen um 0 V zurecht! Al­te­rna­tiv könn­te man na­tür­lich auch ei­nen OP mit Offset-Ab­gleich neh­men aber mit den Zu­satz­kosten für den 20-Gang-Trim­mer und den ma­nuel­len Ab­gleich... ist der auch nicht viel bil­liger, abgesehen von dem zusätzlich benötigten Platz auf der Lei­ter­platte. Moderne OPs können sol­chen Zusatz­aufwand relativ günstig eli­mi­nie­ren, wenn man sie rich­tig aus­wählt, in diesem Fall heißt das: mög­lichst ge­ringe Offset-Span­nung und einem In­put Vol­tage Ran­ge ab der ne­ga­tiven Ver­sor­gung (besser noch, etwas da­run­ter). Der LT2078 macht das ganz gut.
Die Aus­wahl war den­noch nicht ein­fach. Ein LT1112 z.B. hat die glei­che Pin­bele­gung, eine sehr niedrige Offset-Span­nung aber er kann nicht bis 0 V! An­de­re OPs können das, haben aber eine andere Pinbelegung! Es hat schon eine Wei­le ge­dau­ert bis ich auf den LT2078 ge­kom­men bin, zu­mal ich auch noch ei­nen OP such­te, der re­la­tiv ein­fach er­hält­lich ist.

So ging ich schließlich im dritten Layout back to the roots und ver­wen­de­te den OP07. Die­ser klas­si­sche Operations­ver­stär­ker hat den ric­htigen Drive selbst für hoch ka­pa­zi­ti­ve Gates von MOSFETs und es gibt zahl­reiche (weit­ge­hend) pin­kom­pa­tib­le Al­ter­na­ti­ven zum Aus­pro­bie­ren. Selbst ein Trimm­poti zum Offset-Ab­gleich habe ich vor­ge­sehen, ob­wohl der OP07 auch ohne Ab­gleich ma­xi­mal 75 µV Offset­fehler hat.

Temperaturmessung

Die Schaltung enthält zwei Tem­pe­ra­tur­sen­so­ren:

  1. Einen NTC auf der Lei­ter­platte. Er misst die Tem­peratur in­ner­halb des Ge­häu­ses und kann be­nutzt wer­den um den Kon­trast des Dis­plays anzu­pas­sen (bis­her 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 ab­hängt so dass ich mich letzt­lich für einen NTC im Kabel­schuh ent­schied, der von oben auf den Tran­sis­tor und dem Kühl­kör­per mon­tiert 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 wah­rschein­lich ist es, dass die Schutz­dioden einen Kurz­schluss über­le­ben? Nun, die Si­che­rung hat ein I2t von 44.5 A2s. Für die ES1D ist im Da­ten­blatt kein Grenz­last­integral an­ge­ge­ben. Ei­ne an­dere Di­ode, die GL1M spezi­fi­ziert 3.6 A2s, also ge­rade mal ein zwölf­tel. Auch wenn drei Di­oden in Se­rie lie­gen, durch je­de von ih­nen fließt der glei­che Strom und da­mit das glei­che I2t! Die Über­lebens­chance ist also äußerst ge­ring. Aller­dings sind diese Bau­tei­le bil­lig und re­la­tiv ein­fach aus­zu­tau­schen.

Schutzdioden

An­fangs dachte ich, Diode ist Diode. Doch ich führte Mes­sun­gen durch und sah be­trächt­li­che Un­ter­schie­de zwi­schen ver­schie­de­nen Ty­pen. Bei ca. 530 mV Vor­wärts­span­nung ha­be ich bei der ES1D etwa 4 mA ge­mes­sen wäh­rend die BYM10-1000 bei un­ter 500 µA blieb! 500 µA sind jedoch immer noch 12 LSBs, deshalb die zwei in Reihe, erst dann ist der Reststrom für die Mes­sung ver­nach­läs­sig­bar und die Schut­zwir­kung trotz­dem ge­ge­ben.

Strommessung

Der Stellwert für den Strom wird von einem DAC von 0 bis etwa 500 mV vor­ge­ge­ben.

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

Kleine Ströme

Ströme bis etwa 160 mA werden dif­feren­ziell über den 3.3 Ω Sense-Wider­stand R25 ge­mes­sen. In der DAC-Ka­li­brie­rung wird dabei R23 be­rück­sich­tigt 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 wei­te­res 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 mes­sen (durch dem Span­nungs­abfall an R25) und kann auch den Span­nungs­abfall über R25 messen, der einer Parallel­schal­tung von R25 und dem Ka­nal­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­sie­ren. Das wird der­zeit mit je­der Ein­stel­lung der Strom­vor­ga­be durch­ge­führt, d.h. beim ers­ten Ein­stel­len kann der Strom etwas da­ne­ben liegen, bei noch­ma­li­gem Ein­stel­len des glei­chen Wer­tes wird er aber ziem­lich ge­nau stim­men. 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 Soll­wert 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­än­de­rung 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 ei­nem mA ent­spre­chen. Dies wur­de zu­gunsten der ein­facheren Firm­ware in Kauf genom­men. Der Be­nutzer soll­te sich der Gren­zen dieser Schal­tung be­wusst sein. Der gemes­sene Strom wird jedoch stets mit der er­reich­baren Mess­auf­lö­sung an­ge­zeigt.