编者:沉尸 (5912129@qq.com)
针对Odrive中编码器补偿校准的分析,目前网络上可以搜索到相关的几篇文章,比如:
https://blog.csdn.net/ledros/article/details/126475069
但是在细节上还有值得补充的地方,在这里尽我所能再补充一下。
这里采取v0.5.5代码,用增量式旋编的例子进行说明。虽然v0.5.5和v0.5.1相比,源代码看起来改动看起来有点大,但其实质和原理没有啥区别。
现在来看源代码:
// @brief Turns the motor in one direction for a bit and then in the other
// direction in order to find the offset between the electrical phase 0
// and the encoder state 0.
bool Encoder::run_offset_calibration() {
上面重点是看注释:函数的目的是找到电子0相位和旋编状态0之间的映射关系(这里翻译成映射关系可能更好)
其作用就是,只要我知道目前的旋编计数值,就能推导出目前的电子相位。
既然如此,那直接让电机回到0相,然后读出目前旋编的当前计数值,是不是也行?我虽然没有试验过,但是绝对可以跑,精度肯定会比现在的差一点。
但是除了上面这个目的,本校准函数还兼顾测试:
1)电机旋转方向和编码器值变化方向的关系确定
2)旋编CPR值设置是否正确
这两个问题!
看代码:
bool Encoder::run_offset_calibration(

本文深入探讨了ODrive中编码器补偿校准的过程,分析了run_offset_calibration()函数的实现细节,包括电机相位与旋编状态的映射、电机旋转方向与编码器值变化的关系以及CPR值的验证。通过实例解释了为何`calib_scan_distance`需设为4的倍数,并解析了`enc_value_sum`变量的作用。此外,文中还介绍了如何通过正反转来确定中间点的精确位置,确保校准的准确性。
1878

被折叠的 条评论
为什么被折叠?



