不久前,我发表了一个基于自热达林顿晶体管对的热空速传感器的简单设计思路。参见图1。
图1 采用自热达林顿对的热气流传感器的旧设计思路。
电路中Q1起到自热传感器的作用。其Vbe温度系数将温度转换为电压,然后通过A2进行补偿并缩放至5V范围。同时,200mV参考电压A1将Q1的加热电流调节至0.2V/R3=67mA,从而实现67mA*4.8V=320mW的恒定功耗。由此产生的环境温度与结温的差异提供了空速读数,因为它从0fpm时高于环境温度64℃的Delta T冷却到了2000fpm时的22℃。
如图2所示,这种传感器结构简单、灵敏度高,而且是固态的,但会受到完全非线性的空速响应的影响。
图2 热传感器的Vout与空速响应之间非常非线性。
读者Konstantin Kim提出了一个精明且有用的建议,从而产生了如图3所示的反对数线性化VFC。
图3 反对数线性化VFC。
图3对图4的蓝色曲线所示的线性度做出了有益的改进,但其在中部范围仍然存在~12%的FS误差,显然还远不够完美。
图4 图3的反对数VFC的空速响应线性度更好,但仍不理想。
DI的资深撰稿人Jordan Dimitrov注意到了这一缺点,并提供了一个简洁的计算数值解决方案,几乎消除了这一问题,并使净响应近乎完全线性,他恰当的函数可将热晶体管风速计线性化,让误差小于0.2%。
干得好,Dimitrov先生!
然而,在模数转换后的数字域中进行线性化,而不是在转换前的模拟域中进行线性化,会导致所需的ADC分辨率大幅增加,即从11位增加到15位。
原因如下。
要采集分辨率为1fpm的0至2000fpm的线性空速信号,需要的ADC分辨率为1 in 2000=11位。但观察图2的曲线可以发现,虽然空速信号的满量程跨度为5V,但与空速从1999fpm增至2000fpm相关的信号变化仅为0.2mV。因此,要在解决后者问题的同时保持前者的量程,需要的最小ADC分辨率为1 in 5/0.0002=1 in 25000=14.6位。
15位(和更高分辨率)ADC既不算罕见,也不是特别昂贵,但它们通常不是Dimitrov先生文章中提到的微控制器内的集成外设。因此,提供一个分辨率足以满足其设计需求的ADC可能会需要巨大的成本,这似乎是有道理的。
这促使我想知道性能更好的模拟线性化方案是否可行。如果可行,而且实施起来不会太复杂或太昂贵,那么它就可以提供一种替代数字解决方案的方案,具有类似的性能,但不需要高分辨率ADC。事实证明,这是可行的。图5显示了具体操作方法。
图5 添加一个电阻器(R6)并调整另一个电阻器(R1)消除了图3中模拟线性化的凸起。
提高线性度的关键在于添加电阻器R6。它的作用是降低555引脚2上锯齿定时波形的幅度,使其提前触发,触发量与反对数Q2的集电极电流成比例。这样就缩短了VFC周期,并通过非线性校正因子提高了VFC频率,结果如图6所示。
如图6和图7(放大比例)所示,由此产生的空速函数与完美线性的偏差仅为-0.4%至+0.2%等于-8至+4fpm。
图6 叠加的蓝色和黑色线条显示了VFC改进后模拟线性度的提高。
图7 图6中放大的残余线性误差。
诚然,这当然不如Dimitrov先生令人印象深刻的后转换的数值结果,但对于简单的模拟解决方案来说也许还是可以接受的。无论如何,在实际应用中,这比对传感器精度的任何合理预期都要好,而两者之间的差异似乎更多只具有学术意义。
(原文刊登于EDN美国版,参考链接:Adding one resistor improves anemometer analog linearity to better than +/-0.5%,由Ricardo Xie编译)