Skip to content

RyanFPGA/Panoramic_Camera_Module

Repository files navigation

Panoramic_Camera_Module

项目概述

基于高云 TangMega-138K FPGA 开发板的全景摄像头模块项目,实现三目摄像头的图像采集、处理和 HDMI 输出功能。本项目支持 OV5640 摄像头模组,通过 DDR3 内存进行帧缓冲处理,最终输出 1280x720@60Hz 的高清视频信号。

硬件展示

PCB 实物图

PCB 2025-10-13

PCB 2025-10-3

主要特性

  • 🎥 三目摄像头支持: 支持 3 路 OV5640 摄像头同时工作
  • 🖥️ 高清输出: 1280x720@60Hz HDMI/DVI 输出
  • 💾 大容量缓冲: 板载 DDR3 4Gbit 内存支持帧缓冲
  • 🔧 灵活配置: 支持测试图案生成和摄像头实时采集切换
  • 📊 状态指示: 5 位 LED 状态指示灯显示系统工作状态
  • 🎛️ I²C 配置: 自动摄像头参数配置和初始化

系统架构

┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐
│   OV5640 CAM    │    │   TangMega-138K  │    │   HDMI/DVI      │
│                 │    │                  │    │   Output        │
│  • 1280x720     │───▶│  • DDR3 Frame    │───▶│                 │
│  • 8-bit Data   │    │    Buffer        │    │  • TMDS Encoder │
│  • I²C Control  │    │  • Video Timing  │    │  • 720p60       │
└─────────────────┘    │  • PLL Clock     │    │                 │
                       │  • I²C Master    │    └─────────────────┘
                       └──────────────────┘

技术规格

硬件要求

  • FPGA: 高云 TangMega-138K 开发板
  • 摄像头: OV5640 摄像头模组 × 3
  • 内存: DDR3 4Gbit (256M×16bit)
  • 输出: HDMI/DVI 显示器
  • 电源: 5V DC 供电

视频参数

  • 分辨率: 1280×720 (720p)
  • 帧率: 60fps
  • 色彩格式: RGB565
  • 接口标准: HDMI 1.4 / DVI

FPGA 资源使用

  • 逻辑单元: ~35K LUT4
  • 块存储: ~120 BRAM
  • DDR3 控制器: 400MHz
  • 时钟域: 4 个独立时钟域

项目结构

Panoramic_Camera_Module/
├── src/                          # 源代码目录
│   ├── top.v                     # 顶层模块
│   ├── 138K_DOCK_cam0.cst        # 摄像头0 约束文件
│   ├── 138K_DOCK_cam1.cst        # 摄像头1 约束文件
│   ├── 138K_DOCK_cam2.cst        # 摄像头2 约束文件
│   ├── cmos_8_16bit.v            # 8转16位数据转换
│   ├── i2c_master/               # I²C 主控制器
│   ├── video_frame_buffer/       # 视频帧缓冲模块
│   ├── ddr3_memory_interface/    # DDR3 内存接口
│   ├── dvi_tx/                   # DVI/HDMI 发送器
│   ├── gowin_pll/                # 高云 PLL 时钟模块
│   └── vga_timing.v              # VGA 时序生成
├── img/                          # 图片资源
├── impl/                         # 实现文件
├── 测试说明.md                    # 中文测试说明
└── README.md                     # 项目说明文档

核心模块

1. 顶层模块 (top.v)

  • 功能: 系统顶层集成和信号路由
  • 参数:
    • USE_TPG: 测试图案使能 ("true"/"false")
    • DDR_BYPASS: DDR3 旁路模式 ("true"/"false")

2. 视频帧缓冲 (Video_Frame_Buffer_Top)

  • 功能: 三帧缓冲读写控制
  • 特性:
    • 支持三帧缓冲机制
    • 读写独立时钟域
    • 自动 FIFO 管理

3. DDR3 内存接口 (DDR3MI_400M)

  • 功能: DDR3 内存控制器
  • 规格:
    • 400MHz 操作频率
    • 256-bit 数据宽度
    • 自动初始化和校准

4. DVI 发送器 (DVI_TX_Top)

  • 功能: TMDS 编码和发送
  • 支持: HDMI/DVI 兼容输出
  • 特性:
    • 10:8 TMDS 编码
    • 串行化输出
    • 自动检测

快速开始

环境准备

  1. 安装高云 FPGA 开发环境 (Gowin Software)
  2. 准备 TangMega-138K 开发板和 OV5640 摄像头
  3. 连接 HDMI 显示器

编译步骤

  1. 选择摄像头配置

    在工程中右键 enable 启用对应的约束文件:
    - 138K_DOCK_cam0.cst (摄像头0)
    - 138K_DOCK_cam1.cst (摄像头1)
    - 138K_DOCK_cam2.cst (摄像头2)
    
  2. 编译工程

    双击 place & route 或单击编译图标
    生成 fs 文件位于: impl/pnr/
    
  3. 烧录程序

    1. 长按 2s 开关 (HDMI 接口旁)
    2. 核心板指示灯点亮后
    3. 使用 Gowin Programmer 烧录 fs 文件
    

硬件连接

摄像头接口定义:

Pin   | Signal        | Description
------|---------------|----------------
C18   | cmos_sda      | I²C 数据线
E19   | cmos_scl      | I²C 时钟线
E13   | cmos_db[7]    | 数据位 7
C15   | cmos_db[6]    | 数据位 6
C14   | cmos_db[5]    | 数据位 5
B13   | cmos_db[4]    | 数据位 4
C13   | cmos_db[3]    | 数据位 3
A14   | cmos_db[2]    | 数据位 2
A13   | cmos_db[1]    | 数据位 1
B16   | cmos_db[0]    | 数据位 0
E14   | cmos_pclk     | 像素时钟
B15   | cmos_href     | 水平参考信号
A15   | cmos_vsync    | 垂直同步信号

HDMI 输出接口:

Pin       | Signal         | Description
----------|---------------|----------------
J14,H14   | tmds_d_p_0[0] | TMDS 数据 Blue
J15,H15   | tmds_d_p_0[1] | TMDS 数据 Green
K17,J17   | tmds_d_p_0[2] | TMDS 数据 Red
G15,G16   | tmds_clk_p_0  | TMDS 时钟

状态指示

系统提供 5 位 LED 状态指示:

LED[4] | LED[3] | LED[2] | LED[1] | LED[0] | 状态
-------|--------|--------|--------|--------|----------------
❌     | ✅     | ✅     | ✅     | ✅     | I²C 配置未完成
✅     | ❌     | ✅     | ✅     | ✅     | 摄像头同步异常
✅     | ✅     | ❌     | ✅     | ✅     | TMDS PLL 未锁定
✅     | ✅     | ✅     | ❌     | ✅     | DDR3 PLL 未锁定
✅     | ✅     | ✅     | ✅     | ❌     | DDR3 初始化未完成
✅     | ✅     | ✅     | ✅     | ✅     | 系统正常工作

配置说明

摄像头配置 (lut_ov5640_rgb565.v)

// OV5640 1280x720@60Hz 配置
parameter HActive = 12'd1280;    // 水平有效像素
parameter VActive = 12'd720;     // 垂直有效像素
parameter HTotal  = 13'd1892;    // 水平总像素
parameter VTotal  = 13'd740;     // 垂直总行数

视频时序配置 (vga_timing.v)

// 1280x720@60Hz VGA 时序
H_ACTIVE(16'd1280), H_FP(16'd110), H_SYNC(16'd40), H_BP(16'd220)
V_ACTIVE(16'd720),  V_FP(16'd5),   V_SYNC(16'd5),  V_BP(16'd20)

故障排除

常见问题

Q: 无 HDMI 输出 A: 检查以下项目:

  • HDMI 线缆连接是否正常
  • 显示器是否支持 720p60 输入
  • LED[2] (TMDS PLL) 是否点亮

Q: 摄像头无图像 A: 检查以下项目:

  • 摄像头连接是否正确
  • I²C 配置是否完成 (LED[4] 状态)
  • 摄像头同步是否正常 (LED[3] 状态)

Q: DDR3 初始化失败 A: 检查以下项目:

  • DDR3 供电是否正常
  • 时钟信号是否稳定
  • 重新上电复位系统

调试技巧

  1. 使用测试图案: 设置 USE_TPG = "true" 验证视频输出链路
  2. 检查状态 LED: 通过 LED 状态快速定位问题模块
  3. I²C 重配置: 按下 KEY0 复位键重新配置摄像头

贡献指南

欢迎提交 Issue 和 Pull Request 来改进这个项目。

致谢


注意: 本项目为硬件开源项目,使用时请确保硬件连接正确,避免损坏设备。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published