背景:
公司对一款烟感设备进行高低温测试,以获取温度补偿参数。
操作:
测试程序如下:设定 25度开始--->65度---->0度--> -20度---->0度---->25度结束 。
测完后发现,15台设备中只有一台打印了最低温度5度,其他大多是9度~10度 ,也就是说9度以下的数据有异常。
异常分析:
1. 最开始硬件建议用设备B的软件烧录到测试设备A中,然后看下数据读取情况。
经过读取发现能读取到0度以下的温度 ,说明设备B的软件跟A软件有差异。问题可能出在软件层面。
2. 于是开始对比设备B和设备A软件的差异。最主要是对比TempADC 采样函数的差异,经过对比发下函数一模一样 。
3. 然后在手动设置输出0度以下的ADC值,打印看是否能输出0度以下的数据,结果显示可以 。说明应用层逻辑正确。
4. 经过多次测试发现ADC采样 在10度以上的数据 10度~65度 ,跟ADC 表格里面的参数一一对应,没有问题,说明ADC采样稳定,但在10度以后,似乎ADC 停止采样了一样,个人感觉跟硬件有关 ,或底层IO口配置有关 。
5. 由于检查GPIO口各项配置,未发现异常,后面想了下使用设备A的软件烧录到设备B中看下,结果发现设备B也能成功打印0度以下的温度。这说明设备A软件问题也不大。但设备A的软件安装在设备A上就有问题,说明有个IO口 而且跟温度ADC采样有关,产生了影响 。经过详细对比,发现ADC采样IO口 P15 复用了LED_Blue 蓝灯功能。
6.经过硬件部重新分析,此处复用会导致上述现象:ADC低温采样不变化,无法获取更低的温度数据 。原因是LED灯电路会分流部分电流,导致NTC 采样电压几乎没有变化,那么温度也就没有变化了。