刘锦涛,罗 莉*,余向阳,蔡烨帆,洪伟槟
(1. 广东工业大学物理与光电工程学院,广州 510000;2. 中山大学物理学院光电材料与技术国家重点实验室,南昌研究院,广州 510000;3. 广州光信科技有限公司,广州 510000)
在传统的光谱分析中,操作者通常需要获得光谱数据文件,并将其导入专用的光谱软件做进一步的分析。这些光谱数据文件通常以文本或数字形式存在[1],并且不同的分析软件可能对文件格式有不同的要求。这些文件能够提供各个波长处的光谱响应数据,但是需要一些额外的处理才能得出直观的结果。相比于光谱数据文件,光谱曲线图像具有更好的可视化效果。光谱曲线图像能够直观地展示不同波长下的光谱响应强度差异,更容易观察到峰值、谷值或其他特征。
目标光谱曲线的合成主要基于光谱叠加原理。多个不同的LED 混光后得到的光谱曲线为每个LED 的光谱曲线的线性相加之和[2]。因此,可以通过控制不同波长光的强度和比例来调整合成光谱的形状和特征。在LED 的最大工作电流以内,其光强值与驱动电流值呈正相关关系。针对目标光谱的匹配,主要是通过求解各组合的LED 的光强比值,即改变其驱动电流的大小来实现。
这一过程通常涉及到优化算法和数学模型的应用。通过建立光谱响应与LED 驱动电流之间的关系,可以将光谱匹配问题转化为一个求解最优参数的数学优化问题。在参数空间中搜索最佳解,找到使得合成光谱最接近目标光谱的LED 光强比值。通过调整LED 的驱动电流,改变光强度比例来逼近目标光谱,最终可以获得使合成光谱与目标光谱相匹配的LED 光强比值,从而实现目标光谱的拟合。
目前,国内已有许多对光谱合成方面的研究。朱继亦等[3]采用修正非对称高斯函数拟合单个LED 的光谱分布,并以该模型为基础,使用多个不同峰值波长的单色LED 实现对任意光谱的拟合;满国福[4]采用高斯分布加洛伦兹分布组合的分段函数拟合单色LED 光谱分布函数;唐帆[5]使用LM 算法求解超定方程组的非负最小二乘解,得出拟合AM1.5 太阳光谱曲线的最优单色LED 参数。以上的研究对于单色LED 的光谱分布都是使用数学模型拟合,但由于LED 的种类繁多,尽管研究人员对模型一直在更新优化,但并非所有的LED 都适合同一种模型。因此,找到组合中LED 适用的数学模型工作量大且算法复杂。
综上所述,提出一种基于目标光谱曲线图像与实测光谱数据的光谱拟合方法。首先对将采用的LED 进行实际测量建立光谱数据库,使用编程语言对导入的目标光谱曲线图像进行数据提取,通过算法获取最接近目标光谱的合成光谱中各LED 的驱动电流系数。该系数结果可直接应用于实际硬件电路中,更加切合实际。相较于传统光谱分析中将数据文件导入专用光谱分析软件的操作,这种方法可以提供更大的自由度和灵活性,减少对特定软件的依赖性,对健康照明、植物照明等领域有一定的实践意义。
本系统的总体目标是实现由上位机计算出的LED 光源驱动电流系数的传输和实际光源驱动。为了实现这一目标,系统采用上位机、主控模块、串口通信模块、PWM 输出模块、驱动模块等组成。
上位机的功能是对导入的目标光谱曲线图像进行处理计算,得到各LED 的驱动电流系数并传输至硬件电路。主控模块使用STM32 微控制器作为系统的核心芯片,它具备丰富的性能和功能选项,通过串口模块与上位机进行数据传输,并支持I²C 总线通信协议与外部从设备进行通信。主控模块接收串口通信模块传输的驱动电流系数,并发送PWM 信号给驱动模块,以调整LED 光源的光强值。串口通信模块通过设置合适的串口参数实现上位机与主控模块之间的数据传输。PWM 输出模块采用具有16个通道的PCA9685 芯片,可实现对16 路LED 的独立控制。通过与主控模块的I²C 通信,可以接收PWM 信号设置LED 的占空比,能充分节省主控模块的IO 口。驱动模块采用PT4115 恒流源芯片,通过调整输入的PWM 信号,调节LED 的平均电流值,以实现对光源光强的调节控制。
为光谱曲线分析和匹配设计方法时,选择合适的编程语言和环境对于高效、灵活地实现任务非常重要。Python 是一种开源的、易于学习和使用的编程语言,具有丰富的科学计算和数据处理库,可以高效地进行矩阵操作、数值计算和统计分析[6]。此外,Python还有许多用于绘图和可视化的库,可以方便地显示和分析光谱数据。PyCharm 是一款专门针对Python开发的强大工具,提供了丰富的功能和工具,还支持各种插件和扩展,可以根据项目需求进行个性化配置,并且具有直观友好的用户界面,适合进行光谱曲线分析和匹配的代码编写和调试工作。综上所述,使用Python 作为编程语言,并搭配PyCharm 作为开发环境,是一种高效、灵活且方便的选择。
使用光谱仪对选定的16 颗LED 光源在额定驱动电流条件下进行光谱采集,然后根据目标光谱范围截取所需波段。为了方便后续的数据处理,需要对波长进行等间隔插值,以获得均匀分布的波长数值以及所对应的光强值。由此构建一个由该16 颗LED 共同组成的光谱数据库。
在导入目标光谱曲线图像时,首先需要计算原图像的宽度和高度,然后根据波段范围调整图像的横轴尺寸。对于图像的纵轴尺寸,将光谱数据库中光强最大值作为参考,并在后续光谱匹配过程中进行循环调整。通过这样的调整,能够确保光谱数据与设定的波段范围一致,以及所有LED的驱动电流系数在1以内。
为更好地提取数据,需要对图像进行二值化处理。通过设定的阈值,将目标曲线和背景的像素值分别转换为1 和0。处理后得到的二值图像突出了目标曲线的特征,并且简化了后续计算和分析的复杂度,从而提高了数据提取的效率。鉴于导入的曲线线条宽度受各绘图软件影响而不一致,可以在曲线的同一横坐标所对应处取平均值作为该点的纵坐标值。
对于目标光谱曲线,将其按照光谱数据库中各光强值对应的波长在目标光谱分布中离散化取值,得到目标光谱数据组:
数据库中LED数据表达为
各LED的驱动电流系数矩阵为
可得光谱匹配公式为
由于离散数据点数量远大于LED 数量,因此匹配公式为超定方程组。超定方程组是一种不存在解的矛盾方程,但可以使用最小二乘法得到其近似解[7]。最小二乘法是光谱合成领域一种常用的数据处理和分析技术。通过最小二乘法对方程组求解非负解,使合成光谱与目标光谱尽可能接近,从而实现光谱合成的目标。为比较拟合光谱与目标光谱的匹配程度,通常使用拟合优度R2作为评价参数。R2的取值范围在0至1之间,且越接近1表明两者的相似程度越高。
由于光谱数据库中各LED 光源的最大光强值不尽相同,在求解各LED 光源驱动电流系数时,得到可能存在大于1的解,即超过额定电流的情况。因此,如上2.2 节描述,将通过建立一个检测循环,动态调整目标光谱曲线图像的纵轴尺寸来处理。
当有驱动电流系数大于1的情况出现,纵轴尺寸将减少系数y,重新求解方程,直至所有驱动电流系数都不超过1。尽管光谱曲线各处的纵坐标值随图像的纵轴尺寸发生改变,但曲线各处的纵坐标比值不变,因此方程求解得到的各驱动电流系数比值不变,保证了在得到拟合程度最高前提下按比例调整的驱动电流系数,此时解为最优解。
硬件电路主要由主控模块、串口通信模块、PWM 输出模块、驱动模块及电源模块组成。驱动电流系数由串口通信模块接收,主控模块根据接收的系数发送PWM 信号到驱动模块,由驱动模块调整输出的平均电流值以调整光源的光强值。
图2 下位机原理示意图
3.1.1 主控模块
STM32 是由意法半导体(STMicroelectronics)推出的一系列32 位ARM Cortex-M 微控制器。它提供了广泛的性能和功能选项,适用于各种应用领域[8]。STM32 微控制器具备多个串口(如USART、UART 等)模块,可用于与上位机进行双向数据传输;并且支持I²C 总线通信协议,可以作为I²C 主设备与外部从设备进行通信。STM32 具备强大的中断控制和管理功能,能够实时响应和处理外部事件,因此能作为本应用的主控芯片并进行功能开发。
3.1.2 串口通信模块
串口通信是一种被广泛应用于数据交换和控制连接的数据传输方式,在本应用中用于上位机与下位机STM32 之间的数据传输,将在上位机求解得到的驱动电流系数以从串口形式传递至主控芯片。使用相关的串口库函数,设置串口的波特率、数据位、停止位和校验位等参数[9],并确保配置的参数与上位机一致,使数据传输有效、可靠。
3.1.3 PWM输出模块
主控芯片需要将接收到的驱动电流系数作为各路LED 的PWM 占空比信号传递至驱动模块,由于LED 共有16 路,因此使用一款多通道控制芯片对节约主控芯片GPIO 资源是有必要的。PCA9685是一款常用的16通道PWM 控制器芯片,它采用I²C 总线接口,只需2个接口(SDA和SCL)就能实现与主控芯片通信,实现多通道的PWM 信号输出。每个通道都可以单独配置占空比,因此能够方便对各LED 进行独立控制。此外,PCA9685 支持12 位分辨率的PWM 输出,可以提供更平滑、更准确的LED亮度控制效果。
3.1.4 驱动模块
XL3001 是一款降压型LED 恒流驱动芯片,内部集成高压、大功率MOSFET 开关管,内部集成过温保护、过流保护、短路保护等全套可靠性保护电路,兼容外置PWM 信号调光功能,可实现输出电流随占空比线性变化。根据各路LED额定电流的不同,由下式:
可计算各路采样电阻RCS 的阻值。PWM 脉冲信号被电容C6 滤成直流后对CS 引脚进行补偿,可使输出电流更加稳定。
图3 驱动模块示意图
3.1.5 电源模块
硬件电路中,主控芯片STM32、PWM 输出模块PCA9685 和驱动模块XL3001 的工作电压分别是3.3 V、5 V 和12 V,因此需要将输入电压12 V分别调整适应各模块工作电压要求。
图4 电源模块示意图
下位机程序主要包括串口程序和I²C 通信程序。其中串口程序负责接收上位机计算得到的驱动电流系数,I²C 通信程序负责与PCA9685 进行通信。
3.2.1 串口程序
该部分将使用串行数据传输接口USART 实现与上位机的通信。首先,对USART 进行初始化,包括使能时钟,配置RX 接收引脚的输入模式,以及设置USART 的波特率等参数,并使能接收中断。其次,定义一个全局数组用于存储接收的数据,以及一个全局变量用于记录已接收的字节数。最后,在中断处理函数中及时处理接收到的数据。通过串口部分的程序设计,实现串口的初始化和数据接收功能,为上位机和下位机的可靠通信提供基础支持。
3.2.2 I²C通信程序
在使用I²C 协议前,需要对其进行初始化,包括配置引脚工作模式,并使能相关时钟,为后续I²C 通信做好准备。其次,对I²C 所控制的PCA9685 芯片进行PWM 频率的设置。需要在芯片进入休眠模式后,将预分频系数写入PCA9685 的寄存器,而后退出休眠模式。在芯片的正常工作模式下,将所期望的各通道的PWM 占空比数据分别写入各通道所对应的两个10 位寄存器,确保每个通道的PWM 输出符合预期。
将恒流驱动模块与LED 连接,使用万用表作为电流测量仪器,在黑暗环境下使用光谱仪采集LED光谱。
图5 实验测试
4.1.1 PWM占空比与驱动电流
设置PWM 占空比从100%到0%递减,记录电流大小并计算各步长占空比与最大占空比的电流大小比值,以评估功率调节性能,即在不同电流输出需求下,模块是否能够准确地提供稳定的输出电流。得到各路恒流驱动模块PWM占空比与驱动电流比值的关系曲线如图6所示。
图6 PWM占空比与驱动电流比值关系曲线
各路实际输出的驱动电流与理想情况的驱动电流的R2均在0.99 以上,表明可以通过调节PWM占空比使模块准确输出稳定的电流。
4.1.2 驱动电流与光谱曲线峰值
同时,光谱仪同步采集各驱动电流下的光谱,以评估驱动电流对光谱强度的调控效果。绘制工作电流与光谱曲线峰值的归一化关系曲线,如图7所示。
图7 驱动电流与光谱曲线峰值关系曲线
驱动电流与光谱曲线峰值之间存在正相关关系,但正相关关系较差,线性关系不明显。使用多项式公式对各条曲线进行拟合调整,由光谱曲线峰值求解所需的电流。根据期望光谱峰值计算得到的电流值驱动LED,使用光谱仪再次测量光谱曲线峰值,绘制调整后的期望光谱峰值与实际光谱峰值的归一化关系曲线,如图8所示。
图8 期望光谱峰值与实际光谱峰值关系曲线
调整后的各路期望光谱峰值与实际光谱峰值的R2均在0.99 以上,存在着非常强的线性关系,可以实现精确的光谱调节,能够为调光提供支持。
将所有LED 分别调至额定电流工作状态,使用光谱仪采集LED 光谱,得到以下16 颗LED的光谱曲线,并通过插值获取预设采集点处的光谱响应值,组成光谱数据库,如图9所示。
图9 光谱数据库中各光源的光谱辐射强度分布
将程序烧录进下位机后,分别以AM1.5 光谱[10]截取目标波段曲线,如图10(a)所示,和手动绘制曲线,如图10(b)所示,作为目标光谱曲线示例导入上位机,使用光谱仪采集实际输出光谱曲线并评估拟合效果。
图10 实际光谱与目标光谱对比
由图10 可以看出,由于目标光谱与光谱数据库中的白光光源在500~600 nm波段内光谱变化都比较平缓,因此在该波段内能较好逼近。在其余波段的实际光谱拟合出现骤升或骤降,是因为光谱数据库中LED 的峰值间隔较大以及FWHM 较小,造成拟合效果欠佳的现象。从整体观察,图10(a)中的目标光谱曲线与实际光谱曲线的拟合优度为0.69,图10(b)中的目标光谱曲线与实际光谱曲线的拟合优度为0.77,实际光谱曲线能较好地反映目标光谱曲线的变化趋势。
设计了一款基于PyCharm 开发环境和STM32 微控制器的光谱拟合系统。通过输入目标光谱曲线图片,由上位机计算得到光谱数据库中各组合LED 的驱动电流系数的匹配最优解,并以该电流系数数组作为各路LED 的PWM 信号占空比,通过硬件电路驱动点亮LED,实现对目标光谱的拟合。结果显示,能够达到较好的匹配度。