b3950热敏电阻的(二分查找)查表法
开发环境
本文的基于如下开发环境,若开发环境不同可能不能达到预期效果。
IDE:AtmelStudio 7
toochain:avr-gcc
MCU :atmega128A
通过热敏电阻采集温度有两种方法:
1.公式计算法,根据转换公式直接通过测量得到的阻值计算出温度;
2.查表法,也是本例采用的算法,使用
由于嵌入式式设备MCU的计算能力比较弱(浮点运算比较慢),所以通常采用查表法。
这个算法的功能:根据电阻阻值获取对应的温度。
这个算法可以归类在二分算法下。
难点:查找和比较的对象是浮点数,并且阻值不连续,所以要考虑阻值在两个典型阻值之间的问题。
一种查表法的完整实现
如下编码在avr-gcc中实现,测试。
#include "b3950.h"
#include <avr/pgmspace.h>
typedef struct
{
int16 t;
float r;
}sToR;
const sToR tr_array[] PROGMEM =
{
{
-20,97.8396f},
{
-19,92.3020},
{
-18,87.1124},
{
-17,82.2471},
{
-16,77.6837},
{
-15,73.4018},
{
-14,69.3823},
{
-13,65.6077},
{
-12,62.0616},
{
-11,58.7288},
{
-10,55.5953},
{
-9 ,52.6480},
{
-8 ,49.8747},
{
-7 ,47.2643},
{
-6 ,44.8062},
{
-5 ,42.4906},
{
-4 ,40.3086},
{
-3 ,38.2516},
{
-2 ,36.3117},
{
-1 ,34.4817},
{
0 ,32.7547},
{
1 ,31.1243},
{
2 ,29.5847},
{
3 ,28.1301},
{
4 ,26.7556},
{
5 ,25.4562},
{
6 ,24.2274},
{
7 ,23.0650},
{
8 ,21.9650},
{
9 ,20.9239},
{
10 ,19.9380},
{
11 ,19.0041},
{
12 ,18.1193},
{
13 ,17.2807},
{
14 ,16.4857},
{
15 ,15.7317},
{
16 ,15.0164},
{
17 ,14.3376},
{
18 ,13.6933},
{
19 ,13.0816},
{
20 ,12.5005},
{
21 ,11.9485},
{
22 ,11.4239},
{
23 ,10.9252},
{
24 ,10.4510},
{
25 ,10.0000},
{
26