ntc.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "os/os_types.h"
  2. #include "bsp/bsp.h"
  3. #include "bsp/bsp_driver.h"
  4. #include "libs/utils.h"
  5. #define KTY_TEMP_INTVAL 10
  6. #define KTY_TEMP_OFFSET 4
  7. static const u16 kty_table[] = {
  8. 359, 391, 424, 460, 498, 538, 581, 603, 626, 672, 722, 773, 826, 882,
  9. 940, 1000, 1062, 1127, 1194, 1262, 1334, 1407, 1482, 1560, 1640, 1722, 1807, 1893,
  10. 1982, 2073, 2166, 2261, 2357, 2452, 2624 };
  11. #define NTC_TEMP_INTVAL 10
  12. #define NTC_TEMP_OFFSET 1
  13. static const u16 ntc_table[] = {
  14. 43117, 27493, 18015, 12100, 8300, 5825, 4160, 3023, 2232, 1672, 1270, 977, 761, 599,
  15. 476, 382, 310, 254, 210, 174, 146, 123, 105, 90, 77, 66, 58, 50, 44};
  16. s16 ntc_get_mos_temp(u16 r) {
  17. int i = 0;
  18. for (; i < ARRAY_SIZE(ntc_table); i++) {
  19. if (r >= ntc_table[i]) {
  20. break;
  21. }
  22. }
  23. if (i == 0) {
  24. return -40;
  25. }else if (i >= ARRAY_SIZE(ntc_table)) {
  26. return 251;
  27. }else if (r == ntc_table[i]) {
  28. return (s16)((i - NTC_TEMP_OFFSET) * NTC_TEMP_INTVAL);
  29. }
  30. int delta = ntc_table[i-1] - ntc_table[i];
  31. float detla_tmp = (float)NTC_TEMP_INTVAL / (float)delta * (float)(r - ntc_table[i]); //插值
  32. return (s16)((i-NTC_TEMP_OFFSET)*NTC_TEMP_INTVAL - detla_tmp);
  33. }
  34. s16 ntc_get_motor_temp(u16 r) {
  35. int i = 0;
  36. for (; i < ARRAY_SIZE(kty_table); i++) {
  37. if (r <= kty_table[i]) {
  38. break;
  39. }
  40. }
  41. if (i == 0) {
  42. return -10;
  43. }else if (i >= ARRAY_SIZE(kty_table)) {
  44. return 301;
  45. }else if (r == kty_table[i]) {
  46. return (s16)((i - KTY_TEMP_OFFSET) * KTY_TEMP_INTVAL);
  47. }
  48. int delta = kty_table[i] - kty_table[i - 1];
  49. float detla_tmp = (float)KTY_TEMP_INTVAL / (float)delta * (float)(r - kty_table[i-1]); //插值
  50. return (s16)((i-1-KTY_TEMP_OFFSET)*KTY_TEMP_INTVAL + detla_tmp);
  51. }