目录

  • 说明
  • 一、霍尔电机
    • 1.1、电机的种类
    • 1.2、霍尔传感器
    • 1.3、SimpleFOC的霍尔电机控制原理
  • 二、电机驱动板103
    • 2.1、读取霍尔角度
    • 2.2、驱动霍尔电机M1
    • 2.3、驱动霍尔电机M2
    • 2.4、驱动双霍尔电机
  • 三、电机驱动板405
    • 3.1、读取霍尔角度
    • 3.2、驱动霍尔电机M0
    • 3.3、驱动霍尔电机M1
    • 3.4、驱动双霍尔电机
  • 四、总结


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

说明

SimpleFOC(九)—— 霍尔电机控制
SimpleFOC之ESP32(七)—— 霍尔电机

之前写过这两篇教程,测试中都表现出了极大的不稳定性,所以霍尔电机部分的代码我一直没有移植,
本次移植后的代码测试稳定性还可以,迄今没有发现问题。

而之前表现的各种不稳定,我总结了下有两种可能:
1、引脚中断需要避开相同中断源,比如STM32的PA11和PB11,都是同一个中断源EXTI_Line11,在霍尔信号的中断代码中是无法区分的。这个问题在移植keil的时候很容易就能发现,但是在官方的SimpleFOC代码中,稍不注意就出错了。
2、arduino环境下的中断不太好用,特别是跨平台的兼容性可能还不够好。

ODrive的操作演示——控制AS5047P、霍尔电机和轮毂电机
当然simpleFOC主打的就是simple,所以电机实际效果和ODrive 的驱动效果相比有一定差距,仅仅适合入门。

需要说明:霍尔电机主要用于做轮子,不适合做高精度控制,虽然FOC可以实现任意角度的控制,但是霍尔信号的分辨率太低,盲区太大。

一、霍尔电机

霍尔电机就是带有霍尔传感器的直流无刷电机。

1.1、电机的种类

因为霍尔传感器的成本低,体积小可以安装在电机内部,所以应用非常广泛,种类非常丰富。



1.2、霍尔传感器



  • 常见的霍尔信号是120度和60度安装方式,SimpleFOC只处理120度的霍尔信号。(60度的只需把其中一相的信号取反,就可以得到和120度一样的状态值,这是我花了几百块钱在峰岹科技的代码中看到的处理方式)。据说还有45度的电机,我没有遇到过,本节不做讨论。 120度和60度的更多说明请看这篇文章: 电动机的霍尔信号
  • 霍尔传感器的电源一般标注为5V,实际3.3V也可以,大概是现在的霍尔芯片电压兼容性更好了。
  • 理论上霍尔信号输出为开漏,所以信号的电压是由上拉电阻决定的,即使霍尔信号电源接5V,输出信号也是3.3V。
  • 但实际的情况是有的电机用5V电源,信号的电压为3.7V,说明信号输出不是简单的开漏,有一定的驱动能力,所以最好接3.3V电源。
  • 有些电机必须用5V电源,3.3V的电源没有信号输出,都是看起来比较老旧的电机,大概早期的霍尔元件电压兼容性不够。
  • 本次移植本人测试了以下电机

1.3、SimpleFOC的霍尔电机控制原理

  • 驱动板103和驱动板405 都使用中断方式处理霍尔信号。霍尔信号发生边沿跳变时进入中断,在中断中读取霍尔状态,判断当前角度。

  • 下面用一个图片说明simpleFOC的驱动原理。

    假如霍尔电机是2对极,那么cpr=12,示意图刚好相当于一个钟表,假如当前电机的电角度在12点,q轴如上图,电机的转矩将一直保持这个状态,直到触发到下一个霍尔跳变,代码检测到新的角度,产生新的矢量q1并持续到下一个状态,所以simpleFOC对霍尔电机的控制效果等同于六步换相法。而在ODrive中使用了角度插值的方法,所以q轴会跟随电机的转动而变化,电机更加平稳。

  • 当然SimpleFOC提供了一个最简单的控制方法,保证电机能够转起来,你不要一看它的控制效果不好扭头就走,你知道了原理下一步就可以把ODrive的角度插值法移植过来,电机就可以实现ODrive的效果,是不是很简单。

  • 本次移植没有再像之前那样,把所有编码器放到一起通过 myprojcet.h 设置来选择。而是把霍尔电机的代码单列出来,这样代码看起来更简洁一点。

二、电机驱动板103

霍尔信号为开漏输出,所以需要上拉电阻,代码中对应的引脚已经配置为打开内部上拉,外部如果有上拉电阻也尽量使用,驱动板103默认接10K上拉电阻。

2.1、读取霍尔角度

读取霍尔角度目的是为了确认电机的极对数,以便在稍后代码中可以准确的控制电机。如果你已经知道了电机的极对数,也可以跳过本小节。

2.1.1、接线
只需接霍尔信号线,SCL1(PB6)、SDA1(PB7)、PA12和3.3V电源,三个信号随便接,不用区分顺序。下图:

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

2.1.2、修改代码

修改极对数,如果极对数正确,那么电机转动一圈,角度变化刚好是6.28;如果不正确,比如电机实际极对数为4,代码中写的是2,那么电机转动一圈,角度变化为12.57。同理,如果是3对极,角度变化为9.42,如果是5对极,角度变化为15.71。


2.1.3、串口查看角度变化

下载完代码后,用手拧动电机转动,刚开始的几个角度值不准确,我估计是没有赋初值,不想再折腾代码了,大家将就着用吧。所以需要先来回转动半圈,然后转动电机让角度归零,观察电机转一圈角度的变化。转动的结果应该是3.1415926的整倍数,如果不是说明手动转的有误差,不是刚好一圈,请自行估算就近极对数。

2.2、驱动霍尔电机M1

2.2.1、接线


2.2.2、修改代码

  • 极对数按照实际写入,
  • voltage_sensor_align是电机零点校准时的电压值,需要根据电机功率设置,100W以内的电机基本属于小功率,可以设置的大一点,200W以上的属于大功率,设置的小一点。
  • 如果不清楚电机功率,可以多试几个值,电源有电流显示的话观察下零点校准时的电流,只要在0.2A — 0.8A这个范围内就行,电流太小电机无力,校准可能不准确,电流太大电机会发热,容易损坏电机。
  • 初次调试请选择 Type_voltage 模式,因为可以跳过电流环,电流环的PI参数非常难设置。
  • 速度环的PI请自行设置,不清楚可以先把速度I参数设置为0,只用速度P参数,先让电机转起来再说。不同电机的PI参数不相同,具体请百度。


2.2.3、下载代码,观察电机运行


发送指令T6.28,电机以每秒一圈的速度转动,霍尔信号的分辨率低,对于一些电机来说齿槽效应更明显,可以调高速度试试。

2.3、驱动霍尔电机M2

  • SCL2(PB10)、SDA2(PB11)和SWD(PA13)接hall信号,三个信号随便接,不用区分。
  • 其实最初的设计是打算接PA11引脚的,但是调试代码的时候发现PB11和PA11是同一个中断源EXTI_Line11,并且在中断代码中无法区分,所以用SWD(PA13)来代替。
  • SWD(PA13)并没有设计外部上拉电阻,反复测试后确定只要代码中打开了内部上拉也可以的。
  • 只是占用SWD后不能再用ST-link下载代码了,请大家使用串口下载。
  • 串口下载的方法在 SimpleFOC移植STM32(二)—— 开环控制 的第3.2小节有说明,不清楚的可以去查看。


本小节的其它操作与M1的操作一样,请参考上面的2.2小节。

2.4、驱动双霍尔电机


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

请结合上面的2.2和2.3小节操作。
需要注意的是,控制M1的电机发送指令以 A开头,比如 A6.28;控制M2的电机发送指令以 B开头,比如 B6.28。

三、电机驱动板405

霍尔信号为开漏输出,所以需要上拉电阻,代码中对应的引脚已经配置为打开内部上拉,同时驱动板405 的ABZ引脚接有3.3K上拉电阻。霍尔信号和下一篇的ABZ信号都接在ABZ引脚上。

3.1、读取霍尔角度

读取霍尔角度目的是为了确认电机的极对数,以便在稍后代码中可以准确的控制电机。如果你已经知道了电机的极对数,也可以跳过本小节。

3.1.1、接线
只需接霍尔信号线,M0的ABZ三个引脚和3.3V电源,三个信号随便接,不用区分顺序。下图:

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


下载代码,手拧电机,观察串口打印的角度变化,具体看上面2.1小节吧,不想重复写了。

3.2、驱动霍尔电机M0

3.2.1、接线


3.2.2、修改代码

  • 极对数按照实际写入,
  • voltage_sensor_align是电机零点校准时的电压值,需要根据电机功率设置,100W以内的电机基本属于小功率,可以设置的大一点,200W以上的属于大功率,设置的小一点。
  • 如果不清楚电机功率,可以多试几个值,电源有电流显示的话观察下零点校准时的电流,只要在0.2A — 0.8A这个范围内就行,电流太小电机无力,校准可能不准确,电流太大电机会发热,容易损坏电机。
  • 初次调试请选择 Type_voltage 模式,因为可以跳过电流环,电流环的PI参数非常难设置。
  • 速度环的PI请自行设置,不清楚可以先把速度I参数设置为0,只用速度P参数,先让电机转起来再说。不同电机的PI参数不相同,具体请百度。

3.2.3、下载代码,观察电机运行


发送指令T6.28,电机以每秒1圈的速度转动,发送指令T31.4,电机以每秒5圈的速度转动。
串口通信使用USART2的DMA方式接收,空闲中断,所以指令后面可以不用“回车”,当然你输入了也没有错。

3.3、驱动霍尔电机M1

霍尔信号接在M1对应的ABZ排针上,其它操作与上面的M0相同。

3.4、驱动双霍尔电机

请结合上面的3.2和3.3小节操作。
需要注意的是,控制M0的电机发送指令以 A开头,比如 A31.4;控制M1的电机发送指令以 B开头,比如 B31.4。

四、总结

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


驱动小电机时感觉还算平稳,大电机振动就比较明显了,再把代码烧写为ODrive,效果立马提升。


SimpleFOC解决了有无问题,但想要更好的性能表现,还得从ODrive中找方法。


(完)

SimpleFOC移植STM32(八)—— 霍尔电机相关推荐

  1. SimpleFOC移植STM32(九)—— ABZ编码器电机

    目录 说明 一.ABZ编码器介绍 1.1.ABZ信号 1.2.光电式编码器 1.3.磁编码器 1.4.差分信号 二.电机驱动板103 2.1.读ABZ信号的cpr 2.1.1.接线 2.1.2.编译, ...

  2. SimpleFOC移植STM32(二)—— 开环控制

    目录 注意事项 一.硬件介绍 1.1.硬件准备 1.1.1.SimpleMotor方案 1.1.2.SimpleFOCShield V2.0.3方案 1.2.硬件连接 1.2.1.原理图 1.2.2. ...

  3. SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈

    目录 一.说明 二.硬件介绍 2.1.原理图 2.2.准备清单 2.3.接线 三.程序演示 3.1.设置参数 3.2.编译下载 3.3.根据设置的控制模式操作 四.双电机控制总结 五.力矩反馈 5.1 ...

  4. SimpleFOC移植STM32(七)—— 移植STM32F405RGT6

    目录 说明 一.点亮LED 1.1.原理图 1.2.硬件准备 1.3.烧写 二.开环控制 2.1.硬件准备 2.2.硬件连接 2.3.打开工程 2.4.修改参数 2.5.编译下载,观察运行 三.角度读 ...

  5. SimpleFOC移植STM32(三)—— 角度读取 (AS5600、AS5047P、TLE5012B、MA730、MT6701、ABZ)

    目录 说明 一.硬件介绍 1.1.硬件准备 1.1.1.SimpleMotor方案 1.1.2.STM32方案 1.2.硬件连接 1.2.1.原理图 1.2.2.接线 二.代码编译下载 2.1.代码解 ...

  6. SimpleFOC移植STM32(五)—— 电流采样及其变换

    目录 一.原理说明 1.1.电流采样 1.1.1.为什么要采样电流 1.1.2.电流采样方式 1.1.2.1.低侧电流采样 1.1.2.2.高侧电流采样 1.1.2.3.内置电流采样 1.2.电流变换 ...

  7. SimpleFOC(九)—— 霍尔电机控制

    目录 一.原理说明 1.1.霍尔电机 1.2.霍尔传感器 1.3.极对数 1.4.霍尔信号的连接 二.读取霍尔角度 2.1.硬件介绍 2.1.1.原理图 2.1.2.SimpleMotor方案 2.1 ...

  8. SimpleFOC之ESP32(七)—— 霍尔电机

    目录 一.霍尔电机介绍 二.ESP32drive控制霍尔电机 2.1.原理图 2.2.读霍尔角度 2.2.1.硬件准备 2.2.2.硬件连接 2.2.3.代码演示 2.3.控制霍尔电机 2.3.1.硬 ...

  9. 【FOC控制】英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植AS5600 软件IIC

    [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植 [FOC控制]英飞凌TC264无刷驱动方案simplefoc移植(5)-磁编码器移植 一.编码器选择 二.通讯方式 ...

最新文章

  1. 2014款新宝来车引擎盖开关在哪里
  2. 微型计算机广告牌实验报告,微型计算机实验报告1资料.doc
  3. 【LeetCode笔记】剑指 Offer 44. 数字序列中某一位的数字(Java、偏数学)
  4. RTX5 | 事件标志组01 - 创建事件标志组
  5. centos ifconfig命令找不到_测试需要掌握docker的一些基本命令
  6. vs设置编码格式_轻松编辑PDF文档的贝茨编码
  7. 关于SNS网站的数据统计分析
  8. 读了王兴一万条饭否,我想送你几十本《王兴的一万条饭否》
  9. 知网哭穷赔不起1200亿,网友:收钱时咋不嫌多
  10. 315/433MHZ无线遥控接收解码源程序 Keil源程序 含AD格式电路图
  11. PCB中产生电磁干扰的原因及消除干扰技巧
  12. 前端切图+网页排版的注意事项和经验分享
  13. jadx-gui-1.4.4 反编译工具使用教程
  14. 【JAVA】顺序表与ArrayList
  15. 多组两两比较用什么检验方法_手把手教你多组独立样本的非参数检验及两两比较...
  16. python字符串这一篇就够了
  17. Hive DML 语句操作报错
  18. 界面控件BCGControlBar for .NET v7.1正式发布——支持VS 2022
  19. ORACLE字符串截取函数trim(),ltrim(),rtrim()
  20. 关于SICK公司的LMS511返回数据的数据结构说明

热门文章

  1. Android studio3.1 汉化
  2. 使用 Luckysheet 可实现 Web 的 Excel
  3. 系统检测到您的账户不符合国家相关法律法规或《支付宝用户服务协议》约定,暂时无法签约当前产品,感谢您的理解,这个怎么解决?
  4. 阿里云工业互联网总部在广州成立
  5. 深度可分离卷积 深度卷积 逐点卷积
  6. Java习题总结 - 03_2
  7. 关于在win764位上游戏安装过后,点击exe运行报错,并且出现提示为:所执行的exe[3928]中发生了未经处理的win32异常。以及关于极品飞车16的一些个人理念...
  8. 【Vue】V-if成立时,元素出现;不成立时,元素不显示。
  9. 【数理方程】定解问题
  10. 二手商城java 源码_基于jsp的二手商城-JavaEE实现二手商城 - java项目源码