Home
Download: EOS-Shutter V3.3


Canon EOS Shutter-Emulation mit Arduino                

Erwin Lotter, 23.01.2024           

Diese Seite beschreibt, wie man verschiedene Canon EOS Modelle ohne Shutter und/oder Spiegel betreiben kann. Aktuell werden emuliert:

6D, 6Dmk2, 50D, 60D, 70D, 80D (nur Shutter), 550D, 600D, 650D, 700D, 1100D, 1200D, 1300D, 2000D sowie EOS M, M3, M10, M100.

Die Technik basiert auf der von Hendrik Beijeman vorgestellten Shutter-Emulation für die Canon EOS 1100D, die die von der Kamera erwarteten Signale mit einem nackten Mikrocontroller-Chip simuliert.

Hier wird ein Arduino eingesetzt, für dessen Programmierung ich die freie Arduino IDE verwende.

Zur einfachen Integration in die Kamera ist ein kleines Arduino-Board vorteilhaft, das mit 3.3V betrieben werden kann. Zum Testen und Programmieren ist ein Board mit integrierter USB-Schnittstelle günstig. Aus dem erfreulich großen Angebot an preiswerten Arduino-Boards einschließlich der kompatiblen China-Nachbauten, die schon ab ca. 2 Euros zu bekommen sind, habe ich mir diese beiden Boards besorgt:

ATmega328P 1.)   "MINI USB Nano V3.0 ATmega328P CH340G 5V 16M - Compat. "



Pro Mini 2.)  "Pro Mini ATmega328
3.3V 8MHz"

Die 3.3V-Variante des ‘Pro Mini’ läuft aufgrund der Prozessorspezifikationen nur mit 8 MHz statt der verbreiteten 16 MHz. Man muss deshalb bei der Programmierung genau darauf achten, nicht nur den korrekten Board-Typ, sondern auch die passende Taktfrequenz auszuwählen! Die verbreitete 5V/16MHz-Variante des ‘Pro Mini’ läuft zwar auch mit 3.3V, es ist aber nicht garantiert, dass dies unter allen Betriebsbedingungen zuverlässig funktioniert. Bei mir hat es zwar geklappt, aber eine Garantie gibt es nicht.

Man kann auch eine höhere Spannung der Kamera über den RAW Anschluss des Arduino verwenden und dann auch die 5V/16MHz Arduino-Variante. Sogar die 7.8V des Akkus gehen. Dann ist der Arduino allerdings auch bei abgeschalteter Kamera aktiv, was meist unerwünscht ist: Er zieht dann permanent etwas Strom und kann nur durch Entnehmen des Akkus zurückgesetzt werden.

Die Beschaltung

Bevor man damit beginnt, sollte man sich darüber klar sein, dass solch ein Eingriff zum Verlust jeglicher Garantie führt. Ohne ausreichende Elektronik-Kenntnisse ist die Gefahr groß, die Kamera irreparabel zu beschädigen!

Alle Emulatoren verwenden die Haltemagnet-Signale, die sich gut an den Testpunkten des Shutterkabels abgreifen lassen, um die Kontrollsignale für die Kamera zu erzeugen. Lediglich für die Versorgungsspannung muss man noch direkt auf dem Mainboard der EOS löten, aber das geht recht einfach. (Leider lässt sich die Versorgung der 'coil' nur bei den EOS Mx Modellen zur Versorgung des Arduino verwenden, weil sie nicht permanent oder, wie bei der 700D, zu spät anliegt.)

Die Arduino-Ausgänge sind durch Dioden von der Kameraelektronik getrennt, um zu verhindern, dass die Kameraelektronik beschädigt wird, wenn die Betriebsspannung des Arduino höher als 3.3V ist. So ist dann z.B. auch ein Testbetrieb mit einem 5V Arduino über USB, problemlos möglich.

Die Verschaltung unterscheidet sich deutlich für die verschiedenen Kamera-Typen, deren Shutter teils nur einen Haltemagnet ('coil') besitzen (1100D, M), während sonst zwei verbaut sind. Die ein- und zweistelligen Modelle (6D, 50D,..) haben zudem noch einen separaten Motor mit zusätzlichen Kontrollsignalen für den Spiegel.

1100D, 600D

Anschluss-Schema für 550D, 600D, 1100D, 1200D, 1300D, 2000D, weitere Modelle siehe unten. Die Beschreibung der Funktionen der einzelnen Signalleitungen ist im Steuerprogramm zu finden.

Software

Ein Arduino-Programm – Sketch genannt – wird i.A. per serielle (USB-) Schnittstelle an die Arduino Basissoftware – Bootloader genannt – übergeben, die es permanent speichert und nach einem Reset oder dem Einschalten des Arduino ausführt. Das dauert aber ca. eine halbe Sekunde, und das ist zu lange für die Kamera, die offenbar gleich mal überprüft, ob mit dem Shutter alles in Ordnung ist. Für Testzwecke kann der Arduino natürlich mit einer externen Quelle (z.B. seinem USB Anschluss) versorgt werden, so dass die Versorgung schon anliegt, wenn die Kamera eingeschaltet wird – dann ist alles ok.

Für den Echtbetrieb aber muss das Steuerprogramm („EOS-Shutter V3.3“), konfiguriert für das richtige Modell, so in den Arduino übertragen werden, dass es den Bootloader überschreibt und beim Einschalten sofort startet. Wie das mit einem zweiten Arduino-Board mit einer USB-Schnittstelle geht, wird z.B. auf Adafruit Learning System oder Shelvin – Elektronik ausprobiert und erläutert sehr schön gezeigt. Eine Kurzfassung findet sich unten im Abschnitt „Boot-Programme laden“.

Alternativ können Leitungen, die beim Einschalten Low-Pegel haben müssen, mit einem 2.2k Widerstand auf der Arduino-Seite mit Masse verbunden werden. Dann reicht es aus aus, den Emulator-Code als normalen Sketch zu laden.
Eine weitere Lösung ist die Verwendung eines schnelleren Bootloaders, wie er z.B. mit dem MiniCore Paket installiert werden kann.

Ablauf der Emulation

Der Arduino wird durch ein Coil-Signal aktiviert und sendet der Kamera die Signale, die sie von den Lichtschranken und Rotationsencodern ihres Shutters erwartet. Das klappt meist für alle sinnvollen Betriebsarten einschließlich des Live-View.

In den Zeiten zwischen den emulierten Shutter-Bewegungen geht der Arduino-Prozessor in den Ruhezustand und verbraucht dann nur noch wenige Mikroampere. Um das wirklich nutzen zu können, muss allerdings die Power-LED des Arduino ausgelötet oder –gebrochen werden, die ansonsten ca. 1 mA verbrät.

Einbau des Emulators in die Kamera und Anwendung

Nach dem Ausbau von Shutter und/oder Spiegel, für den die Kamera komplett zerlegt werden muss, bleibt ein Hohlraum, der das Arduino-Board leicht aufnehmen kann. Als Belohnung erhält man eine Kamera, die völlig geräuschlos arbeitet und keinem mechanischen Verschleiß mehr unterliegt. Ohne den Spiegel bekommt man deutlich weniger Abschattung bei F/5 oder noch lichtstärkeren Optiken.

Ohne Shutter ist natürlich die minimale Belichtungszeit stark eingeschränkt: Aufnahmen bei Tageslicht oder auch vom Mond sind so nicht mehr möglich (außer im Video-Mode, der eh ohne Shutter arbeitet). Die Untergrenze wird durch die Dauer des Auslesevorgangs bestimmt, die knapp 1/10 Sekunde beträgt. Die minimale Belichtungszeit an der Oberkante des Bildes beträgt ca. 1/50 s und nimmt nach unten linear um 1/10 s zu – ein Verhalten, das übrigens auch mit Shutter die minimale Aufnahmedauer von Darks begrenzt.

Das bedeutet, dass bei man 1 s Belichtung zwischen Ober- und Unterkante einen Unterschied von etwa 10% bekommt, bei 10 s noch etwa 1%. Im ersten Fall ist eine Korrektur durch gleichlang belichtete Flats auf jeden Fall angeraten, bei 1% (gleichmäßiger) Variation kann man darauf meist verzichten. Eine solche ebene Korrektur kann auch rein rechnerisch erfolgen. Wichtig ist auch, bei der Aufnahme von Flats zu beachten, dass deren Belichtungszeit nicht zu kurz, also nicht kleiner als z.B. 10 s, wird.

Arduino Boot-Programme laden

(Kurzfassung der Anleitung von Shelvin – Elektronik ausprobiert und erläutert.)

Ein Arduino-Sketch soll so geladen werden, dass er den Bootloader überschreibt und ohne dessen Hilfe ausgeführt wird. Dazu wird ein zweiter Arduino als ISP (In-System-Programmer) verwendet. Es sind 3 Schritte notwendig.

1.) Einen Arduino zum ISP Programmer umfunktionieren

Zuerst wird der Hilfs-Arduino mit USB – im Folgenden ISP genannt – an den PC angeschlossen und mit der ISP Software geladen. Hier darf das Ziel-Board noch nicht angeschlossen sein!

In der Arduino IDE wird unter Tools > Board der Typ des ISP Arduino eingestellt (hier „Arduino Nano“) und die richtige COMx (z.B. COM6) Schnittstelle wird ausgewählt.
Unter Datei > Beispiele > ArduinoISP wird das Programm ArduinoISP ausgewählt und dann als Sketch hochgeladen.

Dann wird dieser Sketch in der IDE als Programmer gekennzeichnet mit
    Tools > Programmer > „Arduino as ISP“ (nicht ArduinoISP!).

2.) Beschaltung

Als nächstes wird der ISP abgehängt und der Ziel-Arduino an ihn angeschlossen: Gnd und Vcc werden verbunden, ebenso wie D11-D13 (MOSI, MISO und SCK). D10 des ISP geht an RST des Ziels.

Dann den ISP wieder an den PC anschließen.

3.) Programm als Boot-Code auf das Ziel laden

Als Board muss jetzt das Ziel-Board angegeben werden – ggf. einschließlich des korrekten Prozessors und der richtigen Taktfrequenz (wird nicht automatisch erkannt). Hier wäre das: Board: „Arduino Pro or Pro Mini“, Processor: AT-mega328 (3.3V 8 MHz).
Dann muss das gewünschte Programm ganz normal als Sketch geöffnet werden. (Achtung: Der Dateiname darf keine Sonderzeichen enthalten und muss in einem gleichnamigen Ordner liegen!)
Das Hochladen erfolgt diesmal aber nicht mit der HochladenHH Funktion, sondern mit Sketch > Upload mit Programmer (oder Shift-Hochladen Button). Damit lädt der ISP das Programm als Boot-Code in das Ziel. Bei trat mehrfach beim ersten Versuch ein Fehler auf, nach Wiederholen der Prozedur hat es dann aber geklappt.

Der Original-Bootloader kann mit dem Befehl "Burn Bootloader" im Tools-Menü wieder geflasht werden (mit dem ISP).


Anschlussbilder der unterstützten Kameras:

6D

60D

650D, 700D

70D

80D

600D, 1100D

EOS M

EOS M3

EOS M100