无刷直流电机(BLDC)的无传感器控制技术,是当前电机控制领域的热门研究方向。这项技术的核心价值在于,它能够在不依赖物理位置传感器的情况下,通过算法精确估算电机的转速和转子位置。对于工业应用而言,这意味着可以降低系统成本、提高可靠性(物理传感器往往是系统中最易损坏的部件之一),同时还能减少电机体积和布线复杂度。
在实际工程中,我们通常采用基于模型的状态观测器来实现这一目标。而容积卡尔曼滤波(Cubature Kalman Filter,CKF)因其出色的非线性系统处理能力,成为解决这一问题的理想选择。与传统的扩展卡尔曼滤波(EKF)相比,CKF通过球面径向规则生成容积点,能够更准确地捕捉系统的非线性特性,从而获得更好的估计精度。
基于CKF的无传感器BLDC控制系统通常包含以下几个关键部分:
这种架构的优势在于,它完全基于电机的数学模型和可测量的电气量,无需任何机械传感器即可实现精确控制。
理解CKF观测器的前提是掌握BLDC电机的数学模型。在两相静止坐标系下,BLDC电机的电压方程可表示为:
code复制uα = R*iα + L*diα/dt - ω*L*iβ + eα
uβ = R*iβ + L*diβ/dt + ω*L*iα + eβ
其中:
这个模型清晰地展示了电流、电压与转速之间的非线性耦合关系,正是这种非线性特性使得传统线性观测器难以胜任。
容积卡尔曼滤波是一种基于数值积分原理的非线性滤波方法。其核心思想是通过一组精心设计的容积点(Cubature Points)来近似状态的概率分布。与EKF使用泰勒展开进行线性化不同,CKF直接通过非线性变换传播这些容积点,从而更准确地捕捉系统的非线性特性。
CKF的主要步骤包括:
这种方法的优势在于它避免了计算复杂的雅可比矩阵,同时提供了更高的估计精度,特别适合像电机系统这样的强非线性系统。
在BLDC无传感器控制中,我们通常选择以下状态变量:
code复制x = [iα; iβ; ω; θ]
其中θ表示转子位置。
状态转移函数(即前文代码中的state_transition)实现了电机的非线性模型:
matlab复制function x_pred = state_transition(x, u, dt)
omega = x(3); % 当前转速估计值
theta = x(4); % 转子位置
% 非线性状态方程
x_pred = x + dt * [...
-R/L*x(1) + omega*x(2) + u(1)/L;
-R/L*x(2) - omega*x(1) + u(2)/L;
0; % 转速变化率
omega]; % 位置积分
end
观测模型通常选择可直接测量的电流作为观测变量:
matlab复制function y = measurement_model(x)
y = [x(1); x(2)]; % 直接观测α-β轴电流
end
容积点的生成是CKF算法的关键步骤。对于n维状态向量,CKF使用三阶球面径向规则生成2n个容积点:
matlab复制n = length(x);
sqrtP = chol(P)' * sqrt(n); % 分解协方差矩阵
sigma_points = [zeros(n,1), sqrtP, -sqrtP]; % 容积点生成
每个容积点都携带了状态的概率信息,通过非线性传播后,可以更准确地计算预测状态的均值和协方差。
在实际工程实现中,我们通常使用Simulink搭建整个控制系统。关键模块包括:
重要提示:CKF模块的采样时间设置必须与PWM频率匹配。实验表明,当开关频率超过10kHz时,CKF的预测-更新周期应控制在50μs以内,否则会导致明显的相位滞后。
调试CKF观测器时,以下几个参数需要特别注意:
过程噪声协方差矩阵Q:
测量噪声协方差矩阵R:
初始状态协方差P0:
调试时应遵循以下步骤:
在实际测试中,当电机转速过零时,常常会出现约20ms的瞬态抖动。这种现象主要由以下原因造成:
解决方案:
CKF算法虽然精度高,但计算量相对较大。在实际嵌入式实现时,可以考虑以下优化措施:
工业环境中存在各种干扰,为提高观测器的鲁棒性,可以:
通过实验室测试,基于CKF的无传感器控制系统可以达到以下性能指标:
位置估计精度:
转速估计精度:
低速性能:
实测波形显示,CKF估计值(红色)能够很好地跟踪编码器测量的真实位置(蓝色),即使在负载突变的情况下也能保持稳定。
与常见的无传感器控制方法相比,CKF具有以下优势:
| 观测器类型 | 非线性处理能力 | 计算复杂度 | 低速性能 | 参数敏感性 |
|---|---|---|---|---|
| 滑模观测器 | 强 | 低 | 一般 | 高 |
| EKF | 中等 | 中等 | 较差 | 中等 |
| CKF | 强 | 较高 | 较好 | 低 |
对于希望在实际项目中应用CKF无传感器控制的工程师,我有以下建议:
分阶段实现:
调试工具准备:
安全措施:
在实际项目中,我们往往需要根据具体应用场景对算法进行调整。例如,对于要求极高可靠性的医疗设备,可能需要牺牲一些动态性能来换取更好的稳定性;而对于无人机电调这类应用,则可以适当放宽稳态精度要求以获得更快的动态响应。