3. 误差建模与数学描述:从霍尔信号到位置/速度的数学桥梁
做伺服驱动这些年,我越来越觉得:数学模型不是纸上谈兵,它是你和硬件对话的翻译官。霍尔传感器输出的只是三个高低电平,但你要的是连续的位置和速度。这中间的鸿沟,就得靠数学来填。
这一章,我们就来搭这座桥。我会从最基础的霍尔信号讲起,一步步推导出位置和速度的表达式,然后引入传递函数和状态空间方程。别怕公式,我会用项目里的实际例子帮你理解。
3.1 霍尔传感器的输出信号模型
先看霍尔传感器到底输出了什么。一个典型的无刷直流电机(BLDC)里,三个霍尔元件按120°电角度安装。转子转动时,它们输出三个方波信号:HA、HB、HC。
这三个信号有固定的相位关系。我习惯用一个简单的数学表达式来描述:
HA(θ) = sign(sin(θ))
HB(θ) = sign(sin(θ - 120°))
HC(θ) = sign(sin(θ - 240°))
其中 sign() 是符号函数,θ 是电角度。每个信号只有0和1两种状态,三个信号组合起来,一个电周期内正好有6个状态。
关键点:霍尔信号本质上是离散的位置信息。一个电周期内,我们只能得到6个精确的位置点(每60°一个)。位置分辨率 = 360° / (极对数 × 6)。
举个例子。我做过一个8极对数的电机项目,霍尔信号的分辨率只有:360° / (8 × 6) = 7.5° 机械角度。这个分辨率对于很多应用来说太粗糙了,这就是误差的根源之一。
3.2 位置与速度的数学表达
有了霍尔信号,怎么得到连续的位置和速度?这里有两个层次的问题。
3.2.1 位置估计
最简单的做法是查表法。每个霍尔状态对应一个固定的电角度:
| 霍尔状态 (HA, HB, HC) | 电角度 (度) | 扇区编号 |
|---|---|---|
| 1 0 1 | 0 | 1 |
| 1 0 0 | 60 | 2 |
| 1 1 0 | 120 | 3 |
| 0 1 0 | 180 | 4 |
| 0 1 1 | 240 | 5 |
| 0 0 1 | 300 | 6 |
但这样得到的角度是阶梯状的。每个扇区内角度不变,换扇区时跳变60°。这种跳变在低速时尤其明显,会导致速度估算剧烈波动。
我建议的做法是:在扇区内做线性插值。假设电机匀速转动,那么扇区内的角度可以表示为:
θ(t) = θ_k + ω_k × (t - t_k)
其中 θ_k 是第k个扇区的起始角度,ω_k 是当前扇区内的平均角速度,t_k 是进入该扇区的时间戳。
我的经验:插值后的角度精度取决于速度估算的准确性。如果速度估算不准,插值反而会引入更大的误差。我一般会在速度估算上做一个低通滤波,截止频率设在10-20Hz左右。
3.2.2 速度估计
速度估计有两种常用方法:
- M法(测频法): 测量固定时间内霍尔边沿的个数。适合高速。
- T法(测周法): 测量两个霍尔边沿之间的时间间隔。适合低速。
实际项目中,我更喜欢用T法。因为伺服系统经常工作在低速,T法在低速时的分辨率更高。速度计算公式:
ω = Δθ / Δt
Δθ 是固定的60°电角度,Δt 是两次霍尔跳变的时间差。这个公式看起来简单,但实际用起来坑不少。
我曾经踩过的坑:直接用相邻两次霍尔跳变的时间差算速度,结果速度信号噪声极大。原因是霍尔信号的跳变时刻本身就有抖动(机械振动、电磁干扰)。后来我改用多周期平均法,取最近3-5次跳变的时间差做加权平均,效果好了很多。
3.3 传递函数模型
有了位置和速度的数学表达,我们就可以把整个霍尔传感器+估算算法看作一个测量环节,用传递函数来描述它的动态特性。
霍尔传感器本身可以近似为一个零阶保持器。因为它在每个扇区内输出恒定的位置值,直到下一个跳变才更新。零阶保持器的传递函数是:
G_h(s) = (1 - e^(-T_s)) / s
其中 T 是霍尔信号的采样周期(即两次跳变的时间间隔)。这个周期不是固定的,它随转速变化。
如果加上插值算法,情况会复杂一些。插值相当于引入了一个一阶近似。我习惯把整个霍尔位置估算环节简化为:
G_est(s) = 1 / (τ_est × s + 1)
τ_est 是等效时间常数,它和霍尔信号的更新频率有关。一般来说,τ_est ≈ T/2。
核心结论:霍尔位置估算环节本质上是一个低通滤波器。它的带宽受限于霍尔信号的更新频率。转速越低,更新频率越低,带宽越窄,滞后越大。这就是低速时跟随误差大的根本原因。
3.4 状态空间方程
传递函数适合单输入单输出系统,但伺服系统是多变量的。我更喜欢用状态空间方程来描述整个系统。
考虑一个简化的伺服系统,状态变量包括:位置 θ、速度 ω、以及霍尔估算误差 e。状态空间方程可以写成:
d/dt [θ] = [0 1 0] [θ] + [0] u
[ω] [0 0 0] [ω] [Kt/J]
[e] [0 0 -1/τ] [e] [0]
y = [1 0 1] [θ]
[ω]
[e]
其中:
- u 是电流指令(转矩指令)
- Kt 是转矩常数
- J 是转动惯量
- τ 是霍尔估算误差的衰减时间常数
- y 是实际测量的位置(包含误差)
这个模型把霍尔误差作为一个独立的状态变量 e 来处理。e 的动态特性由时间常数 τ 决定。τ 越大,误差衰减越慢,对系统的影响越持久。
我个人习惯:在实际调试中,我会把 τ 作为一个可调参数。通过辨识实验(比如给一个阶跃速度指令,观察位置误差的收敛过程),可以拟合出 τ 的值。一般 τ 在 0.01s 到 0.1s 之间。
3.5 知识体系总览
为了让你更直观地理解这一章的知识结构,我画了一张图:
3.6 模型怎么用?一个实际例子
理论讲完了,说点实际的。去年我做了一个AGV小车的轮毂电机项目,霍尔传感器就是位置反馈的唯一来源。
问题表现:小车在低速(< 50 rpm)时,速度波动很大,有明显的顿挫感。我用示波器抓了霍尔信号和估算速度,发现速度估算值在扇区切换时有剧烈的尖峰。
我用这一章的模型做了分析:
- 先建立霍尔信号的离散位置模型,确认分辨率是7.5°机械角度
- 然后用传递函数模型估算等效时间常数 τ_est ≈ 15ms(在50rpm时)
- 最后用状态空间模型仿真,发现误差状态 e 的衰减时间常数 τ 需要调到 0.05s 以上才能稳定
解决方案:在速度估算中增加一个自适应低通滤波器,截止频率随转速变化。低速时降低截止频率,抑制噪声;高速时提高截止频率,减少滞后。效果立竿见影,速度波动从 ±15% 降到了 ±3%。
总结一下:数学模型的价值不在于公式本身,而在于它能帮你定量地理解问题。有了模型,你就能预测不同参数下的表现,而不是盲目地试参数。