锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

b3950热敏电阻的(二分查找)查表法实现

时间:2023-11-05 12:07:01 电阻1333

b3950热敏电阻(二分搜索)查表法

    • 开发环境
    • 采集热敏电阻温度有两种方法:
      • 查表法的完整实现
    • 展望

开发环境

基于以下开发环境,如果开发环境不同,可能达不到预期效果。  IDE:AtmelStudio 7 toochain:avr-gcc  MCU  :atmega128A 

采集热敏电阻温度有两种方法:

1.公式计算法根据转换公式直接测量的电阻值计算温度;
2.查表法也是本例采用的算法
由于嵌入式设备MCU计
算能力弱(浮点操作慢),所以通常采用查表法。

该算法的功能:根据电阻值获得相应的温度。
该算法可分为二分算法。
难点:找到和比较的对象是浮点数,阻值不连续,所以要考虑两个典型阻值之间的阻值。

查表法的完整实现

如下编码在avr-gcc实现,测试。

#include "b3950.h" #include   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 ,9.5709 }, { 
         27 ,9.1626 }, { 
         28 ,8.7738 }, { 
         29 ,8.4037 }, { 
         30 ,8.0512 }, { 
         31 ,7.7154 }, { 
         32 ,7.3953 }, { 
         33 ,7.0903 }, { 
         34 ,6.7995 }, { 
         35 ,6.5221 }, { 
         36 ,6.2576 }, { 
         37 ,6.0051 }, { 
         38 ,5.7642 }, { 
         39 ,5.5342 }, { 
         40 ,5.3146 }, { 
         41 ,5.1049 }, { 
         42 ,4.9045 }, { 
         43 ,4.7130 }, { 
         44 ,4.5300 }, { 
         45 ,4.3551 }, { 
         46 ,4.1878 }, { 
         47 ,4.0278 }, { 
         48 ,3.8748 }, { 
         49 ,3.7283 }, { 
         50 ,3.5882 }, { 
         51 ,3.4540 }, { 
         52 ,3.3255 }, { 
         53 ,3.2025 }, { 
         54 ,3.0846 }, { 
         55 ,2.9717 }, { 
         56 ,2.8635 }, { 
         57 ,2.7597 }, { 
         58 ,2.6603 }, { 
         59 ,2.5649 }, { 
         60 ,2.4734 }, { 
         61 ,2.3856 }, { 
         62 ,2.3014 }, { 
         63 ,2.2206 }, { 
         64 ,2.1431 }, { 
         65 ,2.0686 }, { 
         66 ,1.9970 }, { 
         67 ,1.9283 }, { 
         68 ,1.8623 }, { 
         69 ,1.7989 }, { 
         70 ,1.7380 }, { 
         71 ,1.6794 }, { 
         72 ,1.6231 }, { 
         73 ,1.5689 }, { 
         74 ,1.5168 }, { 
         75 ,1.4667 }, { 
         76 ,1.4185 }, { 
         77 ,1.3722 }, { 
         78 ,1.3275 }, { 
         79 ,1.2845 }, { 
         80 ,1.2431 }, { 
         81 ,1.2033 }, { 
         82 ,1.1649 }, { 
         83 ,1.1279 }, { 
         84 ,1.0923 }, { 
         85 ,1.0580 }, { 
         86 ,1.0249 }, { 
         87 ,0.9930 }, { 
         88 ,0.9623 }, { 
         89 ,0.9326 }, { 
         90 ,0.9040 }, { 
         91 ,0.8764 }, { 
         92 ,0.8498 }, { 
         93 ,0.8241 }, { 
         94 ,0.7994 }, { 
         95 ,0.7754 }, { 
         96 ,0.7523 }, { 
         97 ,0.7300 }, { 
         98 ,0.7085 }, { 
         99 ,0.6877 }, { 
         100,0.6676 }, { 
         101,0.6482 }, { 
         102,0.6295 }, { 
         103,0.6113 }, { 
         104,0.5938 }, { 
         105,0.5769 }, { 
         106,0.5605 }, { 
         107,0.5447 }, { 
         108,0.5293 }, { 
         109,0.5145 }, { 
         110,0.5002 }, { 
         111,0.4863 }, { 
         112,0.4729 }, { 
         113,0.4599 }, { 
         114,0.4474 }, { 
         115,0.4352 }, { 
         116,0.4234 }, { 
         117,0.4120 }, { 
         118,0.4009 }, { 
         119,0.3902 }, { 
         120,0.3799 }, { 
         121,0.3698 }, { 
         122,0.3601 }, { 
         123,0.3506 }, { 
         124,0.3415 }, { 
         125,0.3326 }, { 
         126,0.3240 }, { 
         127,0.3157 }, { 
         128,0.3076 }, { 
         129,0.2998 }, { 
         130,0.2922 }, { 
         131,0.2848 }, { 
         132,0.2776 }, { 
         133,0.2707 }, { 
         134,0.2640 }, { 
         135,0.2574 }, { 
         136,0.2511 }, { 
         137,0.2449 }, { 
         138,0.2389 }, { 
         139,0.2331 }, { 
         140,0.2274 }, { 
         141,0.2220 }, { 
         142,0.2166 }, { 
         143,0.2114 }, { 
         144,0.2064 }, { 
         145,0.2015 }, { 
         146,0.1968 }, { 
         147,0.1922 }, { 
         148,0.1877 }, { 
         149,0.1833 }, { 
         150,0.1791 }, { 
         151,0.1749 }, { 
         152,0.1709 }, { 
         153,0.1670 }, { 
         154,0.1632 }, { 
         155,0.1595 }, { 
         156,0.1559 }, { 
         157,0.1524 }, { 
         158,0.1490 }, { 
         159,0.1457 }, { 
         160,0.1425 }, { 
         161,0.1394 }, { 
         162,0.1363 }, { 
         163,0.1333 }, { 
         164,0.1304 }, { 
         165,0.1276 }, { 
         166,0.1249 }, { 
         167,0.1222 }, { 
         168,0.1196 }, { 
         169,0.1170 }, { 
         170,0.1146 }, { 
         171,0.1121 }, { 
         172,0.1098 }, { 
         173,0.1075 }, { 
         174,0.1053 }, { 
         175,0.1031 }, { 
         176,0.1010 }, { 
         177,0.0989 }, { 
         178,0.0969 }, { 
         179,0.0949 }, { 
         180,0.0930 }, { 
         181,0.0911 }, { 
         182,0.0893 }, { 
         183,0.0875 }, { 
         184,0.0858 }, { 
         185,0.0841 }, { 
         186,0.0824 }, { 
         187,0.0808 }, { 
         188,0.0792 }, { 
         189,0.0777 }, { 
         190,0.0762 }, { 
         191,0.0747 }, { 
         192,0.0733 }, { 
         193,0.0719 }, { 
         194,0.0705 }, { 
         195,0.0692 }, { 
         196,0.0679 }, { 
         197,0.0666 }, { 
         198,0.0654 }, { 
         199,0.0642 }, }; static volatile float rMid,tempR,tempDeltaL,tempDeltaR; static volatile u8 left,right,mid; static volatile int16 t; int16 FindTempByRes(float res) { 
          t = 0; rMid = 0; left = mid = 0; right = 219; while(left<right) { 
          mid = (left+right)/2; rMid = pgm_read_float(&(tr_array[mid].r));//tr_array[mid].r;//pgm_read_float(&(tr_array[mid].r)); if(rMid>res){ 
         //数组索引越大阻值越小 //检查最大值 tempR = pgm_read_float(&(tr_array[mid + 1].r)); if(res>tempR)//tr_array[mid+1].r < res < tr_array[mid].r { 
          tempDeltaL = rMid - res; tempDeltaR = res - tempR; if(tempDeltaL < tempDeltaR) { 
          t = pgm_read_word(&(tr_array[mid].t)); break; }else { 
          t = pgm_read_word(&(tr_array[mid+1].t 

相关文章