Home
Download: EOS-Shutter V3.1


Canon EOS Shutter-Emulation mit Arduino

Erwin Lotter, 13.04.2022                                    

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

6D, 50D, 60D, 80D (nur Shutter), 550D, 600D, 650D, 700D, 1100D, 1200D (und vmtl. 1300D) und EOS M

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:

3281.)   „MINI USB Nano V3.0 ATmega328P CH340G 5V 16M - Compat. Arduino Nano V3.0”
(Bezeichnung des Anbieters)

Pro Mini 2.)  “‘Pro Mini’ atmega328 3.3V Replace ATmega128 Arduino Compatible Nano“
(Bezeichnung des Anbieters)

 

 

Beide kamen per Direktimport aus Hongkong. Zoll ist dank der geringen Preise kein Thema, die Lieferzeiten können allerdings schon mal 2-3 Wochen betragen. Einziges kleines Problem war der CH340G USB-Controller des ersten Boards, für den die Arduino-IDE früher keinen Treiber installiert hatte, so dass ich erst einen besorgen und manuell nachinstallieren musste (CH341SER.zip).

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 die 7.8V des Akkus für die 5V-Variante verwenden. Dann ist der Arduino aber 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 werde.

Die Beschaltung

Alle Emulatoren verwenden die Haltemagnet-Signale, um die Kontrollsignale für die Kamera zu erzeugen, die sich gut an den Testpunkten des Shutterkabels abgreifen lassen. 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‘ nicht 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 deultich 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 von 600D und 1100D, weitere Modelle siehe unten. Die Beschreibung der Funktion 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.1“), 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“.

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 Arduino 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.

Anschlussbilder der anderen unterstützten Kameras:

6D

60D

650D, 700D

80D

50D