编者:沉尸 (5912129@qq.com)
问题:
Odrive的固件,用增量式编码器,能否在开机时不要进行电机校准和旋编校准,从而提高开机速度?
答案显然是肯定的,因为ST官方的电机库就没有这样的动作!
解决思路:先进行电机校准和旋编偏移校准,然后将数据存入,重新上电时进行旋编和转子的A相对齐。
准备工作:
首先从github中导出Odrive仓库到我的gitee(gitee在国内速度快些)具体导出方式可以百度…

然后从v0.5.5创建一个分支“cs-v0.5.5”供我自己修改使用

编译:
通过git版本管理后进行编译,优点是直接能够知道目前版本(比如: v0.5.5)

否则就会是v0.0.0 (下面图是编译本地的v0.5.1版本截图):

现在再来查看编译过程中自动升成的文件“version.c”

源代码中就直接有了版本号了。
这个的控制在哪里呢?请看文件:“tools\odrive\version.py”

现在开始真正处理代码:
1)增加一个状态机:

但是修改却不是在这里,这个是自动产生的,修改了也没用,下次编译还是会被复原,真正修改的地方是在文件:

再编译,就会在“interfaces.hpp”中生成:
AXIS_STATE_ENCODER_ALIGN = 14,
现在直接列出其它修改点:
1)
encoder.hpp和encoder.cpp中增加函数:
“run_encoder_align()”


下面将本函数详细贴出,函数的目的就是对齐电机A相和旋编0值。
下面的代码很大部分参考自函数:“run_offset_calibration()”
//--------------------------------------
bool Encoder::run_encoder_align() {
const float start_lock_duration = 1.0f;
// Require index found if enabled
if (config_.use_index && !index_found_) {
set_error(ERROR_INDEX_NOT_FOUND_YET);
return false;
}
// 只有增量式才存在"对齐"的概念
if (config_.mode != MODE_INCREMENTAL) {
return true;
}
CRITICAL_SECTION() {
// Reset state variables
axis_->open_loop_controller_.Idq_setpoint_ = {
0.0f, 0.0f};
axis_->open_loop_controller_

本文档介绍了如何修改Odrive的固件以在开机时跳过电机和旋编校准,从而加快启动速度。作者通过在encoder.hpp和encoder.cpp中增加函数`run_encoder_align()`实现了这一目标,并详细展示了代码修改过程。此外,还提到了自定义的参数配置工具替代Odrivetool,以适应不同版本的Odrive固件。
3855

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



