System Management code
Dependencies: CANBuffer mbed SystemManagement mbed-rtos
System Management code for Penn Electric Racing
Functions:
Controls Fans and Pumps via instruction from CAN Messages, ramps them up over time to prevent damage
Turns on/off DC-DC converter via instruction from CAN Messages
Temperature_Read/TemperatureRead.h
- Committer:
- martydd3
- Date:
- 2014-10-10
- Revision:
- 7:5f6e31faa08e
- Parent:
- 0:e516fcccccda
File content as of revision 7:5f6e31faa08e:
/* Test Code #include "mbed.h" #include "TemperatureRead.h" AnalogIn Vin(p15); int main() { float resistance,temperature,Vadc=0; while(1) { Vadc=Vin.read()*VDD; //printf("Vadc:%f\n\r",Vadc); while(Vadc>0) { Vadc=Vin.read()*VDD; printf("Vadc:%f\n\r",Vadc); resistance=((float)R10K*Vadc)/((float)VDD + Vadc); temperature=ReadTemp(TR_USP10982_Map, resistance, TABLE_SIZE_USP10982); printf("Resistance:%f \n\r",resistance); printf("Temperature:%f \n\r",temperature); wait(0.5); } } } */ #ifndef _TEMPERATURE_READ_ #define _TEMPERATURE_READ_ #define TABLE_SIZE_NXFT15XH103FA 34 #define TABLE_SIZE_NTCLP00E3103H 26 #define TABLE_SIZE_USP10982 121 #define R10K 10 //Consider Resistance in Kohms #define VDD 3.33 typedef struct { float x; float y; }Temp_Resistance; Temp_Resistance TR_NXFT15XH103FA_Map[TABLE_SIZE_NXFT15XH103FA] ={ { .x= 197.388 , .y= -40 }, { .x= 149.395 , .y= -35 }, { .x= 114.345 , .y= -30 }, { .x= 88.381 , .y= -25 }, { .x= 68.915 , .y= -20 }, { .x= 54.166 , .y= -15 }, { .x= 42.889 , .y= -10 }, { .x= 34.196 , .y= -5 }, { .x= 27.445 , .y= 0 }, { .x= 22.165 , .y= 5 }, { .x= 18.01 , .y= 10 }, { .x= 14.72 , .y= 15 }, { .x= 12.099 , .y= 20 }, { .x= 10 , .y= 25 }, { .x= 8.309 , .y= 30 }, { .x= 6.939 , .y= 35 }, { .x= 5.824 , .y= 40 }, { .x= 4.911 , .y= 45 }, { .x= 4.16 , .y= 50 }, { .x= 3.539 , .y= 55 }, { .x= 3.024 , .y= 60 }, { .x= 2.593 , .y= 65 }, { .x= 2.233 , .y= 70 }, { .x= 1.929 , .y= 75 }, { .x= 1.673 , .y= 80 }, { .x= 1.455 , .y= 85 }, { .x= 1.27 , .y= 90 }, { .x= 1.112 , .y= 95 }, { .x= 0.976 , .y= 100 }, { .x= 0.86 , .y= 105 }, { .x= 0.759 , .y= 110 }, { .x= 0.673 , .y= 115 }, { .x= 0.598 , .y= 120 }, { .x= 0.532 , .y= 125 }, }; Temp_Resistance TR_NTCLP00E3103H_Map[TABLE_SIZE_NTCLP00E3103H] ={ { .x= 332.094 , .y= -40 }, { .x= 239.9 , .y= -35 }, { .x= 175.2 , .y= -30 }, { .x= 129.287 , .y= -25 }, { .x= 96.358 , .y= -20 }, { .x= 72.5 , .y= -15 }, { .x= 55.046 , .y= -10 }, { .x= 42.157 , .y= -5 }, { .x= 32.554 , .y= 0 }, { .x= 25.339 , .y= 5 }, { .x= 19.872 , .y= 10 }, { .x= 15.698 , .y= 15 }, { .x= 12.488 , .y= 20 }, { .x= 10 , .y= 25 }, { .x= 8.059 , .y= 30 }, { .x= 6.535 , .y= 35 }, { .x= 5.33 , .y= 40 }, { .x= 4.372 , .y= 45 }, { .x= 3.605 , .y= 50 }, { .x= 2.989 , .y= 55 }, { .x= 2.49 , .y= 60 }, { .x= 2.084 , .y= 65 }, { .x= 1.753 , .y= 70 }, { .x= 1.481 , .y= 75 }, { .x= 1.256 , .y= 80 }, { .x= 1.07 , .y= 85 }, }; Temp_Resistance TR_USP10982_Map[TABLE_SIZE_USP10982] ={ { .x= 336.479 , .y= -40 }, { .x= 314.904 , .y= -39 }, { .x= 294.848 , .y= -38 }, { .x= 276.194 , .y= -37 }, { .x= 258.838 , .y= -36 }, { .x= 242.681 , .y= -35 }, { .x= 227.632 , .y= -34 }, { .x= 213.61 , .y= -33 }, { .x= 200.539 , .y= -32 }, { .x= 188.349 , .y= -31 }, { .x= 176.974 , .y= -30 }, { .x= 166.356 , .y= -29 }, { .x= 156.441 , .y= -28 }, { .x= 147.177 , .y= -27 }, { .x= 138.518 , .y= -26 }, { .x= 130.421 , .y= -25 }, { .x= 122.847 , .y= -24 }, { .x= 115.759 , .y= -23 }, { .x= 109.122 , .y= -22 }, { .x= 102.906 , .y= -21 }, { .x= 97.081 , .y= -20 }, { .x= 91.621 , .y= -19 }, { .x= 86.501 , .y= -18 }, { .x= 81.698 , .y= -17 }, { .x= 77.19 , .y= -16 }, { .x= 72.957 , .y= -15 }, { .x= 68.982 , .y= -14 }, { .x= 65.246 , .y= -13 }, { .x= 61.736 , .y= -12 }, { .x= 58.434 , .y= -11 }, { .x= 55.329 , .y= -10 }, { .x= 52.407 , .y= -9 }, { .x= 49.656 , .y= -8 }, { .x= 47.066 , .y= -7 }, { .x= 44.626 , .y= -6 }, { .x= 42.327 , .y= -5 }, { .x= 40.159 , .y= -4 }, { .x= 38.115 , .y= -3 }, { .x= 36.187 , .y= -2 }, { .x= 34.368 , .y= -1 }, { .x= 32.65 , .y= 0 }, { .x= 31.029 , .y= 1 }, { .x= 29.498 , .y= 2 }, { .x= 28.052 , .y= 3 }, { .x= 26.685 , .y= 4 }, { .x= 25.392 , .y= 5 }, { .x= 24.17 , .y= 6 }, { .x= 23.013 , .y= 7 }, { .x= 21.918 , .y= 8 }, { .x= 20.882 , .y= 9 }, { .x= 19.901 , .y= 10 }, { .x= 18.971 , .y= 11 }, { .x= 18.09 , .y= 12 }, { .x= 17.255 , .y= 13 }, { .x= 16.463 , .y= 14 }, { .x= 15.712 , .y= 15 }, { .x= 14.999 , .y= 16 }, { .x= 14.323 , .y= 17 }, { .x= 13.681 , .y= 18 }, { .x= 13.072 , .y= 19 }, { .x= 12.493 , .y= 20 }, { .x= 11.942 , .y= 21 }, { .x= 11.419 , .y= 22 }, { .x= 10.922 , .y= 23 }, { .x= 10.45 , .y= 24 }, { .x= 10 , .y= 25 }, { .x= 9.572 , .y= 26 }, { .x= 9.165 , .y= 27 }, { .x= 8.777 , .y= 28 }, { .x= 8.408 , .y= 29 }, { .x= 8.057 , .y= 30 }, { .x= 7.722 , .y= 31 }, { .x= 7.402 , .y= 32 }, { .x= 7.098 , .y= 33 }, { .x= 6.808 , .y= 34 }, { .x= 6.531 , .y= 35 }, { .x= 6.267 , .y= 36 }, { .x= 6.015 , .y= 37 }, { .x= 5.775 , .y= 38 }, { .x= 5.545 , .y= 39 }, { .x= 5.326 , .y= 40 }, { .x= 5.117 , .y= 41 }, { .x= 4.917 , .y= 42 }, { .x= 4.725 , .y= 43 }, { .x= 4.543 , .y= 44 }, { .x= 4.368 , .y= 45 }, { .x= 4.201 , .y= 46 }, { .x= 4.041 , .y= 47 }, { .x= 3.888 , .y= 48 }, { .x= 3.742 , .y= 49 }, { .x= 3.602 , .y= 50 }, { .x= 3.468 , .y= 51 }, { .x= 3.34 , .y= 52 }, { .x= 3.217 , .y= 53 }, { .x= 3.099 , .y= 54 }, { .x= 2.986 , .y= 55 }, { .x= 2.878 , .y= 56 }, { .x= 2.774 , .y= 57 }, { .x= 2.675 , .y= 58 }, { .x= 2.579 , .y= 59 }, { .x= 2.488 , .y= 60 }, { .x= 2.4 , .y= 61 }, { .x= 2.316 , .y= 62 }, { .x= 2.235 , .y= 63 }, { .x= 2.157 , .y= 64 }, { .x= 2.083 , .y= 65 }, { .x= 2.011 , .y= 66 }, { .x= 1.942 , .y= 67 }, { .x= 1.876 , .y= 68 }, { .x= 1.813 , .y= 69 }, { .x= 1.752 , .y= 70 }, { .x= 1.693 , .y= 71 }, { .x= 1.637 , .y= 72 }, { .x= 1.582 , .y= 73 }, { .x= 1.53 , .y= 74 }, { .x= 1.48 , .y= 75 }, { .x= 1.432 , .y= 76 }, { .x= 1.385 , .y= 77 }, { .x= 1.34 , .y= 78 }, { .x= 1.297 , .y= 79 }, { .x= 1.255 , .y= 80 }, }; float ReadTemp(const Temp_Resistance *table, float value, size_t SIZE) { //Search using Binary Search. Logarithmic passes int result=SIZE, slope=0; size_t firstPos=0; size_t lastPos=SIZE; size_t middlePos=0; size_t temp_mid=1; //printf("Value:%f\n\r",value); while(temp_mid!=middlePos) { temp_mid=middlePos; middlePos = firstPos + (lastPos-firstPos)/2; if(table[middlePos].x == value) { lastPos = middlePos; result = middlePos; } if(table[middlePos].x < value) { lastPos = middlePos; result = middlePos; } else if(table[middlePos].x > value) { firstPos = middlePos; } } //printf("Result:%d\n\r",result); if(result == 0) return table[result].y; else if(result == SIZE) return table[result - 1].y; slope = (table[result].y - table[result-1].y)/(table[result].x - table[result-1].x); return (slope*(value - table[result].x) + table[result].y); } #endif /*_TEMPERATURE_READ_*/