Martin Deng / Mbed 2 deprecated SystemManagement

Dependencies:   CANBuffer mbed SystemManagement mbed-rtos

Dependents:   SystemManagement

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers TemperatureRead.h Source File

TemperatureRead.h

00001 /*
00002 Test Code
00003 #include "mbed.h"
00004 #include "TemperatureRead.h"
00005 
00006 AnalogIn Vin(p15);
00007 int main()
00008 {
00009     float resistance,temperature,Vadc=0;
00010     while(1)
00011     {
00012         Vadc=Vin.read()*VDD;
00013         //printf("Vadc:%f\n\r",Vadc);
00014         while(Vadc>0)
00015         {
00016             Vadc=Vin.read()*VDD;
00017             printf("Vadc:%f\n\r",Vadc);
00018             resistance=((float)R10K*Vadc)/((float)VDD + Vadc);
00019             temperature=ReadTemp(TR_USP10982_Map, resistance, TABLE_SIZE_USP10982);
00020             printf("Resistance:%f \n\r",resistance);
00021             printf("Temperature:%f \n\r",temperature);
00022             wait(0.5);
00023         }   
00024     }
00025 }    
00026 */
00027 #ifndef _TEMPERATURE_READ_
00028 #define _TEMPERATURE_READ_
00029 
00030 #define TABLE_SIZE_NXFT15XH103FA 34
00031 #define TABLE_SIZE_NTCLP00E3103H 26
00032 #define TABLE_SIZE_USP10982 121  
00033 #define R10K 10                        //Consider Resistance in Kohms
00034 #define VDD 3.33
00035 typedef struct 
00036 {
00037     float x;
00038     float y;
00039 }Temp_Resistance;
00040 
00041 Temp_Resistance TR_NXFT15XH103FA_Map[TABLE_SIZE_NXFT15XH103FA] ={
00042     { .x=   197.388 , .y=   -40 },
00043     { .x=   149.395 , .y=   -35 },
00044     { .x=   114.345 , .y=   -30 },
00045     { .x=   88.381  , .y=   -25 },
00046     { .x=   68.915  , .y=   -20 },
00047     { .x=   54.166  , .y=   -15 },
00048     { .x=   42.889  , .y=   -10 },
00049     { .x=   34.196  , .y=   -5  },
00050     { .x=   27.445  , .y=   0   },
00051     { .x=   22.165  , .y=   5   },
00052     { .x=   18.01   , .y=   10  },
00053     { .x=   14.72   , .y=   15  },
00054     { .x=   12.099  , .y=   20  },
00055     { .x=   10      , .y=   25  },
00056     { .x=   8.309   , .y=   30  },
00057     { .x=   6.939   , .y=   35  },
00058     { .x=   5.824   , .y=   40  },
00059     { .x=   4.911   , .y=   45  },
00060     { .x=   4.16    , .y=   50  },
00061     { .x=   3.539   , .y=   55  },
00062     { .x=   3.024   , .y=   60  },
00063     { .x=   2.593   , .y=   65  },
00064     { .x=   2.233   , .y=   70  },
00065     { .x=   1.929   , .y=   75  },
00066     { .x=   1.673   , .y=   80  },
00067     { .x=   1.455   , .y=   85  },
00068     { .x=   1.27    , .y=   90  },
00069     { .x=   1.112   , .y=   95  },
00070     { .x=   0.976   , .y=   100 },
00071     { .x=   0.86    , .y=   105 },
00072     { .x=   0.759   , .y=   110 },
00073     { .x=   0.673   , .y=   115 },
00074     { .x=   0.598   , .y=   120 },
00075     { .x=   0.532   , .y=   125 },
00076     };
00077     
00078 Temp_Resistance TR_NTCLP00E3103H_Map[TABLE_SIZE_NTCLP00E3103H] ={
00079     { .x=   332.094 , .y=   -40 },
00080     { .x=   239.9   , .y=   -35 },
00081     { .x=   175.2   , .y=   -30 },
00082     { .x=   129.287 , .y=   -25 },
00083     { .x=   96.358  , .y=   -20 },
00084     { .x=   72.5    , .y=   -15 },
00085     { .x=   55.046  , .y=   -10 },
00086     { .x=   42.157  , .y=   -5  },
00087     { .x=   32.554  , .y=   0   },
00088     { .x=   25.339  , .y=   5   },
00089     { .x=   19.872  , .y=   10  },
00090     { .x=   15.698  , .y=   15  },
00091     { .x=   12.488  , .y=   20  },
00092     { .x=   10      , .y=   25  },
00093     { .x=   8.059   , .y=   30  },
00094     { .x=   6.535   , .y=   35  },
00095     { .x=   5.33    , .y=   40  },
00096     { .x=   4.372   , .y=   45  },
00097     { .x=   3.605   , .y=   50  },
00098     { .x=   2.989   , .y=   55  },
00099     { .x=   2.49    , .y=   60  },
00100     { .x=   2.084   , .y=   65  },
00101     { .x=   1.753   , .y=   70  },
00102     { .x=   1.481   , .y=   75  },
00103     { .x=   1.256   , .y=   80  },
00104     { .x=   1.07    , .y=   85  },
00105 
00106     };    
00107     
00108 Temp_Resistance TR_USP10982_Map[TABLE_SIZE_USP10982] ={
00109     { .x=   336.479 , .y=   -40 },
00110     { .x=   314.904 , .y=   -39 },
00111     { .x=   294.848 , .y=   -38 },
00112     { .x=   276.194 , .y=   -37 },
00113     { .x=   258.838 , .y=   -36 },
00114     { .x=   242.681 , .y=   -35 },
00115     { .x=   227.632 , .y=   -34 },
00116     { .x=   213.61  , .y=   -33 },
00117     { .x=   200.539 , .y=   -32 },
00118     { .x=   188.349 , .y=   -31 },
00119     { .x=   176.974 , .y=   -30 },
00120     { .x=   166.356 , .y=   -29 },
00121     { .x=   156.441 , .y=   -28 },
00122     { .x=   147.177 , .y=   -27 },
00123     { .x=   138.518 , .y=   -26 },
00124     { .x=   130.421 , .y=   -25 },
00125     { .x=   122.847 , .y=   -24 },
00126     { .x=   115.759 , .y=   -23 },
00127     { .x=   109.122 , .y=   -22 },
00128     { .x=   102.906 , .y=   -21 },
00129     { .x=   97.081  , .y=   -20 },
00130     { .x=   91.621  , .y=   -19 },
00131     { .x=   86.501  , .y=   -18 },
00132     { .x=   81.698  , .y=   -17 },
00133     { .x=   77.19   , .y=   -16 },
00134     { .x=   72.957  , .y=   -15 },
00135     { .x=   68.982  , .y=   -14 },
00136     { .x=   65.246  , .y=   -13 },
00137     { .x=   61.736  , .y=   -12 },
00138     { .x=   58.434  , .y=   -11 },
00139     { .x=   55.329  , .y=   -10 },
00140     { .x=   52.407  , .y=   -9  },
00141     { .x=   49.656  , .y=   -8  },
00142     { .x=   47.066  , .y=   -7  },
00143     { .x=   44.626  , .y=   -6  },
00144     { .x=   42.327  , .y=   -5  },
00145     { .x=   40.159  , .y=   -4  },
00146     { .x=   38.115  , .y=   -3  },
00147     { .x=   36.187  , .y=   -2  },
00148     { .x=   34.368  , .y=   -1  },
00149     { .x=   32.65   , .y=   0   },
00150     { .x=   31.029  , .y=   1   },
00151     { .x=   29.498  , .y=   2   },
00152     { .x=   28.052  , .y=   3   },
00153     { .x=   26.685  , .y=   4   },
00154     { .x=   25.392  , .y=   5   },
00155     { .x=   24.17   , .y=   6   },
00156     { .x=   23.013  , .y=   7   },
00157     { .x=   21.918  , .y=   8   },
00158     { .x=   20.882  , .y=   9   },
00159     { .x=   19.901  , .y=   10  },
00160     { .x=   18.971  , .y=   11  },
00161     { .x=   18.09   , .y=   12  },
00162     { .x=   17.255  , .y=   13  },
00163     { .x=   16.463  , .y=   14  },
00164     { .x=   15.712  , .y=   15  },
00165     { .x=   14.999  , .y=   16  },
00166     { .x=   14.323  , .y=   17  },
00167     { .x=   13.681  , .y=   18  },
00168     { .x=   13.072  , .y=   19  },
00169     { .x=   12.493  , .y=   20  },
00170     { .x=   11.942  , .y=   21  },
00171     { .x=   11.419  , .y=   22  },
00172     { .x=   10.922  , .y=   23  },
00173     { .x=   10.45   , .y=   24  },
00174     { .x=   10      , .y=   25  },
00175     { .x=   9.572   , .y=   26  },
00176     { .x=   9.165   , .y=   27  },
00177     { .x=   8.777   , .y=   28  },
00178     { .x=   8.408   , .y=   29  },
00179     { .x=   8.057   , .y=   30  },
00180     { .x=   7.722   , .y=   31  },
00181     { .x=   7.402   , .y=   32  },
00182     { .x=   7.098   , .y=   33  },
00183     { .x=   6.808   , .y=   34  },
00184     { .x=   6.531   , .y=   35  },
00185     { .x=   6.267   , .y=   36  },
00186     { .x=   6.015   , .y=   37  },
00187     { .x=   5.775   , .y=   38  },
00188     { .x=   5.545   , .y=   39  },
00189     { .x=   5.326   , .y=   40  },
00190     { .x=   5.117   , .y=   41  },
00191     { .x=   4.917   , .y=   42  },
00192     { .x=   4.725   , .y=   43  },
00193     { .x=   4.543   , .y=   44  },
00194     { .x=   4.368   , .y=   45  },
00195     { .x=   4.201   , .y=   46  },
00196     { .x=   4.041   , .y=   47  },
00197     { .x=   3.888   , .y=   48  },
00198     { .x=   3.742   , .y=   49  },
00199     { .x=   3.602   , .y=   50  },
00200     { .x=   3.468   , .y=   51  },
00201     { .x=   3.34    , .y=   52  },
00202     { .x=   3.217   , .y=   53  },
00203     { .x=   3.099   , .y=   54  },
00204     { .x=   2.986   , .y=   55  },
00205     { .x=   2.878   , .y=   56  },
00206     { .x=   2.774   , .y=   57  },
00207     { .x=   2.675   , .y=   58  },
00208     { .x=   2.579   , .y=   59  },
00209     { .x=   2.488   , .y=   60  },
00210     { .x=   2.4     , .y=   61  },
00211     { .x=   2.316   , .y=   62  },
00212     { .x=   2.235   , .y=   63  },
00213     { .x=   2.157   , .y=   64  },
00214     { .x=   2.083   , .y=   65  },
00215     { .x=   2.011   , .y=   66  },
00216     { .x=   1.942   , .y=   67  },
00217     { .x=   1.876   , .y=   68  },
00218     { .x=   1.813   , .y=   69  },
00219     { .x=   1.752   , .y=   70  },
00220     { .x=   1.693   , .y=   71  },
00221     { .x=   1.637   , .y=   72  },
00222     { .x=   1.582   , .y=   73  },
00223     { .x=   1.53    , .y=   74  },
00224     { .x=   1.48    , .y=   75  },
00225     { .x=   1.432   , .y=   76  },
00226     { .x=   1.385   , .y=   77  },
00227     { .x=   1.34    , .y=   78  },
00228     { .x=   1.297   , .y=   79  },
00229     { .x=   1.255   , .y=   80  },
00230     };
00231         
00232 float ReadTemp(const Temp_Resistance *table, float value, size_t SIZE)
00233 {
00234     //Search using Binary Search. Logarithmic passes
00235     int result=SIZE, slope=0;
00236     size_t firstPos=0;
00237     size_t lastPos=SIZE;
00238     size_t middlePos=0;
00239     size_t temp_mid=1;
00240     //printf("Value:%f\n\r",value);
00241     while(temp_mid!=middlePos)
00242     {
00243         temp_mid=middlePos;
00244         middlePos = firstPos + (lastPos-firstPos)/2;
00245         if(table[middlePos].x == value)
00246         {
00247             lastPos = middlePos;
00248             result = middlePos;
00249         }
00250         
00251         if(table[middlePos].x < value) 
00252         {
00253             lastPos = middlePos;
00254             result = middlePos;         
00255         }
00256         
00257         else if(table[middlePos].x > value)
00258         {
00259             firstPos = middlePos;
00260         }
00261     }
00262     //printf("Result:%d\n\r",result);
00263     if(result == 0)
00264         return  table[result].y;
00265     else if(result == SIZE)
00266         return  table[result - 1].y;
00267     
00268     slope = (table[result].y - table[result-1].y)/(table[result].x - table[result-1].x);
00269     return (slope*(value - table[result].x) + table[result].y);          
00270 }
00271 #endif /*_TEMPERATURE_READ_*/