第1章:基础物理与数学——电机控制的“内功心法”
各位同学,欢迎来到《电机驱动控制算法从入门到精通》的第一章。
说实话,很多初学者一上来就急着调PID参数,或者研究FOC的SVPWM波形。我当年也犯过这个错。结果呢?电机转是转了,但一遇到负载变化就抖得像筛糠,或者干脆烧了MOS管。后来我才明白,电机控制这玩意儿,表面上是写代码、调参数,骨子里拼的是物理和数学功底。
这一章,我们就来把电机控制最底层的三块基石夯实:电磁学、运动学、PID数学基础。别怕,我会用我踩过的坑帮你把路铺平。
1.1 电磁学基础:电机为什么能动?
电机能转,靠的就是电磁力。这里三个定律你必须刻在脑子里。
1.4.1 安培力:电流在磁场里“挨打”
安培力说白了就是:通电的导线放在磁场里,导线会受到一个力。
公式很简单:F = B × I × L
- F:力(牛顿)
- B:磁感应强度(特斯拉)
- I:电流(安培)
- L:导线在磁场中的有效长度(米)
你想想看,电机里的线圈就是那根“导线”,永磁体或电磁铁提供“磁场”。我们给线圈通电,线圈就会受力转动。这就是电机最原始的扭矩来源。
1.4.2 洛伦兹力:带电粒子在磁场里“拐弯”
安培力是宏观表现,洛伦兹力是微观本质。公式:F = q × v × B
- q:电荷量
- v:电荷运动速度
- B:磁感应强度
说白了,电流就是大量电荷在定向移动。每个电荷都受到洛伦兹力,合起来就是安培力。这两个力本质上是同一个物理现象的不同表述。
嗯,这里要注意:洛伦兹力的方向永远垂直于速度和磁场方向。这意味着它不做功,只改变电荷的运动方向。所以电机里的“力”其实是安培力,洛伦兹力只是解释了为什么电荷会横向运动。
1.4.3 法拉第定律:电机也是发电机
这个定律太重要了。公式:E = -dΦ/dt
- E:感应电动势(伏特)
- Φ:磁通量(韦伯)
- t:时间(秒)
什么意思?变化的磁场会产生电场。电机转起来后,转子切割磁感线,就会在定子线圈里感应出一个电压。这个电压就是我们常说的“反电动势”(Back EMF)。
反电动势的大小和转速成正比:E = Ke × ω(Ke是反电动势常数,ω是角速度)。这个公式在无传感器控制中用来估算转速,非常实用。
1.2 运动学基础:转速、转矩、惯量
电机控制最终要控制的是机械运动。这三个物理量你必须门儿清。
1.2.1 转速(Speed)
转速就是电机转得快不快。常用单位:
- RPM(转/分钟):最常用,比如3000RPM
- rad/s(弧度/秒):数学计算方便,1 RPM = π/30 rad/s
电机转速和电压大致成正比(空载时),但带上负载后会有转速降。这就是为什么我们需要闭环控制。
1.2.2 转矩(Torque)
转矩就是电机“劲儿”大不大。公式:T = F × r(力乘以力臂)。
在电机里,转矩和电流成正比:T = Kt × I(Kt是转矩常数)。
我个人的习惯是:调试时先看电流波形。电流稳了,转矩基本就稳了。电流有毛刺,转矩一定不平滑。
1.2.3 惯量(Inertia)
惯量是物体抵抗转速变化的“惰性”。公式:J = m × r²(质量乘以半径平方)。
惯量越大,电机加速和减速就越慢。在PID调试中,惯量直接影响系统的响应速度。负载惯量和电机转子惯量的比值,决定了你需要用什么样的控制策略。
这个公式是电机控制的“牛顿第二定律”。它告诉你:加速转矩 = 惯量 × 角加速度。所有速度环、位置环的设计,最终都要回归到这个方程。
1.3 PID控制数学基础
PID是电机控制中最经典、最实用的算法。没有之一。
1.3.1 比例控制(P)
公式:u(t) = Kp × e(t)
- u(t):控制输出
- Kp:比例增益
- e(t):误差(目标值 - 实际值)
说白了就是:误差越大,输出越大。但纯比例控制会有稳态误差,因为当误差小到一定程度,输出不足以克服摩擦力等阻力。
1.3.2 积分控制(I)
公式:u(t) = Ki × ∫e(t)dt
积分项的作用是消除稳态误差。它把过去的误差累积起来,只要还有误差,积分项就会一直增加输出,直到误差为零。
但积分项有个大坑:积分饱和。我在做伺服驱动器时遇到过,电机启动时误差很大,积分项疯狂累积,等误差变小了,积分项还很大,导致系统超调严重。解决办法是加积分限幅或条件积分。
1.3.3 微分控制(D)
公式:u(t) = Kd × de(t)/dt
微分项是预测未来的。它根据误差的变化率来调整输出,可以抑制超调,提高系统稳定性。
但微分项对噪声极其敏感。我建议在实际项目中,微分项前一定要加低通滤波,否则高频噪声会被放大,导致电机抖动。
1.3.4 位置式PID vs 增量式PID
在数字控制中,我们常用两种形式:
| 类型 | 公式 | 特点 |
|---|---|---|
| 位置式PID | u(k) = Kp×e(k) + Ki×∑e(i) + Kd×[e(k)-e(k-1)] | 输出直接是控制量,需要积分限幅 |
| 增量式PID | Δu(k) = Kp×Δe(k) + Ki×e(k) + Kd×[Δe(k)-Δe(k-1)] | 输出是控制量的增量,不会积分饱和 |
我个人更推荐增量式PID,尤其是在电机控制中。因为它不会出现积分饱和问题,而且切换手动/自动模式时更平滑。
// 增量式PID结构体
typedef struct {
float Kp, Ki, Kd;
float error_last; // 上一次误差
float error_prev; // 上上次误差
float output; // 当前输出
} PID_IncTypeDef;
// 增量式PID计算函数
float PID_Inc_Calc(PID_IncTypeDef *pid, float target, float actual) {
float error = target - actual;
float delta_error = error - pid->error_last;
// 增量输出
float delta_u = pid->Kp * delta_error
+ pid->Ki * error
+ pid->Kd * (delta_error - (pid->error_last - pid->error_prev));
// 更新历史误差
pid->error_prev = pid->error_last;
pid->error_last = error;
// 累加输出
pid->output += delta_u;
// 输出限幅
if(pid->output > OUTPUT_MAX) pid->output = OUTPUT_MAX;
if(pid->output < OUTPUT_MIN) pid->output = OUTPUT_MIN;
return pid->output;
}
1.4 本章小结
这一章我们打下了电机控制的物理和数学基础:
- 电磁学:安培力产生转矩,洛伦兹力解释本质,法拉第定律告诉我们反电动势不可忽视
- 运动学:转速、转矩、惯量三者通过运动方程紧密关联
- PID数学:比例、积分、微分各有分工,增量式PID是工程实践中的优选
下一章,我们将进入真正的电机控制算法世界——从最基础的六步换相开始,一步步走向FOC。到时候你会发现,今天学的这些物理和数学,全都会派上用场。
记住:基础不牢,地动山摇。把这些搞懂了,后面的路会越走越顺。