神眼MT9V034摄像头的原理及采集图像过程

几种摄像头对比

在这里插入图片描述

神眼摄像头介绍

MT9V032/034是安森美半导体出品的全局快门CIS,拥有卓越的画质和低照度的表现。龙邱神眼摄像头采用MT9V034芯片,该芯片具有全局快门,高动态成像,红外透视等优点,MT9V034芯片最高分辨率为 752(H) x 480(V),以每秒60帧(fps)的形式输出。在实际使用过程中,可以降低分辨率以获得更高的帧率。是一款功能齐全,性能强劲的摄像头模块。
MT9V034 芯片有两组寄存器组,可以设置两种不同的分辨率,帧率,高动态范围等参数,两种不同的模式可以自由切换,以满足同一应用场景下,对不同需求的情形。
摄像头输出分辨率设置为640480,VGA显示分辨率也为640480:


在这里插入图片描述

特点:
①T9V034有DVP、LVDS两种接口,用于不同的应用场合。
②MT9V034支持单目和双目两大类模式,适用于不同的应用
③MT9V034有两个寄存器组(Context A/B),支持即时切换控制参数
④MT9V034为了支持不同的工作模式,有复杂的时序生成选项
⑤嵌入式应用中,我们只使用单目、DVP接口,寄存器组只使用Context A。

2、MT9V034摄像头接口介绍

MT9V034摄像头有DVP、LVDS两种接口, 其中LVDS是低电压差分信号,为了兼容具有LVDS 接口的单片机, K60, K66, KV58 均无该接口,MT9V034这里我购买的龙邱的神眼摄像头,具体参考下图所示:


在这里插入图片描述

3、MT9V034的读写时序

MT9V034的寄存器宽度都是16bit,如果程序或者硬件只支持8bit时序,需要采用特 殊的读写方法。它的特殊寄存器就是0xF0,用于存放使用8bit时序读写芯片时,数据的低8位。也就是写16位数据时,高八位写入目标地址寄存器,低八位写入0xF0;当16位数据被写完毕后,同时更新到目标地址,仅仅写8位数据则不更新。

3.1、写模式

比如向复位寄存器(0x0C)写入(0x0001)完成复位:
①先向从机地址(0x5C)发起写入,向(0x0C)写(0x0001)的高8位,即 (0x0001>>8)=(0x00),
②再向从机地址(0x5C)发起写入,向(0xF0)写(0x0001)的低8位,即 (0x0001&0xFF)=(0x01),完成写入。
即:(0x5C<<1|0)-> (0x0C)->(0x00), (0x5C<<1|0)-> (0xF0)->(0x01)


在这里插入图片描述

3.2、读模式

比如读取芯片版本寄存器(0x00)的数据:
①先向从机地址(0x5C)发起读取,读(0x00)中的8bit数据1,作为(0x00)的[15:8];
②再向从机地址(0x5C)发起读取,读(0xF0)中的8bit数据2,作为(0x00)的[7:0]
③最后将数据1和数据2合成,得到(0x0)的全16位数据[15:0],完成读取。
即:(0x5C<<1|0)-> (0x00)-> (0x5C<<1|1)-> (数据1), (0x5C<<1|0)-> (0xF0)->(0x5C<<1|1) )-> (数据2)


在这里插入图片描述

4、MT9V034 芯片部分寄存器说明

在这里插入图片描述
必须了解的几个寄存器具体功能介绍:


在这里插入图片描述

5、神眼摄像头图像采集过程

K60、K66、KV58 单片机是通过行、场中断、DMA采集图像的,
当摄像头开始发送一帧新图像时,摄像头的FRM管脚会产生一个上升沿,将单片机和摄像头 FRM管脚连接的 IO口配置为外部中断模式,中断发生时,单片机就知道了有一帧新图像要来了。
摄像头发送一帧图像是按行发送的,例如神眼 120*188 分辨率的图像,摄像头会把图像分为 120 次,每次188个像素点通过8位数据并口发送出去,每当摄像头开始发送一行图像时,摄像头的 LINE管脚就会产生一个上升沿,将单片机和摄像头 LINE管脚连接的 IO 口配置为外部中断模式,中断发生时,单片机就知道了有一行新图像要来了,并且在中断里面开启 DMA 传输,传输到来的188个像素点。
那 PIX 有什么用呢?DMA传输开启后,要传输188个像素点, 摄像头和单片机之间总要做好同步吧,规定什么时候传输一个数据,PIX就是做这个的,每当单片机和 PIX 相连 接的 IO 口检测到一个上升沿,DMA就传输一次,直到188次传输结束。

龙邱神眼摄像头转接板上的与非门电路有何作用?下图是没使用与非门电路获取的图像:
在这里插入图片描述
经测试神眼的图像有锯齿,每行之间可能会偏差一个像素点。通过分析发现行中断开始后,PIX 经过了3-5个上升沿后才开始进行DMA传输,这就导致了图像会整体向右偏移几个像素点,图像最右侧存在一条黑线,并且由于每行缺少像素点个数不固定(有时候三个,有时候四个)导致图像行与行之间看起来有锯齿。所以龙邱通过添加了与非门器件,消除了消隐行(行与行之间无效的 PIX 信号),无需使用行中断来使能 DMA 传输,在场中断之间使能一次 DMA 传输即可。这样就避免了因为行中断而丢失像素点的问题,使图像更加清晰,并且更加节省单片机资源。
在这里插入图片描述
转接头加入与非门电路之后,用新的例程测试,发现原本锯齿和黑边的问题都解决了,图像质量也明显好了不少。

### 关于独轮车与龙邱的相关例程 在开源平台上,如 GitHub 和 Gitee,可以找到许多关于机器人控制以及计算机视觉的应用实例。对于独轮车和龙邱这样的特定项目组合,通常涉及以下几个方面的技术: #### 1. **独轮车运动控制** 独轮车的平衡控制一般基于 PID 控制器来实现稳定运行。以下是一个简单的 PID 控制算法示例[^1]: ```python class PIDController: def __init__(self, kp=0.5, ki=0.1, kd=0.2): self.kp = kp self.ki = ki self.kd = kd self.prev_error = 0 self.integral = 0 def update(self, error, dt): self.integral += error * dt derivative = (error - self.prev_error) / dt output = self.kp * error + self.ki * self.integral + self.kd * derivative self.prev_error = error return output ``` 此代码片段展示了如何通过调整比例系数 \(K_p\)、积分系数 \(K_i\) 和微分系数 \(K_d\) 来优化独轮车的姿态稳定性。 #### 2. **龙邱图像处理** “龙邱”可能指代一种嵌入式摄像头模块或者其配套软件框架,用于目标检测或环境感知。OpenCV 是常用的图像处理库之一,在此类应用中扮演重要角色。下面是一段利用 OpenCV 进行基本轮廓检测的代码[^2]: ```python import cv2 import numpy as np def detect_contours(image_path): image = cv2.imread(image_path) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) for contour in contours: area = cv2.contourArea(contour) if area > 100: # Filter small noise cv2.drawContours(image, [contour], -1, (0, 255, 0), 2) cv2.imshow('Contours', image) cv2.waitKey(0) cv2.destroyAllWindows() detect_contours('example.jpg') ``` 这段代码实现了从图片中提取物体边缘并绘制边界框的功能。 #### 3. **综合集成方案** 为了将两者结合起来形成完整的解决方案,需要设计一个主循环程序负责协调硬件驱动(例如电机控制器)、传感器数据采集(加速度计/陀螺仪),以及视觉系统的实时反馈。这种架构可以通过 ROS(Robot Operating System)简化开发流程[^3]。 --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值