首页 最新 热门 推荐

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

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

  • 23-09-28 03:42
  • 2092
  • 13511
blog.csdn.net

目录

  • 一、原理说明
    • 1.1、霍尔电机
    • 1.2、霍尔传感器
    • 1.3、极对数
    • 1.4、霍尔信号的连接
  • 二、读取霍尔角度
    • 2.1、硬件介绍
      • 2.1.1、原理图
      • 2.1.2、SimpleMotor方案
      • 2.1.3、STM32方案
    • 2.2、示例演示
      • 2.2.1、打开示例
      • 2.2.2、修改代码
      • 2.2.3、编译上传
      • 2.2.4、用手转动电机,看角度变化
  • 三、速度闭环控制
    • 3.1、硬件介绍
      • 3.1.1、原理图
      • 3.1.2、SimpleMotor方案
      • 3.1.3、STM32方案
    • 3.2、示例演示
      • 3.2.1、修改底层代码
      • 3.2.2、打开示例
      • 3.2.3、修改代码
      • 3.2.4、编译上传
      • 3.2.5、串口发送指令
  • 四、方波控制
    • 4.1、更改IO
    • 4.2、更改PWM调制模式
    • 4.3、方波的控制效果
  • 写后感

 

SimpleFOC的教程比较多,做了一个总的链接,欢迎点击阅读:SimpleFOC教程链接汇总
 

一、原理说明

1.1、霍尔电机

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

  • 通过霍尔传感器判断电机当前运动状态,控制器根据霍尔采集的信号控制三相输出,让电机持续正常的工作,
  • 霍尔传感器的优点是便宜,而且几乎可以安装在任何无刷直流电机上,
  • 缺点是,由于角度测量的量化相对较高,因此低速运行不够平滑,
  • 使用霍尔传感器的另一个原因是,在无法接近电机轴,或者无法将传感器安装到电机轴上的情况下,霍尔传感器安装在电机转子周围,这使得它们非常非侵入性且易于集成,
  • 最常见的应用就是电动自行车,
  • 霍尔电机是直流无刷电机中应用最多最广泛的一个分类。
    在这里插入图片描述

在这里插入图片描述

1.2、霍尔传感器

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

1.3、极对数

  • 电机每转过一对磁极,霍尔输出6个状态,如果电机是2对极,则一圈有12个状态;如果电机是6对极,则一圈有36个状态。
  • 一般来说,极对数多的电机,外观短粗,转速低扭矩大;极对数少的电机,外观细长,转速高扭矩小。
  • 在SimpleFOC中,一圈的机械角为2Pi,如果一圈有12个状态,则每次角度变化为Pi/6;如果一圈有36个状态,则每次角度变化为Pi/18。

1.4、霍尔信号的连接

  • 霍尔元件一般都是开漏输出,所以需要外接上拉电阻。V2.0.3的板子上有相应配置,需要短接背面的跳线,
    在这里插入图片描述
  • Arduino UNO的板子只有两个中断引脚,Hall的三根信号线不能全部接入,
    在这里插入图片描述
  • 为了兼容UNO的板子,创作者增加软件中断功能,需要头文件和,编译的时候提示没有这个文件,
    在这里插入图片描述
  • 出现这个问题后,我决定放弃Arduino UNO,直接使用STM32核心板。
  • 如果使用STM32核心板,霍尔信号可以直接接在核心板上,需要配置IO为输入上拉模式。
     

二、读取霍尔角度

2.1、硬件介绍

2.1.1、原理图

在这里插入图片描述
注意:霍尔三根线不分顺序,接在这三个IO口上就行,原理图上标注只是为了方便描述。

2.1.2、SimpleMotor方案

2.1.2.1、准备清单

序号名称数量
1SimpleMotor1
2霍尔电机1
3USB转串口1
412V电源1
5杜邦线若干

在这里插入图片描述
SimpleMotor 购买链接:某宝购买
2.1.2.2、接线

SimpleMotor霍尔电机
PB6(SCL1)Hall_U
PB7(SDA1)Hall_V
PA12Hall_W
3V3VCC
GNDGND

在这里插入图片描述

2.1.3、STM32方案

2.1.3.1、准备清单

序号名称数量
1STM32核心板1
2霍尔电机1
3USB转串口1
45V电源1
5杜邦线若干

在这里插入图片描述
2.1.3.2、接线

STM32核心板霍尔电机
PB6Hall_U
PB7Hall_V
PA12Hall_W
3V3VCC
GNDGND

在这里插入图片描述
 

2.2、示例演示

2.2.1、打开示例

在这里插入图片描述

2.2.2、修改代码

在这里插入图片描述

2.2.3、编译上传

2.2.4、用手转动电机,看角度变化

  根据角度变化估算极对数。
在这里插入图片描述
 

三、速度闭环控制

3.1、硬件介绍

3.1.1、原理图

在这里插入图片描述
注意:霍尔三根线不分顺序,接在这三个IO口上就行,原理图上标注只是为了方便描述。

3.1.2、SimpleMotor方案

3.1.2.1、准备清单

序号名称数量
1SimpleMotor1
2直流无刷减速电机1
3USB转串口1
412V电源1

在这里插入图片描述
SimpleMotor 购买链接:某宝购买
3.1.2.2、接线

SimpleMotor霍尔电机
PB6(SCL1)Hall_U
PB7(SDA1)Hall_V
PA12Hall_W
3V3VCC
GNDGND

在这里插入图片描述

3.1.3、STM32方案

3.1.3.1、准备清单

序号名称数量
1STM32核心板1
2SimpleFOCShield V2.0.31
3霍尔电机1
4USB转串口1
55V电源1
612V电源1
7杜邦线若干

在这里插入图片描述
SimpleFOCShield V2.0.3购买链接:某宝购买
3.1.3.2、接线

STM32核心板霍尔电机
PB6Hall_U
PB7Hall_V
PA12Hall_W
3V3VCC
GNDGND
STM32核心板V2.0.3
PA05
PA19
PA26
PB98
GNDGND

在这里插入图片描述
 

3.2、示例演示

3.2.1、修改底层代码

  • 官方代码编译运行后,PWM的频率只有550Hz(72M/2/65536),需要直接修改底层代码,提高PWM频率为25KHz。
  • 不修改也可以,只是电机有啸叫声且工作电流偏大,不熟练的同学可以先跳过这一段。
  • 在“generic_mcu.cpp”修改这两个地方,路径:我的电脑文档ArduinolibrariesSimple_FOCsrcdrivershardware_specific
    在这里插入图片描述
  pinMode(PA0, PWM);
  pinMode(PA1, PWM);
  pinMode(PA2, PWM);
  Timer2.pause();
  Timer2.setPrescaleFactor(8); // 72/8=9MHz
  Timer2.setCompare(TIMER_CH1, 0);
  Timer2.setCompare(TIMER_CH2, 0);
  Timer2.setCompare(TIMER_CH3, 0);
  Timer2.setOverflow(359);  //9M/360=25kHz
  Timer2.refresh();
  Timer2.resume();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  pwmWrite(pinA, 360.0*dc_a);
  pwmWrite(pinB, 360.0*dc_b);
  pwmWrite(pinC, 360.0*dc_c);
  • 1
  • 2
  • 3

3.2.2、打开示例

  打开的是位置控制,在这个基础上修改为速度控制,
在这里插入图片描述

3.2.3、修改代码

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

  • 修改angle就是位置模式,记得顺便修改位置环PID,
  • 我觉得霍尔电机不适合做位置控制,只测试了一下就没再继续,
  • FOCModulationType底层代码中默认是SPWM,实际测试SPWM和SVPWM效果差别不明显,

3.2.4、编译上传

3.2.5、串口发送指令

  观察电机转动
在这里插入图片描述
在这里插入图片描述
 

四、方波控制

方波控制修改两个地方:

4.1、更改IO

  • 需要三个PWM信号和三个Enable信号,
  • SimpleFOCShield V2.0.3的三个Enable连在了一起,所以不能用于方波控制,
  • PowerShield V0.2的三个使能引脚独立引出,可以用于方波控制。
    在这里插入图片描述
     

4.2、更改PWM调制模式

  • FOCModulationType设置为Trapezoid_120或者Trapezoid_150,
    在这里插入图片描述

  • Trapezoid_120是六步换相法,

    • a—>b,
    • a—>c,
    • b—>c,
    • b—>a,
    • c—>a,
    • c—>b,
  • Trapezoid_150是12步换相法,换相时多了一个中间状态,

    • a—>b,
    • a—>b/c,
    • a—>c,
    • a/b—>c,
    • b—>c,
    • …

4.3、方波的控制效果

在这里插入图片描述

  • 上电零点校准是“咔咔”的跳着走,与SVPWM的不同,
  • 电机转动特别是速度快了以后,比如T20,与SVPWM的效果并没有不同,
  • 理论上用方波单片机的计算量减少,电机在最大转速范围内能达到的转速更高,但实际测试与SVPWM并没太大差别。

写后感

  • 6月份的时候调试过霍尔电机,没有转起来,以为是simpleFOC不支持,并且还在Q群里放过话。后来网友陆续调试出来了,赶紧再回去看看,确实可以控制,难度并不大,大概是经过这三个月对底层代码的学习,对SimpleFOC有了更深的认识和思考。
  • 但就这么点活还是干了一周,意兴阑珊,hall的官方示例有好几个,有兴趣的同学自己研究吧!
     
    (完)
     

 
欢迎加入simpleFOC技术交流群:923734429 群已满根据提示添加新群 (入群申请写:CSDN)
 
 
请继续阅读相关文章:
SimpleFOC(一)—— 简介(附有文件下载链接)
SimpleFOC(二)—— 快速入门 (开环控制)
SimpleFOC(三)—— AS5600角度读取
SimpleFOC(四)—— 闭环控制
SimpleFOC(五)—— 双电机控制
SimpleFOC(六)—— PowerShield和AS5047P
SimpleFOC(七)——STM32(Bluepill)的应用
SimpleFOC(八)—— 理论+实践 深度分析SVPWM

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

/ 登录

评论记录:

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

分类栏目

后端 (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