ODrive移植keil(五)—— 开环控制和电流变换-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

目录



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

一、开环控制

在SimpleFOC系列中有开环控制的教程SimpleFOC移植STM32二—— 开环控制可以对比参考。

1.1、控制原理

在这里插入图片描述

1、开环控制只能使用电压模式电流模式需要采样电流那就是闭环了
2、一般设置Ud=0所以只需设置Uq。在SimpleFOC中 voltage_limit最终赋值Uq在ODrive中 target_voltage_最终赋值Uq
3、Uq设置太大电机发热严重Uq设置太小电机没劲转不动或者转不快所以一定要根据电机相电阻设置大小
4、θ不是当前的角度是目标角度就是下次计算时的角度。

1.2、硬件接线

在这里插入图片描述

驱动板购买链接某宝购买
电机 购买链接某宝购买

1.3、代码说明

1、开环控制在TIM1更新中断中调用下图
在这里插入图片描述

2、开环控制代码下图
相比simpleFOC的开环运算增加电流、电压和速度的爬升率设置启停阶段电机转动更平稳
在这里插入图片描述

3、Park逆变换
由dq变为αβ最终送入SVPWM
在这里插入图片描述

1.4、程序演示

注意本节示例中的速度单位是电角度rad/s不是闭环控制中的速度单位圈/秒也不是SimpleFOC中的机械角度rad/s。

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


在这里插入图片描述

如果转速设置太大电机会振动可以调高 target_voltage_ 以达到更大的转速但是注意电机电流注意发热。

  • 电压爬升率和速度爬升率如果设置的小一点可以看到电机逐渐加速的过程
  • 云台电机的target_voltage_设置可以更大一点能更清楚的看到扭矩逐渐增大的过程
  • 开环控制虽然简单却是入门第一关
  • 对于电机新手可以先用云台电机因为电机相电阻更大不容易烧坏
  • 开环控制主要用于电机上电校准和无刷电机的启动阶段不是控制常态不用深入研究。

1.5、程序架构的体现

ODrive代码开源但却难以看懂我觉得原因有以下几个

  • 1、采用FreeRTOS系统没用大家习惯的裸奔
  • 2、C++编程单片机代码C是主流即使有嵌入式工程师善长C++但却不懂硬件代码看起来一样云里雾里
  • 3、程序架构与众不同。

ODrive的程序架构也是我在基本移植完代码后才焕然大悟的如果事先有架构意识不至于看代码的时候那么痛苦。
下面以开环控制为例说明其架构特点

  • openloop_controller_update()函数运算后的变量赋给FOC_voltage()函数这是常用的代码写作方式下图
    在这里插入图片描述
  • 为了说明程序架构我又做了一个开环控制代码
    在这里插入图片描述
  • 第二个代码仿照官方架构openloop_controller_update()函数运算后的变量没有直接赋给FOC_voltage()函数下图
    在这里插入图片描述
    而是在准备开环控制的时候指针指向开环变量下图
    在这里插入图片描述
    然后再将指针传递给FOC_voltage()函数的变量下图
    在这里插入图片描述

总结来说

  • 第一个代码中openloop_controller_update()函数变量给FOC_voltage()函数用整个代码只有一套变量
  • 第二个代码中openloop_controller_update()函数有自己的变量FOC_voltage()也有自己的变量两个变量通过指针链接。

相当于多了一个二传手这样做肯定降低了效率甚至觉得完全就是多此一举但为什么要这么做大概是方便功能拓展和多人合作。我觉得这个差别有点像个体户和大型跨国公司个体户理解不了ERP系统一样。

最初移植代码的时候我是打算采用第一种方案的但是考虑到代码移植后大家的认可度我还是决定和官方的保持一致。
文笔有限还不懂的请认真对比两个代码。

二、电流变换

电流变换实际上要到第七篇教程编码器校准时才会涉及到此处提前讲解以满足你们那渴望的心

2.1、理论说明

1、几乎所有讲FOC的文章都会有这样的框图所以此处不再多讲。

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

2、重点“θ”这个参数框图中看起来像是一个参数两处调用实际上这是两个角度
Park变换的θ是当前读出的角度而Park逆变换是下次FOC计算时的角度当前角度+估算的下次转过的角度

  • 在simpleFOC中没有估算下次转过的角度只是简单的加了_PI_2我觉得这也是限制了SimpleFOC最大转速的一个原因因为转速足够快的话一个电周期完全有可能转过_PI_2个电角度。
    在这里插入图片描述
  • 在ODrive中则经过了精确的计算
    在这里插入图片描述

2.2、代码说明

  • 电流变换部分移植v0.5.1因为v0.5.6的变换被分开写入了多个不同的函数没有0.5.1的简单清晰
  • 本节只为方便观看代码稍后代码中的变换仍采用v0.5.6版本
  • 0.5.1和0.5.6都是好代码版本升级只能说明创作者有不同的目标并不是代码就一定越来越好。

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

  • ODrive的力矩模式非常稳定对比SimpleFOC的电流环就非常拉垮几乎没有实用价值。
  • 我试图把ODrive的电流环移植到SimpleFOC中但是移植了一些后就写不下去了因为涉及到了程序架构。SimpleFOC是Arduino环境设计的目标是跨平台运行几乎不用中断代码是流水线式的执行强行移植就不再是SimpleFOC了。









阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6