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



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

一、移植说明

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

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

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

  • 移植不是为了代替VScode版本。移植的终极目的是掌握电机控制核心技术,并实现百分之百的国产化。

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


二、支持的驱动板

在这里插入图片描述

购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技

三、程序架构说明

本次代码在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关闭)时采样,采样值用于校准电流。

MOS关闭时的采样可以理解为没有电流流过时的运放输出电压,这个采样值作为校准值。一般的代码都是在上电初始化的时候,校准一下电流,之后的代码运行都以这个校准值为参考。ODrive的校准方式,初始化时校准,每次中断时再校准一次,校准值一直在更新,可以理解为动态校准。我也是第一次见到这种校准方式,它为什么要用这种校准方式,这种校准方式有什么优点,不清楚。

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的转换比较复杂,我将在之后移植的时候再详细分析。


驱动板购买链接:https://item.taobao.com/item.htm?ft=t&id=644329838237,图锐科技
电机 购买链接:https://item.taobao.com/item.htm?ft=t&id=643573104607,图锐科技



欢迎加入技术交流群:923734429 (入群申请写:CSDN)



(完)

  • 7
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值