-
Notifications
You must be signed in to change notification settings - Fork 0
5. Circuit Description EN
Language: Deutsch | English
Contents

The Scan Controller is flexible open‑source hardware that serves as the bridge between the camera, the Raspberry Pi, the projector’s film transport, the LED lighting control, and the user. The board is quite densely populated and looks complicated, but it’s really not that bad. So that further development, modifications, or repairs aren’t a hurdle, I’ll explain the circuit in blocks.
The complete schematic is also available here as PDF, but the latest version is always in the KiCad project of the git repository. KiCad is also open source and very powerful.
Let’s start with an overview:

Because the scanner has a “high‑current section” to power the projector motor and the high‑power LED—cost‑effectively supplied by the projector transformer—we find a simple bridge rectifier and smoothing capacitor at the top left. You can also feed DC here; I use a [MeanWell LRS‑50‑24 (24V/2.2A) switching PSU](http://MeanWell LRS-50-24) because the transformer in my Frankenstein Noris started to hum very loudly (so much that the vibrations affected sharpness). R41 serves to discharge C4 after power‑off and to prevent the no‑load voltage spikes of a switching supply from charging the capacitor to too high a voltage (I measured >45 V after a few hours otherwise!).
Besides this high‑current section (labeled 24VDC in the schematic), there is also a 3.3 V and a 5 V rail. These two supply rails are usually provided by the Raspberry Pi. Since during tinkering and programming the Arduino microcontroller is sometimes powered directly, and the Pi is notoriously sensitive to over‑voltage on its power pins, you’ll find a small MOSFET logic block to the right of the rectifier:

uC‑Power is connected to a GPIO of the Pi so it can switch the controller on and off. When it goes high, Q2 switches Q3 on, and the Pi’s 3.3 V (3.3V‑RPi) can flow to the Arduino (3.3V‑uC). The “Zero Voltage Diode” (ZVD) in between is a trick to prevent current flowing back toward the Pi without losing voltage—because we need the full 3.3 V for reliable operation, not 0.7 V less. The ZVD looks like this:

You’ll find the same circuit on the Pi itself, though only on the 5 V rail. The Pi’s 3.3 V rail would be unprotected without it. A voltage spike there can quickly kill the entire Pi, so these four parts are a good investment.
Mid‑left is the “User Interface” block, shown here in detail:

This is all fairly straightforward: top left a button to power the system on/off, next to it a power LED. The two “button ladders” at the bottom left represent the eight control buttons, similar to a tape deck. Both groups of four are each connected to one analog input on the Arduino; the chosen resistor values allow the firmware to distinguish the buttons (and even combinations) reliably while using only two pins.
Bottom right are three trim pots connected to analog inputs. They set step voltage, search/run voltage, and the camera exposure time.
Top right is a tiny on‑board toggle switch that selects whether the digitized data is sent directly to a client computer for processing or stored on an external drive. In parallel, an external switch can be connected at J4, which overrides the on‑board switch by bypassing R2 and R4. The storage target position is read as high/low by GPIO17 on the Pi.
In the middle of the overview are two yellow bundles:

On the left is the 40‑pin header to the Pi. SDA and SCL are the I2C bus for communication between Arduino and Pi. GPIO5, 6, and 27 are unused and exposed for future expansions—same for the Pi UART. MISO, MOSI, SCK, and RST form an SPI port so the Pi can program the Arduino directly. That allows firmware updates without any programmer or extra knowledge.
The right yellow box is “the Arduino”—essentially the circuit of an Arduino Pro Micro in the 8 MHz/3.3 V variant. Pins D7, D10, and A7 are unused and exposed for expansions. The headers J1 and J5 on the far right provide ICSP and FTDI interfaces to program the Arduino directly if desired.
The last part of the controller is the “drivers,” shown on the far right of the block diagram—here in detail, starting top left with the motor driver:

The DRV8871 is an H‑bridge that can drive brushed DC motors. It operates from 6–45 V and can deliver up to 3.6 A peak. In addition to over‑current and thermal protection it allows PWM speed control—and all without a big heatsink.
Below that is a simple BJT that feeds 5 V from the Pi to a fan, if needed, to cool the LED. I run a 12 V fan at 5 V—completely silent and more than enough.
A key part of the controller is the LED driver on the right, which is a bit more complex due to its flexibility:

A HIGH on the Lamp input lets gate driver U11 switch MOSFET Q1 to ground. The LED driver is therefore not permanently tied to controller ground, which is why there’s a dedicated LED GND test point on the board—handy for measurements. The XL4015 above is a low‑cost, efficient, and very precisely adjustable buck converter that can output 1.25–32 V (provided the input is high enough). The upper part of the circuit is a minimal standard configuration; trimmer RV3 at the top right acts as a voltage divider and controls the FB (feedback) pin to set the output voltage. Since LEDs must be driven with constant current, the lower part adds current regulation: The 78L05 provides 5 V (I could have taken that from the Pi, but wanted the LED driver to be autonomous). The TL431 is a long‑proven shunt regulator (a programmable zener), whose output is more stable than the 7805. Its extremely stable output goes through a divider (with trimmer RV1) into the inverting input of an op‑amp used as a comparator. R18 is a shunt resistor; the voltage drop across it (proportional to LED current) goes to the non‑inverting input. If that voltage exceeds the reference, the comparator output goes high, pulling the buck converter’s FB pin up via D5. At about 3.3 V on FB the converter effectively shuts down. The result: RV1 sets the maximum output current independent of the output voltage.
The LM358 op‑amp is a ~50‑year‑old part whose characteristics fit perfectly here: at 5 V supply its output swings from 0 to about 3.6 V. Because the FB input is high‑impedance, only about 0.4 V drops across D5—this yields very smooth regulation. The second op‑amp in the chip is wired as a unity buffer; left floating it sometimes caused crosstalk. We want absolutely constant LED brightness.
Below that is a small buck converter that provides supply voltage for an LED fan if needed:

The output voltage can be set with RV6 from 3.8 to 11.3 V; load must not exceed 1 A—plenty for a fan.
The final part is the duplicated pair of reflective sensor and its signal conditioning:

On the left is the QRE1113 module, which can reliably distinguish between white and black at <1 cm distance. The IR phototransistor signal is amplified by a BJT and squared by a Schmitt trigger, then passes a simple RC low‑pass (R24/C21) and is conditioned and inverted once more. The result is clean pulses for each motor‑shaft revolution and for end‑of‑film detection.
And that’s it — the rest is code!
- [1] PDF - https://fwachsmuth.github.io/Filmkorn-Raw-Scanner/scan-controller-kicad/renderings/Full-Schematic.pdf
- [2] git repository - https://github.com/fwachsmuth/Filmkorn-Raw-Scanner
- [3] MeanWell LRS-50-24 (24V/2.2A) switching PSU - http://MeanWell LRS-50-24
- Home
- 1. Overview
- 2. Assembly Guide
- 3. User Guide
- 4. DaVinci Resolve
- 5. Circuit Description
- 6. Integrating Sphere
- 7. Universal Motor (old type)