You are on page 1of 10

Core de cámara OV7670 para FPGA

Elizabeth Fonseca Chávez, Mario Alfredo Ibarra Carrillo, Julio Cesar Sosa Savedra,
Luz Noé Oliva Moreno, Ruben Ortega Gonzalez

1 Resumen

El procesamiento de imágenes en tiempo real es un área de trabajo que se ha


desarrollado en los últimos años, las cámaras con interfaz USB y las webcams internas
aunque tienen capacidad para enviar imágenes en tiempo real, comparten la tasa de
transferencia con otros dispositivos conectados a la computadora, lo que las limita, por
tal motivo es necesario crear una infraestructura de cámaras para trabajar en tiempo
real. En este trabajo se diseñó e implementó un nucleo de control para el manejo de la
cámara OV7670 y su desplejado en un VGA estándar, programado en VHDL para
utilizarlo en cualquier plataforma o fabricante ya sea Xilinx o Altera. El core se
implementó con exito en una tarjeta DE2-115 de altera empleando 678/114,800 (<1%)
de elementos lógicos en formato YUV. Se presenta diagramas de estado y cartas ASM,
listo para poder adicionar código y realizar proyectos mas ambiciosos dado este
sistema.

Keywords: OV7670, FPGA, VHDL

2 Introducción

La captura de imágenes para realizar procesamiento es indispensable en áreas de


Ingenieria en Computación, de Ingeniería en Telecomunicaciones o de Ingeniería
Electrónica. Esto se debe a que las aplicaciones con visión computarizada son muchas:
reconocimiento de patrones, localización de objetos y sistemas de control
retroalimentado, entre otros.

En forma resumida, el sistema de procesamiento consiste de una cámara de bajo


costo, un sistema de procesamiento, el cual es programado sobre un FPGA y un monitor
VGA que permita exhibir las imágenes procesadas.

El OV7670[1] es un “system on a chip (SoC)” basado en tecnología CMOS con una


capacidad de procesado de señal que ofrece distintas funciones de control de imagen,
tales como control de exposición automática, control del balance de blancos,
cancelación de ruido, además del control automático o manual de brillo, saturación,
gamma y otros. Además cuenta con la posibilidad de trabajar a distintas resoluciones:
VGA, QVGA, CIF, QCIF y resolución de imagen de 640 x 480 píxeles a 30 imágenes
por segundo, y diferentes espacios de color : RGB555, RGB565 y YUV.
Todas estas funcionalidades son controladas mediante una serie de registros, a los
cuales se accede mediante la interfaz SCCB, estandarizada para dispositivos de
OmniVision. Su foto se observa en figura 1.

Figura 1 Circuito de sensor de cámara ov7670

La cámara OV7670 tiene un costo reducido respecto a otras cámaras (ver tabla 1
para comparación). Su resolucion es de 640x480 (0.3 megapixeles) mientras que otras,
de mayor costo, tienen resoluciones de 3.1megapixeles a 5 megapixeles. Existen
cámaras como la VC0706 que capturan de imágenes y las proporcionan en algún
formato de almacenamiento para JPEG, lo que no sirve para aplicar técnicas de
procesamiento. A continuación, la tabla 1 muestra una comparativa de las cámaras más
comúnmente utilizadas.

características terasic3.1M terasic5M Ov7670 VC0706


Tipo de sensor cmos cmos cmos cmos
Resolución 3.1Mpixeles 5 Megapixeles 0.3Mpixeles
Modo de captura En movimiento Captura de pantalla x x
Tiempo de Controlado por Por bulbo, arbitraria x x
Exposición tiempo y por tiempo
Interfase I2c I2c Sccb como i2c Uart,Spi e i2c
Soporte vga SXGA@1280*1024 Vga y cif Vga y cif
and VGA@640*480
Costo discount 85 dolares 20 dolares 20 dolares
Formatos de RGB RGB rgb, yuv, Ycbcr, jpeg,ccirc56,
salida grb y raw (bayer) NTSC.PAL
Arreglo de pixeles x a 2,752-column by 656x488 de ntsc :712x486
2,004-row 320,128 pixeles
Tabla 1. Comparación entre cámaras comunes en México
3 Sistemas de Visión

La cámara digital es uno de los dispositivos electrónicos más populares no funcionan


sobre la base de una película fílmica como las cámaras fotográfica tradicionales, sino
sobre la base de un sensor electrónico interno que hace las veces de la película fílmica
donde se graba o imprime la imagen captada luego se almacena en una memoria interna
para que el usuario pueda disponer de ellas cuándo y cómo quiera.

Los sensores para cámara pueden ser de cualquiera de los siguientes tipos:
 Por interpolación de colores: CCD y super CCD, CCD RBGE y CMOS.
 Sin interpolación de colores: Foveon X3 y Triple sensor.

Siendo los sensores CMOS[6] los más utilizados en la actualidad, por su menor
consumo de energia y menor coste de fabricación (como el sensor de cámara OV7670).

Los sensores también se pueden clasificar de acuerdo a su tamaño:


Sensor Full Frame, conocido también como sensor 35mm. Dimensiones: 36x24mm,
Sensor APS-H. Dimensiones: 28,7x19mm, Sensor APS-C (usado en las Nikon, Pentax
y Sony). Dimensiones: 23,6×15,7mm, Sensor APS-C (usado en las Canon).
Dimensiones: 22,2×14,8mm, Sensor Foveon (usado en las cámaras Sigma).
Dimensiones: 20,7×13,8mm y Sensor Micro Cuatro Tercios. Dimensiones: 17,3x13mm

A continuación en la figura 2, se muestra el diagrama a bloques del sistema de visión


artificial. Tenemos tres etapas básicas. La primera etapa es la de adquisición de la
imagen, como una cámara, luego la etapa de procesado, esta puede separarse en dos
etapas y ser pre-procesado y procesado, si así se requiere; esta etapa mejora la imagen,
extrae información, e interpreta esta información y finalmente una etapa de salida, que
puede ser un monitor u otro aparato o sistema.

Fig. 2 sistemas de visión artificial [5]


4 Diseño del sistema

Se realiza la etapa de adquisición de la imagen. Requiriendose una intefaz de VGA,


una etapa con memoria RAM, un módulo de captura de imagen, un módulo de control
de cámara y un programa principal para reunir todos estos.

En el datasheet del sistema omnivisión OV7670, se indica que la camara inicia


entregando señal en formato YCbCr 4:2:2, en un tamaño de 640x480 pixeles, por lo
tanto, se puede conectar la cámara sin modificar algún parámetro y checar el sistema.

El control del sistema OV7670 requiere un reloj para funcionar llamado xclk, un
reset, la opción de prender el sistema con PWDN , y dos controles parecidos al
protocolo I2C llamada interface SCCB tales como SIOC y SIOD. Ofrece de salida un
href de sincronia horizontal, vsync de sincronia vertical, un reloj de salida a la misma
frecuencia que la entrada pclk, y los datos de salida que son 8: d0,d1...d7.

4.1 VGA
El estándar VGA se refiere a una pantalla que recibe tres señales analógicas en el
modelo de color RGB y genera una imagen con un tamaño de 640 x 480 pixeles[3]. El
estándar VGA, aunque creado por IBM en la decada de los 80s ha evolucionado en
capacidades y nombres no obstante conserva el nombre VGA a modo de generalidad.
Una señal de vídeo VGA contiene 5 señales activas:

Señal de sincronización horizontal (HSYNC), Señal de sincronización vertical


(VSYNC), Señal para el color rojo (R ), Señal para el color verde (G) y Señal para el
color azul (B).

Se realiza con un contador de de HSYNC de 800 ciclos por línea, con un segundo
contador VSYNC de 525 líneas.

4.2 Captura de Pixeles

Los datos de la imagen capturada por la cámara, estan llegando en formato YCbCr
4:2:2 en paquetes de 8 bits y mediante pares de bytes:

Cb0 Y0 - Cr0 Y1 - Cb2 Y2 - Cr2 Y3 - Cb4 Y4 - Cr4 Y5


Siguiendo el mapa de tiempos del datasheet del manual de la cámara OV7670 se
presenta a continuacion el diagrama de estados y la carta ASM.

Figura 3 diagrama de estados de la captura de pixeles.

Figura 4 Carta ASM de captura de pixel de camara ov7670

La figura 5 ilustra el sistema que captura imágenes mediante la OV7670. Las


muestras son pasadas a una memoria RAM implementada dentro del FPGA y en
seguida, las muestras son transferidas a un controlador VGA que genera la imagen
Figura 5. Diagrama del sistema de captura de pixeles de camara OV7670 sin control SCCB

4.3 Control de la cámara SCCB


La cámara OV7670 involucra, además del sensor un microcontrolador, el cual
permite el control sobre el tamaño de la imagen y el modelo de color de la misma. Este
control se realiza escribiendo datos en un conjunto de registros de control. El acceso a
los registros del controlador de la cámara se realiza mediante el protocolo SCCB (Serial
Camera Control Bus) diseñado por OmniVisión[2] para el control de sus equipos. En
la hoja de datos de SCCB (Serial Camera Control Bus) de omnivisión[2], se observa
que se requieren de dos terminales para comunicarse con la cámara: SIO_C (reloj) y
SIO_D (datos). Así, para realizar la comunicación con la cámara se diseñan dos
módulos. El primero, "cameraControl“, contiene la lista de registros a modificar así
como los valores correspondientes. El segundo módulo, "likeSCCB“ es una interface
que permite la transferencia de datos a la cámara. La figura 6 ilustra el diagrama de
conexiones.

figura 6 Conexiones para controlar la OV7670

En la figura 7 se observa como quedó el diagrama de estados dado los SIO_C y SIO_D,
se partirá de un estado inicial llamado Stanby luego pasará al estado de envio (Sending),
después al estado de poner datos (put_data), luego capturar los datos (captutre_data),
despues esperar por cambios de controles del SIO_D, en los estados e4 y e5.

Figura 7 diagrama de estados de control SCCB de cámara ov7670

Mientras que en la figura 8, se muestra más específicamente el protocolo con la carta


ASM. Se parte de un estado inicial, si la bandera enable esta activa entonces se
comienza con un estado de Sio_d=0, luego pasa a Sio_c=0, y colocar el dato en Sio_d,
luego cambios en Sio_d otra vez, pero si bitcount=0 empieza a contar y vuelve a
almacenar en Sio_d, finalmente colocar sio_d=z como empezó.

Figura 8 Carta ASM de control SCCB de camara ov7670

En un registro de memoria para controlar los atributos de la cámara, se tiene los


controles a cambiar, los cuales podrán solicitarse estado por estado. Por ejemplo, para
el formato YUV, si ya se modificó los datos iniciales, se deberia escoger el registro
com7 y escribir 0x00, para escogerlo, luego escoger la opción de prueba de línea de
buffer (TSLB) con 0C y el control común com13 en 99. Todo se ve en el manual[1]
4.4 Programación Completa

En la fotografia de la figura 9 se observa el resultado visual exitoso en la pantalla.


Además en la figura 10, el RTL del programa completo como CORE de control de
cámara ov7670 para su utilización en tarjetas FPGAs.

Figura 9. Imagen de la pantalla ,obtenida por resultado del trabajo con la cámara ov7670 en una tarjeta
altera de2-115.
Figura 9 RTL de core de ov7670 para FPGA
5 Conclusiones

Se implementó exitosamente un core de control de cámara ov7670, con diagramas


de estado y cartas ASM, primero se hizo el core de VGA, pruebas con la RAM, después
el core de la cámara con captura de pixeles y finalmente el core completo con control
de cambio de atributos con la tabla de registros que el fabricante sugiere. Se tiene un
CORE listo para trabajar con procesamiento de señal aplicado a la visión artificial. La
programación es modular, el código fue hecho en VHDL y se probó en una tarjeta de2-
115 de altera, el método es repetible para trabajar con otras tarjetas Xilinx, y en codigo
verilog, siguiendo las cartas ASM y los diagramas de estado. A futuro este core puede
ser usado para otras aplicaciones de reconocimiento de patrones, control
retroalimentado entre otros.

6 Referencias

1. omnivision, manual ov7670. http://www.voti.nl/docs/OV7670.pdf


2. omnivision, manual protocolo SCCB. http://www.ovt.com/download_docu-
ment.php?type=document&DID=63
3. Wang, G., Guan, Y., & Zhang, Y. (2009, May). Designing of VGA character string display
module based on FPGA. In Intelligent Ubiquitous Computing and Education, 2009
International Symposium on (pp. 499-502). IEEE.
4. Altera, manual altera DE2-115. http://www.alldatasheet.es/datasheet-
pdf/pdf/487677/ALTERA/DE2-115.html
5. Julio C. Sosa Savedra. Tesis de doctorado. España.
http://tapec.uv.es/jboluda/tesis/tesis_final_Julio.pdf
6. Gottardi, M. Yang, W.A CCD/CMOS image motion sensor, Solid-State Circuits
Conference, 1993. Digest of Technical Papers. 40th ISSCC., 1993 IEEE International

You might also like