USB-CMOSカメラ
概要
このページでは、Spartan-6ボードの応用例として、OmniVision社製のCMOSイメージセンサ「OV7670」を使ったUSB-CMOSカメラを作る方法を紹介します。
CMOSイメージセンサとはカメラ素子の一種です。CCDカメラとくらべて消費電力が少なく、取り扱いが容易で、デジタル制御なのでFPGAやマイコンとの相性が良いという特徴があります。
VGA画面は640×480ピクセルなので307200バイトあり、FPGA内のブロックメモリには1画面分のデータを蓄えることができません。特電Spartan-6ボードには64MバイトのDDR2 SDRAMが搭載されているので、このメモリに画像を一時的に蓄えて、USBからゆっくりと読みだし、スムーズなデータキャプチャを実現しています。
準備するもの
必要な材料は下記のとおりです。
・特電Spartan-6評価ボード TKDN-SP6-16 (または-ESや-45でも可)
・OV7670を搭載したカメラボード(aitendo製 カメラモジュール(OV7670)[CAMERA30W-OV7670])
・万能基板(72mm×47mm 両面)
・ピンヘッダ・ピンソケット、配線材など
・ネジ、スペーサなど
作り方
OV7670モジュールに接続する信号には、D7〜D0、XCLK、PCLK、SDA、SCL、HREF、VSYNCがあります。
これらの信号を下の表に示すように、Spartan-6評価ボードのピンヘッダにつなぎます。
OV7670の |
SP6ボードの |
機能 |
備考 |
D7 | B(27) |
データバス |
|
D6 | B(25) |
データバス |
|
D5 | B(23) |
データバス |
|
D4 | B(21) |
データバス |
|
D3 | B(19) |
データバス |
|
D2 | B(17) |
データバス |
|
D1 | B(15) |
データバス |
|
D0 | B(13) |
データバス |
|
SDA | B(11) | カメラの内蔵レジスタ設定用 | |
SCL | B(9) |
カメラの内蔵レジスタ設定用 |
|
XCLK | B(7) | FPGA→カメラへのクロック供給 | 12〜48MHz |
PCLK | B(5) | カメラ→FPGAへのクロック供給 | 使用していない |
VSYNC | B(3) | 垂直同期信号 | フレームの開始を表す |
HREF | B(1) | 水平データ有効 | |
3V3 | VCC | 電源 | |
GND |
GND |
グラウンド |
つなぎ方は、下の図を参考にしてください。
図2 実体配線図 (クリックで拡大)
これらの配線は、万能基板上でラッピングワイヤを用いて行います。
基板裏面 (クリックで拡大) |
基板表面(クリックで拡大) |
横から見た図(クリックで拡大) |
コンフィギュレーションデータの書き込み
付属のSP6JTAGユーティリティか、iMPACTを使ってコンフィギュレーションデータをSPI ROMに書き込みます。
SP6JTAGユーティリティで書き込む場合は、USBをつないで、コマンドラインから次のようにコマンドを入力します。
sp6jtag -spi -auto ov7670main.bit
約30秒で書き込みが完了するはずです。USBケーブルを抜き差しして、電源を再投入すると、新しいデザインで動き出します。
ソフトウェア
本アプリケーション専用のソフトウェアを用意しています。
このソフトウェアでは、画像のとりこみと、ゲイン・ホワイトバランス・露出の調整が可能です。
また、OV7670の任意のカメラレジスタに値を書き込む機能がありますので、思う存分カメラレジスタを操作していただけます。
以下の条件を満たすPCが必要です。
● Windows2000、Windows XP、Windows Vista(32bit)またはWindows 7(32bit)
※64bit版には対応しておりません。
● USB2.0 HighSpeedモードに対応したUSBポートを持つこと
設計データ一式ダウンロード
FPGAの設計データ、および、アプリケーションソフトウェアは下記のボタンを押してダウンロードしてください。
本設計データは、TKDN-SP6-ESボード用に論理合成されていますが、UCFファイルをtkdn_sp6_1645.ucfに取り換えたり、部品名を変えて再度コンパイルすることで、TKDN-SP6-16や45のボードでも動作させることができます。
OV7670の特徴
OV7670を操作していて気になった点をいくつか紹介します。
・カメラレジスタを連続して操作する際には、レジスタの操作と操作の間に適度な待ち時間が必要。本ソフトでは10msのWAITを入れている。
・画質を良くするには露出時間(EXPOSURE)の調整が重要。AECをいったんOFFにして、EXPOSUREを0から300くらいまで変えていき、画質が良くなる点があるので、そこに合わせる。その後、AGCを手動で合わせると綺麗になる。デフォルトのままでは絵はとても汚いので注意。
・夜間の室内くらいの明るさがちょうどよい。それ以上に明るいと露出が強くて飽和してしまう。それ以上に暗いとノイズが目立つようになってしまう。
スクリーンショット
Copyright(C) 2009 TokushuDenshiKairo Inc. All rights reserved.