起因
我写好了协议层和应用层,但是我的同事也写了一个bootloader,但是他…所以,在我和他多次交流和协商下,他搞定了bootloader,但是出现问题了,就是adc不一样,他给的adc表格,不符合我实际读取的,所以就会出现偏差。
bug查找
我一开始以为是采样问题,看了周期,看了转换速度,看了分频,都是正常,代码cube一键生成,也是启动adc了,因为使用的F1的MCU,所以是不能修改分辨率的,统一是12,F4的那些高级一点才能自己选择分辨率哦。
最后,我让他把源码发给我了,我看了中断回调,看了函数处理,看了数据处理,都没问题,最后看到了,他没有校准ADC,这个我是早早的写了,我启动ADC就立刻校准了。
为什么要校准
我还记得高中和初中的时候,我还是物理科代表呢,但是做啥实验第一步都是清零校准,才能保证统一和实验性。放在我们现在的工作之中就是,使用万用表和示波器肯定要先校验才能保证数据和波形是正确的啊。所以,在处理传感器和adc,dac等方面都要注意校验的问题,不是说光初始init就能解决一切bug的。
那为什么会出现误差呢?
STM32 的 ADC 校准一般有 参考电压校准 和 增益校准。
参考电压校准:
先测量 ADC 参考电压的实际值,然后将该值与预设的参考电压进行比较,得到参考电压的偏差,最终通过校准将其校正的方式叫做 参考电压校准 ,其目的是为了准确测量 ADC 的输入信号。
叫做增益校准:
通过测量内部基准电压和 ADC 输入信号的幅值之间的比例关系,校准 ADC 增益的方式 叫做增益校准,其目的是确保 ADC 输出的数值与输入信号的幅值之间具有良好的线性关系,为了准确的转换 ADC 输入信号。
ADC 校准的目的是为了消除 ADC 的偏移误差和增益误差,从而提高测量精度。
原文链接:https://blog.csdn.net/weixin_42328389/article/details/129518720
这个就像芯片生产过程制造中的差异化一样,ADC部分也存在一些差异化(虽然很小),其参考电压、偏置电压、增益等参数可能存在一些不确定性和漂移,这些参数的变化会导致 ADC 的测量结果产生误差。
就想上面介绍什么是 ADC 校准最后说的,为了提高测量精度,消除 ADC 的偏移误差和增益误差,所以在使用 ADC 采样的时候都需要进行 ADC 校准。
只要不改变adc设置就不会变化哦,修改通道是没事的,前提是别改属性,也就是可以关闭,但是寄存器别动,下次继续使用是没问题的。如果工作环境一直发生变化,噪声环境比较恶劣,温度啊,干扰,那就得用一次校准一次了。
解决办法
就是启动ADC就立刻使用校准咯,这样就可以保证不同设备,或者同一个设备不同程序一样的adc啦。