介绍
本篇介绍了关于应用程序控制光谱仪获取光谱的一些基本序列操作。这些功能对于所有辰昶光谱仪都是普遍适用的。本章详细介绍了这些基本序列操作方法,包括涉及的所有参数和数据类型。
函数说明
- 创建/实例化Wrapper对象:
在控制光谱仪之前,首先应创建一个Wrapper对象。这是实现控制谱仪所有功能的一把钥匙。保证了应用程序只实例化一个Wrapper的对象。
Wrapper wrapper = new Wrapper ();
- 打开所有光谱仪:
其次,查询USB端口识别的所有连接的光谱仪。函数OpenAllSpectrometers()将打开所有识别到的谱仪,调用某台谱仪的时候根据索引值(index)调用。
OpenAllSpectrometers()方法返回从0到N的一个整数前,即为所识别到的光谱仪总数。在打开所有光谱仪后,可通过wrapper.GetNumberOfSpectrometersFound()函数来获得光谱仪的总数。
int nuberOfSpectrometers;numberOfSpectrometers = wrapper. OpenAllSpectrometers();numberOfSpectrometers = wrapper.GetNumberOfSpectrometersFound();
- 获取光谱仪名称:
这个操作是可选的。当你想知道你调用的谱仪名称的时候可以根据当前索引值(spectrometerIndex)调用函数wrapper.GetSpectrometerName(int spectrometerIndex)来获取光谱仪的名称。
int spectrometer = 0;string spectrometerName = wrapper.GetSpectrometerName( int spectrometerIndex);
- 获取光谱仪光谱:
光谱仪光谱数据是一个简单的一维数组,存储类型为double类型。不同光谱仪返回的光谱数据大小也不同,根据当前谱仪的索引值(spectrometerIndex)调用函数wrapper.GetNumberOfPixelsOfSpectrometer(int spectrometerIndex)返回的当前谱仪的像素点数来决定数组的大小。通过函数wrapper.GetSpectrumFromSpectrometer (int spectrometerIndex)将返回光谱数据数组,光谱数据数组对应的波长数组通过函数
wrapper.GetCorrectionWavelengthOfSpectrometer(int spectrometerIndex)返回。
int spectrometer = 0;int numberOfPixels =w.GetNumberOfPixelsOfSpectrometer(0); double[] wavelength = new double[numberOfPixels];double[] counts = new double[numberOfPixels]; wavelength = wrapper. GetCorrectionWavelengthOfSpectrometer (0);counts=wrapper.GetSpectrumFromSpectrometer(0);
- 从光谱仪中读取探测器序列号:
通过GetDetectorSerialNumber (int spectrometerIndex)函数来读取探测器序列号。
int spectrometer = 0; string derectorSN = wrapper. GetDetectorSerialNumber (spectrometerIndex);
- 设置窗口平滑:
窗口平滑就是通过一定范围内的所有连续的像素点的值进行平均来平滑光谱的像素点的值。每个光谱中的像素点都平均它左右两边的N个像素点。一个新的光谱就是这些像素点的值平均后的数据。
int spectrometer = 0;int windowsOfBox = 0;wrapperSetWindowsOfBoxToSpectrometer (spectrometerIndex , windowsOfBox)
- 设置平均次数:
平均次数是另一种用来减少获得的光谱的噪音的方法。这种技术是通过连续的多组光谱数据进行平均从而产生的一个平均后的光谱数据。这种算法是对应的像素点在不同光谱数据中对应的值求平均后为该点像素点对应的值。例如:平均次数为5,将五个连续的光谱数据pixel[0] 像素点对应的值相加,再除以5。这个数据将作为pixel[0] 像素点对应的值返回给用户。其他像素点对应值的求法跟此方法一致。
int spectrometer = 0;int average = 1;wrapper. SetAverageToSpectrometer (spectrometerIndex , average)
- 设置积分时间:
积分时间是允许光通过光谱仪探测器一段长度的时间。在光弱的情况下,可以通过增加积分时间来获得一个有意义的光谱;在光强的情况下,也可以通过减小积分时间来调控。当该一个或多个的CCD像素点或井已被完全地排出(或在某些检测器完全填充)时就是出现了饱和。当饱和出现时,多余的光子进入井之后没有影响,光谱也变得失真。在绘制饱和了的光谱时,会出现峰被修剪的现象。
积分时间的单位是毫秒。通过光谱仪的文件可以了解到该款光谱仪所支持的最大和最小积分时间。
int spectrometer = 0;int integrationTime = 100;wrapper.SetIntegrationTimeToSpectrometer (spectrometerIndex , intTime)
- 设置外触发模式:
用户可以通过设置外触发模式来控制光谱仪的采谱方式。外触发模式TriggerMode一共有4种方式:
- TriggerMode.normal:正常模式,也是软件中的默认模式,软件每调用一次GetSpectrumFromSpectrometer()函数,则软件会采集一次并返回数据;
- TriggerMode.level :电平触发模式,通过外部给光谱仪电平信号,则光谱仪会采集一次并返回光谱数据;
- TriggerMode.synchronous:同步触发模式,通过外部给光谱仪同步信号,则光谱仪会采集一次并返回光谱数据;
- TriggerMode.edge:沿触发模式,通过外部给光谱仪沿信号,则光谱仪会采集一次并返回光谱数据;
int spectrometerIndex = 0;wrapper.SetTriggerOfMode(spectrometerIndex, TriggerMode.normal);
- 制冷控制
如果是制冷型光谱仪,给光谱仪插入5V电源后(超过5V电源可能会烧坏光谱仪!不插外接电源,则光谱仪制冷功能无法开启),可以通过设置光谱仪的制冷函数来给光谱仪设置温度,如果是非制冷型光谱仪,则调用光谱仪制冷相关函数后,不会有任何相应反馈
//开启光谱仪的散热风扇,必须在开启制冷前先开启风扇,否则可能导致光谱仪CCD过热而性能不稳定w.SetFanOn();//开启光谱仪的热电制冷w.SetTECOn();//设置制冷温度,可以设置的温度区间可以通过获取最大或者最小温度来了解。 //设置的温度越小,光谱仪的噪声越小 ,但是如果温度过小,光谱仪无法稳定在该温度,则可能导致光谱仪采集光谱数据不稳定w.SetTemperature(-20);//获取光谱仪的CCD温度,可以根据获取的温度来判断设置的温度是否合理int celsius = w.ReadTemperature();//关闭光谱仪的热电制冷w.SetTECOff();//关闭光谱仪风扇w.SetFanOff();
附1:
安全建议:
在每次设完积分时间后,光谱仪会自动Reset以清除缓存。如在此时读取光谱,则有较小概率(<1/10000)出现取出一帧错乱光谱的现象。为完全避免此种情况的发生,建议在每次新设完积分时间t毫秒后,再等待t毫秒(可用timer)后再开始第一次查询、采谱。