通用的ADC数据处理子程序 ---线性插值

STMCU 发表于 2020-02-05 16:26:10 收藏 已收藏
赞(0) •  评论(0

通用的ADC数据处理子程序 ---线性插值

STMCU 发表于 2020-02-05 16:26:10
+关注

虽然这个话题是程序员的基本功,但是,每一次实际使用时都要“重新编程+除错”折腾一番。
于是,萌发了搞一个“通用的”,目的是,下次用到时,拿过来就用。
大家看看我的方法是不是最佳的,欢迎提出改进方案。

由MCU的ADC读到的“真实世界”的数据,0~1023对应10bit的ADC,0~4095对应12bit,0~65535对应16bit。通常,这些数据都要通过简单的数据处理,变换成电压/电流/温度/压力/等等意义明确的数值,用于传输或者显示。

线性插值,就是最最常用的数据处理方法。 直线函数公式:

 


应用实例,某电池的“电压—容量”测量估算结果,大致如下图所示:

 

由曲线上面可以看出,虽然已经有了10组实测数据,但是只要取其中黄色的4组数据,也就是用3段直线进行线性插值,就可以得到很好的“近似结果”。
下图,就是用我的“通用线性插值程序”得到的计算结果,看图形,基本上一样的。
(注意,ADC数据所对应的电池电压值,只是测量ADC数据时用可调电源代替电池的外加电压,它们并不参与运算。 直接由ADC数据插值出电池的剩余电量。)

正弦曲线测试实例,使用37个X轴等间隔的数据(每10度一个),线性插值出0-360度的范围一段正弦曲线的结果:
(为了提高转换精度,合理的做法是在曲线变化剧烈的部分,密集取点;线性好的部分,少量取点。而不是采用等间隔的方式取点。)

 

最后,给出子程序:
需要说明的是,笔者对有符号的整数(int)和浮点数(float)有“原始的抵触”,喜欢使用无符号整数类型(uint)。所以只做出了整数类型的。

声明:本文由入驻电子说专栏的作者撰写或者网上转载,观点仅代表作者本人,不代表电子发烧友网立场。如有侵权或者其他问题,请联系举报。侵权投诉

收藏

相关话题

评论(0)

加载更多评论

分享到

QQ空间 QQ好友 微博
取消