高级会员

- 积分
- 537
- 金钱
- 537
- 注册时间
- 2017-7-23
- 在线时间
- 57 小时
|

楼主 |
发表于 2021-7-28 17:05:18
|
显示全部楼层
已经找到解决问题的办法:造成这种问题的根本原因在于这款芯片的ADC结构本身精确度并不完美,所以需要对其进行软件校准,来弥补精度上的欠缺。但是在以往资料中出现过的软件校准只有这一句:
if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED) != HAL_OK)
{
Error_Handler();
}
常说的软件校准一般都是指这个。但是很早之前尝试过这个了,发现不管有没有这一句,结果都没什么变化,跳变现象还是会很稳定的出现。后来经过各种尝试,包括联系ST公司技术工程师,最终发现应该加上这一句:
if (HAL_ADCEx_Calibration_Start(&hadc2, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK)
{
Error_Handler();
}
也就是ADC线性度校准,其实就是上面那句中把第二个参数换成了ADC_CALIB_OFFSET_LINEARITY。进行线性校准之后,跳变现象永久的消失了,并且没有再出现过,世界清静了!
个人观点:芯片内置ADC本身存在缺陷,需要用用软件校准的方式来弥补缺陷。 |
|