光透过率计-实现篇
上回说到:我们最终决定使用DSM调制LED光强,由此来测算样品的透过率。
在这篇文章里,我们主要探讨具体的实现方法,如何把理论变成实际的产品。
MCU与片载外设
MCU
MCU我们选择WCH出品的CH32V203C8,成本不算高,但是主频高达144MHz,支持DMA,外设够用,Risc-V内核性能也相当给力。
外设
ADC
我们选的单片机有12bit SAR ADC,采样率可达1MHz,刚好够用。
数字比较器(DCMP)
我们翻遍单片机的手册,似乎并没有找到名为“DCMP”的外设,这对吗?
你看,TIM外设,它有CC通道。CC是什么?捕获和比较!简单来说就是比较counter寄存器和CC寄存器的值,然后输出高电平或者低电平。这不正是我们要找的数字比较器吗?
值得注意的是,因为我们不再使用定时器的“定时”功能,所以有必要把它的时钟关掉,以防counter乱跑。
主时钟
一个TIM外设,负责定时触发ADC采样,从而触发DMA请求,然后DMA把数据搬去DCMP,DCMP输出单比特流。
所以单比特流的频率就取决于这个主时钟频率。
读数定时器
一个配置为门控模式的TIM。如果DCMP输出为高,则计数,否则不计数。
通过读取这个定时器的值,我们就可以知道LED总共点亮了多长时间。
这个定时器的比特数直接影响了DSM的分辨率,所以应该会选用那个32bit的TIM4外设。
DMA
负责将数据从ADC搬运到DCMP
CPU
配置和初始化外设
初始化之后就闲着。偶尔通过i2c写写屏幕,轻松自在。
由于要让DMA的延迟降到最低,所以CPU对总线的访问优先级应该低于DMA,以防造成jitter、噪声和一些不必要的误差。
工作流程
主定时器每10uS触发一次ADC采样。ADC采样完成之后会触发DMA请求,DMA将ADC的数据搬到TIM_DCMP的Counter计数器里。TIM_DCMP将Counter寄存器的值和CC寄存器的值进行比较,得到单比特流,输出给GPIO,驱动LED。与此同时,这个单比特流门控TIM_READ。
一段时间后(记作 \(T_{total}\)),读取TIM_READ的计数(记作 \(T_{on}\)),则可知输出强度比例为\(T_{on}/T_{total}\)。
外围电路
外围很简单:LED及其驱动电路,光电管及其放大电路,电源以及一些杂七杂八的东西。
LED和它的驱动电路
LED驱动,主要讲究的是一个恒流驱动,因为LED的输出功率对电压变化过于敏感,并不容易实现稳定的电压控制。
另一个需要注重的方面,是电流的上升时间和下降时间。在电流上升和下降的过程中,LED的光强并不是严格的100%或0%,如果上升下降很慢,就会引入极其严重的误差。所以上升下降时间必须极其短,简而言之,要快。
有人会问说:“你直接把LED接个限流电阻,再接GPIO不就好了吗?”。对此我做过仿真。如果限流电阻较小,电流上升下降速度倒是够快,但是会有很大的过冲,甚至振铃,可能导致LED烧毁。如果限流电阻较大,则电流太小,达不到额定亮度。所以使用恒流驱动是很有必要的
所以应该选择高压摆率的运放用于构建恒流驱动,线路尽可能短,LED也要选择封装较小的,以减小寄生电容。
当然成本也是很重要的考量因素,因为超高速的运放一般也超级贵。给到运放的成本预算是零售价小于等于5元。暂时选定TI的OPA354AIDBVR,带宽高达100MHz,压摆率高达150V/uS,输出电流高达100mA。
LED选型目前来讲有两种方案:一种是普通的红色LED,另一种是激光二极管(严格来讲不算是LED,是LD,但是反正都是发光元件,就暂且相提并论吧)。
普通LED的优势是及其便宜,且皮实耐造。但是响应速度可能比较慢(d老师认为跑100kHz绰绰有余,但是具体行不行,还是得看实验)。并且光谱分散,不能测定单独频率的透光率。
激光二极管的优势主要在于它发射的是单色光,不像普通红色LED可能还会发射一点红外线什么的。并且据d老师说激光二极管响应速度比普通LED快(没有具体的佐证资料)。
根据一些资料来看,似乎激光二极管非常金贵,容易被静电打坏。另外激光二极管一般还带有一个反馈的光电二极管用于闭环控制,因为激光二极管“对电流和温度及其敏感”。
但是又有说法称,这些都是早期激光二极管的缺点,现在经过改善,很多激光二极管已经不需要反馈光电二极管了。
另外激光二极管显然比普通LED贵得多。
综上,暂时选用最普通的额定20mA的侧贴红色LED吧(峰值波长600~650)。
光电管及其放大电路
因为我们要搞低成本,所以我们选择了世界上最便宜的光电二极管:LED。
是的,LED在受到外界光线照射时,也会产生光电流。并且最敏感的波段正是其发光的峰值波段。
搞定了光电管,再来搞放大电路。光电二极管相当于一个微小的恒流源,这种场景使用跨阻放大器再合适不过。
放大器这里选的是德州仪器的TLV9001IDBVR,价格低廉,输入偏置电流低至5pA。
电源方案
USB 5V供电,通过两个XC6206产生两路3.3V,一个给单片机的模拟电源VDDA和光电放大电路供电,另一个给单片机的数字电源VDD供电。LED驱动的电源则直连5V。