mikrocontroller.net

Forum: FPGA, VHDL & Co. Synchronisation von mehreren Kameras


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Andreas Bergmann (Firma: www.collion.de) (bergy) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Kest (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Stefan,
um welche Kameramodule handelt es sich denn ?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: woko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Alexander B. (esquilax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird das eine 3D-(Video)-Kamera?
Wenn ja: cool ;-)

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: woko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: woko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
man könnte ja auch mit 25FPS kontinuierlich triggern...

Wolfgang

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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....
Da ist immerhin ein Block-Schaltbild enthalten.

Gruss,
--Stefan

Autor: Sabri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Peter Diener (pdiener) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Panker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.