Hallo zusammen!
Habe hier folgenden Aufbau:
Ein Spartan-3 Entwicklungsboard und 2 identische Kameramodule. Die
Kameramodule haben eine DVP (Digital Video Port)-Schnittstelle, die im
wesentlichen aus einer Pixel Clock (PCLK), HREF, VSYNC sowie einem 10
bit Bus fuer die Daten besteht. Dazu kommt ein XCLK Eingang fuer den
Takt und ein I2C-Bus fuer die Konfiguration der Kameras.
Ziel ist es, von beiden Kameras framesynchron Bilder einzulesen und z.B.
zu speichern oder einzelne Gesamtbilder per USB an einen PC zu
uebertragen.
Das Auslesen der Bilder und Uebertragen per USB funktioniert. Mein
Problem ist folgendes:
Die Kameramodule bieten keine eingebaute Moeglichkeit zur
Synchronisation. (Es gibt Module die haben dafuer nochmal zusaetzliche
Leitungen). Laut dem Hersteller sollte man eine Synchronisation
erreichen, indem man beide Kameras an eine gemeinsame XCLK haengt,
gemeinsam reset'ed und dann loslaufen laesst. Leider funktioniert das
dank des integrierten PLL nicht. Die Kameras brauchen eine XCLK zwischen
6 und 27 MHz. Um jedoch die gewuenschte Frame-Rate zu erreichen muss
mittels PLL eine PCLK von 42 MHz erzeugt werden. Dadurch laufen beide
Kameras auseinander und zwar nach jedem Starten unterschiedlich viel.
Manchmal laufen sie auch synchron.
Nun moechte ich die Kameras synchronisieren indem der FPGA beiden
Kameras eine getrennte XCLK bereitstellt und z.B. eine Kamera fuer ein
paar Takte anhaelt wenn sie der anderen voraus eilt. Als Referenz wuerde
ich z.B. das VSYNC-Signal nehmen, das immer LOW wird bevor ein neuer
Frame ausgegeben wird.
Spaeter soll das ganze auf mehr als 2 Kameras erweitert werden.
Meine Fragen:
- Ist das eine moegliche und brauchbare Loesung?
- Hatte jemand schon ein aehnliches Problem zu loesen? Kameras
synchronisieren ist ja doch hin und wieder noetig.
- Wie handhabe ich am besten den Fall, dass Kameras der "Master-Kamera"
hinterher hinken? Einfach so lange anhalten bis der Master 1x
durchgelaufen ist, oder den Master anhalten solange bis alle Kameras
Schritt halten bzw. voraus eilen und dann die einzelnen Kameras anhalten
bis sie alle in sync sind?
Vielen Dank fuer Eure Hilfe!
Gruss,
--Stefan
Hallo Stefan,
"früher" als die Welt noch nicht so digital war, habe ich ein solches
Problem dadurch gelöst, dass eine Kamera den Orginaltakt erhielt, die
zweite Kamera wurde über eine externe PLL mit geeigneter Charakteristik
(wg. der in der Kamera auf diesem Takt erneut eiernden PLL) geführt. Die
externe PLL wurde mittels FPGA auf H- und V-Sync Basis nachgezogen.
Gruß
Andreas Bergmamn
Hab so etwas oft machen müssen:
mach nicht zu kompliziert. Gemeinsame Clock-Leitung und Reset-Leitung
sollten ausreichen.
Man könnte natürlich die Regelung (nachziehen der Clock-Frequenz) im
FPGA/uC machen (bzw. durch den DAC und VCXO) oder von einem GenLock
alles machen lassen, ist aber etwas schwieriger.
Grüße,
Kest
Hallo zusammen!
Danke fuer eure Antworten.
@Kest
Gemeinsame Clock- und Reset-Leitung hat auch OmniVision vorgeschlagen.
Ich habe es ausprobiert und es funktioniert nicht sobald die PLL ins
Spiel kommt. Fuer niedrige Frameraten kann man die PLL umgehen und die
XCLK direkt als PCLK verwenden, dann kann man die Cams so
synchronisieren. Aber in meinem Anwendungsfall fuehrt kein Weg an der
PLL vorbei und dann klappt es mit dem Synchronisieren so leider nicht.
Die PLL ist im Kamera-Chip integriert und als Clock sind laut Datenblatt
maximal 27 MHz zulaessig. Ansonsten wuerde ich den PLL Bypass aktivieren
und direkt die noetigen 42 MHz als Clock verwenden.
@Oliver
Es handelt sich um Kameras mit dem OV9710/12 Chip von OmniVision:
http://www.ovt.com/products/detail.php?id=127
Es bleibt also so wie ich das sehe nur die Moeglichkeit durch
Manipulation an den XCLK-Leitungen die Kameras mit ihren "eiernden" PLLs
zu synchronisieren. Hat dazu jemand Vorschlaege?
Besten Dank & Gruesse,
--Stefan
Hallo Stefan,
die Kameras asynchron laufen zu lassen ist keine Option? Man könnte
FIFOs im Spartan verwenden und damit die Daten zusammenführen und
synchronisieren, bzw. mit einem gemeinsamen Clock auslesen- ist das
verständlich?
Wolfgang
Hallo Wolfgang,
ja, das ist verstaendlich und das hatte ich urspruenglich auch mal
erwogen. Aber das System soll ja nicht nur Standbilder sondern Videos
mit 25 fps aufnehmen und wenn die Bildzeilen unterschiedlich ausgelesen
werden so kommt es vermutlich bei schnellen Bildaenderungen (z.B.
Lichtblitze) zu Stoerungen. Daher ist asynchron laufen lassen leider
keine Option.
Gruss,
--Stefan
Wenn ich das richtig verstehe, laufen die Kameras jedesmal
unterschiedlich auseinander, soweit korrekt?
Ich hab mir jetzt nicht das Datenblatt deiner Kameras angeschaut,
allerdings aber gelesen, dass die Dinger einen V-SYNC input haben. Ein
Schuss ins Blaue meinerseits wuerde jetzt darauf hinaus laufen, im FPGA
ein Modul laufen zu haben, dass die genauen Frame timings generiert und
entsprechend das V-SYNC setzt. Und wenn ich nicht ganz falsch liege
muesste die Kamera auf das V-SYNC reagieren und entsprechend der Timings
im Datenblatt dann wieder auf den ersten Pixel der ersten Bildlinie
springen.
Da das ganze (falls es so funktioniert) dann in jedem Frame neu
passiert, also 25 mal pro Sekunde, ist der Verlauf sehr gering und
dadurch pro frame nicht sichtbar.
Die Alternative ist wahrscheinlich nur, bessere Kameramodule zu kaufen,
die diese Frameraten mitmachen und nicht mit fast 100% uebertaktet
werden. Oder aber auf geringere Frameraten runtergehen, allerdings las
ich weiter oben, dass das scheinbar keine Option ist.
Hallo!
Danke fuer eure zahlreichen Antworten!
@Matthias
Die Kamera ist nicht uebertaktet. Sie leistet laut Datenblatt bis zu 30
fps bei einer Aufloesung von 1280x800 Pixel. Es ist einfach so, dass die
Eingangs-Taktfrequenz (XCLK) laut Datenblatt zwischen 6 und 27 MHz
liegen muss (wirklich funktioniert hat es erst ab Taktfrequenzen > 20
MHz). Ueber die interne PLL erzeugt man sich dann je nach gewuenschter
Framerate die Pixelclock und die ist bei 25 fps etwa bei 42 MHz. Da ist
aber nichts uebertaktet. Selbst auf dem Evaluation-Board, das es zu dem
Bildsensor gibt, wird eine solche Pixelclock erzeugt bei einer
Input-Clock von 24 MHz.
Man kann die Module tatsaechlich auch uebertakten, d.h. mehr als 27 MHz
als Eingangsclock verwenden und dann den PLL-Bypass aktivieren, aber
dann ist man ausserhalb der Spec.
VSYNC und HREF sind bei dieser Kamera Ausgaenge, d.h. die Kamera teilt
darueber mit "neuer Frame" bzw. "Bilddaten liegen an". Tatsaechlich kann
man VSYNC laut Datenblatt als Eingang konfigurieren, aber es wird
nirgends erwaehnt wozu das sinnvoll ist oder dass man damit
synchronisieren koennte. Auch der technische Support von OmniVision hat
ueberhaupt nichts in diese Richtung gehendes vorgeschlagen. Im
Datenblatt steht einfach sinngemaess "Wenn man dieses Register so
konfiguriert, ist VSYNC ein Eingang", mehr nicht.
@Wolfgang
Ich muss gestehen, dass mir "rolling shutter" nichts sagt. Im Datenblatt
findet sich dieser Begriff nicht.
Soweit ich das sehe, kann dieser Chip nicht extern synchronisiert
werden. In den fruehen Versionen des Product Briefs wurde "support for
internal and external frame synchronisation" erwaehnt, aber das ist in
den neuen Versionen einfach verschwunden.
Das vollstaendige Datenblatt gibt es leider nur mit unterzeichnetem NDA.
Ein Product Brief findet sich hier:
http://www.ovt.com/uploads/parts/OV9712%20PB%20v1.1%20WEB.pdf
Da ist immerhin ein Block-Schaltbild enthalten.
Gruss,
--Stefan
Hallo Stefan,
habe auch eine Kamera von OmniVision und kenne mich mit der Pll und mit
ein paar anderen Sachen nicht aus.
Das Datenblatt ist wirklich schlecht geschrieben!!!
Könntest du mir ein Paar Tipps geben bezüglich der Pll und der Ausgänge
?
mfg
Sabri
Wenn ich es richtig verstanden habe, sind die Module nicht synchron,
weil die PLLs unterschiedlich schnell auf den Eingangstakt einrasten.
Was man erreichen müsste, ist, dass sämtliche Takte, die in diesem
Zeitraum erzeugt werden, ignoriert werden. Oder anders gesagt, man lässt
die PLL anlaufen, bevor man den Ausgangstakt durchschaltet.
Was passiert denn, wenn man die PLL konfiguriert und einschaltet und
danach einen Reset auslöst? Wenn die PLL dadurch nicht wieder
abgeschaltet wird, sollten die Module synchronisiert sein.
Grüße,
Peter
Die beiden Kameras laufen wegen der PLLs nicht auseinander, sondern
differieren nud dynamisch in der Phase. Damit bracht man nur auf beiden
Signaleingängen der Kameras eine Sychronisationsstufe und Fifos.