inav/betaflight/ardupilot在电压传感器方面的校准方法大致是相同的,采用的是线性拟合:
y
=
a
x
+
b
y = ax + b
y=ax+b
betaflight内部公式:
Y
=
(
(
s
r
c
?
s
c
a
l
e
?
g
e
t
V
r
e
f
M
v
(
)
/
10
+
(
0
x
F
F
F
?
5
)
)
/
(
0
x
F
F
F
?
d
i
v
i
d
e
r
)
)
/
m
u
l
t
i
p
l
i
e
r
Y = ((src *scale * getVrefMv() / 10 + (0xFFF * 5)) / (0xFFF * divider)) / multiplier
Y=((src?scale?getVrefMv()/10+(0xFFF?5))/(0xFFF?divider))/multiplier 注:STM32在计算时,运用了一些整形变换,使得上述运算不用到浮点指令,减少MCU的工作量。
当multiplier=1时,计算就比较简单。
A
=
s
c
a
l
e
/
(
10
?
m
u
l
t
i
p
l
i
e
r
?
(
4095
+
d
i
v
i
d
e
r
)
)
A=scale/(10*multiplier*(4095+divider))
A=scale/(10?multiplier?(4095+divider))
B
=
(
4095
?
5
)
/
(
m
u
l
t
i
p
l
i
e
r
?
(
4095
+
d
i
v
i
d
e
r
)
)
B=(4095*5)/(multiplier*(4095+divider))
B=(4095?5)/(multiplier?(4095+divider))