最近的一个设计思路提出了一种电路,利用达林顿管中的两个晶体管来测量高至2000fpm的气流速率。其中一个晶体管用作自加热的热传感器,另一个晶体管用于补偿环境温度的变化。该电路既智能又简单,不过输入流速以极其非线性的方式决定着输出电压。本文介绍了两种硬件选项来线性化传感器的响应,从而可将非线性度降低至最大流速的10-12%左右。
现代微控制器具有强大的计算能力,有时价格还很低廉,因此值得尝试依次去寻找非线性问题的计算解决方案。
在开始之前,让我们先回顾一下线性化的原理:处理传感器电路输出信号的电路或计算公式必须生成传感器响应的反函数。例如,如果传感器响应是对数函数,则线性化部分的响应必须是指数函数。
这项工作首先需要获取传感器响应的46个离散点(参见参考文章中的图4)。刚开始时,自由度的步长很小,曲线上升很快,随着曲线变得越来越平坦,自由度的步长逐渐变大。尝试使用分段近似或三次样条拟合流速与电压响应的关系,可以将线性误差降低至1-2%,但代价是公式很臃肿。如果能用一个平滑函数覆盖整条曲线,效果会更好。
测试了几个不同复杂度的函数。结果最好的是一个复合函数:
其中N是微控制器生成的数字,Vs是传感器电路的输出电压。A到D四个系数的存在提供了很大的灵活性来拟合所需的点集。
MS Excel的Solver(求解)工具为未知系数找到了合适的值:
A=10525.4,B=-4.49563,C=9103.05,D=-1.36567。
如图1所示,让传感器电压通过该函数,可以在要显示的数字N和流速之间建立一个高度线性的关系。图2呈现了响应的离散点与最佳拟合线性方程之间的偏差。误差在±2.5fpm范围内,即最大流速的0.125%。这比参考文章中的硬件解决方案好了80倍。还有一个重要的特点,那就是误差只会影响显示数字的最后一位。
图1 该计算方法在显示的数字和气流速率之间提供了一个高度线性的1:1的关系。
图2 仔细观察可以发现整体响应的非线性很小。
在实际应用中,由于A/D转换的误差、数字大小的限制以及计算过程中四舍五入的误差,误差可能不会这么小,但是它仍然比硬件解决方案好得多。
如果您觉得推荐的函数过于复杂,可以尝试其他任何函数。有关如何使用求解工具的教程,请点击此处。取消选中“Make Unconstrained Variables Non-negative”(使无约束变量非负)的框,这样未知系数就可以得到负值。
(原文刊登于EDN美国版,参考链接:Proper function linearizes a hot transistor anemometer with less than 0.2 % error,由Ricardo Xie编译)