半开环算法测试:
算法采用开环驱动 (细分设置为16 比较符合当前输入速率和电机最大速度) 但是失步时候会记录下来并尽量追上 此外还有一些小的优化 比如当误差较大时 驱动带有一定的提前量 电流也会根据负载造成的误差而变化 并对时间有所平滑 当负载轻下来并且不需要驱动时候 锁定电流为1/6满电流
特点: 鲁棒性强 刚性强 无须配置 在负载变化时候没有震荡
计算负担:
锁定时 剩余主循环速度:62次/ms (对比空闲时130次/ms)
RS485以250kbps满速率驱动时, 剩余主循环速度:46次/ms
最大转速
测试指令驱动 约12圈每秒
RS485以250kbps满速率驱动时 可以完全跟踪上 约7.8圈每秒
误差:
静态时 误差一般在2步内 没有抖动 (考虑到实际上是无负载开环直接驱动 这误差其实应该是传感器的)
动态时 RS485以250kbps满速率驱动时, 误差约为12步
给一个角度台阶输入 其误差曲线 因为有加速优化 有少量过冲 但是数据中 响应启动有近1ms时间的延迟 程序其实是立即驱动的 该延迟应该来自电流驱动和电机惯性等
------------------------
想了一天这个延迟的1ms 其实这个对整个系统影响还是颇大的 也是动态跟踪误差最大的原因
整个系统有许多延迟因素
算出下一步 到实际执行时间 我这里主频48MHz PWM是10位 这里有21.3us (但是两次才处理一步 所以上图X坐标单位是42.6us)
MT6701有5us延迟 加上读取它的指令 一共大概需要10us
PWM模拟DAC的2阶低通滤波带来的延时, 分别是1kOhm 47nF, 2.2kOhm 22nF
A4950驱动的延迟 其死区时间25us
电机电感带来的电流延迟 实测所用42电机 相电阻13.5欧 电感20mH (这个电机太老了 相电阻和电感都偏大啊)
电机转动惯量带来的延迟 其转子称量133g 直径26mm 推算转动惯量约11u kg·m^2 根据长度查表 额定电流应该是1.2A 推测最大静扭矩应该是0.3N·m
这么多因素 颇难计算 只能仿真 尤其是3,5,6项
PWM低通传递函数 公式蛮烦 应该是 $\frac{1} {1+sR_2C_2+sR_1C_2+sR_1C_1+s^2R_1R_2C_1C_2} = \frac{1} {1+117*10^{-6}s+2274.8*10^{-12}s^2} $
电机电气部分传递函数 忽略初始项 为 $\frac 1 {sL+R} = \frac 1 {0.02s+13.5} $
电机机械部分 忽略磁链夹角影响和初始项 为 $ \frac {T_m} {I_mJs^2} = \frac 1 {0.000044s^2} $
仿真结果如下
实际上我的驱动算法 在上上图中 55*42.6us前 是全力加速的 而仿真没有包括其收敛定位过程 因此只对前2.34ms进行仿真 仿真表明 此时角度变化到0.033弧度 对应步数是0.033/6.28*3200=17步 与上上图数据基本吻合
此外 也可以到结论 PWM低通影响较小 电机电感影响较大 但是惯性滞回的影响是最大的
不过仅此 也无法完全解释前期有28*42.6us=1.2ms的平台一般的滞后 传感器就算按12位算 精度也有0.0015弧度 由仿真看 在1.2ms处 应该也有0.003弧度(约1.5步)了
考虑到电机和PWM低通都是无感的设备 A4900的原理也简单 我怀疑传感器实则有数百微秒的延迟 即使MT6701在相位域上甚至可以设置为超前 但是时域上仍然可能有延迟的 .... 但我没有证据 也没有个光编进行同步对比
如果是传感器的延迟 假如有500us延迟 按RS485 250kbps 步进脉冲等于25kHz 500us就有12步的偏差 与测试结果符合了 这时候开环其实是紧咬住没有偏差的 只是我的测量有所延迟
但是这对PID算法是糟糕的 我实际上已经有所初步测试 因为PID完全依赖传感器定位 初步测试结果是咬合很好 偏差在0上下轻微波动 如果传感器是延后的 这意味着 实际上 咬合是超前的
正好 还是超前 这是个问题 也影响算法优化的方向 .....
---------------------------------------------
吃完饭继续研究 我做了个测试 以1/8满电流先开始驱动电机 等待一段时间稳定后 进行步进 采集位置信息 ... 结果比我想的还要糟糕 只能说MT6701的动态响应 真不值得
由数据可以看出 MT6701真有较大的延迟
首先逻辑上 先从MT6701的曲线可以判断 步进确实存在 虽然物理上的波形是否与驱动一致无法证明 但是其幅度是存在的 其变化转折点也是存在的 至少物理上不会落后与磁滞为0的传感器的转折点
从图(上)可以看出 当以23kHz左右步进 方向进行改变时候 即使磁滞设为0 MT6701也完全来不及响应 而这种改变其实并不算激烈 每次只是常规的16细分的1个微步
从图(下)可以看出 当以2.3kHz左右步进 MT6701勉强能够进行跟踪 磁滞为0时候 延迟有1ms左右 磁滞为4(我在用的 这个设置下没有超前的相位补偿) 的时候 延迟达到了3ms 而且波形与驱动相差太远 静态的精度掩盖不了动态的变形
前面测试时候 遇到的延迟是500us-1ms左右 比这次测试要小 可能的原因是 前面测试启动阶段是以阶跃式最大出力驱动电机 而这次测试虽然变换频繁 但是出力不大 电机速度其实是要小很多的
AS5600的手册有详细的响应时间 比如采样周期150us 建立时间从0.29ms到2.2ms可调 但是MT6701只有一个匀速时候延迟5us 其他避而不谈 但是从这次测试结果看 我感觉它的建立时间 也应该有2-3ms 看来它也并没有特殊的黑科
但是如果采用AS5600的话 需要将处理周期从20kHz降到几kHz 而且I2C本身也比较慢 ... 但是换句话说 MT6701的SSI虽然快 但是我也怀疑它的采样周期并不高 我得到的只是其数字滤波器上的余响 动态上基本上都没法得到高的精度 远不如开环稳定准确
--------------------------------------
换个波形再测试一次 这回发现 HYST为0LSB时候 DC响应居然有这么大偏差的证据了 我虽然想用 但是 DC响应真的很难校正啊 而且有时候波形还不是这个样子的 说实在真的很不喜欢厂家自作主张 使用一些奇怪的 不可控的 严重非线性的算法呢 如果真是裸数据 我想我都不会那么头疼
因为算法采用了延时补偿机制 使用了测量的延时参数 而不是厂家给的所谓5us 哪怕使用300us延时 性能也大幅度提升了 最高转速达到28.5圈每秒
VID_20231123_210611.mp4 点击下载
对于50极电机而言 等于1.4kHz 而我采样处理频率才23kHz 虽然目前感觉控制干净利落没有问题 但是按一般至少20倍处理频率的准则 (实际测试 降采样频率降到16kHz后 出现不稳定问题)
我决定对性能重新规划 既然传感器延迟那么大 采用太高处理频率不合称 于是处理频率降到16kHz 以容纳更多算法处理的余地 (实际上 我里面会同时放几种算法以供选择 是各有所长的) 其次是加上限速算法 限制在每秒16圈左右
重新测量其性能
稳定性:稳定 手动加乱力负载 没有抖动震荡
计算负担(主循环速度): 空闲时 94次/ms 算法启动后 59次/ms 加上RS485满速率工作 48次/ms ( 应该这时候大概50%)
最大转速 实测每秒17圈
跟踪测试和台阶测试如下图 相比之前 主要是驱动速度加快了 (毕竟这时候预测准确了)
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |