105 lines
2.9 KiB
C
105 lines
2.9 KiB
C
#include "kit_data.h"
|
|
#include "table_comm.h"
|
|
|
|
|
|
//APR-CWFH708~H713 单位为Ω -41~126℃
|
|
const uint16_t table_ntc1_CWFH708_H713[BSP_NTC_TABLE_LEN] =
|
|
{
|
|
20250, 20249, 19101, 18030, 17029, 16094, 15219, 14400, 13632, 12911,
|
|
12233, 11597, 10998, 10435, 9904, 9404, 8932, 8487, 8067, 7670,
|
|
7295, 6941, 6605, 6288, 5988, 5704, 5434, 5179, 4938, 4708,
|
|
4491, 4285, 4089, 3904, 3728, 3560, 3402, 3251, 3175, 3035,
|
|
2901, 2774, 2654, 2539, 2430, 2326, 2228, 2134, 2045, 1960,
|
|
18792, 1802, 1728, 1659, 1592, 1529, 1469, 1411, 1356, 1304,
|
|
12545, 1206, 1161, 1118, 1077, 1037, 1000, 962, 926, 892,
|
|
859, 828, 798, 769, 742, 706, 681, 657, 634, 612,
|
|
591, 571, 551, 532, 514, 497, 480, 464, 449, 434,
|
|
420, 407, 393, 381, 369, 357, 345, 335, 324, 314,
|
|
304, 295, 286, 277, 268, 260, 252, 245, 238, 230,
|
|
224, 217, 216, 210, 204, 198, 192, 187, 181, 176,
|
|
171, 166, 162, 157, 153, 149, 145, 141, 137, 133,
|
|
130, 126, 123, 119, 116, 113, 110, 107, 105, 102,
|
|
99, 97, 94, 92, 90, 87, 85, 83, 81, 78,
|
|
765, 74, 72, 69, 67, 65, 62, 60, 58, 56,
|
|
538, 51, 49, 47, 44, 42, 40, 37
|
|
};
|
|
|
|
|
|
|
|
typedef struct
|
|
{
|
|
uint16_t rate;
|
|
const uint16_t *table;
|
|
}NtcTable;
|
|
|
|
NtcTable ntc_table_list[kNtcType_End] =
|
|
{
|
|
{10, table_ntc1_CWFH708_H713},
|
|
};
|
|
|
|
|
|
uint16_t bms_get_linear_temp(int32_t res, NtcType tab)
|
|
{
|
|
int32_t left = -1, right = BSP_NTC_TABLE_LEN, mid;
|
|
uint16_t rate = ntc_table_list[tab].rate;
|
|
|
|
if(tab >= kNtcType_End)
|
|
{
|
|
tab = kNtcType_CWFH708_H713;
|
|
}
|
|
const uint16_t * table = ntc_table_list[tab].table;
|
|
|
|
while ((left + 1) != right)
|
|
{
|
|
mid = left + ((right - left) >> 1);
|
|
if (table[mid] * rate > res)
|
|
{
|
|
left = mid;
|
|
}
|
|
else if (table[mid] * rate < res)
|
|
{
|
|
right = mid;
|
|
}
|
|
else
|
|
{
|
|
return mid * 10 - 410 + 500;
|
|
}
|
|
}
|
|
|
|
if (left == -1)
|
|
{
|
|
return (uint16_t)KIT_NTC_TEMP_OPEN_VALUE; //-50度
|
|
}
|
|
else if (right == BSP_NTC_TABLE_LEN)
|
|
{
|
|
return (uint16_t)KIT_NTC_TEMP_SHORT_VALUE; //125度
|
|
}
|
|
else
|
|
{
|
|
left = table[right] * rate - table[right - 1] * rate;
|
|
mid = (res - (int32_t)table[right] * rate + left * right) * 10 / left - 410 + 500;
|
|
}
|
|
return mid;
|
|
}
|
|
|
|
NtcType bms_get_temp_table(NtcType tab, uint8_t *buf)
|
|
{
|
|
uint32_t addr = 0;
|
|
|
|
if(tab >= kNtcType_End)
|
|
{
|
|
tab = kNtcType_CWFH708_H713;
|
|
}
|
|
//长度占位
|
|
WRITE_LT_INT16U(buf, addr, 0);
|
|
WRITE_LT_INT16U(buf, addr, tab);
|
|
WRITE_LT_INT16U(buf, addr, ntc_table_list[tab].rate);
|
|
kit_copy_buf(&buf[6], ntc_table_list[tab].table, BSP_NTC_TABLE_LEN * 2);
|
|
addr += BSP_NTC_TABLE_LEN * 2 + 2;
|
|
WRITE_LT_INT16U_BY_CONST_POS(buf, 0, addr);
|
|
|
|
kit_append_crc16(buf, addr - 2);
|
|
|
|
return tab;
|
|
}
|