ODrive0.5.5源码分析(7) 启动时尽量让电机少转动

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值