Camera摄像头特定应用杂谈

Camera摄像头特定应用杂谈
参考文献链接
https://mp.weixin.qq.com/s/l9op9-DMydDWmfs9uSsurQ
https://mp.weixin.qq.com/s/LqGKaDuq0x-OauRWGbeSmg
https://www.jianshu.com/p/6d99bafd9a94
https://mp.weixin.qq.com/s/7WKJajmWWpbzj5F98UuRyg
液体镜头
液体镜头是使用一种或多种液体制作而成的,通过控制液面形状改变光学参数的透镜。
液体透镜主要有两种类型:反射式和透射式。
反射式液体透镜是一个焦距可变的镜面。当装有液体(一般是水银)的容器旋转的时候,离心力的作用将使液体表面形成一个正好符合望远镜要求的理想凹面。反射式的液体透镜只须改变旋转速度,就能使液面的形状改变成需要的形状,这可以大大降低制造大型天文望远镜的加工难度和成本。
透射式液体透镜按照液体变焦驱动机制的不同,液体变焦镜头分为物性控制式和机械驱动式,如图1所示。其中,物性控制式变焦镜头包括基于液晶材料、电化学活化、介电泳技术和电润湿技术的液体变焦透镜。机械驱动式变焦镜头包括基于静电力驱动、电磁力驱动、压力调节和环境响应液体变焦透镜。
在这里插入图片描述

图1:液体变焦透镜的分类 (1) 机械驱动式液体可变焦透镜机械驱动式可变焦透镜采用机械驱动的方式,通过调节透镜腔体压力或改变外界环境使液体介质的曲率或折射率发生改变,从而实现变焦。
(a) 基于静电力驱动的变焦液体透镜静电力驱动情况下,通电电极由于电场作用产生相互作用力,施加于镜头填充液。一种由平面电极静电驱动的液体变焦镜头,结构如图2所示。
在这里插入图片描述

图2:基于静电力吸引的液体变焦透镜 图2中,(a)为透镜的截面结构,(b)为无电压状态,©为有电压状态。镜头装置通过弹性聚合物薄膜将高介电常数液体封装在薄玻璃片上的腔体中。同时,分别在薄膜下表面和薄玻璃片上表面沉积环形金属电极构成平行板静电致动器。当施加电压时,平行板电极由于静电吸引相互靠近,腔内液体被挤向透镜中心,改变了薄膜的曲率。该透镜结构紧凑(小于6mm×6mm×0.7mm)、驱动电压低(小于25V),可以利用MEMS制造工艺批量化生产。
(b) 基于电磁力驱动的变焦液体透镜利用电磁场与磁性材料、带电导体和铁磁流体的相互作用产生电磁力,直接或间接地作用于透镜腔体内部填充液体。
在这里插入图片描述

图3:基于电磁铁系统的液体变焦透镜 图3为基于电磁铁系统的液体变焦镜头,利用透镜下方的电磁系统驱动弹性薄膜上的环形钕磁铁,控制透镜室内的液体弹性薄膜凸起或凹陷,使填充液体在透镜腔和驱动腔之间流动。该透镜结构简单,焦距变化范围较大,但是由于电磁系统的引入,增大了镜头体积。
在这里插入图片描述

图4:基于PDMS弹性薄膜与电磁微致动器集成的液体变焦透镜 如图4所示,由聚二甲基硅氧烷(PDMS)弹性薄膜与电磁微致动器集成的液体镜头,在电场和磁场的共同作用下,附着在薄膜上的带状金属电极在洛伦兹力驱动下将引起薄膜均匀变形,并通过液体介质传递到透镜腔体。该类镜头具有驱动电压低,成像像差小等特点,但是在施加的大电流作用下电极产生的热量会加速液体介质的蒸发,影响镜头成像性能的稳定性。
在这里插入图片描述

图5:基于铁磁流体的液体变焦透镜如图5所示,一种由铁磁流体驱动的液体变焦镜头,该设计采用铁磁流体作为活塞,通过电磁铁吸引控制透镜腔内液体的压力,从而改变透镜的曲率和焦距,具有成像质量高、响应速度快和重力效应小等优势,但是需要用聚四氟乙烯等低摩擦系数液体对铁磁流体进行包覆,防止其粘附于流道内壁,且较难集成。 (c) 基于压力调节的变焦液体透镜压力调节式液体变焦镜头通过在镜头液体腔内充液、挤压或改变孔径等方式调节腔室压力,使透镜薄膜曲率或者介质材料折射率发生变化。
在这里插入图片描述

图6:基于液压控制的液体变焦透镜 如图6所示,该设计通过注入或抽取液体,改变装置进出口压力差值,实现双凹和双凸透镜的转换。镜头装置具有结构简单、调焦范围大等优点,但是需要液压泵或者注射器等为其提供驱动力。
在这里插入图片描述

图7:基于液压控制的液体变焦透镜 如图7所示,以形状记忆合金弹簧为执行机构,设计的大光圈液体变焦透镜,其利用形状记忆合金弹簧控制压缩环的变形,通过调节镜头孔径实现变焦。该镜头进光孔径达到34mm,适用于大光圈成像、小巧轻便的成像设备,但是镜头响应速度受执行机构的限制。 (d) 基于环境响应的变焦液体透镜环境响应式液体变焦镜头利用液体介质对温度和振动等外部环境参数变化的响应,通过改变曲率或折射率调节焦距。
在这里插入图片描述

图8:基于激光诱导的液体变焦透镜 如图8所示,用激光束加热,使液滴从中心到边缘进行热毛细流动,从而改变液滴表面的局部曲率。通过调整激光束的功率,液滴可以作为聚焦透镜或发散透镜。该类透镜具有制造成本低、加工简单等优点,但是液体受热后蒸发速度加快,影响成像的稳定性。
在这里插入图片描述

图9:基于超声压电激励的液体变焦透镜 如图9所示,其为一种液晶与超声结合的变焦透镜,该透镜使用超声振动技术控制液晶分子的方向,镜头利用谐振频率下的连续正弦电信号激励锆钛酸铅压电陶瓷(PT)换能器产生超声振动,用以控制液晶层的分子方向,结构简单,利于集成设备的小型化。 (2) 物性控制式液体可变焦透镜物性控制式液体变焦镜头依靠镜头内填充介质材料本身的物理性质变化实现焦距调节。通过对电压驱动规律的探究,实现了介质材料的分子取向、表面张力、接触角和润湿性等参数的操控。 (a) 基于液晶材料的变焦液体透镜大约在40年前,研究人员发现可以利用静电场控制平面型液晶微透镜实现变焦功能。研究成果表明,在不施加外部电场时,液晶分子按照一定角度排列,如图10(a)所示。在环形电场作用下,液晶分子取向会趋于电场方向倾斜,并且,随着电场强度的增大,倾斜角变大。在图10(b)中,由于电场强度从中心向边缘增强,因此中心的液晶分子倾斜角度较小。
在这里插入图片描述

图10:基于液晶材料的液体变焦透镜 一种基于预倾角梯度对准的液晶透镜制备方法,通过摩擦和紫外线照射获得理想的液晶分子预倾角分布。当电场强度为零时,液晶分子非均匀分布,并在初始状态下形成具有最小焦距值的双折射透镜。当电场作用时,液晶分子沿电场方向垂直均匀分布,能够得到无穷大的焦距值。使用直径为2mm的液晶透镜,在0~10V的电压驱动下,焦距从47cm变化到700cm。该类镜头驱动电压较低,但受到电场强度和均匀性的限制,难以实现近焦成像,并且容易造成图像的光学失真。 (b) 基于电化学活化的变焦液体透镜电化学活化作用能够使水溶性分子在表面非活性态和表面活性态之间转化,实现对溶液中表面活性物质浓度的调控。同时,水溶性分子浓度的变化会导致液体表面张力改变,使液体介质产生变形。
在这里插入图片描述

图11:基于电化学活性的液体变焦透镜 如图11所示,其为一种毛细管微透镜,由两个毛细管表面组成,用过量的自由表面液体填充毛细管孔,表面活性剂在电压作用下会发生氧化还原反应,使一个毛细管表面相对于另一表面的表面张力发生变化。毛细管内液体曲率的改变将引起焦距的变化,而且这一过程是可逆的。实验中,获得透镜的最小焦距值为0.5mm,主要取决于液体的体积。该类镜头的焦距调节响应时间较长,且变化规律难以定量分析。 (c) 基于介电泳技术的变焦液体透镜介电泳效应指在非均匀电场的作用下,由于介质颗粒极化程度不同,导致正负电荷受力不均产生侧向位移。
在这里插入图片描述

图12:基于介电泳技术的液体变焦透镜 如图12所示,一种基于柔性衬底的介电泳力作用液体变焦镜头,该介电液体透镜包含硅油和多元醇两种密度相等的不导电液体。在柔性基底上表面沉积一层特氟龙( Teflon)薄膜,利用其润湿性对硅油滴的空间位置进行限制,减小运动产生的摩擦力。同时,在环氧SU-8树脂下表面布置一对环形同心电极,以产生非均匀电场。当施加电压时,由于多元醇的介电常数比被包围的硅油液滴的介电常数大,电场作用产生的介电泳力使液体向内挤压变形,从而增大硅油液滴与基底的接触角。当驱动电压达125Vrms时,镜头焦距从14.2mm变化到6.3mm。该类透镜通常需要设计加工复杂的电极结构,而且驱动电压较高,调焦范围相对较小。 (d) 基于电润湿技术的变焦液体透镜介质上电润湿技术(EWOD)是目前运用广泛的制造液体镜头的技术之一。
在这里插入图片描述

图13:电润湿原理及实验 该技术通过在液体和电极之间施加电压,改变液滴及其接触面的润湿性,使得液滴和介质表面接触角发生变化,其原理如图13(a)所示。液滴的接触角变化与施加的电压U之间的关系,可由 Young-Lippmann方程表示。根据该方程可知,液滴与介质间接触角余弦值cosθ的改变不仅与电压值变化有关,也受介电层厚度d和介电常数ε变化的影响。图13(b)所示为加压前后液滴接触角变化情况。可见,当施加电压时,液滴变形导致接触角减小。
在这里插入图片描述

图14:可调电润湿液体透镜及实验如图14所示,其为一种基于环形光圈和中心光圈调焦模式的光学微透镜,结构如图14(a)所示。该装置利用偏振片和液晶材料控制着不同偏振方向入射光线的通断。图14(b)和14©分别显示了初始状态和液晶材料施加电压状态下,入射光线在透镜内的路径。处于环形光圈模式时,由于反射片的作用,将入射光功率增大3倍,以增强镜头的成像亮度;处于中心光圈模式时,由于边缘光线被阻挡,从而降低了像差,扩大了景深,提高了镜头的光学成像质量。不同模式下的透镜焦距与电压关系如图13(d)所示。当驱动电压从20V变化到70V时,中心光圈模式透镜的调焦范围为(-∞,-66.7mm)∪(+32.4mm,+∞)。而环形光圈模式透镜只能聚焦,调焦范围为(+18.4mm,+∞)。相比于传统的电润湿镜头,这类液体镜头能够在高分辨率、大光功率的环形孔径模式和大景深、小像差的环形孔径模式之间切换,但是由于有效孔径的减小和偏振片的作用,透镜的光学效率降低,并且驱动电压仍然较高。
OpenCV相机标定与畸变校正(附代码)
详细介绍了相机标定的定义、原理和程序实现步骤,并提供制作标定板、相机标定和校正畸变图像的代码。
01 相机标定定义与原理
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。相机标定常见的分为:
• 单目相机标定
• 双目相机标定
相机标定是想从二维的图像中获取三维信息,实现图像的畸变校正、对象测量、三维重建等。由于光线投射导致实际对象物体跟投影到2D平面的图像不一致,幸运的是这种不一致性是稳定的,我们可以通过对相机标定,计算出畸变参数来实现对后续图像的畸变校正。根据标定技术不一样可以分为下面几类标定方法:
• 基于3D对象参照标定
• 基于2D平面标定
• 基于1D线性标定
• 自标定
最常见的相机成像方式是基于pinhole的模型、它的成像模型可以图示如下: 通过标定算法同时求出相机内参与外参。最常用的算法是张正友标定算法。OpenCV/Matlab中均已经实现该算法。
在这里插入图片描述
在这里插入图片描述
02 标定板介绍与制作
要想实现对相机的标定,我们首先需要给相机找到个参考对象,常见的就是标定版的类型有如下几种
• Chessboard
• Circel-grid
• RandPattern
• ArUco
• ChArUc
在这里插入图片描述
在这里插入图片描述
OpenCV源码在其sample/data目录下面一个自带的棋盘图(chessboard.png),显示如下: 在标定的时候,算法要求提供的棋盘格的宽度与高度,还有他们的间隔距离。需要特别注意是这里的宽高是指他们的内部交叉点的个数,以上图为例,它的大小为7x7而不是8x8。间隔是指棋盘格之间的距离,可以用像素距离表示,也可以用实际毫米为单位表示。03 制作标定版与图像生成
在这里插入图片描述
最简单的办法就是把上述图像直接打印出来,贴到一个塑料底板上就好啦。如果是土豪可以直接购买各种玻璃底板的标定板。另外还有一个更恶搞的方法,连打印都省啦,直接把chessboard.png这张图在另外一台电脑的显示器上显示,然后把摄像头对着它各种牌即可完成图像数据采集。这个是我手写的采集程序代码,每次想保存图像的时候请安Q字母键即可,代码如下:
void create_images() {
Mat frame;
VideoCapture capture(0);
int index = 1;
while (true) {
bool ret = capture.read(frame);
flip(frame, frame, 1);
if (!ret) break;
imshow(“frame”, frame);
char c = waitKey(50);
printf("%d ", c);
if (c == 113) { // Q
imwrite(format(“D:/images/zsxq/%d.png”, index), frame);
index += 1;
}
if (c == 27) {
break; // ESC
}
}
capture.release();
}

记得拿着棋盘格图,在镜头面前各种摆POSE,这个是属于你的表演时间,不要客气!具体参考下图:
在这里插入图片描述
在这里插入图片描述
04 相机标定程序实现
大家好,现在我们开始程序实现环节,OpenCV中在camera模块中已经实现了张正友标定算法。我们只需要正确调用,就可以计算出相机的内参与外参,完成相机的标定。具体的代码实现步骤如下:

  1. 定义相机标定的相关常量设置与变量
    // load image files
    vector files;
    glob(“D:/images/camera2d”, files);

// 定义变量
vector<vector> imagePoints;
vector<vector> objectPoints;
TermCriteria criteria = TermCriteria(TermCriteria::EPS + TermCriteria::MAX_ITER, 30, 0.001);
int numCornersHor = 7;
int numCornersVer = 7;
int numSquares = 50;
vector obj;
for (int i = 0; i < numCornersHor; i++)
for (int j = 0; j < numCornersVer; j++)
obj.push_back(Point3f((float)j * numSquares, (float)i * numSquares, 0));
在这里插入图片描述

  1. 发现与绘制棋盘格位置
    // 发现棋盘格与绘制
    Size s;
    for (int i = 0; i < files.size(); i++) {
    printf("image file : %s
    ", files[i].c_str());
    Mat image = imread(files[i]);
    s = image.size();
    Mat gray;
    cvtColor(image, gray, COLOR_BGR2GRAY);
    vector corners;
    bool ret = findChessboardCorners(gray, Size(7, 7), corners, CALIB_CB_ADAPTIVE_THRESH | CALIB_CB_FILTER_QUADS);
    if (ret) {
    cornerSubPix(gray, corners, Size(11, 11), Size(-1, -1), criteria);
    drawChessboardCorners(image, Size(7, 7), corners, ret);
    imagePoints.push_back(corners);
    objectPoints.push_back(obj);
    imshow(“calibration-demo”, image);
    waitKey(500);
    }
    }
    在这里插入图片描述

  2. 发现棋盘格显示如下(我是直接打印OpenCV自带那张图的)

  3. 相机校正-计算内参数
    // 相机校正Mat intrinsic = Mat(3, 3, CV_32FC1);Mat distCoeffs;vector rvecs;vector tvecs;intrinsic.ptr(0)[0] = 1;intrinsic.ptr(1)[1] = 1;calibrateCamera(objectPoints, imagePoints, s, intrinsic, distCoeffs, rvecs, tvecs);
    05 畸变图像校正
    关于畸变类型,常见的图像畸变类型有径向与切向畸变、OpenCV中的相机标定方法只能对径向畸变有效,使用内参对畸变图像实现校正。相关的代码如下:
    // 畸变校正
    for (int i = 0; i < files.size(); i++) {
    Mat dst;
    Mat image = imread(files[i]);
    undistort(image, dst, intrinsic, distCoeffs);
    imshow(“image”, image);
    imshow(“undistort image”, dst);
    waitKey(1000);
    }

sensor曝光基本原理
sensor曝光分为逐行曝光和全局曝光。逐行曝光的sensor 技术难度较全局曝光sensor 低,价格便宜,且分辨率较大,对于一些静态图像拍摄是不错的选择。
先看看,什么是帧?
简单来说,一帧就是一副图像。显示器上面我们看到的画面就是一帧一帧的显示的。只不过显示的速度足够快,人眼以为画面是运动的。
(说个现实中的例子,我们看武打片经常看到慢动作或者快动作,它们都是怎么实现的呢?简单来说就是,比如导演拍摄的时候以一秒30帧来拍摄的,播放给观众看的时候,如果以一秒15帧的速度播放,观众看起来就是快放;如果以每秒60帧的速度播放,观众看起来就是慢放。)
具体地,在将光信号转换为电信号的扫描过程中,扫描总是从图像的左上角开始,水平向前行进,同时扫描点也以较慢的速率向下移动。当扫描点到达图像右侧边缘时,扫描点快速返回左侧,重新开始在第1行的起点下面进行第2行扫描,行与行之间的返回过程称为水平消隐(也叫行消隐,H_BLANK)。一幅完整的图像扫描信号,是由水平消隐间隔分开的行信号序列构成,称为一帧。
如下图所示,是一帧的结构图,在最下面部分有一部分是V_BLANK。V_BLANK的由来是因为扫描点扫描完一帧后,要从图像的右下角返回到图像的左上角,开始新一帧的扫描,会有一段间隔时间,这一时间间隔,叫做垂直消隐(也称场消隐,V_BLANK),V_BLANK的作用通常用来调节帧率。
在这里插入图片描述

帧结构示意图
sensor逐行曝光基本原理
sensor逐行曝光从第一行开始曝光,一个行周期结束之后第二行才开始曝光。依次类推,经过N-1 行后第N 行开始曝光。第一行曝光结束后开始读出数据,读出一行需要一行周期时间(含行消隐时间,即H_Blank)。至第一行完全读出后,第二行刚好开始读出,依次类推,当第N-1 行读完后,第N 行开始读出,直到整幅图像完全读出。
在这里插入图片描述

sensor逐行曝光过程
sensor全局曝光基本原理
全局曝光Sensor的所有行同时开始曝光,并同时结束曝光,在曝光结束后,Sensor将所有电子从感光区转到存储区,之后逐行地读出像素数据。 这样曝光的好处是获得图像每一行的曝光时间比较一致,并且在拍摄运动物体时图像不会出现偏移和歪斜。
在这里插入图片描述

sensor全局曝光过程
与sensor曝光相关的计算

  1. line_time的计算:
    line_time的计算公式:line_time = line_length / pclk
    和这个公式相关的是下面三个变量的定义先说下
    a). line_length: 一行的长度(包含h_blank, h_blank变化,line_time也会变化,帧率也会变化)
    b). pclk: 是控制像素输出的时钟,即pixel采样时钟,一个clk采集一个像素点 , 单位MHz。表示是每个单位时间内(每秒)采样的pixel数量
    c). line_time: 曝光一行的时间
    所以,曝光一行的时间等于一行的长度除以曝光一个像素需要的时间。
    如果你不能理解,简单类比一下我们小学学过的距离计算公式:路程 = 速度 × 时间。要计算小明跑完400米操场花了多长时间,是不是可以拿小明跑步的路程400米除以小明每秒钟跑步的距离来计算。那么,把跑道换成一个个排列起来的像素不也是一样的吗?linetime就相当于上面要计算的小明跑完400米要花的时间,line_length就相当于400米的路程,pclk就相当于跑步的速度,每个单位时间小明能跑多远。
  2. exposure_time的计算:
    exposure_time的计算公式:exposure_time = exposure_line * line_time
    同样和这个公式有关的几个定义先说下:
    a). exposure_time: 曝光时间。指这一帧曝光了多长时间。
    b). exposure_line: 字面意思是曝光行。值得注意的是,曝光行不是指一次性曝光多少行,对于逐行曝光的sensor来说,永远都是一次曝光一行。所以,曝光行是指这一帧曝光了多少行。
    c): line_time: 曝光一行的时间
    所以,可以用line_time即曝光一行的时间,乘以曝光了的行数exposure_line,等于整个曝光花费的时间。
    注:
  1. 调节exposure_time曝光时间是通过写exposure_line寄存器实现的;
  2. 曝光时间以行长为单位
  3. 一般我们要求曝光时间是10ms的整数倍,不然会有flicker现象。原因是我国的交流电的频率是50Hz, 一个完整的正弦波周期的时间20ms, 正弦波的上下均一样,取一半,所以曝光时间要是10ms的整数倍
  1. fps帧率的计算:
    frame_length = Vsync = Dummy Line = VTotal = VTS = V_Size + V_Blank // 帧长; 不占用曝光时间,即可以通过调节V_Blank,调节帧长,从而改变帧率,但不会改变画面的亮度(曝光)
    line_length = Hsync = Dummy Pixel = HTotal = HTS = H_Size + H_Blank // 行长; 会占用曝光时间,即可以通过调节H_Blank, 调节行长
    fps的计算公式:fps = pclk / (VTS * HTS )= pclk / (frame_length * line_length) = 1 / (frame_length * line_time)
    注:fps即表示1秒内帧数,此公式中line_time单位是秒
    同样和这个公式有关的几个定义先说下:
    a). pclk: 是控制像素输出的时钟,即pixel采样时钟,单位MHz。表示是每个单位时间内采样的pixel数量
    b). frame_length: 一帧的行数(包含v_blank)
    c). line_length: 一行的长度(包含h_blank)
    这里frame_length * line_length的意思是用一帧的行数乘以一行的长度,即相乘得到一帧图像总共有多少像素。pclk是像素时钟,单位是MHz。如100MHz,就表示每秒钟可以采集100M个像数。用pclk除以frame_length * line_length两者之积,即是算1秒钟内采集的100M个像数点可以分成多少帧(frame_length * line_time = 一帧的时间)。
    注:
    1). line_time一组setting只有一个值,一般是不变的,可看做常数,所以调节帧率是通过写frame_length寄存器,即调节frame_length实现的。
    2). 同理,回到上一个知识点 2. exposure_time的计算:可以发现,exposure_time = exposure_line * line_time,而line_time一般是常数。所以,调节exposure_time曝光时间是通过写exposure_line寄存器实现的,即通过写曝光实现。
    4.其他相关(V_Blank、dummy_line、frame_offset)
    dummy_line:用来填充v_blank的行。
    frame_offset:最小的dummy_line,是指一帧曝光结束到下次准备好重新开始曝光的时间
  2. 几个公式
    frame_length = exposure_line + dummy_line
    frame_length ≥ exposure_line +frame_offset
    min_shutter<= shutter <= frame_length- frame_offset
    5.帧长的计算方式
    回顾上述几点,我们知道一帧的计算方式:
    1). frame_length(帧长) = exposure_line(曝光行) + dummy_line
    2). frame_offset是指最小的dummy_line。
    dummy_line = dummy_line > frame_offset? > dummy _line : frame_offset
    3). Max Exposure = VTS - frame_offset
  3. 索尼sony也有自己的计算方式,但是本质是一样的: (IMX307为例)
    1). VMAX(帧长,同VTS一个概念) = exposure_line(曝光行) + (SHS1 + 1)
    2). SHS1本意是表示Shutter释放的时机,以XVS信号为参照系,SHS1的值越大,说明Shutter释放得越晚,即dummy_line越大,曝光行越少. 该公式及说明记载于Datasheet p.77
    3). 结合第5点和第6点,我们可以知道。dummy_line = SHS1+1
    4). 对于IMX307这颗sensor来说,SHS1的范围为1~(VMAX-2),记载于Datasheet p.78的表格
    即dummy_line的范围为2 ~ (VMAX-1), 即frame_offset的值为2。
  4. 其他说明
    1). MIPI rate与PCLK无关
    2). MIPI rate只与有效像素点有关。
    比如,在4K(3840*2160) 60fps场景中,使用3Trio CPHY,可以使用的最小的mipi rate为:726Msps/trio
    公式: Mipi rate =每个trio每秒传输的数量量 = 每秒的有效数据量 / 每个trio的symbol / 3 trio 。
    每秒的有效数据量 = 3840 × 2160 × 60 × 10bit = 4976Mbit;
    每个symbol = 16 / 7 bit,即1 Sym = 16 / 7 bit;
    对于3 Trio的CPHY,每Trio每秒的传输速率 = 4976Mbit / (16 / 7) bit per sym / 3 trio / 秒 = 726M per sym / 秒 per Trio = 726Msps / Trio
    注:
    1). A MIPI C-PHY lane is known as a Trio.
    2). 16 / 7 的含义:C-PHY传输单位是symbol,16bit编码成7个symbol,所以1个symbol=16/7 bits.
    3). MIPI C-PHY在走3条lane传输的情况下,每条lane使用3线的传输模式,速率为2.5G symbol/s(V1.0),这样的模式可以实现每个symbol传输2.28个bits,可实现高达2.28×2.5×3=17.1G bps的带宽
    4). 实例:
    MIPI rate配置相关寄存器为:0x0312(分频)和 0x0310(倍频)
    当前配置:{0x0312, 0x0001}, {0x0310, 0x015E}
    注:写入0x0312寄存器的值是2的次方倍,这里是1,所以是2倍分频。
    主输入时钟(MCLK)为24MHz,分频后为12MHz,倍频后为12MHz × 0x15E = 4200MHz = 4200MHz,转换成mipi rate, 除以2 就是2100Msps
    在这里插入图片描述

参考文献链接
https://mp.weixin.qq.com/s/l9op9-DMydDWmfs9uSsurQ
https://mp.weixin.qq.com/s/LqGKaDuq0x-OauRWGbeSmg
https://www.jianshu.com/p/6d99bafd9a94
https://mp.weixin.qq.com/s/7WKJajmWWpbzj5F98UuRyg

猜你喜欢

转载自blog.csdn.net/wujianing_110117/article/details/125863864