一种基于FPGA的可编程LED阵列显微照明控制方法转让专利

申请号 : CN201711477252.3

文献号 : CN108200687B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 左超潘向鹏陈钱孙佳嵩冯世杰张玉珍顾国华李加基范瑶丁君义尹维顾莹

申请人 : 南京理工大学

摘要 :

本发明公开了一种基于FPGA的可编程LED阵列显微照明控制方法,首先基于FPGA的串口接收与译码电路设计,根据控制指令现场计算出用于可编程LED阵列显示的图形基本数据,进行圆域的确定、圆内亮度呈标准正态分布、颜色区域的划分,然后将数据分类存储于FPGA的片内双口RAM中,并根据可编程LED阵列的扫描位置读出存储于FPGA片内双口RAM中的显示数据,最后利用FPGA快速地并行驱动使用多行扫描,RGB三通道分开的可编程LED阵列,显示输出的数据。本发明节省了大量的外部存储设备,使用FPGA驱动可编程LED阵列,实现图形的显示与驱动电流的PWM调制。

权利要求 :

1.一种基于FPGA的可编程LED阵列显微照明控制方法,其特征在于步骤如下:步骤一,基于FPGA的串口接收与译码电路设计:FPGA接收上位机通过串口发送来的控制指令,并对其进行译码,将译码后的信息存储于专用的配置寄存器中;

步骤二,根据控制指令现场计算出用于可编程LED阵列显示的图形基本数据,并进行圆域的确定、圆内亮度呈标准正态分布以及颜色区域的划分;

步骤三,将步骤二中计算生成的数据分类,并存储于FPGA的片内双口RAM中;

步骤四,根据可编程LED阵列的扫描位置读出步骤三中存储于FPGA片内双口RAM中的显示数据,根据控制指令对读出的显示数据进行处理并输出到步骤五中;

步骤五,利用FPGA快速地并行驱动使用多行扫描,RGB三通道分开的可编程LED阵列,显示步骤四中输出的数据。

2.根据权利要求1所述的基于FPGA的可编程LED阵列显微照明控制方法,其特征在于步骤一中,串口信息为可编程LED阵列的控制指令,控制指令为可编程LED阵列上显示的图形模式,包括以下几种:(1)在可编程LED阵列上显示任意位置、任意半径、可选颜色的圆、半圆以及圆环;

(2)在可编程LED阵列上显示任意位置,任意半径的圆内亮度呈标准正态分布的圆;

(3)在可编程LED阵列上显示任意位置、任意半径、任意指定的至多24份颜色的24阶彩虹环;

(4)在可编程LED阵列上显示任意位置、任意半径的二段、四段圆环并且中心圆灰度可调的图形;

译码后所得的控制信息,作为后续步骤的工作配置参数寄存到专用的配置寄存器中。

3.根据权利要求1所述的基于FPGA的可编程LED阵列显微照明控制方法,其特征在于步骤二中圆域的确定过程如下:根据控制指令中的圆心与半径信息,利用直角坐标系下圆的方程:

(x-a)2+(y-b)2≤r2

其中(x,y)为可编程LED阵列上各点,(a,b)为圆心,r为半径;判断可编程LED阵列上各点位于圆内还是圆外;为了显示效果更好的圆与便于在FPGA内运算,将方程化为:(2i(x-a))2+(2i(y-b))2≤(2i(r+d))2

其中Δd为半径延长的部分,Δd=1/2k其中k=1,2,3……;i为一个扩大系数,满足:2i=2j/Δd,其中j=0,1,2,3……,利用FPGA的并行性,对于显示图形所需的内圆和外圆数据,同步并行地进行计算。

4.根据权利要求1所述的基于FPGA的可编程LED阵列显微照明控制方法,其特征在于步骤二中圆内亮度呈标准正态分布的计算过程如下:选取亮度的灰度为32阶,事先制作标准正态分布密度查找表,对于可编程LED阵列上每个LED像素灰度值的确定根据其距圆心的距离而定,所使用查找表为当圆内亮度呈标准正态分布的圆的半径为32个单位时,以距离圆心的距离为地址,每个地址存储的值为该距离对应的亮度灰度;使用时,有如下公式:addr=d×32÷r

d为可编程LED阵列上一点(x,y)距离圆心(a,b)的距离,r为半径,addr为距离d所对应的亮度灰度在标准正态分布密度查找表中的地址,公式中的d与addr均取整数。

5.根据权利要求1所述的基于FPGA的可编程LED阵列显微照明控制方法,其特征在于步骤二中颜色区域的划分过程为:将可编程LED阵列依据某一给定点(a,b)划分为24块区域,每块区域对应的张角为15°,事先计算得到15°、30°、45°、60°和75°的正切值分别为0.268、

0.577、1.0、1.732和3.732;对于可编程LED阵列上任意的一点(x,y),在x≥a并且y≥b的区域内判断|(x-a)|×0.268≥|y-b|,为真时,意为该点处于区域15°内,为假时,继续判断|(x-a)|×0.577≥|y-b|,为真时,意为该点处于区域15°到30°之间,为假时,再依次判断|(x-a)|×1.0≥|y-b|、|(x-a)|×1.732≥|y-b|、|(x-a)|×3.732≥|y-b|,一直判断到75°到90°区域时停止;

根据圆的对称性,在剩下的(x≥a,y≤b)、(x≤a,y≤b)和(x≤a,y≥b)区域内分别进行同样的判断,便可将可编程LED阵列划分为24块区域;

为了在FPGA内避免浮点数运算,同样使用移位来实现整数乘法

2p×(x-a)×0.268≥(y-b)2p

p为一个扩大系数,取整数,满足2p>1000;经过上述划分后,对应于可编程LED阵列上的每一点都位于24块区域内的某一块区域,并拥有该块区域的颜色,24块区域中的每块区域的颜色都可以进行配置;

在进行半圆或二段圆环的数据生成时,将24块区域按照相邻原则划分为两份,一份12块;每一份中的12块区域为同一种颜色;

在进行四段圆环的数据生成时,将24块区域按照相邻原则划分为四份,一份6块,每一份中的6块区域为同一种颜色。

6.根据权利要求1所述的基于FPGA的可编程LED阵列显微照明控制方法,其特征在于步骤三中,多个FPGA片内双口RAM分别存储步骤二中计算得到的数据,分别为:存储圆环外圆数据的A,存储圆环内圆数据的B,A和B内部存储的信息为1bit,1表示对应点处于圆内;0表示对应点处于圆外;

存储圆内亮度呈标准正态分布的灰度数据的C、存储区域划分中R通道灰度数据的D、存储区域划分中G通道灰度数据的E和存储区域划分中B通道灰度数据的F,内部均存储对应的灰度数据;

根据可编程LED阵列多行扫描的特性,每一类双口RAM共需n份,即A[0:n-1]、B[0:n-1]、C[0:n-1]、D[0:n-1]、E[0:n-1]、F[0:n-1],其中n为可编程LED阵列一次刷新的行数。

7.根据权利要求1所述的基于FPGA的可编程LED阵列显微照明控制方法,其特征在于步骤四中具体过程为:当控制指令为显示圆时:仅将A[0:n-1]中的圆环外圆数据输出;

当控制指令为显示圆环时:根据B[0:n-1]中的内圆数据屏蔽掉A[0:n-1]中的对应位置数据后,将剩余的A[0:n-1]中的数据输出;

当控制指令为显示圆内亮度呈标准正态分布的圆时:仅将C[0:n-1]中的数据输出;

当控制指令为显示半圆或彩虹环时:根据B[0:n-1]中的圆环内圆数据屏蔽A[0:n-1]中对应位置的圆环外圆数据;根据A[0:n-1]中屏蔽后的数据选择D[0:n-1]、E[0:n-1]和F[0:n-1]中的RGB三通道的灰度数据,然后输出选择的数据;

当控制指令为显示二段、四段圆环并且中心圆灰度可调的图形时:根据B[0:n-1]中圆环内圆数据选择中心圆的灰度数据,根据B[0:n-1]中的圆环内圆数据屏蔽A[0:n-1]中对应位置的圆环外圆数据;根据A[0:n-1]中屏蔽后的数据选择D[0:n-1]、E[0:n-1]和F[0:n-1]中的RGB三通道的灰度数据。

8.根据权利要求1所述的基于FPGA的可编程LED阵列显微照明控制方法,其特征在于步骤五中,FPGA并行地驱动每个逐行扫描区域RGB三通道的串行数据,实现图形的彩色显示,具体如下:当显示圆、圆环或是二段、四段圆环并中心圆亮度可调时,获得的数据只是1bit的表征是圆内还是圆外的数据,此时在驱动LED阵列时可选择RGB三通道的常关和常开,实现总共8阶的彩色显示;

当显示其余模式的彩色图形时,通过控制RGB三通道恒流源的开关实现对驱动电流的PWM调制,实现R、G、B三个通道的灰度显示,并最终合成可被人眼感知的彩色显示。

9.根据权利要求8所述的基于FPGA的可编程LED阵列显微照明控制方法,其特征在于对驱动电流的PWM调制,在对可编程LED阵列一行的刷新期间内,将整个刷新期间分为若干个子刷新期间,每一个子刷新期间包括两个时间段:串行数据传输时间段,这期间LED像素熄灭;LED像素驱动时间段,这期间LED像素的亮灭可以控制;控制每个LED像素点中R、G、B三个分量在每个子刷新期间内的LED像素驱动时间段内的亮灭来实现对应颜色分量的灰度显示,并最终合成可被人眼感知的彩色显示。

说明书 :

一种基于FPGA的可编程LED阵列显微照明控制方法

技术领域

[0001] 本发明属于可编程LED阵列控制技术领域,特别是一种在低传输带宽、低复杂度控制的基于FPGA的可编程LED阵列显微照明控制方法。

背景技术

[0002] 多模式显微成像使用“无标记样品”成像方法,对细胞样品进行无需荧光粉或染色剂标记的显微成像,避免了传统显微观察因“标记”带来的对细胞活性的影响。实现多模式显微成像的方法一般有两种,一种是直接采用可编程照明光源,例如可编程LED阵列,控制其显示不同颜色的多种照明图案实现多模式显微成像。另一种是通过在照明端引入光源调制器件,如可编程LCD,通过其调节光源孔径、照明角度以及光源颜色等照明参数,经后端光路成像实现多模式显微成像。但是商用的LCD消光比较低,导致其照明调控的信噪比下降,最终导致成像质量的下降,而高消光比的LCD一般都需要定制加工,成本亦高于LED阵列(201510642770.0)。
[0003] 对LED阵列的控制,传统的方法为通过上位机发送相应的显示数据,并以MCU、DSP、FPGA等为处理器,根据LED驱动芯片的协议,来实现控制开关量与PWM占空比,实现全彩的变化。这种一般的驱动LED阵列的方法在用于显微成像系统中时因为传输带宽较低并且所需显示的图形有限且对称,则难以满足系统的需求。这时因为传输带宽的限制,它会造成图形切换时的卡顿。
[0004] 对此,一种解决方法是对对称图形进行数据的压缩,虽然这样可以减小对数据带宽的依赖,缓解图形切换时的卡顿现象,但这也增加了压缩和解压成本。用增大数据传输带宽的方法也可以来弥补因数据传输带宽的限制造成的图形卡顿的现象,但同时也增大了上位机与处理器之间通信的复杂度,增加了开发与生产成本(200820146952.4)。
[0005] 另一种解决方法是将所需显示的有限的图形事先计算完成并存储在非易失性存储介质中,在使用时再去访问;或是在每次硬件上电初始化时进行较大规模的计算,并将计算得到的数据存储到易失性存储介质如:SDRAM、DDR3等。这样都可以减小对数据传输带宽的依赖,而且存储在易失性存储介质中时还可以在访问时显著增加访问数据的速度。但是无论是事先存储在非易失性存储介质中或是上电初始化时存储在易失性存储介质中,都需要额外的大容量存储介质(201310229029.2),这即增加了控制的复杂度,也增加了生产成本。而且当存储于易失性存储介质中时,每次上电初始化时都会额外需要一定量的初始化时间。总之,在使用少量有限的硬件资源和数据传输带宽的条件下,如何实现可编程LED阵列高速显示任意彩色图案是一个技术难题。

发明内容

[0006] 本发明的目的在于提出一种基于FPGA的可编程LED阵列显微照明控制方法,在少量有限的硬件资源和数据传输带宽的条件下,实现了可编程LED阵列对任意彩色图案的高速显示。
[0007] 实现本发明目的的技术解决方案为:一种基于FPGA的可编程LED阵列显微照明控制方法,步骤如下:
[0008] 步骤一,基于FPGA的串口接收与译码电路设计:FPGA接收上位机通过串口发送来的控制指令,并对其进行译码,将译码后的信息存储于专用的配置寄存器中;
[0009] 步骤二,根据控制指令现场计算出用于可编程LED阵列显示的图形基本数据,并进行圆域的确定、圆内亮度呈标准正态分布以及颜色区域的划分;
[0010] 步骤三,将步骤二中计算生成的数据分类,并存储于FPGA的片内双口RAM中;
[0011] 步骤四,根据可编程LED阵列的扫描位置读出步骤三中存储于FPGA片内双口RAM中的显示数据,根据控制指令对读出的显示数据进行处理并输出到步骤五中;
[0012] 步骤五,利用FPGA快速地并行驱动使用多行扫描,RGB三通道分开的可编程LED阵列,显示步骤四中输出的数据。
[0013] 本发明的有益结果为:(1)上位机与FPGA控制模块的通信非常简单,只需要6个字节的数据就可以实现多种图形之间的切换。(2)FPGA现场快速地计算用于显示的图形数据,节省的大量的上位机与FPGA模块之间的通信带宽,节省了大量的数据存储介质(如SDRAM、DDR3等。(3)本发明使用FPGA中综合出的数字电路计算用于可编程LED阵列显示的图形数据,使用流水线技术,显示数据计算耗时大为降低。(4)在FPGA内实现驱动电流的PWM调制,驱动可编程LED阵列进行彩色显示,避免了PWM芯片的大量使用。使用时,只需要上位机使用简单的控制指令就可以控制可编程LED阵列显示任意的圆、半圆、圆环、彩虹环等图形,节省了大量的数据传输带宽和数据存储空间的同时也显著地提高了图形刷新的帧率。
[0014] 下面将结合附图对本发明进行详细地说明。

附图说明

[0015] 图1为可编程LED阵列结构框图。
[0016] 图2为本发明基于FPGA的可编程LED阵列照明控制方法的流程图。
[0017] 图3为在FPGA内部计算用于可编程LED阵列圆域显示的方法的示意图。
[0018] 图4为半圆与彩虹环的生成原理示意图。
[0019] 图5为驱动可编程LED阵列的时序图。
[0020] 图6为实际显示的图形。
[0021] 图7为实际显示的彩色图形。

具体实施方式

[0022] 本发明基于FPGA的可编程LED阵列显微照明控制方法,所使用可编程LED阵列是并行驱动多行扫描的可编程LED阵列。结合图1,可编程LED阵列主要包括可编程LED像素1、行地址译码2、恒流源驱动3,一个可编程LED像素1包括R(红)、G(绿)、B(蓝)三个LED单元,每一个像素行被当作R、G、B三个并列的独立行;行地址译码2分别驱动两个独立的像素行,这两个像素行分别由不同的恒流源驱动3;横流源并行地驱动R、G、B三个通道。图1中的可编程LED阵列可以实现一次刷新两行LED像素行,并且每一列的RGB可编程LED单元的驱动数据可以同时接收,使用FPGA在同一时刻同步发送两行的RGB三通道数据。
[0023] 结合图2,本发明基于FPGA的可编程LED阵列显微照明控制方法,步骤如下:
[0024] 步骤一:基于FPGA的串口接收与译码电路设计。FPGA接收上位机通过串口发送来的控制指令,并对其进行译码。使用FPGA接收上位机发送的串口信息,串口信息为可编程LED阵列的控制指令,控制指令为可编程LED阵列上显示的图形模式,包括以下几种:
[0025] (1)在可编程LED阵列上显示任意位置、任意半径、可选颜色的圆、半圆以及圆环。
[0026] (2)在可编程LED阵列上显示任意位置,任意半径的圆内亮度呈标准正态分布的圆。
[0027] (3)在可编程LED阵列上显示任意位置、任意半径、任意指定的至多24份颜色的24阶彩虹环。
[0028] (4)在可编程LED阵列上显示任意位置、任意半径的二段、四段圆环并且中心圆灰度可调的图形。
[0029] 译码后所得的控制信息,作为后续步骤的工作配置参数寄存到专用的配置寄存器中。在FPGA中实现本控制方法时,使用同步时钟设计,即每一个步骤中所使用到的同步时钟相同,这个同步时钟为可编程LED阵列所支持的最高工作频率下对应的同步时钟。因此该专用的配置寄存器可以不需要作任何处理就可以被电路中的任何模块直接访问。
[0030] 步骤二:根据控制指令现场计算出用于可编程LED阵列显示的图形基本数据。
[0031] 计算包括三个方面:圆域的确定、圆内亮度呈标准正态分布的数据计算、颜色区域的划分。关于圆域的确定,具体如下:根据控制指令中的圆心与半径信息,利用直角坐标系下圆的方程,
[0032] (x-a)2+(y-b)2≤r2
[0033] 判断可编程LED阵列上各点位于圆内还是圆外。因为所给的圆心均落在可编程LED阵列各点上,且目标半径均为整数,因此,此时如果按照上述直角坐标系下圆的方程来确定圆域,则会得到如图3(a)所示的目标显示圆域。为了得到效果比较好的圆形图案,采取的做法是将半径增加一定的量,因为半径的单位为可编程LED阵列的像素步长,因此这个量小于一个单位,即小于1。这样目标圆就落到了大量非像素点上,这时再按照上述直角坐标系下圆的方程来确定圆域,得到扩大半径后圆域的如图3(b)所示,可见圆域的显示效果好了很多。同时为了在FPGA内部采用整数运算,通过乘法将方程化整。
[0034] (2i(x-a))2+(2i(y-b))2≤(2i(r+d))2
[0035] 其中Δd为半径延长的部分,Δd=1/2k(其中k=1,2,3……)。i为一个扩大系数,满足:2i=2j/Δd(其中j=0,1,2,3……)。这样可以在FPGA内部使用移位来简单地实现所需的乘法。
[0036] 因为所需要的目标图形包括圆环,所以需要生成圆环的外圆数据与圆环的内圆数据。利用FPGA的并行性,对于显示图形所需的内圆和外圆数据的计算,可以同步并行地计算。具体做法是在FPGA内部综合出两块相同的判断一个点是属于圆内还是属于圆外的电路,一个负责运算圆环外圆数据,一个负责运算圆环内圆数据,两块电路可以同步地对一个点进行判断。
[0037] 关于圆内亮度呈标准正态分布的数据计算,具体如下:为了简化FPGA的计算,亮度的灰度为32阶,事先制作标准正态分布密度查找表。对于可编程LED阵列上每个LED像素灰度值的确定根据其距圆点的距离而定。所使用查找表为当圆内亮度呈标准正态分布的圆的半径为32个单位时,以距离圆心的距离为地址,每个地址存储的值为该距离对应的亮度灰度。使用时,有如下公式:
[0038]
[0039] addr=d×32÷r
[0040] d为可编程LED阵列上一点(x,y)距离圆心(a,b)的距离,r为半径,addr为距离d所对应的亮度灰度在标准正态分布密度查找表中的地址,公式中的d与addr均取整数。
[0041] 在式中因为使用到了平方根与除法运算,所以使用了对应FPGA器件支持的平方根与除法IP核。所使用的平方根IP核为浮点数计算,但是所使用的乘法和除法计算都是整型,因此在数据进入平方根计算之前先将其转换成浮点型,计算完成后再将其转换成整型。
[0042] 关于颜色区域的划分,结合图4(c),具体如下:将可编程LED阵列依据某一给定点(a,b)划分为24块区域(图4(c)中的(0)~(23)),每块区域对应的张角为15°,事先计算得到15°、30°、45°、60°和75°的正切值分别为0.268、0.577、1.0、1.732和3.732。对于可编程LED阵列上任意的一点(x,y),在x≥a并且y≥b的区域内判断|(x-a)|×0.268≥|y-b|,为真时,意为该点处于区域15°内,为假时,继续判断|(x-a)|×0.577≥|y-b|,为真时,意为该点处于区域15°到30°之间,为假时,再依次判断|(x-a)|×1.0≥|y-b|、|(x-a)|×1.732≥|y-b|、|(x-a)|×3.732≥|y-b|,一直判断到75°到90°区域时停止。根据圆的对称性,我们在剩下的(x≥a,y≤b)、(x≤a,y≤b)和(x≤a,y≥b)区域内分别进行同样的判断,便可将可编程LED阵列划分为24块区域。
[0043] 为了在FPGA内避免浮点数运算,同样使用移位来实现整数乘法
[0044] 2p×(x-a)×0.268≥(y-b)2p
[0045] p为一个扩大系数,取整数,满足2p>1000。经过上述划分后,对应于可编程LED阵列上的每一点都位于24块区域内的某一块区域,并拥有该区域的颜色。24块区域中的每块区域的颜色都可以进行配置。
[0046] 在进行半圆或二段圆环的数据生成时,将24块区域的颜色按照相邻原则划分为两份,一份12块。每一份中的12块区域为同一种颜色。比如图4(c)中的(0)~(11)为一份,图4(c)中的(12)~(23)为另一份。其中一块的颜色为黑色,即所有像素熄灭;另一块的颜色统一为一种,比如为青色,这样就可以实现半圆的区域划分。
[0047] 在进行四段圆环的数据生成时,将24块区域按照相邻原则划分为四份,一份6块。每一份中的6块区域为同一种颜色。比如图4(c)中的(0)~(5),(6)~(11),(12)~(17)和(18)~(23)四份。
[0048] 步骤三:将步骤二中计算生成的数据分类,并存储于FPGA的片内双口RAM中,包括多个FPGA片内双口RAM,分别存储步骤二中计算得到的数据,分别为:
[0049] 存储圆环外圆数据的A,存储圆环内圆数据的B。A和B内部存储的信息为1bit,1表示对应点处于圆内;0表示对应点处于圆外。
[0050] 存储圆内亮度呈标准正态分布的灰度数据的C、存储区域划分中R通道灰度数据的D、存储区域划分中G通道灰度数据的E和存储区域划分中B通道灰度数据的F。内部均存储对应的灰度数据。
[0051] 根据可编程LED阵列多行扫描的特性,每一类双口RAM共需n份,即A[0:n-1]、B[0:n-1]、C[0:n-1]、D[0:n-1]、E[0:n-1]、F[0:n-1],其中n为可编程LED阵列一次刷新的行数。
[0052] 步骤四:根据可编程LED阵列的扫描位置读出步骤三中存储于FPGA片内双口RAM中的显示数据,根据控制指令对读出的显示数据进行处理并输出到步骤五中,具体为:
[0053] 当控制指令为显示圆时:仅将A[0:n-1]中的圆环外圆数据输出。
[0054] 当控制指令为显示圆环时:根据B[0:n-1]中的内圆数据屏蔽掉A[0:n-1]中的对应位置的数据后,将剩余的A[0:n-1]中的数据输出。
[0055] 当控制指令为显示圆内亮度呈标准正态分布的圆时:仅将C[0:n-1]中的数据输出。
[0056] 当控制指令为显示半圆或彩虹环时:根据B[0:n-1]中的圆环内圆数据(图4(b)为内圆)屏蔽A[0:n-1]中对应位置的圆环外圆数据(图4(a)为外圆);根据A[0:n-1]中屏蔽后的数据选择D[0:n-1]、E[0:n-1]和F[0:n-1]中的RGB三通道的灰度数据(图4(c)为24等分区域),然后输出选择的数据(图4(d)为半圆或彩虹环显示数据)。
[0057] 当控制指令为显示二段、四段圆环并且中心圆灰度可调的图形时:根据B[0:n-1]中圆环内圆数据选择中心圆的灰度数据,根据B[0:n-1]中的圆环内圆数据屏蔽A[0:n-1]中对应位置的圆环外圆数据;根据A[0:n-1]中屏蔽后的数据选择D[0:n-1]、E[0:n-1]和F[0:n-1]中的RGB三通道的灰度数据。
[0058] 步骤五:驱动可编程LED阵列显示目标图形。驱动可编程LED阵列,实现图形的彩色显示。可编程LED阵列使用多行扫描,RGB三通道分开的恒流驱动方式。利用FPGA可快速地并行驱动每个逐行扫描区域RGB三通道的串行数据,具体如下:
[0059] 当显示圆、圆环或是二段、四段圆环并中心圆亮度可调时,获得的数据只是1bit的表征是圆内还是圆外的数据,此时在驱动LED阵列时可选择RGB三通道的常关和常开,实现总共8阶的彩色显示;
[0060] 当显示其余模式的彩色图形时,通过控制RGB三通道恒流源的开关实现对驱动电流的PWM调制,实现RGB三通道的4bits灰度显示,并最终合成可被人眼感知的彩色显示。
[0061] PWM调制具体见图5,CLK为恒流源芯片的串行数据输入时钟;R、G、B分别对应驱动可编程LED像素中R单元、G单元、B单元的恒流源的串行数据输入端;LAT为恒流源芯片数据锁存控制端,高电平有效;OE为恒流源芯片并行数据输出的使能信号,低电平有效。D0、D1……Dn为RGB三通道各自的串行数据,其中n为可编程LED阵列的列数。在对可编程LED阵列一行的刷新期间T内,将整个刷新期间分为若干个子刷新期间t1+t2,每一个子刷新期间包括两个时间段:串行数据传输时间段t1,这期间LED像素熄灭;LED像素驱动时间段t2,这期间LED像素的亮灭可以控制。控制每个LED像素点中R、G、B三个分量在每个子刷新期间内的LED像素驱动时间段内的亮灭来实现对应颜色分量的灰度显示,并最终合成可被人眼感知的彩色显示。如一个刷新期间T内总共分为16个子刷新期间,则可实现每个通道4bits的灰度显示。
[0062] 上述基于FPGA的可编程LED阵列显微照明控制方法,已在搭建的基于FPGA的可编程LED阵列显微照明控制系统中得到验证。所使用的控制系统包括一个64*64的可编程LED阵列;一个基于FPGA的最小系统板,所用FPGA芯片为Altera公司Cyclone 4系列的EP4CE10E22C8N;最小系统板还包括串口(CP2102),EPCS,可编程LED阵列供电模块,电平转换(3.3V—>5V),触发接口等。使用Verilog实现上述控制方法,并固化进EPCS中。在实际测试中,硬件上电即可工作,使用上位机通过串口控制可编程LED阵列的显示,显示效果如图6、图7所示。其中图6为可编程LED阵列显示的基本图形,图6(a)为圆,半径为18,颜色为青色;图6(b)为半圆,半径为18,颜色为青色,方向为45°;图6(c)为圆域数据取反后的效果,圆内熄灭,圆外点亮,圆的参数与图6(a)相同;图6(d)为圆环,内圆半径为5,外圆半径为18,颜色为青色;图6(e)为圆内亮度呈标准正态分布的圆,半径为30,颜色为青色。
[0063] 图7中的图形为可编程LED阵列显示的彩色图形,其中,图7(a)为R通道,灰度为呈圆形梯度变化的效果图;图7(b)为G通道,灰度为呈圆形梯度变化的效果图;图7(c)为B通道,灰度为呈圆形梯度变化的效果图;图7(d)为RGB三通道灰度各自呈圆形梯度变化,最总合成的彩虹环;图7(a)、图7(b)、图7(c)、图7(d)的内圆半径为6,外圆半径为18;图7(e)为四段圆环,并中心圆亮度可调的图形,外圆半径为18,四段颜色为粉红和青色,中心颜色为白色,灰度为3。
[0064] 因为控制指令简单,硬件电路的计算也十分迅速,实际中图形切换不会有卡顿出现。触发接口在每一帧数据刷新结束后发送一个触发信号,经示波器的检测,彩色图形刷新帧率可达到1.5K左右。
[0065] 内部计算用于可编程LED阵列显示的彩色图形数据的耗时最大为:
[0066] (N×Tclk)+(M-1)×Tclk
[0067] 式中N为可编程LED阵列的点数,Tclk为电路的工作时钟周期,这里的M为使用的流水线最大级数。例如当三色阵列为64*64,电路工作时钟为40MHz,采用流水线级数最多为6级,则最大耗时为(4096*25ns)+5*25ns,即仅需耗时102.5us就可以快速地计算出可编程LED阵列所需显示的彩色图形数据。
[0068] 可见,本发明可控制可编程LED阵列实现我们的特定的显示需求,如基本的圆、半圆、圆环等。并且可以高效地驱动可编程LED阵列进行彩色显示,满足很多场合的显示与照明需求。可以为计算显微成像提供不同模式的编码照明,比如:图6(a)、图6(b)、图6(c)可分别为计算显微成像提供明场、DPC、暗场成像照明等。