Der Scan-Controller ist eine flexible Open Source-Hardware, die als Bindeglied zwischen der Kamera, dem Raspberry Pi, dem Filmtransport des Projektors, der Steuerung der LED-Beleuchtung und dem Benutzer dient. Die hierzu erhältliche Platine ist recht dicht bestückt und sieht kompliziert aus, ist es aber gar nicht so sehr. Damit Weiterentwicklung, Modifikationen oder ggf. Reparatur keine Hürden werden, möchte ich die Schaltung hier Blockweise erklären.

Der gesamte Schaltplan ist auch hier als PDF erhältlich, die aktuellste Version findet man aber immer im KiCad-Projekt des git Repositories. KiCad ist ebenfalls OpenSource und ausgesprochen mächtig.

Beginnen wir einem Gesamtüberblick:

Da der Scanner einen „Hochstromteil“ zur Versorgung des Projektormotors und der Leistungs-LED hat, der kostensparend durch den vorhandenen Projektortrafo bedient werden kann, finden wir oben links zunächst einen einfachen Brückengleichrichter nebst Sieb-Elko. Natürlich lässt sich hier auch Gleichstrom anschliessen, ich verwende zum Beispiel ein MeanWell LRS-50-24 (24V/2.2A) Schaltnetzteil, da der Trafo in meinem Frankenstein-Noris ganz fürchterlich laut zu Brummen angefangen hat. (So sehr, dass sich die Schwingungen auf die Schärfe auswirkten!). R41 dient zum einen dazu, C4 nach Abschaltung der Stromversorgung zu entladen, zum anderen um zu vermeiden, dass die sich kumulierende Spannungsspitzen eines Schaltnetzteils im Leerlauf den Elko auf eine zu hohe Spannung auflädt (Hier habe ich nach ein paar Stunden sonst > 45V gemessen!)

Neben diesem Hochstromteil (im Schaltplan heisst das Netz exemplarisch 24VDC) gibt es auch noch einen 3.3V und einen 5V-Kreis. Diese beiden Betriebsspannungen werden in der Regel vom Raspberry Pi bereitgestellt. Da während des Bastelns und Programmierens des Arduino-Microcontrollers gelegentlich auch direkt Betriebsspannungen an selbigen gelegt werden, der Raspi aber auf Überspannungen an seinen Powerpins ausgsprochen empfindlich reagiert, findet sich rechts von der Gleichrichterschaltung eine Logik aus ein paar MOSFETs:

Der uC-Power ist mit einem GPIO des Raspi verbunden, so dass letzterer den Controller ein- und ausschalten kann. Geht er auf High, schaltet Q2 den Q3 durch, und die 3.3V des Raspi (3.3V-RPi) können zum Arduino fliessen (3.3V-uC).
Die „Zero Voltage Diode“ (ZVD) dazwischen ist ein Kniff, um einen Stromfluss in Richtung Raspi zu verhindern, ohne einen Spannungsabfall in Kauf nehmen müssen — denn wir brauchen die ganzen 3,3 V für sicheren Betrieb, nicht 0,7 V weniger. Die ZVD sieht so aus:

Diese Schaltung findet man in identischer Form auch auf dem Raspi selbst, allerdings nur im 5V-Zweig. Dessen 3,3V-Zweig wäre ohne diese ZVD ungeschützt. Eine Spannungsspitze hier zerlegt schnell den kompletten Raspi, diese vier Teile sind also eine gute Investition, um ihn sicher zu schützen.

Links mittig findet sich der Block mit dem „User Interface“, hier im Detail zu sehen:

Das ist alles recht trivial: Links oben ein Taster zum Ein- und Ausschalten des Systems, daneben eine Power-LED. Die beiden „Tasterleitern“ unten links zeigen die acht Bedientasten des Scanners, die denen eines Tonbandgerätes sehr ähneln. Beide Viererblöcke hängen jeweils an einem analogen Eingang des Arduinos, durch die gewählten Widerstandswerte lassen sich die Tastendrücke (ggf. auch Kombinationen) sicher unterscheiden, ohne dafür mehr als zwei Pins zu verbrauchen.

Rechts unten finden wir drei Spindel-Trimmpotis, die jeweils an einen analogen Arduino-Eingang gehen. Hier lassen sich Schaltschritt-Spannung, Suchlauf-Spannung und die Belichtungszeit für die Kamera einstellen.

Rechts oben findet sich ein (auf der Platine winziger) Umschalter, mit dem sich festlegen lässt, ob das Digitalisat direkt auf einen Client-Rechner zur Weiterverarbeitung gebeamt werden soll, oder ob der Raspi es auf eine externe Platte schaufeln soll. Parallel zum Umschalter lässt sich an J4 noch ein „richtiger“ Umschalter anschliessen, der R2 und R4 umgeht und somit die Stellung des Schalters auf der Platine überschreiben kann. Die Schalterposition des Storage Target wird als High oder Low direkt an GPIO17 des Raspi gelegt, so dass dieser sie selber auslesen kann.

In der Mitte der Gesamtübersicht finden sich zwei gelbe Knäuel:

Links sieht man die 40-polige Buchsenleiste, die die Verbindung zum Raspi herstellt. SDA und SCL gehören dem i2c-Bus, über den Arduino und Raspi miteinander kommunizieren. GPIO5, 6 und 27 sind unbenutzt und auf die Controller-Platine geführt, um Erweiterungen Platz zu bieten — das gleiche gilt für den Raspi UART.
MISO, MOSI, SCK und RST hingegen bilden einen SPI-Port, über den der Raspi den Arduino direkt programmieren kann. Damit ist es möglich, die Firmware des Controllers zu aktualisieren, ohne, dass man dazu einen Programmer oder weiteres Wissen benötigt.

Der rechte gelbe Kasten ist „der Arduino“ — genauer gesagt ist es nahezu die Schaltung eines „Arduino Pro Micro“ in der 8 MHZ/3,3V Version. Hier sind die Pins D7, D10 und A7 unbenutzt und auf die Controller-Platine geführt, um weitere Erweiterungen möglich zu machen. Die Pfostenfelder J1 und J5 ganz rechts bilden ICSP bzw. FTDI-Interfaces, mit denen sich der Arduino direkt programmieren lässt, wenn man das denn möchte.

Der letzte Teil des Controllers sind die „Driver“, im Blockschaltbild ganz recht zu sehen, hier Stück für Stück im Detail beschrieben — beginnend link oben mit dem Motor-Treiber:

Der DRV8871 ist eine H-Brücke, die Gleichstrommotoren mit Bürsten ansteuern kann. Sie funktioniert mit 6-45V und kann satte 3.6A Spitzenstrom abgeben. Neben Überlastungs- und Überhitzungsschutz erlaubt sie es auch, den angeschlossenen Motor per PWM in der Geschwindigkeit zu steuern — und all das ohne dicken Kühlkörper!

Darunter findet sich ein banaler BJT, der die 5V des Raspis auf einen angeschlossenen Lüfter gibt, um ggf. die Power-LED zu kühlen. Ich betreibe hier einen 12V-Lüfter mit 5V — ist völlig lautlos und reicht vollkommen aus.

Ein wesentliches Herzstück des Controllers ist der LED-Treiber, der sich rechts befindet, und durch seine Flexibilität etwas aufwändiger geworden ist:

Ein HIGH am Lamp Eingang lässt den Gatetreiber U11 den MOSFET Q1 sicher die Masse durchschalten. Der LED Treiber ist daher nicht permanent mit der Masse des Controllers verbunden, weshalb es einen extra Testpunkt LED GND auf dem Controller gibt: Nützlich, wenn man hier mal was messen will. Der XL4015 oben ist ein preiswerter, effektiver und sehr präzis regelbarer Buck-Converter (Schaltregler), der alles zwischen 1,25 und 32 Volt an Ausgangsspannung liefern kann (sofern die Eingangsspannung hoch genug ist). Der obere Teil der Schaltung ist quasi minimale Standard-Beschaltung, der Trimmer RV3 rechts oben als Spannungsteiler steuert über den FB-Eingang (Feedback) die Ausgangsspannung. Da LEDs aber ja zwingend mit Konstantstrom betrieben werden müssen, ist die Schaltung unten noch erweitert: Der Linearregler 78L05 liefert erstmal 5V (ich hätte die auch vom Raspi nehmen können, wollte aber, dass der LED-Treiber auch autark läuft). Der TL431 ist ein seit Jahrzehnten bewährter Shuntregler (quasi eine regelbare Zenerdiode), dessen Ausgang nochmal deutlich stabiler ist als die des 7805. Seine extrem konstante Ausgangsspannung geht über einen Spannungsteiler (mit Spindel-Poti RV1) in den invertierenden Eingang eines Operationsverstärkers, der als Komparator betrieben wird. R18 rechts unten ist ein klassischer Shunt, über den eine Spannung abfällt, wenn Strom durch ihn und die LED fließt — diese Spannung geht in den nicht invertierenden Eingang des Komparators (Pin 3). Ist sie höher als die an Pin 2, wird der Ausgang des OpAmp positiv. Über die Diode D5 wird so der FB-Eingang des Schaltreglers hochgezogen: Ab ca. 3,3V an FB ist er quasi abgeschaltet: Der Regelkreis steht, das Poti RV1 regelt somit den maximalen Ausgangsstrom vollkommen unabhängig von der eingestellten Ausgangsspannung!

Auch der LM358 OpAmp ist ein ca. 50 Jahre altes Uralt-Bauteil, dessen Charakteristik hier aber bestens passt: Bei 5V Betriebsspannung kann sein Ausgang von 0 bis ca. 3,6V gehen. Durch den hochohmigen FB-Eingang fallen an der Diode nur ca. 0,4V ab, was ein butterweiches Regelverhalten ergibt.
Der zweite OpAmp im Chip läuft mit Verstärkung 1 einfach mit, unbeschaltet hat er gelegentlich zu bösem Übersprechen geführt. Wie wollen aber absolut konstante Helligkeit unserer Power-LED!

Darunter befindet sich ein kleiner Buck-Konverter, der bei Bedarf eine Betriebsspannung für einen LED-Lüfter zur Verfügung stellt:

Die Ausgangsspannung lässt sich mit RV6 von 3,8 bis 11,3 V einstellen, die last darf maximal 1A betragen — mehr als genug für einen Lüfter!

Der letzte Teil der Schaltung ist das doppelt vorhandene Paar aus Reflex-Sensor und Signalaufbereitung für denselben:

Links sieht man das QRE1113-Modul, dass auf < 1 cm Abstand sehr zuverlässig und schnell zwischen weiss und schwarz unterscheiden kann. Das Ausgangssignal des IR-Fototransistors wird vom BJT verstärkt und vom ersten Schmitt-Trigger aufgekantet, durchläuft einen einfachen RC-Tiefpass (R24/C21) und wird dann nochmals aufbereitet und invertiert. So haben wir absolut saubere Impulse bei jeder Umdrehung der Motorwelle und ebenso wenn der Film komplett durch den Projektor gelaufen ist.

Und das wars auch schon — der Rest ist Code!