#include "os/os_types.h" #include "bsp/bsp.h" #include "bsp/bsp_driver.h" #include "libs/utils.h" #define KTY_TEMP_INTVAL 10 #define KTY_TEMP_OFFSET 4 static const u16 kty_table[] = { 359, 391, 424, 460, 498, 538, 581, 603, 626, 672, 722, 773, 826, 882, 940, 1000, 1062, 1127, 1194, 1262, 1334, 1407, 1482, 1560, 1640, 1722, 1807, 1893, 1982, 2073, 2166, 2261, 2357, 2452, 2624 }; #define NTC_TEMP_INTVAL 10 #define NTC_TEMP_OFFSET 1 static const u16 ntc_table[] = { 43117, 27493, 18015, 12100, 8300, 5825, 4160, 3023, 2232, 1672, 1270, 977, 761, 599, 476, 382, 310, 254, 210, 174, 146, 123, 105, 90, 77, 66, 58, 50, 44}; s16 ntc_get_mos_temp(u16 r) { int i = 0; for (; i < ARRAY_SIZE(ntc_table); i++) { if (r >= ntc_table[i]) { break; } } if (i == 0) { return -40; }else if (i >= ARRAY_SIZE(ntc_table)) { return 251; }else if (r == ntc_table[i]) { return (s16)((i - NTC_TEMP_OFFSET) * NTC_TEMP_INTVAL); } int delta = ntc_table[i-1] - ntc_table[i]; float detla_tmp = (float)NTC_TEMP_INTVAL / (float)delta * (float)(r - ntc_table[i]); //插值 return (s16)((i-NTC_TEMP_OFFSET)*NTC_TEMP_INTVAL - detla_tmp); } s16 ntc_get_motor_temp(u16 r) { int i = 0; for (; i < ARRAY_SIZE(kty_table); i++) { if (r <= kty_table[i]) { break; } } if (i == 0) { return -10; }else if (i >= ARRAY_SIZE(kty_table)) { return 300; }else if (r == kty_table[i]) { return (s16)((i - KTY_TEMP_OFFSET) * KTY_TEMP_INTVAL); } int delta = kty_table[i] - kty_table[i - 1]; float detla_tmp = (float)KTY_TEMP_INTVAL / (float)delta * (float)(r - kty_table[i-1]); //插值 return (s16)((i-1-KTY_TEMP_OFFSET)*KTY_TEMP_INTVAL + detla_tmp); }