无人机有个流程是电池电压校准。具体做法是:让你用万用表测量一下电池两端的电压,然后输入到文本框中,电机计算能重新计算出电压分压器的值,从而获得电池电压值。
这种方法实现的原理是这样的:
电阻分压检测电压原理,以上图为例:
当电路确定时,R2/(R1+R2)是一个定值R,而这个R,我们如果通过它们的阻值运算来确定,最终结果会有一定的误差。这种误差是生成工艺,焊接工艺,和环境温度产生的,无法避免。
如果把R当做未知量,直接通过电压表测量获得输入电压Vmeasure,就可以计算出R来,因为Vadc可以通过此时的ADC采样值adc0计算出来。这样有一个很明显的好处是,可以不必关心分压电阻的阻值大小。
整理后的公式如下:
其中Vcc为单片机的ADC基准电压Vref,ADCresolution为分辨率。
有了标定的R值后,可以求出待测量的电压Vbus公式,假设此时的ADC采样值为adc1:
将R代入,可以消去参考电压Vref,ADC分辨率ADCresolution:
adc1为此刻的ADC采样值。Vbus是要求的输入电压。
通过公式可以发现,此种方法计算的值,与Vcc、ADC分辨率都没有关系,只与当时用万用表测量的电压值和当时的ADC采样值有关。
// ADC电源电压标定
inline float vbus_calibration(float measured_v,float adc)
{
return measured_v/adc;// 用于电压计算的系数
}
// 计算电源电压
inline float vbus_measur(u32 adc ,float calibration)
{
return adc * calibration;
}