《高分辨率温度采集算法优化》由会员分享,可在线阅读,更多相关《高分辨率温度采集算法优化(3页珍藏版)》请在金锄头文库上搜索。
1、 高分辨率温度采集算法优化摘要:本文表述一种高效、实用的高分辨率的温度采集算法,适用于低成本 8位单片机(本文所用单片机为为意法半导体 STM8L152K4T6) ,以实现空调高精度控制。除了温度采集外,此算法适合其他非线性的模拟量采集,提高采集分辨率。关键字:AD 采集;单片机;STM8L152K4T6;高分辨率;非线性引言随着生活质量的提高,人们对空调控制要求越来越精确。传统 1分辨率的控制精度已经不能满足要求。单片机也越来越强大,集成 10bit、12bitADC 的单片机也已经很普遍,让低成本、高精度、高分辨率温度采集成为现实。1 传统方法优缺点分析第一种是直接查表法。表中的值为温度值
2、,根据 AD 采样值,直接查表得出温度值。此方法可以很好解决模拟量的非线性问题,同时处理速度快。最大缺点是无法做到高分辨率。8bitAD 采样,表格大小为 256byte,10bit 就会变为2*1024byte,12bit 的话 2*4096byte。表格巨大,制作难度也大。第二种做法,将温度曲线分为 8 段,求出每一段的线性表达式,将得到的系数存为表格。每段进行线性计算。此方法可以做到很高的分辨率,而且不需要表格。缺点是,人为分的这 8 段,每一段假定为线性,单并非真实的线性,整数部分可能出现偏差,同时由于系数往往不是整数,因此此方法计算量大,8 位单片机运行负担较重。2 二分查表求值法结
3、合两种方法的优点,可以做一个新的算法。整数部分通过查表求得,保证准确,小数部分线性插值,提高分别率。此方法可以无需很大的表格,可以得到 0.1 度的分辨率。下面以 12bit AD 为例,表述具体实现方法。2.1 表格制作:区别与传统方法,按照 AD 值,做温度表,表格中存放温度值;此法是根据温度值,做 AD 值的表,表格中存放的是 AD 值。如 25 度为 10K,通过计算就可以得到 AD 值:1830 。以此类推,-20100做 121 个值的表格 Tab121(int 型),占用空间 242byte。表格的大小由温度点个数决定,不受 AD 分辨率影响。2.2 具体算法:2.2.1:得到
4、AD 值2.2.2:查找整数部分表格内的值不能举尽所有 AD 采样值,所以无法直接查表得出对应温度。最简单的方法是得到的 AD 值同表格内的的值比较一遍,直到 Tabi TempADTabi-1)TempInt = i-1;break; 此方法有遍历表格中的每一个数据,速度较慢。因此采用二分法来进行快速查询。首先 AD 值比较表格中 Tab0Tab120中间的数据 Tab60,如果 AD Tab60,就比较 Tab60Tab120数据中间数据 Tab90,如果 AD TempAD) TempMin = TempCal;/取上半部分,得到最小值else TempMax = TempCal; /取
5、下半部,达到最大值TempCal = TempMin + TempMax;TempCal = TempCal1 ; Temp = TempCal*10; /整数部分2.2.3:计算小数部分Tabi 、Tabi+1间隔为 1 度,在一度范围内可认为阻值随温度线性变化,对这一度进行插值计算。ADBuf = Tabi+1 -Tabi实际 AD 值与 Tabi的差值ADBuf2 = AD - Tabi所以小数部分可以计算TempDecimal = 1*(ADBuf2/ ADBuf)取合适的小数位数。最终 Temp = TempInt + TempDecimalBuf1 = TempADTabTempC
6、al+1;Buf2 = TempADTabTempCal;Buf1 = Buf1 - Buf2;if(ADCVal TempADTabTempCal) Buf2 = ADCVal - TempADTabTempCal;else Buf2 = 0;Buf2 = Buf2 * 10;Buf1 = Buf2 / Buf1; /小数部分Temp = Temp +Buf1;整个计算占用时钟周期约 400 个,分辨率为 0.1。结束语市场要求空调的控制越来越精确,但是在成本压力下,能充分利用传统的8 位单片机的资源得到更精确的控制,在不增加成本的前提下得到更精准的控制,无意是最好的选择。本文提出的方法 AD 采集的整数部分通过查表得到,小数部分相当于把每个温度点分成一段,进行插值计算,所以既有查表的准确,又有插值的分辨率,而且计算量中等。既满足高精度的要求,有对单片机的性能要求不高,是一种不错的折中选择。