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 Stefan, um welche Kameramodule handelt es sich denn ?
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.
ok, dann läuft die Kamera im Rolling Shutter Modus oder? Weil wenn man extern triggern kann, wäre es mit den Fifos eine Möglichkeit. Wolfgang
man könnte ja auch mit 25FPS kontinuierlich triggern... Wolfgang
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.