环境:sdk_bt892xa2_v01x_s4041_20220316(蓝牙芯片 8922E2)
中科蓝汛的NTC检测在SDK内部已经做好了的,并且在配置工具中都可以进行调节阈值。
如下图:
在充电的情况下出现小于阈值时,耳机会出现关机 -> 开机 -> 关机 这样的一系列的循环。所以我们在充电的时候需要配置成耳机不充电,等NTC 恢复正常在进行充电。(在没有充电的状态下小于阈值时就会将耳机进行关机)
通过代码查看耳机会一直检测NTC当前的值,判断有20次出现小于的时候就会进行关机。函数原型如下:
AT(.com_text.ntc)
u8 sys_ntc_check(void)
{
if (!xcfg_cb.ntc_en) {
return 0;
}
static int n_cnt = 0;
if(xcfg_cb.ntc_en){
if (adc_cb.ntc_val <= xcfg_cb.ntc_thd_val) {
if(n_cnt >= 20){
sys_cb.ntc_2_pwrdwn_flag = 1;
return 1;
} else{
n_cnt++;
}
}else{
n_cnt = 0;
}
}
return 0;
}
通过上面的代码可以看出我们也可以添加一个NTC温度下限的阈值。根据个人的习惯或者要求进行是否添加。
这阈值是需要我们自己通过实际测试出来的。
修改充电状态下,要是NTC温度过高就不充电、NTC温度安全就充电。代码如下:
AT(.com_text.ntc)
u8 sys_ntc_check(void)
{
if (!xcfg_cb.ntc_en) {
return 0;
}
static int n_cnt = 0;
if(xcfg_cb.ntc_en){
if (adc_cb.ntc_val <= xcfg_cb.ntc_thd_val) {
if(n_cnt >= 20){
if (sys_cb.charge_sta == 1 && DC_IN()) { // 接触5V并且正在充电
bsp_charge_sta(3); // 关闭 led
// 关闭充电功能
bsp_charge_off();
RTCCON8 &= ~BIT(6);
RTCCON8 |= BIT(1);
n_cnt = 0;
}
else if (DC_IN() && sys_cb.charge_sta == 0){
// 将计数清零,否则在NTC过高或者过低之后恢复,再离开5V就会立马关机
n_cnt = 0;
}
else {
sys_cb.ntc_2_pwrdwn_flag = 1;
}
printf("==>sys_cb.ntc_2_pwrdwn_flag = %d n_cnt = %d", sys_cb.ntc_2_pwrdwn_flag, n_cnt );
return 1;
} else{
n_cnt++;
}
}else{
n_cnt = 0;
if (sys_cb.charge_sta == 0 && DC_IN()) {
bsp_charge_sta(1); // 打开 led
// 打开充电功能
RTCCON8 |= BIT(6);
RTCCON8 &=~BIT(1);
}
}
}
return 0;
}