ODrive0.5.5源码分析(4) 编码器补偿校准(encoder_offset_calibration)

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

编者:沉尸 (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(
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值