#检测CO传感器故障
##传感器各种情况波形
注意注意
-先看传感器各种情况波形
-开发板连接带运放电路的传感器 连接ADC 脚 &&充放电电脚(故障检测脚)
##以及各种情况的ADC值
#硬件连接
#软件代码
##充电
##放电之后等一点时间 检测ADC值
uint8_t co_err_check(void)
{
//检测开路 短路 故障 [在基准AD值650左右情况下]
//充电 1.6v-0.6v放电曲线 为正常 |AD值2100 ~ 650
//充电 1.6V高 断电0.6v低 为断路 开路 |AD值2500 650
//充电 没反应 可能1.25v 可能0V 短路 |AD值1500 35
uint8_t return_Statue = 0;
uint8_t Check_Statue = 1;//0为结束
uint32_t Check_Num=0;
uint32_t Check_Buffer[5]={0};
//必须在空气中 温度适宜 才去判断故障 2021 1 20
//短路小于100 冲电 正常大于1800 开路小于1000大概等于基准600左右
if((Temp_Val<36) && (Temp_Val>5))//这个限制是否合理 万一认证那边天气温度低就测不了
{
Check_Buffer[0] = Adc_ReadCoVal();//气体增加 增加 正常700
Gpio_ClrIO(CO_CHECK_PORT, CO_CHECK_PIN);
delay_ms(100);
Check_Buffer[1] = Adc_ReadCoVal();//气体增加 增加 正常3300
Gpio_SetIO(CO_CHECK_PORT, CO_CHECK_PIN);
delay_ms(4000);
for(uint8_t i=0;i<2;i++)//打印采集的
printf("Check_Buffer %d: %d\r\n",Check_Num,Check_Buffer[i]);
//短路 充电前0数据 600 充电后1数据 600
//断路 充电前0数据 600 充电后1数据 600
//正常 充电前0数据 600 充电后1数据 900
//优先判断正常的 <100的
if(Check_Buffer[1] > Check_Buffer[0] )
{
Check_Num = Check_Buffer[1] - Check_Buffer[0];
}
else
{
Check_Num = Check_Buffer[0] - Check_Buffer[1];
}
if(Check_Num>2000)
{
return_Statue=2;
printf(" open 2 !\r\n\r\n");
}
else if(Check_Num>130)
{
return_Statue=4;
printf(" nomal 4 !\r\n\r\n");
}
else
{
return_Statue=1;
printf(" short 1 !\r\n\r\n");
}
}
else
{
return_Statue=4;
}
return return_Statue;
}
#最后实测效果 很稳定