VEX 393 马达电流模型
电路图
绿色箭头为PWM开段电流方向,红色为闭段电流方向。
模型
符号定义
符号 | 含义 |
---|---|
PWM频率 | |
PWM周期 | |
PWM高电位时间 | |
PWM低电位时间 | |
电流(随时间变化) | |
PWM周期开始时的电流 | |
PWM峰值电流 | |
PWM周期结束时的电流 | |
电池电压 | |
反电动势 | |
电感电压 | |
二极管压降 | |
电感 | |
马达内阻 | |
系统内阻 |
部分参数可以自行测定,测定方法见文末。
开段分析
首先,由基尔霍夫定律和欧姆定律,可得:
对上式进行整理,并结合电感电压公式: 我们把它看做一个关于的线性微分方程,初始条件为解得: 我们知道电流在高电压段逐步变大,因此,即: 出于简化式子的需要,令 注意到为时的电流,因此也称作稳态电流。整理得到:
为了之后平均电流的计算需要我们顺便计算一波的积分:闭段分析
再次由基尔霍夫定律及欧姆定律,有:
同样整理: 以初始条件求解这个微分方程解得: 类似地: 我们也令: 可见也是时的电流,也是稳态电流。整理得到:
为了后文计算平均电流的需要,我们也计算积分:注意到以上式子都依赖于和,前者就是占空比乘以PWM总周期长度,而后者则有些棘手,因为并不总是成立。
接下来的分析有两种情况:
- 连续电流:PWM周期中的电流是连续的,即。
- 不连续电流:电流在PWM闭段下降至被二极管截断,即。
两种情况需要分类讨论。
连续电流
由,将展开:
解出:不连续电流
这个时候我们知道,由的计算式我们可以反解出:
从实现上来说,我们先假定(即假设没有二极管),计算出,检查它的正负性,来判断电流是否被截断。平均电流计算
最后,我们结合计算出来的$ t_, t_$,以及开闭段计算出来的两个积分,我们终于可以计算PWM过程中的平均电流:
这也是我们模型计算的最终结果。在实际的实现当中需要考虑更多的细节,比如说转速的方向,命令的方向等等……并不总是如以上的公式那么简单,是一项艰苦的体力劳动,具体可以参考In The Zone下的model.c。
逆向计算
很多时候我们不仅需要计算马达一定情况下的电流,更需要计算马达在某一状态下为了达到某一指定电流(扭矩)所需要的指令大小。例如:
- 计算空载情况下马达到达某一速度所需要的指令值(精确的马达线性化)
- 把PID的输出看做目标扭矩使用模型再反解出指令。
针对这个需求,因为马达曲线直观上总是单调的,因此理论上你总可以根据数学反推推出一个公式,但是由于模型当中牵涉到了分类讨论(电流的连续性),因此较为复杂。利用马达曲线的单调性,二分不失为一个更好的做法。由于指令的范围不大,我们至多只需要二分七八次即可。
注意:模型的计算在Cortex上还是较为耗时间的,实际当中根据当前电压计算一次完整的马达曲线需要4秒左右,优化常数,提高模型计算的效率一直是一个大问题,这也是为什么在实际应用中也许tanh线性化等计算更快的线性化的方法会更好的原因。
结果
这是真实的速度-指令曲线(空载):
这是使用模型计算的速度-指令曲线:
两者几乎一致,说明建模正确。
参数测定
马达内阻
使用伏安法,我们首先需要测量出马达在127命令下堵转电流,127命令是为了尽可能消除电感的影响(即PWM全开),堵转是为了避免电能转化为机械能消耗掉,则根据开段分析当中的
此时,可反解出反电动势常数
我们知道,其中是转速, 为反电动势常数,为了测定其值,我们测量出马达在127命令无负载运转电流和此时的转速(单位不论,但是需要保持统一),由
此时,解得 那么