空间光调制器编程技巧

电子说

1.3w人已加入

描述

随着技术发展,8bit (0-255)灰阶的空间光调制器产品会逐步被10bit(0-1023)阶产品代替,而传统8bit产品将被逐步淘汰,沦为二线产品。虽然很多用户思维习惯依然停留在8bit年代,同时现存程序代码也面临数据不兼容问题,但基于10bit位深的优势已经被众多课题组证明。因此,掌握10bit甚至更高位深的SLM编程技巧尤为必要。

位深

位深是指控制相位/振幅的最大精度范围,也是寻址函数的寻址步长,映射到电路器件的基本参数就是DAC精度。传统产品DAC芯片为8bit或10bit,新产品采用12bit或16bit甚至更高精度的DAC芯片。电寻址SLM的控制电压值V是个基本量,DAC芯片位深越大,V被细分的精度就越高,即步长精度为V/灰阶。例如,同样1个波长的相位调制量,如果灰阶256,则电压细分为V/256,调制步长为1/256个波长相位周期,如果灰阶1024,则V/1024,步长精细度提升了4倍,为1/1024个波长相位周期,这在高精度控制场景下,可以极大提高分辨精度。

对用户交互而言,位深对应到算法计算中的归一化取值范围。由于理论计算中采用浮点数,计算机的浮点数通常为32位或64位,在归一化时取整时,就需要考虑实际位深。8bit的产品,取整范围是按0-255,10bit产品,取整范围按0-1023。这个差别将带来数据格式的差异。

HDMI数据格式

空间光调制器产品大部分采用视频接口,比如HDMI或DVI,因此,其数据格式为视频图像格式。常见的RGB图像为24bit,按RGB三个通道,每个通道8bit;这种数据格式兼容所有主流图像数据处理芯片。因此,空间光调制器数据传输接口沿用了24bit的数据编码格式。如下图:

编程

针对8bit的空间光调制器,用户只需输入8bit的数据,利用HDMI中单个通道即可完成寻址交互。采用时序控制的空间光调制器,则RGB三通道时序变化,可以将24bit数据输入到空间光调制器,然后由驱动器按RGB时序控制LCoS芯片。

如果LCoS驱动电路采用10bit的工作模式,用户为了通过可视化图像的数据格式输出给驱动电路寻址数据,就必须在PC电脑和SLM控制器之间定义数据格式协议。由于硬件传输接口为HDMI,HDMI的数据格式中标准的RGB三通道数据流最为常见,且跟主流图像处理软件、算法等非常兼容,因此在10bit的LCoS驱动电路和用户数据之间需要基于HDMI协议约定一个数据格式。

编程

比如上图的334,就是将10bit的数据,按R通道存放3位、G通道存放三位,B通道存放4位的格式,低位补零,实现上位机编程模型。这个在编程时通过移位操作,可非常简便实现。当然,SLM生产厂家也可以定义为442,235…. 该格式由厂家在Firmware中定义,本身只是一个数据协议约定,HDSLM80R Plus选择了334的模式。

HDSLM80R Plus的编程技巧

理解了上述基本概念和背景,我们下面针对应用场景详细描述编程思路。

1、必须兼容8bit的控制场景

因为特定历史原因,部分用户会死死抱住8bit算法不松手,坚持只使用8bit的数据算法。那么,此时该如何向下兼容?

方法一,通过串口配置,将10bit的HDSLM改为8bit工作模式,此时,电路处理数据时,直接按8bit数据模式进行寻址。此时,相位精度也变为了256灰阶。该方法将硬件降为8bit,以兼容用户数据。

方法二,利用Matlab算法增加数据转码函数,将原有8bit(0-255)映射到调制深度的控制关系,修改为0-1023的映射关系。软件参考图如下,算法编码(Matlab -- SLM80R_8Turn10bit.m)

编程

数据对比:Tvortex  --  8bit转10bit  ; vortex  --  直接算出的10bit数据

编程

参考两组数据,Tvortex数据与vortex数据比较,Tvortex数据差为4,丢失部分细节。

编程

2、直接操控10bit数据场景

针对没有历史包袱的用户,则可以直接开始10bit的算法模式。

保存10bit图片软件参考图如下(Matlab -- SLM80R_10bit.m)

编程

以上希望帮助大家理解1024灰阶编程的差异点。

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分