问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

无软件或驱动板损坏的ilx554b光谱仪,简单再利用方法

创作时间:
作者:
@小白创作中心

无软件或驱动板损坏的ilx554b光谱仪,简单再利用方法

引用
1
来源
1.
https://www.kechuang.org/t/90677

本文介绍了一种重新利用一台损坏软件的ilx554b光谱仪的方法。作者通过ESP32开发板和Arduino代码重新开发光谱仪,详细描述了硬件连接、软件修改和测试结果。

收到一台光纤光谱仪,但找不到PC端软件。通过对比管脚,发现符合ilx554b管脚定义。

在GitHub上找到了一篇用ESP32驱动ilx554b的Arduino代码,可以将CCD信号通过串口传到上位机。于是购买了ESP32 WROOM开发板,并下载Arduino IDE。对代码进行了以下修订:

  • 编译报错修正
  • 曝光时间修改
  • ROG、CLK管脚输出取反

修改后的代码如下:

if (n=='m'){ //m读数据
leitura();
}
if (n=='x'){ //x 连读数据十次
for (int j=0;j<10;j++) {
leitura();
delay(tint);
}
}
if (n=='t') { //显示曝光时间
Serial.println(tint/1000);
}
if (n=='w') { //曝光时间增加10ms
integra += 10;
}
if (n=='s') { //曝光时间减少10ms
integra -= 10;
}
if (n=='d') { //曝光时间加1ms
integra += 1;
}
if (n=='a') { //曝光时间减少1ms
integra -= 1;
}
n=' ';

硬件连接方面,只需连接ROG、CLK、VOUT三根线。利用原板上的6反相器作3.3~5V电平转换。

软件部分,作者找到了一个串口通讯+Dialog作图的VC++工程,并进行了修改。使用方法如下:

  1. 发送按键,串口发m命令,将ESP32上的数据显示在Dialog上。
  2. Timer,启动和停止定时发送。
  3. xmin, xmax:显示区域的X轴对应CCD的像素范围。
  4. ymin, ymax:显示区域的Y轴对应ADC转换的值范围。
  5. search_peaks:搜索除主峰值之外多少个峰值。
  6. startnm:像素0对应的光波波长。
  7. endnm:像素2047对应的光波波长。

配置文件(ini)可以设置串口号和波特率,以及startnm和endnm的初始值:

[config]
波特率=115200
com口=com3
nodeid=1234
startnm=980.1
endnm=246.2

实测效果:

  • 测氩离子激光
  • 测两支红激光
  • 测蓝光LED

波长校准

作者发现波长和CCD线数存在非线性关系,因此增加了多项式波长校准功能:

  1. 选择lines/lamda checkbox,显示线数。
  2. 将线数和波长输入Excel,插入平滑散点图。
  3. 选择趋势线格式为二阶多项式,并将趋势线标签的数字显示位数增加。
  4. 将Excel计算出的多项式系数C2、C1、C0输入配置文件。
  5. 重新打开程序,不选择lines/lamda选项,此时显示校准后的波长值。

传感器响应补偿

ilx554b在不同波长下的感光度不同。作者将手册上的数据以图像格式导入MATLAB,通过ginput函数描点取出数据:

img = imread('e:\ilx554 XXXXXg');
min_x = 400;
max_x = 1000;
min_y = 0;
max_y = 1.0;
imagesc([min_x max_x], [min_y max_y], flipdim(img,1));
ii = 1;
while 1
pause(0.1);
[xdata,ydata,button] = ginput(1);
if button == 3
break;
end
if button == 1
listx(ii) = xdata;
listy(ii) = ydata;
ii = ii + 1;
end
end
figure;
plot(listx,listy);

补偿前后的光谱对比:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号