Ansteuerung von (linearen) CCD Sensoren

In fast jedem Scanner oder Faxgerät findet sich ein lienarer CCD Sensor mit einigen tausend Pixel Auflösung. Die Ansteuerung eines solchen ist eigentlich relativ einfach.

 

CCD Module sehen nicht nur teuer aus, meistens sind sie es sogar. Nach obenhin gibt es eigentlich keine Preisgrenze...
Nach unten hin gibt es eine: Nämlich kostenlos. So bekommt man die CCDs nämlich aus alten Scannern, Faxgeräten, Barcodescannern, Kameras usw.
Das Auslöten der meist >20 poligen ICs ist meist relativ aufwendig, da CCD Sensoren aufgrund ihrer Abmessungen relativ empfindlich sind. Hier muss man sich mit Entlötlitze oder ähnlichem etwas gedulten.
Um das Auslöten kommt man selten herum, da die Bezeichnung dummerweise auf der Unterseite des CCDs aufgedruckt ist.

 

Die Ansteuerung ist bei jedem CCD anderst. Für das genaue Timing sollte man dieses im Datenblatt nachlesen. Weiterhin gibt es bei CCDs alle möglichen Zusatz"features" im CCD: Angefangen bei Sample&Hold Stufen (die ich meist abschalte, da ich die Klemmwerte für die Offsetkompesation benötige) über elektronische Shutter (meist Integration Clear Gate genannt), bis hin zu einem Multiplexer der die RGB Daten an einem umschaltbaren Pin ausgibt. Bei größeren CCDs gibt es manchmal 2 Ausgänge pro Farbe (Odd/Even) um die Daten schneller auslesen zu können.

Die Betriebsspannung der CCDs liegt meist bei 12V. Einige CCDs kommen auch mit 5V aus. Die Taktsignale benötigen bei heutigen CCDs meist 5V. Ältere benötigen dagegen meist 12V. Genau Informationen findet man nur im Datenblatt.

Im folgenden gehe ich nur auf einige typische Signale aus CCDs von NEC und Toshiba ein, da diese relativ weit verbreitet sind.

NEC CCDs:

Die Messzeit des CCDs wird durch die Zeit zwischen zwei TG Impulsen bestimmt. Während dieser Transferphase muss der Schiebetakt gestoppt werden, und Phi1 daher auf high liegen. Die Reset und Clamp Signale (RB und CLB) müssen weiterhin angelegt werden. Die Zeit zwischen Anhalten des Taktes und dem Ausleseimpuls, sowie die Dauer sollten dem Datenblatt entnommen werden. Meist sind es einige Mikrosekunden.
Nach diesem Transfer stehen die Daten nun im Schieberegister zur Verfügung. Mit jedem Schiebetakt wird ein Pixel weiter geschoben. Wird ein Reset Signal angelegt (RB, Low aktiv) wird der aktuelle Wert gelöscht und das CCD auf den nächsten Pixel vorbereitet. Mit dem Reset Clamp Impuls (CLB, low aktiv) wird der Ausgang gelöscht und somit auf Schwarzpegel (= maximale Spannung gesetzt). Diesen Wert kann man nutzen um eine automatische Offset und Pegelanpassung an den ADC Messbereich vorzunehmen. Mit der fallenden Flanke von Phi1 wird der nächste Pixelwert ausgegeben.

Toshiba CCDs:

Die Messzeit des CCDs wird durch die Zeit zwischen zwei SH Impulsen bestimmt. Während dieser Transferphase muss der Schiebetakt gestoppt werden, und Phi1 daher auf high liegen. Die Reset und Clamp Signale (RS und CP) müssen für 1 Takt weiterhin angelegt werden. Während des Transfers müssen aber auch diese inaktiv sein. Die Zeit zwischen Anhalten des Taktes und dem Ausleseimpuls, sowie die Dauer sollten dem Datenblatt entnommen werden. Meist sind es einige Mikrosekunden.
Nach diesem Transfer stehen die Daten nun im Schieberegister zur Verfügung. Mit jedem Schiebetakt wird ein Pixel weiter geschoben. Wird ein Reset Signal angelegt (RS, high aktiv) wird der aktuelle Wert gelöscht und das CCD auf den nächsten Pixel vorbereitet. Mit dem Reset Clamp Impuls (CP, high aktiv) wir der Ausgang gelöscht und somit auf Schwarzpegel (= maximale Spannung gesetzt). Diesen Wert kann man nutzen um eine automatische Offset und Pegelanpassung an den ADC Messbereich vorzunehmen. Mit der fallenden Flanke von Phi1 wird der nächste Pixelwert ausgegeben.
Hinweis: Einige CCDs liefern pro Takt 2 Pixelwerte, also je einen pro Pegel. In diesem Fall müssen RS und CP einmal pro Pegel von Phi aktiviert werden.

Die Offsetanpassung des CCDs an den Messbereich des ADCs wird über eine AC Kopplung mittels Kondensatoren gemacht.
Wenn der CCD die maximale Ausgangsspannung liefert, wird der ADC Eingang mit dem oberen Ende des Messbereichs (in diesem Fall 5V) verbunden. Der Kondensator läd sich nun auf die Offset Spannung auf. Anschließend werden die Schalter wieder geöffnet und am CCD der nächste Pixel ausgegeben. Die nun anliegende Spannung ist auf jedenfall niedriger und liegt somit innerhalb des Messbereichs des ADCs.
Um den korrekten Farbwert zu erhalten, muss der gemessene Wert nur invertiert werden.

 

 

Das Datenblätt empfielt für die Ausgangssignale des CCDs einfache Pufferverstärker, da die CCD Ausgänge relativ hochohmig sind (ca. 1kOhm). Sitzt der ADC aber direkt neben dem CCD, und besitzt der ADC hochohmige Eingänge, kann dieser Puffer meist entfallen.
Eventuell kann es hilfreich sein, an die ADC Eingänge kleine Kondensatoren (ca. 100pF) anzuschließen, da die meisten ADCs mit Sample&Hold Stufe während der Sample Phase kurzzeitig niederohmig werden (Eingangswiderstand teilweise unter 10kOhm). Außerdem wirkt der Kondensator als Tiefpass und beseitigt hochfrequente Störungen.

 

 

 

Da die Taktleitungen des CCDs große Schieberegister treiben müssen, weißen die Eingänge meist sehr große Kapazitäten (teilweise über 1nF) auf. Deshalb werden daher direkt in der Nähe des CCDs leistungsfähige Treiber mit Serienwiderständen empfohlen. Teilweise habe ich sogar schon 1,5A MOSFET Treiber an den CCD Eingängen gesehn. Heutige Mikrocontroller liefern an den Ausgängen meist genug Strom um die CCD Eingänge direkt treiben zu können, vor allem wenn die Taktrate nicht allzu hoch ist.
Dies spart Bauteile und Platz auf der Platine.

 

 

 

 

 

 

Mit all diesen Einsparungen, reichen 2 Spannungsregler, ein Mikrocontroller mit ADC Eingängen und einige Kondensatoren und Widerstände zum Betreiben eines CCDs aus:

Der uC (in diesem Fall ein AVR: ATmega8 mit 16MHz) erzeugt die Steuersignale für den CCD und wandelt im Hintergund die Ausgangsspannungen des CCDs in digitale Werte um, die anschließend zum PC übertragen werden.

Hier sieht man ein Farb CCD mit je 5300 Pixeln Auflösung mitsamt der Ansteuerschaltung und Optik auf einem Schrittmotor montiert.

Dies ergibt einen schönen rundum Scanner, wie man auf folgendem Bild sehen kann:

Die Senrechten Störugen sind Überbelichtungen des CCDs, was ein schönes blooming ergibt (Überlaufen der Werte in benachbarte Zellen.)

 

 

 

 

Hier noch einige Hinweise, die mir aufgefallen sind:

- Nach jedem Transfer der Daten ins Schieberegister (mittels TG bzw. SH) müssen alle Pixel komplett ausgelesen werden, sonst addieren sich die Daten der nichtausgelesenen Pixeln zu den neuen Werten.
- Die Belichtungszeit liegt bei einem CCD mit einer 1cm Linse davor bei indirektem Tageslicht bei etwa 10ms.
- Ohne Linse oder sonstigem Filter wird das CCD extrem Licht empfindlich und überbelichtet sehr schnell.
- Wenn im Signal Sprünge auftreten (die ersten paar gemessenen Werte haben minimal mögliche Spannung, danach springt die Spannung plötzlich zu normalen Werten) dann ist die Zeile überbelichtet.
- Rot, grün und blau sind unterschiedlich empfindlich. Meist ist rot am empfindlichsten, und blau am wenigsten empfindlich. Bei dem CCD das ich verwendet habe (uPD3797), liefert rot ziemlich genau die doppelte Spannung wie grün und blau.
- Das Auslesetiming ist nicht wirklich kritisch, die Frequenzen können in weitem Bereich variieren.
- Nachdem der Takt eingeschaltet wird, benötigt das CCD einige 10 Zeilen bis es brauchbare Daten liefert. Der Takt (Schiebtakt, RB, CLB, usw.) sollte daher, falls möglich, immer laufen.
- Die Ausgangssignale benötigen eine Offset und Verstärkungsanpassung, z.B. über Schwarzpixel oder über eine AC Kopplung mit Klemmung wie oben dargestellt. Außerdem sind die Farben mit den Rohdaten etwas blaß.

 

 

Zurück