首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

ODrive移植keil(二)—— ODrive的程序架构

  • 23-09-28 04:01
  • 4798
  • 14224
blog.csdn.net

目录

  • 一、移植说明
  • 二、支持的驱动板
  • 三、程序架构说明
    • 3.1、从main开始
    • 3.2、TIM8更新中断
    • 3.3、AD转换的专题说明

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

一、移植说明

  • 上一节教程的移植主要体现在硬件上,软件改动很小并且仍然为VScode版本,只是降低了进口芯片的使用量,并没有降低ODrive代码的难度。

  • 本节及之后的教程将把odrive移植到keil环境下,为了降低移植难度,同时也为了让大家更容易学习掌握移植后的代码,本次移植,只移植电机的核心控制功能,实现常用的一些功能。移植后的代码不用FreeRTOS系统,所有通信协议做为非核心功能也不再移植。

  • 移植没有采用HAL库,而是使用ST标准库,因为当前国产芯片多采用标准库,所以标准库的代码更容易移植到国产芯片上,最终可以实现电机驱动器的完全国产化。

  • 国外的电机驱动技术领先国内这是不争的事实,“洋务运动”一直都在,只是在不同的领域不同的范围,
    在这里插入图片描述

 
 

二、支持的驱动板

本次移植,支持以下几种驱动板
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

ODrive购买链接:某宝购买

 

三、程序架构说明

本次代码在v0.5.6版本上移植,v0.5.4之前的架构和当前架构差别较大,请大家注意版本,

就像盖房子,多层一般用砖混结构,高层必须用框架结构,

想要学习代码,要先了解程序架构,不同体量不同目标的代码采用不同的架构,
 

3.1、从main开始

在这里插入图片描述
在这里插入图片描述
 
初始化配置主要就是以上这些,
创建 rtos_main 主线程,进入这个函数,下图:

在这里插入图片描述
在这里插入图片描述
 
在主线程中又创建了2个线程(如果AXIS_COUNT=2),上图:
创建线程的具体函数如下,老外似乎很喜欢这种层层调用的复杂感。

在这里插入图片描述
 
最终进入到真正的主循环,下图:

在这里插入图片描述
 
主循环中做的工作很少,特别是进入“电机闭环”模式后,电机基本进入死循环状态,下图:

在这里插入图片描述
 
main函数主要是初始化和创建线程,并最终执行一个简单的状态切换工作。

 

3.2、TIM8更新中断

驱动器的大部分工作都是在TIM8更新中断中处理,大概是因为定时器可以精确定时,这样在执行相关函数时,可以实现周期性运算。
在这里插入图片描述
 
进入中断后,会先读编码器,下图:

在这里插入图片描述
 
大部分工作都是在ControlLoop 这个软件触发 的中断中进行,下图:
为什么要用软件触发,不在TIM8更新中断中直接执行这些代码,我一直没想明白。

在这里插入图片描述

上图可以看到,有两次电流采样,第一次是在下臂的PWM高电平(MOS打开)时采样,采样值用于电流变换,
第二次是在下臂的PWM低电平(MOS关闭)时采样,采样值用于校准电流。
 
control_loop_cb 函数中别有洞天,老外确实喜欢层层调用,难道这就是高级。下图:

这部分代码会让人看得很无助,因为所有的代码都在此时执行,比如最下面的开环控制,都已经闭环了难道它还在运行,它运行的意义是什么?

在这里插入图片描述
除了main中少得可怜的工作量和几个通信线程,更新中断几乎执行了电机正常运行时的所有工作,真的是“你喜欢干活就会有干不完的活”。

 

3.3、AD转换的专题说明

Lowside模式下,电流采样由PWM触发,是整个代码中最精巧的部分,重点说明。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
 
上面三个ADC的配置是由STM32CubeMX配置生成的代码,实际关于AD的配置还有一个在主线程中,下图:

在这里插入图片描述
在这里插入图片描述

综上,
ADC1的规则通道转换所有闲杂的ADC,比如温度检测,不需要时效,软件触发后将一直在后台转换;
ADC1的注入通道转换Vbus,由TIM1触发。
ADC2的规则通道转换M1_B相,由TIM8触发;ADC2的注入通道转换M0_B相,由TIM1触发。
ADC3的规则通道转换M1_C相,由TIM8触发;ADC3的注入通道转换M0_C相,由TIM1触发。

ADC转换结果在TIM8更新中断里读取,不是常用的ADC转换结束触发中断,下图:

在这里插入图片描述

 
ADC的转换比较复杂,我将在之后移植的时候再详细分析。
 
 
 
(完)
 
 

注:本文转载自blog.csdn.net的loop222的文章"https://blog.csdn.net/loop222/article/details/132641290"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top