【蜗牛黑板报】sensor曝光基本原理2

本节主题

  1. sensor的图像数据到底是什么样子的?
  2. 为什么V_Blank的长度只能增大不能减少?
  3. line_time(传输一行图像数据需要的时间)怎么更直观地看?
  4. 多个sensor之间的硬件帧同步怎么调?

sensor的图像数据到底是什么样子的

sensor图像数据的采集,分为:曝光和数据读出过程(readout阶段)。我们用示波器去测量数据波形的数据,一般采集到就是数据的读出过程的数据,即sensor的曝光过程无法体现。

图1, 帧数据.jpg

如上图,即为通过示波器测试sensor的一根mipi data线的图像。
其中,

  1. 场消隐的时间 = V_Blank * line_time
  2. 数据读出的时间 = V_Size * line_time = V_size × (line_length / pclk)= V_size × (HTS / pclk)= V_size ×((H_Size + H_Blank)/ pclk)
  3. 一帧的时间 = frame_length * line_time = VTS * line_time = (V_Size + V_Blank) * line_time.
举例:如sc132gs这颗sensor输出图像尺寸大小为480*640(Weight × Height),其中 line_time = 13888ns, 此时的frame_length = 9600, 帧率=100000000/9600/13888=7.5fps。
需要指出的是,V_Size = Height = 640,H_Size = Weight = 480。
1. 有效数据读出时间= V_Size * line_time = 640 * 13888ns = 8888320ns = 8888us = 8.8ms
2. 无效数据读出时间 = V_Blank * line_time = (9600 - 640) * 13888ns = 124436480ns = 124436us = 124ms (V_Blank只能大于8960,不会小于这个数,增大V_Blank可以降低帧率)
3. 帧率=1000ms/一帧图像的传输时间=fps = 1000ms /  (124ms + 8.8ms) = 1000ms / 133 ms = 7.5fps

为什么V_Blank的长度只能增大不能减少?

因为,sensor的setting中的帧率一般就是最大帧率了,也就是说在不更改setting的情况下,使用者只能降低帧率,不能增大帧率,即不会超过setting中给定的帧率。降低帧率的方法就是通过增大V_Blank

对于这颗7.5帧的sensor,他的曝光时间最长大约为133ms,此时他的dummy_line趋近于0。

因为,当曝光时间为133ms时,此时的曝光行exposure_line=133000000ns/13888ns=9576,
dummy_line = frame_length - exposure_line = 9600 - 9576 = 24,

注:对于帧率固定的sensor来说,
1. 它的frame_length值是固定的;
2. 它的V_Blank值是固定的, V_blanking = ((VTS – V_size) * line_time);
3. 增大曝光时间,即使增大到了极限(无限接近于frame_length),它的V_Blank也不会变;
4. dummy_line和V_Blank不是同一个东西;
5. 当exposure + dummy_line 的和 大于 frame_length时,此时V_Blank变大,增加的部分由dummy_line填充,同时帧率降低;当exposure + dummy_line的和 小于 frame_length时,此时V_Blank不变,生效的也依然是frame_length,则帧率不变。

line_time(传输一行图像数据需要的时间)怎么更直观地看?

  1. 一帧图像数据的时间在示波器上怎么看?


    图2, 两帧有效数据开始的时间差.jpg
图3, 两帧SOF开始的时间差.jpg

以上两个方法,都可以求出sensor一帧的时间为33ms左右,两者相差不远,一般来说以SOF的时间差计算帧间隔更准确点。

图4, line_time图.jpg

如图4,举例来说,高电平部分是一行数据的有效部分,低电平部分是H_Blank。一个高电平+一个低电平部分即为一个line_time。
注:
1). 对于高精度的示波器,可以直接把一个高电平+一个低电平作为就是这颗sensor的line_time;
2). 或者用如下方式:line_time = 一帧的时间 / frame_length (一帧的时间可以用两帧的SOF间隔计算,frame_length可以通过读寄存器的方式得到)

多个sensor之间的硬件帧同步怎么调?

图5, 三个sensor硬件帧同步.jpg

黄色的线是主sensor发送的FSYNC帧同步信号,红色和绿色的线是辐sensor收到FSYNC信号后开始出帧。以主sensor为基准,调节两个副sensor和主sensor的同步。(FSYNC是camera之间的通信和芯片没有关系,同时主摄和辐摄的FSYNC是连在一起的)
注:
1). 主sensor先出帧的,所以副sensor想追上主sensor同步起来,一般需要比master sensor的帧率快一丢丢;
2). 对于硬件帧同步,主和副即使帧率不同,只要是整数倍,也能同步上。如图5,两个slave sensor无非是每4帧和主摄同步一次(主摄30fps, 副摄7.5fps)。
3). 对于软件帧同步,主摄和辐摄的帧率相同的前提下,主摄和副摄的匹配最多有半帧的差距。比如以主图时间为主,肯定是夹在副图时间戳中间的,那么只有两种情况,主图和副图m或m+1帧匹配。无论哪种情况,最多差半帧时间。当n恰好在m和m+1中间时,就刚好差半帧,此时和谁匹配都行。
4). 一般地,主摄和副摄的时间硬件帧同步时间相差控制在200us以内。
5). 要在sensor stream on之前去设置帧同步寄存器。类似地,调节mirror或者flip也是在sensor stream on之前去设置,不可能出帧之后再设置mirror或者flip。
6). 调硬件帧同步,一般需要飞主副摄的mipi data线,以及同步信号线。
7). sensor 曝光之后才会去出流,对于出第一帧来说,要等1.5帧左右才会出来,这个1.5帧就是做曝光等动,所以第一帧会出的慢。但是,后面第二帧往后就依次循环起来了
8). 帧同步信号线和SoF信号线是两个不同的信号,帧同步信号和SoF信号可以认为是同时出来的,但是严格来说,帧同步信号要稍快于SoF信号!

打个比方:主sensor要出数据了,它会先发个帧同步信号出来,告诉副sensor:“我要出数据了,你们也收到信号后就开始出吧”!副sensor收到后,马上开始出数据,这时主副摄出帧就同步上了。

你可能感兴趣的:(【蜗牛黑板报】sensor曝光基本原理2)