System Management code

Dependencies:   CANBuffer mbed SystemManagement mbed-rtos

Dependents:   SystemManagement

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

Committer:
martydd3
Date:
Wed Oct 01 12:52:26 2014 +0000
Revision:
0:e516fcccccda
Added LPCDigitalOut, LPCDigitalIn, and CANBuffer Libaries; Comments on code in SysMngmt.cpp involving register and pin access; Note: LPCDigitalOut.h defines a void mode(PinMode) which isn't in LPCDigitalOut.cpp, causes a linking error if used

Who changed what in which revision?

UserRevisionLine numberNew contents of line
martydd3 0:e516fcccccda 1 /*
martydd3 0:e516fcccccda 2 Test Code
martydd3 0:e516fcccccda 3 #include "mbed.h"
martydd3 0:e516fcccccda 4 #include "TemperatureRead.h"
martydd3 0:e516fcccccda 5
martydd3 0:e516fcccccda 6 AnalogIn Vin(p15);
martydd3 0:e516fcccccda 7 int main()
martydd3 0:e516fcccccda 8 {
martydd3 0:e516fcccccda 9 float resistance,temperature,Vadc=0;
martydd3 0:e516fcccccda 10 while(1)
martydd3 0:e516fcccccda 11 {
martydd3 0:e516fcccccda 12 Vadc=Vin.read()*VDD;
martydd3 0:e516fcccccda 13 //printf("Vadc:%f\n\r",Vadc);
martydd3 0:e516fcccccda 14 while(Vadc>0)
martydd3 0:e516fcccccda 15 {
martydd3 0:e516fcccccda 16 Vadc=Vin.read()*VDD;
martydd3 0:e516fcccccda 17 printf("Vadc:%f\n\r",Vadc);
martydd3 0:e516fcccccda 18 resistance=((float)R10K*Vadc)/((float)VDD + Vadc);
martydd3 0:e516fcccccda 19 temperature=ReadTemp(TR_USP10982_Map, resistance, TABLE_SIZE_USP10982);
martydd3 0:e516fcccccda 20 printf("Resistance:%f \n\r",resistance);
martydd3 0:e516fcccccda 21 printf("Temperature:%f \n\r",temperature);
martydd3 0:e516fcccccda 22 wait(0.5);
martydd3 0:e516fcccccda 23 }
martydd3 0:e516fcccccda 24 }
martydd3 0:e516fcccccda 25 }
martydd3 0:e516fcccccda 26 */
martydd3 0:e516fcccccda 27 #ifndef _TEMPERATURE_READ_
martydd3 0:e516fcccccda 28 #define _TEMPERATURE_READ_
martydd3 0:e516fcccccda 29
martydd3 0:e516fcccccda 30 #define TABLE_SIZE_NXFT15XH103FA 34
martydd3 0:e516fcccccda 31 #define TABLE_SIZE_NTCLP00E3103H 26
martydd3 0:e516fcccccda 32 #define TABLE_SIZE_USP10982 121
martydd3 0:e516fcccccda 33 #define R10K 10 //Consider Resistance in Kohms
martydd3 0:e516fcccccda 34 #define VDD 3.33
martydd3 0:e516fcccccda 35 typedef struct
martydd3 0:e516fcccccda 36 {
martydd3 0:e516fcccccda 37 float x;
martydd3 0:e516fcccccda 38 float y;
martydd3 0:e516fcccccda 39 }Temp_Resistance;
martydd3 0:e516fcccccda 40
martydd3 0:e516fcccccda 41 Temp_Resistance TR_NXFT15XH103FA_Map[TABLE_SIZE_NXFT15XH103FA] ={
martydd3 0:e516fcccccda 42 { .x= 197.388 , .y= -40 },
martydd3 0:e516fcccccda 43 { .x= 149.395 , .y= -35 },
martydd3 0:e516fcccccda 44 { .x= 114.345 , .y= -30 },
martydd3 0:e516fcccccda 45 { .x= 88.381 , .y= -25 },
martydd3 0:e516fcccccda 46 { .x= 68.915 , .y= -20 },
martydd3 0:e516fcccccda 47 { .x= 54.166 , .y= -15 },
martydd3 0:e516fcccccda 48 { .x= 42.889 , .y= -10 },
martydd3 0:e516fcccccda 49 { .x= 34.196 , .y= -5 },
martydd3 0:e516fcccccda 50 { .x= 27.445 , .y= 0 },
martydd3 0:e516fcccccda 51 { .x= 22.165 , .y= 5 },
martydd3 0:e516fcccccda 52 { .x= 18.01 , .y= 10 },
martydd3 0:e516fcccccda 53 { .x= 14.72 , .y= 15 },
martydd3 0:e516fcccccda 54 { .x= 12.099 , .y= 20 },
martydd3 0:e516fcccccda 55 { .x= 10 , .y= 25 },
martydd3 0:e516fcccccda 56 { .x= 8.309 , .y= 30 },
martydd3 0:e516fcccccda 57 { .x= 6.939 , .y= 35 },
martydd3 0:e516fcccccda 58 { .x= 5.824 , .y= 40 },
martydd3 0:e516fcccccda 59 { .x= 4.911 , .y= 45 },
martydd3 0:e516fcccccda 60 { .x= 4.16 , .y= 50 },
martydd3 0:e516fcccccda 61 { .x= 3.539 , .y= 55 },
martydd3 0:e516fcccccda 62 { .x= 3.024 , .y= 60 },
martydd3 0:e516fcccccda 63 { .x= 2.593 , .y= 65 },
martydd3 0:e516fcccccda 64 { .x= 2.233 , .y= 70 },
martydd3 0:e516fcccccda 65 { .x= 1.929 , .y= 75 },
martydd3 0:e516fcccccda 66 { .x= 1.673 , .y= 80 },
martydd3 0:e516fcccccda 67 { .x= 1.455 , .y= 85 },
martydd3 0:e516fcccccda 68 { .x= 1.27 , .y= 90 },
martydd3 0:e516fcccccda 69 { .x= 1.112 , .y= 95 },
martydd3 0:e516fcccccda 70 { .x= 0.976 , .y= 100 },
martydd3 0:e516fcccccda 71 { .x= 0.86 , .y= 105 },
martydd3 0:e516fcccccda 72 { .x= 0.759 , .y= 110 },
martydd3 0:e516fcccccda 73 { .x= 0.673 , .y= 115 },
martydd3 0:e516fcccccda 74 { .x= 0.598 , .y= 120 },
martydd3 0:e516fcccccda 75 { .x= 0.532 , .y= 125 },
martydd3 0:e516fcccccda 76 };
martydd3 0:e516fcccccda 77
martydd3 0:e516fcccccda 78 Temp_Resistance TR_NTCLP00E3103H_Map[TABLE_SIZE_NTCLP00E3103H] ={
martydd3 0:e516fcccccda 79 { .x= 332.094 , .y= -40 },
martydd3 0:e516fcccccda 80 { .x= 239.9 , .y= -35 },
martydd3 0:e516fcccccda 81 { .x= 175.2 , .y= -30 },
martydd3 0:e516fcccccda 82 { .x= 129.287 , .y= -25 },
martydd3 0:e516fcccccda 83 { .x= 96.358 , .y= -20 },
martydd3 0:e516fcccccda 84 { .x= 72.5 , .y= -15 },
martydd3 0:e516fcccccda 85 { .x= 55.046 , .y= -10 },
martydd3 0:e516fcccccda 86 { .x= 42.157 , .y= -5 },
martydd3 0:e516fcccccda 87 { .x= 32.554 , .y= 0 },
martydd3 0:e516fcccccda 88 { .x= 25.339 , .y= 5 },
martydd3 0:e516fcccccda 89 { .x= 19.872 , .y= 10 },
martydd3 0:e516fcccccda 90 { .x= 15.698 , .y= 15 },
martydd3 0:e516fcccccda 91 { .x= 12.488 , .y= 20 },
martydd3 0:e516fcccccda 92 { .x= 10 , .y= 25 },
martydd3 0:e516fcccccda 93 { .x= 8.059 , .y= 30 },
martydd3 0:e516fcccccda 94 { .x= 6.535 , .y= 35 },
martydd3 0:e516fcccccda 95 { .x= 5.33 , .y= 40 },
martydd3 0:e516fcccccda 96 { .x= 4.372 , .y= 45 },
martydd3 0:e516fcccccda 97 { .x= 3.605 , .y= 50 },
martydd3 0:e516fcccccda 98 { .x= 2.989 , .y= 55 },
martydd3 0:e516fcccccda 99 { .x= 2.49 , .y= 60 },
martydd3 0:e516fcccccda 100 { .x= 2.084 , .y= 65 },
martydd3 0:e516fcccccda 101 { .x= 1.753 , .y= 70 },
martydd3 0:e516fcccccda 102 { .x= 1.481 , .y= 75 },
martydd3 0:e516fcccccda 103 { .x= 1.256 , .y= 80 },
martydd3 0:e516fcccccda 104 { .x= 1.07 , .y= 85 },
martydd3 0:e516fcccccda 105
martydd3 0:e516fcccccda 106 };
martydd3 0:e516fcccccda 107
martydd3 0:e516fcccccda 108 Temp_Resistance TR_USP10982_Map[TABLE_SIZE_USP10982] ={
martydd3 0:e516fcccccda 109 { .x= 336.479 , .y= -40 },
martydd3 0:e516fcccccda 110 { .x= 314.904 , .y= -39 },
martydd3 0:e516fcccccda 111 { .x= 294.848 , .y= -38 },
martydd3 0:e516fcccccda 112 { .x= 276.194 , .y= -37 },
martydd3 0:e516fcccccda 113 { .x= 258.838 , .y= -36 },
martydd3 0:e516fcccccda 114 { .x= 242.681 , .y= -35 },
martydd3 0:e516fcccccda 115 { .x= 227.632 , .y= -34 },
martydd3 0:e516fcccccda 116 { .x= 213.61 , .y= -33 },
martydd3 0:e516fcccccda 117 { .x= 200.539 , .y= -32 },
martydd3 0:e516fcccccda 118 { .x= 188.349 , .y= -31 },
martydd3 0:e516fcccccda 119 { .x= 176.974 , .y= -30 },
martydd3 0:e516fcccccda 120 { .x= 166.356 , .y= -29 },
martydd3 0:e516fcccccda 121 { .x= 156.441 , .y= -28 },
martydd3 0:e516fcccccda 122 { .x= 147.177 , .y= -27 },
martydd3 0:e516fcccccda 123 { .x= 138.518 , .y= -26 },
martydd3 0:e516fcccccda 124 { .x= 130.421 , .y= -25 },
martydd3 0:e516fcccccda 125 { .x= 122.847 , .y= -24 },
martydd3 0:e516fcccccda 126 { .x= 115.759 , .y= -23 },
martydd3 0:e516fcccccda 127 { .x= 109.122 , .y= -22 },
martydd3 0:e516fcccccda 128 { .x= 102.906 , .y= -21 },
martydd3 0:e516fcccccda 129 { .x= 97.081 , .y= -20 },
martydd3 0:e516fcccccda 130 { .x= 91.621 , .y= -19 },
martydd3 0:e516fcccccda 131 { .x= 86.501 , .y= -18 },
martydd3 0:e516fcccccda 132 { .x= 81.698 , .y= -17 },
martydd3 0:e516fcccccda 133 { .x= 77.19 , .y= -16 },
martydd3 0:e516fcccccda 134 { .x= 72.957 , .y= -15 },
martydd3 0:e516fcccccda 135 { .x= 68.982 , .y= -14 },
martydd3 0:e516fcccccda 136 { .x= 65.246 , .y= -13 },
martydd3 0:e516fcccccda 137 { .x= 61.736 , .y= -12 },
martydd3 0:e516fcccccda 138 { .x= 58.434 , .y= -11 },
martydd3 0:e516fcccccda 139 { .x= 55.329 , .y= -10 },
martydd3 0:e516fcccccda 140 { .x= 52.407 , .y= -9 },
martydd3 0:e516fcccccda 141 { .x= 49.656 , .y= -8 },
martydd3 0:e516fcccccda 142 { .x= 47.066 , .y= -7 },
martydd3 0:e516fcccccda 143 { .x= 44.626 , .y= -6 },
martydd3 0:e516fcccccda 144 { .x= 42.327 , .y= -5 },
martydd3 0:e516fcccccda 145 { .x= 40.159 , .y= -4 },
martydd3 0:e516fcccccda 146 { .x= 38.115 , .y= -3 },
martydd3 0:e516fcccccda 147 { .x= 36.187 , .y= -2 },
martydd3 0:e516fcccccda 148 { .x= 34.368 , .y= -1 },
martydd3 0:e516fcccccda 149 { .x= 32.65 , .y= 0 },
martydd3 0:e516fcccccda 150 { .x= 31.029 , .y= 1 },
martydd3 0:e516fcccccda 151 { .x= 29.498 , .y= 2 },
martydd3 0:e516fcccccda 152 { .x= 28.052 , .y= 3 },
martydd3 0:e516fcccccda 153 { .x= 26.685 , .y= 4 },
martydd3 0:e516fcccccda 154 { .x= 25.392 , .y= 5 },
martydd3 0:e516fcccccda 155 { .x= 24.17 , .y= 6 },
martydd3 0:e516fcccccda 156 { .x= 23.013 , .y= 7 },
martydd3 0:e516fcccccda 157 { .x= 21.918 , .y= 8 },
martydd3 0:e516fcccccda 158 { .x= 20.882 , .y= 9 },
martydd3 0:e516fcccccda 159 { .x= 19.901 , .y= 10 },
martydd3 0:e516fcccccda 160 { .x= 18.971 , .y= 11 },
martydd3 0:e516fcccccda 161 { .x= 18.09 , .y= 12 },
martydd3 0:e516fcccccda 162 { .x= 17.255 , .y= 13 },
martydd3 0:e516fcccccda 163 { .x= 16.463 , .y= 14 },
martydd3 0:e516fcccccda 164 { .x= 15.712 , .y= 15 },
martydd3 0:e516fcccccda 165 { .x= 14.999 , .y= 16 },
martydd3 0:e516fcccccda 166 { .x= 14.323 , .y= 17 },
martydd3 0:e516fcccccda 167 { .x= 13.681 , .y= 18 },
martydd3 0:e516fcccccda 168 { .x= 13.072 , .y= 19 },
martydd3 0:e516fcccccda 169 { .x= 12.493 , .y= 20 },
martydd3 0:e516fcccccda 170 { .x= 11.942 , .y= 21 },
martydd3 0:e516fcccccda 171 { .x= 11.419 , .y= 22 },
martydd3 0:e516fcccccda 172 { .x= 10.922 , .y= 23 },
martydd3 0:e516fcccccda 173 { .x= 10.45 , .y= 24 },
martydd3 0:e516fcccccda 174 { .x= 10 , .y= 25 },
martydd3 0:e516fcccccda 175 { .x= 9.572 , .y= 26 },
martydd3 0:e516fcccccda 176 { .x= 9.165 , .y= 27 },
martydd3 0:e516fcccccda 177 { .x= 8.777 , .y= 28 },
martydd3 0:e516fcccccda 178 { .x= 8.408 , .y= 29 },
martydd3 0:e516fcccccda 179 { .x= 8.057 , .y= 30 },
martydd3 0:e516fcccccda 180 { .x= 7.722 , .y= 31 },
martydd3 0:e516fcccccda 181 { .x= 7.402 , .y= 32 },
martydd3 0:e516fcccccda 182 { .x= 7.098 , .y= 33 },
martydd3 0:e516fcccccda 183 { .x= 6.808 , .y= 34 },
martydd3 0:e516fcccccda 184 { .x= 6.531 , .y= 35 },
martydd3 0:e516fcccccda 185 { .x= 6.267 , .y= 36 },
martydd3 0:e516fcccccda 186 { .x= 6.015 , .y= 37 },
martydd3 0:e516fcccccda 187 { .x= 5.775 , .y= 38 },
martydd3 0:e516fcccccda 188 { .x= 5.545 , .y= 39 },
martydd3 0:e516fcccccda 189 { .x= 5.326 , .y= 40 },
martydd3 0:e516fcccccda 190 { .x= 5.117 , .y= 41 },
martydd3 0:e516fcccccda 191 { .x= 4.917 , .y= 42 },
martydd3 0:e516fcccccda 192 { .x= 4.725 , .y= 43 },
martydd3 0:e516fcccccda 193 { .x= 4.543 , .y= 44 },
martydd3 0:e516fcccccda 194 { .x= 4.368 , .y= 45 },
martydd3 0:e516fcccccda 195 { .x= 4.201 , .y= 46 },
martydd3 0:e516fcccccda 196 { .x= 4.041 , .y= 47 },
martydd3 0:e516fcccccda 197 { .x= 3.888 , .y= 48 },
martydd3 0:e516fcccccda 198 { .x= 3.742 , .y= 49 },
martydd3 0:e516fcccccda 199 { .x= 3.602 , .y= 50 },
martydd3 0:e516fcccccda 200 { .x= 3.468 , .y= 51 },
martydd3 0:e516fcccccda 201 { .x= 3.34 , .y= 52 },
martydd3 0:e516fcccccda 202 { .x= 3.217 , .y= 53 },
martydd3 0:e516fcccccda 203 { .x= 3.099 , .y= 54 },
martydd3 0:e516fcccccda 204 { .x= 2.986 , .y= 55 },
martydd3 0:e516fcccccda 205 { .x= 2.878 , .y= 56 },
martydd3 0:e516fcccccda 206 { .x= 2.774 , .y= 57 },
martydd3 0:e516fcccccda 207 { .x= 2.675 , .y= 58 },
martydd3 0:e516fcccccda 208 { .x= 2.579 , .y= 59 },
martydd3 0:e516fcccccda 209 { .x= 2.488 , .y= 60 },
martydd3 0:e516fcccccda 210 { .x= 2.4 , .y= 61 },
martydd3 0:e516fcccccda 211 { .x= 2.316 , .y= 62 },
martydd3 0:e516fcccccda 212 { .x= 2.235 , .y= 63 },
martydd3 0:e516fcccccda 213 { .x= 2.157 , .y= 64 },
martydd3 0:e516fcccccda 214 { .x= 2.083 , .y= 65 },
martydd3 0:e516fcccccda 215 { .x= 2.011 , .y= 66 },
martydd3 0:e516fcccccda 216 { .x= 1.942 , .y= 67 },
martydd3 0:e516fcccccda 217 { .x= 1.876 , .y= 68 },
martydd3 0:e516fcccccda 218 { .x= 1.813 , .y= 69 },
martydd3 0:e516fcccccda 219 { .x= 1.752 , .y= 70 },
martydd3 0:e516fcccccda 220 { .x= 1.693 , .y= 71 },
martydd3 0:e516fcccccda 221 { .x= 1.637 , .y= 72 },
martydd3 0:e516fcccccda 222 { .x= 1.582 , .y= 73 },
martydd3 0:e516fcccccda 223 { .x= 1.53 , .y= 74 },
martydd3 0:e516fcccccda 224 { .x= 1.48 , .y= 75 },
martydd3 0:e516fcccccda 225 { .x= 1.432 , .y= 76 },
martydd3 0:e516fcccccda 226 { .x= 1.385 , .y= 77 },
martydd3 0:e516fcccccda 227 { .x= 1.34 , .y= 78 },
martydd3 0:e516fcccccda 228 { .x= 1.297 , .y= 79 },
martydd3 0:e516fcccccda 229 { .x= 1.255 , .y= 80 },
martydd3 0:e516fcccccda 230 };
martydd3 0:e516fcccccda 231
martydd3 0:e516fcccccda 232 float ReadTemp(const Temp_Resistance *table, float value, size_t SIZE)
martydd3 0:e516fcccccda 233 {
martydd3 0:e516fcccccda 234 //Search using Binary Search. Logarithmic passes
martydd3 0:e516fcccccda 235 int result=SIZE, slope=0;
martydd3 0:e516fcccccda 236 size_t firstPos=0;
martydd3 0:e516fcccccda 237 size_t lastPos=SIZE;
martydd3 0:e516fcccccda 238 size_t middlePos=0;
martydd3 0:e516fcccccda 239 size_t temp_mid=1;
martydd3 0:e516fcccccda 240 //printf("Value:%f\n\r",value);
martydd3 0:e516fcccccda 241 while(temp_mid!=middlePos)
martydd3 0:e516fcccccda 242 {
martydd3 0:e516fcccccda 243 temp_mid=middlePos;
martydd3 0:e516fcccccda 244 middlePos = firstPos + (lastPos-firstPos)/2;
martydd3 0:e516fcccccda 245 if(table[middlePos].x == value)
martydd3 0:e516fcccccda 246 {
martydd3 0:e516fcccccda 247 lastPos = middlePos;
martydd3 0:e516fcccccda 248 result = middlePos;
martydd3 0:e516fcccccda 249 }
martydd3 0:e516fcccccda 250
martydd3 0:e516fcccccda 251 if(table[middlePos].x < value)
martydd3 0:e516fcccccda 252 {
martydd3 0:e516fcccccda 253 lastPos = middlePos;
martydd3 0:e516fcccccda 254 result = middlePos;
martydd3 0:e516fcccccda 255 }
martydd3 0:e516fcccccda 256
martydd3 0:e516fcccccda 257 else if(table[middlePos].x > value)
martydd3 0:e516fcccccda 258 {
martydd3 0:e516fcccccda 259 firstPos = middlePos;
martydd3 0:e516fcccccda 260 }
martydd3 0:e516fcccccda 261 }
martydd3 0:e516fcccccda 262 //printf("Result:%d\n\r",result);
martydd3 0:e516fcccccda 263 if(result == 0)
martydd3 0:e516fcccccda 264 return table[result].y;
martydd3 0:e516fcccccda 265 else if(result == SIZE)
martydd3 0:e516fcccccda 266 return table[result - 1].y;
martydd3 0:e516fcccccda 267
martydd3 0:e516fcccccda 268 slope = (table[result].y - table[result-1].y)/(table[result].x - table[result-1].x);
martydd3 0:e516fcccccda 269 return (slope*(value - table[result].x) + table[result].y);
martydd3 0:e516fcccccda 270 }
martydd3 0:e516fcccccda 271 #endif /*_TEMPERATURE_READ_*/