K230基础-摄像头基本原理
1. 摄像头基本原理
1.1 摄像头是什么?
摄像头(Camera Module)是一种将光学图像转换为电子信号的传感器设备。它通过镜头聚焦光线到图像传感器上,再由模数转换器(ADC)将光信号转换为数字图像数据。
- 核心组件:
- 镜头(Lens):聚焦光线
- 图像传感器(Image Sensor):CMOS 或 CCD,负责光电转换
- ISP(Image Signal Processor):图像信号处理(部分模组集成)
- 输出接口:DVP、MIPI、USB 等
⚠️ 注意:我们通常说的“摄像头”是指 摄像头模组(Camera Module),而非整个相机系统。
2. 常见图像传感器接口
2.1 DVP(Digital Video Port)
- 并行接口,使用多根数据线(8~12 位) + 控制线
- 信号线包括:
PCLK
:像素时钟VSYNC
:帧同步(垂直同步)HSYNC
:行同步(水平同步)D[0:7]
:8 位数据线XCLK
:输入时钟(由主控提供)
✅ 优点:接口简单,易于 FPGA/MCU 驱动
❌ 缺点:引脚多,速率较低(通常 ≤ 48MHz PCLK)
📌 典型传感器:OV2640、OV7670、GC0308
2.2 MIPI CSI-2(Mobile Industry Processor Interface)
- 串行差分接口,使用一对或多对 Lane(数据通道)
- 支持高速传输(可达 Gbps 级)
- 需要专用 MIPI 接口,硬件复杂
✅ 优点:高速、低功耗、引脚少
❌ 缺点:需要支持 MIPI 的 SoC(如 K230 支持)
📌 典型应用:手机摄像头、嵌入式 AI 视觉模组
2.3 USB 接口(UVC 摄像头)
- 使用标准 USB 接口传输视频流
- 遵循 UVC(USB Video Class)协议
- 即插即用,无需专用图像接口
✅ 优点:兼容性好,支持高分辨率
❌ 缺点:依赖 USB 协议栈,资源占用高
📌 典型设备:USB 摄像头(如 Logitech C270)
3. 图像传感器关键参数
参数 | 说明 | 示例 |
---|---|---|
分辨率 | 图像大小(宽 × 高) | 320×240、640×480、1920×1080 |
像素格式 | 原始数据格式 | RGB565、YUV、JPEG、Bayer RAW |
帧率(FPS) | 每秒传输帧数 | 15fps、30fps、60fps |
感光元件尺寸 | 传感器物理尺寸 | 1/4"、1/3"、1/2.7" |
像素大小 | 单个像素尺寸(μm) | 2.8μm、3.75μm |
自动功能 | 自动曝光(AE)、自动白平衡(AWB)等 | 可软件控制 |
📌 常见传感器对比:
传感器 | 分辨率 | 接口 | 像素格式 | 特点 |
---|---|---|---|---|
OV2640 | 1600×1200 | DVP | JPEG/YUV/RGB | 支持 JPEG 编码,适合嵌入式 |
OV7670 | 640×480 | DVP | RGB/YUV/Bayer | 经典入门级 |
GC0308 | 640×480 | DVP | YUV | 低成本黑白/彩色 |
IMX219 | 1920×1080 | MIPI | RAW/Bayer | 高清,树莓派摄像头 |
AR0135 | 1280×964 | MIPI/DVP | RAW | 工业级,低光性能好 |
4. K230 摄像头支持能力
4.1 硬件接口
K230 SoC 内置 DVP + MIPI 双接口,可直接连接摄像头模组:
- DVP 接口:支持 8~10 位数据宽,最高 PCLK 可达 100MHz
- MIPI 接口:支持 1~2 Lane,可接高清摄像头
✅ 开发板说明:
多数 K230 开发板(如 CanMV-K230)提供 DVP 接口连接座,兼容 OV2640 等模组。
4.2 图像处理单元(ISP)
K230 集成 硬件 ISP(Image Signal Processor),支持:
- 自动曝光(AE)
- 自动白平衡(AWB)
- 伽马校正
- 噪声抑制
- 图像缩放与裁剪
💡 优势:减轻 CPU 负担,提升图像质量。
5. 摄像头通信协议:I2C 配置 + DVP 数据流
摄像头通常采用 双总线架构:
5.1 I2C 总线:配置传感器寄存器
- 地址:通常为
0x60
(OV2640)或0x21
(OV7670) - 功能:设置分辨率、帧率、亮度、对比度、图像格式等
- 使用标准 I2C 接口配置
# 示例:通过 I2C 配置摄像头(内部自动完成)
import sensor
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
5.2 DVP 总线:传输图像数据
- 并行数据线(D0~D7)
- 同步信号:PCLK、VSYNC、HSYNC
- 数据由摄像头主动输出,K230 使用 FIFO 或 DMA 接收
📌 K230 内部结构:
摄像头 → DVP → FIFO 缓冲 → 图像内存(DDR)→ 应用处理
6. MicroPython 中的摄像头支持(CanMV 风格)
K230 上的 MicroPython 移植(如 CanMV 固件)通常提供 sensor
模块:
import sensor
import image
import time
6.1 sensor
模块核心函数
函数 | 说明 |
---|---|
sensor.reset() | 复位摄像头 |
sensor.set_pixformat(fmt) | 设置像素格式(如 sensor.RGB565 ) |
sensor.set_framesize(size) | 设置分辨率(如 sensor.QVGA ) |
sensor.skip_frames(n) | 跳过前 n 帧(等待稳定) |
sensor.snapshot() | 拍摄一帧图像,返回 image 对象 |
sensor.set_contrast() | 设置对比度 |
sensor.set_brightness() | 设置亮度 |
sensor.set_auto_gain() | 自动增益控制 |
sensor.set_auto_whitebal() | 自动白平衡 |
6.2 常见帧尺寸定义
名称 | 分辨率 | 说明 |
---|---|---|
sensor.QQCIF | 88×72 | 超小 |
sensor.QQVGA | 80×60 | 低分辨率 |
sensor.QCIF | 176×144 | |
sensor.QVGA | 320×240 | 推荐用于 AI 推理 |
sensor.VGA | 640×480 | 高清 |
sensor.SVGA | 800×600 | |
sensor.XGA | 1024×768 | |
sensor.HD | 1280×720 |
7. 实战:摄像头初始化与图像捕获
📌 注意:
sensor.snapshot()
返回的是内存中的图像对象,不自动显示。要显示需配合 LCD 屏或通过串口/网络传输。
8. 图像格式详解
8.1 RGB565
- 每像素 16 位:R(5) + G(6) + B(5)
- 常用于 TFT 显示和图像处理
- 内存占用:320×240×2 = 150KB
8.2 YUV
- 亮度 + 色度分离,适合视频压缩
- 常见 YUV422、YUV420
8.3 JPEG
- 摄像头内部压缩,大幅降低数据量
- 适合存储和传输
- K230 支持硬件 JPEG 解码
9. 常见问题与调试
❌ 问题1:sensor.reset()
失败
排查:
- 摄像头是否正确插入 DVP 接口?
- 电源是否正常(摄像头通常需 3.3V)
- 是否使用支持的传感器(如 OV2640)
❌ 问题2:图像花屏或颜色异常
解决:
- 检查 DVP 数据线是否接触良好
- 降低 PCLK 频率(修改驱动或使用低分辨率)
- 检查时序配置
❌ 问题3:帧率过低
优化:
- 使用更小分辨率(如 QQVGA)
- 使用 JPEG 格式减少数据量
- 减少图像处理操作
10. K230 摄像头开发建议
✅ 推荐流程:
- 使用 DVP 接口连接 OV2640 模组
- 用
sensor
模块初始化 - 设置
QVGA
+RGB565
或JPEG
- 配合 KPU 进行 AI 推理(如人脸识别)
- 结合 LCD 或 UART/网络输出结果
✅ 典型应用:
- 智能门禁(人脸/二维码识别)
- 工业缺陷检测
- 智能农业(植物生长监测)
- 教育实验(图像处理、机器学习)