ODrive解析移植(一)—— 国产替代方案(VScode版移植)

news2024/9/21 2:44:10

目录

  • 一、ODrive简介
    • 1.1、 github下载
  • 二、ODrive官方版本的问题
  • 三、国产化方案
    • 3.1、版本0.5.1与0.5.6的区别
    • 3.2、移植说明
      • 3.2.0、修改“tup.config.default”文件名为“tup.config”,打开屏蔽“v3.6-56V”,
      • 3.2.1、修改死区时间,
      • 3.2.2、修改采样电阻,
      • 3.2.3、修改电源电压的检测电路系数,
      • 3.2.4、修改两路 PWM 的相位差,
      • 3.2.5、设置采样电流范围
      • 3.2.6、修改 drv8301 的相关代码,
      • 3.2.7、屏蔽版本判断
      • 3.2.8、增加LED指示灯


ODrive、VESC和SimpleFOC 教程链接汇总:请点击

一、ODrive简介

  • 官方网站:https://odriverobotics.com/

  • github网站:https://github.com/odriverobotics/ODrive

  • 官方使用说明:https://docs.odriverobotics.com/v/latest/guides/getting-started.html,
    在左下角选择对应的版本,比如ODrive-V3.6的当前最新版本是0.5.6,
    在这里插入图片描述

1.1、 github下载

  • 0.5.4之前的版本可以直接下载编译,但是最新版的直接下载编译会报错。下图:
    在这里插入图片描述
    在这里插入图片描述

  • 需要用git下载软件。下图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、ODrive官方版本的问题

在这里插入图片描述

ODrive在驱动大功率电机,特别是双路大功率电机时,会明显容易报错。我觉得官方的板子有两个问题:
1、DRV8301集成了电源+驱动+运放,集成的功能太多,可能会对板子设计要求高一些,否则容易受到干扰,
2、两个DRV8301芯片的SPI接口和引出的SPI接口排针共用,这可能会导致干扰。

如果官方版本用一个独立的电源芯片降压供电,同时引出的SPI接口与DRV使用的SPI接口分开,或者不再引出(比如把编码器设计到驱动板上),这样可以最大限度的降低干扰。

官方最新款的驱动器ODrive Pro和ODrive S1都是单路驱动器,并且做了隔离设计,估计抗干扰能力会更强。

三、国产化方案

3.1、版本0.5.1与0.5.6的区别

1、两个版本的区别还是很大的,代码架构就像换了一个人设计,
2、改动主要是架构,可能是为了以后的升级,
3、操作上的改动,最大的变化就是无感电机的操作指令变化,其它指令变化不大,
4、两个版本的性能表现是完全相同的。

3.2、移植说明

本人已经移植过0.5.1和0.5.6两个版本的代码,本文以0.5.6为例说明。
硬件上主要是用分立元件代替DRV8301,所以代码也围绕DRV8301修改,
在这里插入图片描述

ODrive 购买链接:某宝购买

3.2.0、修改“tup.config.default”文件名为“tup.config”,打开屏蔽“v3.6-56V”,

在这里插入图片描述

3.2.1、修改死区时间,

TIM_APB1_DEADTIME_CLOCKS 为刹车电路的死区时间,
不同的驱动芯片和 MOS 管需要不同的死区时间,请以实际电路为准。
在这里插入图片描述

3.2.2、修改采样电阻,

本店的单排 MOS 限制采样电流范围为 60A,使用了 1mΩ 的采样电阻,
双排 MOS 限制采样电流范围为 120A,所以使用了 0.5mΩ 的采样电阻,
采样电阻上有阻值标注,请根据实际阻值修改。
在这里插入图片描述

3.2.3、修改电源电压的检测电路系数,

官方电路使用的是 18k+1k,借鉴 VESC 的设计选择 39k+2.2k。
因为电阻有误差,所以实际运行中读取的电源电压有 0.2V 左右的误差。
在这里插入图片描述

3.2.4、修改两路 PWM 的相位差,

相位差与死区时间和实际 MOS 的开关速度相关,这是整个代码中最难调的一步。
在这里插入图片描述

3.2.5、设置采样电流范围

采样电流范围与采样电阻和运放放大倍数相关,驱动器的运放倍数固定为 20 倍,所以采样电流范围只与采样电阻相关。
详细分析请看这篇文章:ODrive 运放电路的分析和替代方案
在这里插入图片描述

3.2.6、修改 drv8301 的相关代码,

本次移植用 FD6288 代替 DRV8301,没有 SPI 通信,需将所有 DRV8301 的配置删除,涉及多个文件,也是本次移植过程中代码修改最多的部分,不再一一列举,请以实际代码为准。
在这里插入图片描述

3.2.7、屏蔽版本判断

以上修改完毕后编译下载,驱动板上电后死机,查找原因,发现卡死这这个地方,屏蔽
在这里插入图片描述

3.2.8、增加LED指示灯

TIM1更新中断频率16KHz,每0.5秒亮灭一次
在这里插入图片描述




(完)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/959857.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年您需要虚拟助手的 5个迹象

您的企业今年有以收入为中心的战略目标要实现。然而,新的增长往往伴随着您现有员工的新责任。工作负载增加。团队达到最大容量。超负荷的员工表现出倦怠的迹象。在这些时候,企业主通常会意识到雇用虚拟助理 (VA) 提供支持的好处。…

服务器上使用screen的学习记录

服务器上使用screen 训练模型的时候,花费时间是很长的,不可能一直挂在桌面上。所以就想到用screen了。 记录一下简单的操作指令。 创建screen screen -S roof # 新建一个名字为name的窗口,并进入到该窗口中进入后打开环境,运…

一套成熟在用的Spring Cloud工程项目数字化管理云平台源码

技术架构: 微服务JavaSpring Cloud VueUniApp MySql 开发语言:Java 开发工具:Idea 前端框架:Vue 后端框架:Spring Cloud 数 据 库:MySql 移 动 端:UniApp 系统端口:PC端&…

虚引用真的不影响对象的生命周期吗?99%的人都错了

Java的四大引用,大家都很熟悉吧: 强应用:正常代码中的引用。一个对象能通过强应用访问到,那它就永远不会被回收软引用:比强引用弱一级的引用,内存不足时引用指向的对象会被回收弱引用:比软引用…

现货白银投资快速入门的方法

虽然在现货白银投资之中有很多,所谓的速成班都是不靠谱的,他们一般都是营销的噱头,但是会普通投资者来说,通过一些方法的训练,可以实现快速入门。所谓的快速入门,就是能够在市场中掌握一定的投资方法&#…

手机建模自定义方法,你会用了吗?

易模App借助影像即可完成三维建模,除了在各个建模模式中直接拍摄采集数据,还用开放了宽容度更高的建模方法——自定义建模。 自定义方法可以使用在【人脸模式】【人像模式】【主体模式】【场景模式】中,上传满足建模条件的视频或照片组即可实…

小编亲测八款Ai工具,建议收藏,最后一个你懂的

随着AI大模型不断更新迭代,AI应用也呈现出爆炸式的增长趋势,而利用人工智能工具提高工作效率,已经成为今年来越来越受欢迎的工作方式。除了大名鼎鼎的chatgpt之外,小编在体验了超多各种类型、各种功能的AI工具后,给大家…

count(1)、count(*)和count(列名)及官网解释

最近面试并且看网上的资料说count(1)和count(*)参差不同,就查看了官网,特别记录一下。 共同点:都是用来统计我们的表中的行数不同点: 执行效果上来说:count(1)和count(*)都不会忽略列值为null的行数,而cou…

smartbi token回调获取登录凭证漏洞(二)

2023年8月8日Smartbi官方又修复了一处权限绕过漏洞。该漏洞是上一个特定场景下设置Token回调地址漏洞的绕过,未经授权的攻击者可利用该漏洞,获取管理员token,完全接管管理员权限。 于是研究了下相关补丁并进行分析。 0x01 分析过程 阅读相关…

一篇文章帮你拯救70%的购物车放弃率

想象一下,您倾注所有的心血到您的在线业务中,却面临着令人痛苦的购物车放弃率。这可能会让你痛苦不堪,错失了销售和收入的机会。 此外,你忠实的顾客可能会叛逃去使用竞争对手的产品,雪上加霜。通过再次在广告上支付客…

教程i.MX8MPlus开发板SPI转CAN操作

飞凌嵌入式OKMX8MP-C核心板有两路原生CAN总线,但用户在开发产品时可能需要用到更多的CAN,这该如何解决呢?今天小编将为大家介绍一种SPI转CAN的方法,供各位工程师小伙伴参考。 说明 OKMX8MP-C核心板有两路原生的SPI总线&#xff0c…

如何让看书变听书?

听书神器 安卓 页面简单,易操作,全网小说随便听 各种声音帮你读你喜欢听的小说,带你进入主人公世界 支持网页版小说、本地小说、图片,都能读给你听 想看小说,又怕伤眼睛的宝子,可以试试看!…

堆的基本存储(Java 实例代码)

堆的基本存储 一、概念及其介绍 堆(Heap)是计算机科学中一类特殊的数据结构的统称。 堆通常是一个可以被看做一棵完全二叉树的数组对象。 堆满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值。堆总是一棵完全二叉树。 二、适用说明 堆是利用完…

typescript的~~和双感叹号符号使用

(标题不给用“!”) "~~"符号使用 1.对于number类型的值,~~是取整作用 const num: number 3.14; const roundedNum: number ~~num; // 3 2.对于boolean类型的值,~ ~ true还是true,false还是false “!!”…

无涯教程-JavaScript - FLOOR函数

描述 FLOOR函数将数字向下舍入为零,直到最接近的有效倍数。 语法 FLOOR (number, significance)争论 Argument描述Required/OptionalNumberThe numeric value you want to round.RequiredSignificanceThe multiple to which you want to round.Required Notes 如果数字的符…

设计模式--多例模式(Multition pattern)

一、什么是多例模式(Multition pattern) 多例模式(Multition pattern)是单例模式的一种扩展,它属于对象创建类型的设计模式。在多例模式中,一个类可以有多个实例,并且这些实例都是该类本身。因…

APM32F4XX USB OTA

近期在研究USB CDC协议,使用USB Virtual Port Com功能与上位机通讯做了OTA功能。开发平台:MDK529开发硬件:APM32F411首先看下手册Flash分布,Flash总共8个扇区。 接下来进行Flash分区。 扇区 0 和 扇区 1做Boo区。 扇区 2做APP跳…

LeetCode(力扣)98. 验证二叉搜索树Python

LeetCode98. 验证二叉搜索树 题目链接代码 题目链接 https://leetcode.cn/problems/validate-binary-search-tree/ 代码 递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # …

基于RabbitMQ的模拟消息队列之五——虚拟主机设计

文章目录 一、创建VirtualHost类二、初始化三、API1.创建交换机2.删除交换机3.创建队列4.删除队列5.创建绑定6.删除绑定7.发送消息转发规则 8.订阅消息1.消费者管理2.推送消息给消费者 3.添加一个消费者管理ConsumerManager9.确认消息 创建VirtualHost类。 1.串起内存和硬盘的数…

ppt怎么压缩?这里有4个方法

ppt怎么压缩?PPT作为我们常用的文档格式,在演讲、总结汇报以及个人简历等场合中起到重要作用。一份PPT的页数可能从十几页到上百页不等,有些小伙伴为了追求ppt文件的美观度,会在文件中插入大量的高清图片,然而这种操作…