角度传感器的采集信号大体上分两种,第一种是采集差分信号,然后通过作差来得到正余弦值,比如英飞凌TLE5501,第二种是直接输出的正余弦值,比如TAS2240。这两种的主要区别是后者需要减去参考电压,参考电压可以通过测量多个周期值的平均值得到,而差分信号的可以天然去除掉参考电压。

1.理想情况的角度采集数据

理想情况采集到的数据满足下列关系:
sin⁡ideal=Asin⁡(θ)cos⁡ideal=Acos⁡(θ) \sin_{ideal} = A\sin(\theta) \newline \cos_{ideal} = A\cos(\theta) sinideal=Asin(θ)cosideal=Acos(θ)
其中 sin⁡ideal\sin_{ideal}sinidealcos⁡ideal\cos_{ideal}cosideal是理想情况下采集到的角度正余弦值,θ\thetaθ为采集的角度,AAA为采集到的正余弦幅值。
显然有 sin⁡ideal2+cos⁡ideal2=1\sin^2_{ideal} + \cos^2_{ideal} = 1sinideal2+cosideal2=1, 当θ从0到360°变化时,(sin⁡,cos⁡)(\sin,\cos)(sin,cos)的轨迹是​半径为1的完美圆形,也就是单位圆。

2.实际情况的角度采集数据

现在假设角度传感器测到的原始值是cosrawcos_{raw}cosrawsinrawsin_{raw}sinraw,由于芯片的制造工艺以及客观世界的物理现象等原因,采集到的数据会有误差,具体表现在幅值产生误差(正余弦增益不一致,采集到的正余弦幅值不相等),以及零偏误差(正余弦曲线不再关于x轴对称),实际情况采集的角度满足如下关系:
sin⁡raw=Assin⁡(θ)+Bscos⁡raw=Accos⁡(θ)+Bc \begin{align} \sin_{raw} = A_s\sin(\theta) + B_s \newline \cos_{raw} = A_c\cos(\theta) + B_c \end{align} sinraw=Assin(θ)+Bscosraw=Accos(θ)+Bc
其中 sin⁡raw\sin_{raw}sinrawcos⁡raw\cos_{raw}cosraw是实际采集到的角度正余弦值,θ\thetaθ为采集的角度,AsA_sAsAcA_cAc为采集到的正弦和余弦幅值,这两个值不相等是多物理场耦合作用的结果,BsB_sBsBcB_cBc是零偏误差,也是各种因素综合作用的结果。

3.数据校准

3.1 零偏误差

以正弦角度采集为例,sin⁡raw=Assin⁡(θ)+Bs\sin_{raw} = A_s\sin(\theta) + B_ssinraw=Assin(θ)+Bs实际采集到的最大值和最小值分别是sin⁡rawmax=As+Bs\sin_{rawmax} = A_s + B_ssinrawmax=As+Bssin⁡rawmin=Bs−As\sin_{rawmin} = B_s-A_ssinrawmin=BsAs,二者相加消去AsA_sAs可以得到:
Bs=12(sin⁡rawmax+sin⁡rawmin) \begin{align} B_s = \frac12(\sin_{rawmax}+\sin_{rawmin}) \end{align} Bs=21(sinrawmax+sinrawmin)
对于余弦的角度采集也是同样的道理
Bc=12(cos⁡rawmax+cos⁡rawmin) \begin{align} B_c = \frac12(\cos_{rawmax}+\cos_{rawmin}) \end{align} Bc=21(cosrawmax+cosrawmin)

3.2 幅值差异

还是以正弦角度采集为例,sin⁡raw=Assin⁡(θ)+Bs\sin_{raw} = A_s\sin(\theta) + B_ssinraw=Assin(θ)+Bs实际采集到的最大值和最小值分别是sin⁡rawmax=As+Bs\sin_{rawmax} = A_s + B_ssinrawmax=As+Bssin⁡rawmin=Bs−As\sin_{rawmin} = B_s-A_ssinrawmin=BsAs,二者相减消去BsB_sBs可以得到:
As=12(sin⁡rawmax−sin⁡rawmin) \begin{align} A_s = \frac12(\sin_{rawmax}-\sin_{rawmin}) \end{align} As=21(sinrawmaxsinrawmin)
对于余弦的角度采集也是同样的道理
Ac=12(cos⁡rawmax−cos⁡rawmin) \begin{align} A_c = \frac12(\cos_{rawmax}-\cos_{rawmin}) \end{align} Ac=21(cosrawmaxcosrawmin)

3.3 角度采集值校准

(1)(1)(1)(2)(2)(2)式子中零偏校准BsB_sBsBcB_cBc移到等号左边以后可以得到:
(sin⁡raw−BsAs)2+(cos⁡raw−BcAc)2=1 \begin{align} (\frac{\sin_{raw}-B_s}{A_s})^2+(\frac{\cos_{raw}-B_c}{A_c})^2 = 1 \end{align} (AssinrawBs)2+(AccosrawBc)2=1
这样的话实际采集到的值就可以用下面的式子来计算了:
sin⁡cal=sin⁡raw−BsAscos⁡cal=cos⁡raw−BcAc \begin{align} \sin_{cal} = \frac{\sin_{raw}-B_s}{A_s} \newline \cos_{cal} = \frac{\cos_{raw}-B_c}{A_c} \end{align} sincal=AssinrawBscoscal=AccosrawBc
此时我们对于正余弦两个通道的数据都需要按照其幅值进行缩小,在实际中只希望对一个通道进行操作,可以考虑对(7)(7)(7)式两端同时乘以As2A_s^2As2,于是(7)(7)(7)式就变成了这样:
(sin⁡raw−Bs)2+(AsAc)2(cos⁡raw−Bc)2=As2 \begin{align} (\sin_{raw}-B_s)^2+(\frac{A_s}{A_c})^2({\cos_{raw}-B_c})^2 = A_s^2 \end{align} (sinrawBs)2+(AcAs)2(cosrawBc)2=As2
进一步,实际采集到的值就变成了这样
sin⁡cal=sin⁡raw−Bscos⁡cal=AsAc(cos⁡raw−Bc) \begin{align} &\sin_{cal} =\sin_{raw}-B_s \newline &\cos_{cal} = \frac{A_s}{A_c}(\cos_{raw}-B_c) \end{align} sincal=sinrawBscoscal=AcAs(cosrawBc)
这个就是工程中常用的角度传感器的校准式。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐