新的板子已经焊好(左) 比旧的好看多了 也贴合电机外型 使用了MT6701 原生有14位精度 推荐使用12位精度
换了一个电机 可惜粘磁铁似乎 仍旧不够准和偏心 看来没有一个辅助工具 比方一个套筒 是不行的 靠校正吧
这里我用了铜嵌螺母加工一下 来作为电路板的抬生垫片 此时磁铁会距离芯片表面 0.7mm左右 这是一个灾难来源
残差怎么是这个样子 两段很明显的问题
对比一下AS5600的残差
不难发现 AS5600的编码器反而比较准确 关键是线性度比较好 而MT6701的误差曲线居然是5个峰 毫无对称性 出现了大量的非线性
另外一个题外话 新电机的齿槽效应倒比较对称 至少具有明显的180度重复性 不过大电流下的反常依然存在 甚至最大电流时 电机发出了不正常的咔嗒声 显然当反常发生时 电机已经承受不住这样的电流了
回到MT6701 发现其残差上的两段反常 主要来自于正转反转时候的偏差 而且这个偏差完全是芯片的原因 出现在特定的芯片磁角度 0度和180度上 具有滞回的效果 而且此时我采样速度已经非常慢 一圈要10秒 而且这种对方向敏感的东西 完全缺乏静态重复定位的精度
于是我改变了磁铁离芯片的距离 拉远后变成这样
直到找到一个适中的距离 这时候误差曲线4个峰 表现较好 剔除齿槽噪声 残差大致符合12位精度
可见MT6701对磁场强度 磁铁距离非常敏感 远比AS5600敏感得多 这3种距离 其实相差也就2mm 适中的距离 大致只有0.3mm左右的宽裕度 实际上 这3种情况 MT6701都报告状态是 "磁场适中" 不弱也不强 我注意到AS5600有自动增益控制 并有寄存器可以观看当前的增益 而MT6701没有更多的状态报告 当然 MT6701的速度是AS5600的几十倍(5us 对 150us+0.2ms)
其次不光磁场大小的问题 在0度和180度 即使在适中情况 也能感觉到滞回(和手册的几个LSB的可控制滞回不是一回事)和非线性的存在 这大概是芯片本身的算法缺乏连续性光滑性 或者补偿数据(手册提到了这类数据的存在 但是不可自己修改 也不公开)存在一定的问题 不知道MT6816之类更贵 被普遍采用的芯片如何
我考虑过采用两种方向的补偿表 初始化时电机微动确定初始值 但是这给程序带来太多麻烦 不如保证一个准确的距离 (这根据磁铁会有不同) 接受芯片的bug 降低对它的期待
----------2023-11-3-------------
还发现MT6701另一个BUG
实验中发现 如果电压曾经下降到2V左右 再恢复 这时候MT6701似乎工作正常 但是实际会一直出现很大误差 平时1-2度误差会变大到10度左右 然后除非重新完全掉电 再重新供电 精度才会恢复正常 因为实际上它也没有什么重启的I2C命令 所以我原本代码是恢复供电就恢复运作 只能改成 一旦失电 就不会再运作 除非重新加电
----------2023-11-16--------------
关于MT6701的超前角补偿和磁滞
这两天差点被MT6701弄疯了 测试数据总是不完美 但是总算解决了
原因是CW和CCW的数据相差蛮大
当正转时候 数据增长 但是超前增长 反转时候 数据减小 也超前减小 无论是SSI还是I2C读取都一样
有种运动角补偿的意味 但是测试 速度越块 反而补偿越小 速度越慢 反而补偿越大 所以 MT6701也不好意思宣传这个补偿吧
最终设置了4LSB的磁滞回 抵消了这个超前补偿 (原本我以为 这个参数只作用在ABZ PWM之类输出的 SSI得到是裸角度的)
在研究过程中 有下面这张图
蓝色线是角度 橘色线是编码器输出 这是没有设置磁滞之前的 设置之后就没再测 (测起来比较复杂)
明显看出 MT6701输出有台阶现象 可能是内部ADC位数不同 或者中间计算精度缺乏导致
在旋转方向改变的时候 有个明显的滞回 然后又超前追赶
时段 | 个数 |
---|---|
{{f.startingTime}}点 - {{f.endTime}}点 | {{f.fileCount}} |