目录
说明
霍尔相关的示例有好几个,本文只演示有代表性的两个:读取霍尔角度和速度闭环控制。
一、原理说明
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的板子,创作者增加软件中断功能,需要头文件<PciManager.h>和<PciListenerImp.h>,编译的时候提示没有这个文件,
- 出现这个问题后,我决定放弃Arduino UNO,直接使用STM32核心板。
- 如果使用STM32核心板,霍尔信号可以直接接在核心板上,需要配置IO为输入上拉模式。
二、读取霍尔角度
2.1、硬件介绍
2.1.1、原理图
注意:霍尔三根线不分顺序,接在这三个IO口上就行,原理图上标注只是为了方便描述。
2.1.2、SimpleMotor方案
2.1.2.1、准备清单
序号 | 名称 | 数量 |
---|---|---|
1 | SimpleMotor | 1 |
2 | 霍尔电机 | 1 |
3 | USB转串口 | 1 |
4 | 12V电源 | 1 |
5 | 杜邦线 | 若干 |
SimpleMotor 购买链接:某宝购买
2.1.2.2、接线
SimpleMotor | 霍尔电机 |
---|---|
PB6(SCL1) | Hall_U |
PB7(SDA1) | Hall_V |
PA12 | Hall_W |
3V3 | VCC |
GND | GND |
2.1.3、STM32方案
2.1.3.1、准备清单
序号 | 名称 | 数量 |
---|---|---|
1 | STM32核心板 | 1 |
2 | 霍尔电机 | 1 |
3 | USB转串口 | 1 |
4 | 5V电源 | 1 |
5 | 杜邦线 | 若干 |
2.1.3.2、接线
STM32核心板 | 霍尔电机 |
---|---|
PB6 | Hall_U |
PB7 | Hall_V |
PA12 | Hall_W |
3V3 | VCC |
GND | GND |
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、准备清单
序号 | 名称 | 数量 |
---|---|---|
1 | SimpleMotor | 1 |
2 | 直流无刷减速电机 | 1 |
3 | USB转串口 | 1 |
4 | 12V电源 | 1 |
SimpleMotor 购买链接:某宝购买
3.1.2.2、接线
SimpleMotor | 霍尔电机 |
---|---|
PB6(SCL1) | Hall_U |
PB7(SDA1) | Hall_V |
PA12 | Hall_W |
3V3 | VCC |
GND | GND |
3.1.3、STM32方案
3.1.3.1、准备清单
序号 | 名称 | 数量 |
---|---|---|
1 | STM32核心板 | 1 |
2 | SimpleFOCShield V2.0.3 | 1 |
3 | 霍尔电机 | 1 |
4 | USB转串口 | 1 |
5 | 5V电源 | 1 |
6 | 12V电源 | 1 |
7 | 杜邦线 | 若干 |
SimpleFOCShield V2.0.3购买链接:某宝购买
3.1.3.2、接线
STM32核心板 | 霍尔电机 |
---|---|
PB6 | Hall_U |
PB7 | Hall_V |
PA12 | Hall_W |
3V3 | VCC |
GND | GND |
STM32核心板 | V2.0.3 |
---|---|
PA0 | 5 |
PA1 | 9 |
PA2 | 6 |
PB9 | 8 |
GND | GND |
3.2、示例演示
3.2.1、修改底层代码
- 官方代码编译运行后,PWM的频率只有550Hz(72M/2/65536),电机运行效果差并且有啸叫声,需要直接修改底层代码,提高PWM频率为25KHz。
- 不修改也可以,只是电机有啸叫声且工作电流偏大,不熟练的同学可以先跳过这一段。
- 在“generic_mcu.cpp”修改这两个地方,路径:C:\Users\Administrator\Documents\Arduino\libraries\Simple_FOC\src\drivers\hardware_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();
pwmWrite(pinA, 360.0*dc_a);
pwmWrite(pinB, 360.0*dc_b);
pwmWrite(pinC, 360.0*dc_c);
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群里放过话。后来网友陆续调试出来了,赶紧再回去看看,经过这三个月对底层代码的研究,调试这个功能还是很轻松的。
- 就这么点活干了一周,意兴阑珊,hall的官方示例有好几个,有兴趣的同学自己研究吧!
(完)
欢迎加入simpleFOC技术交流群:923734429 (入群申请写:CSDN)
请继续阅读相关文章:
SimpleFOC(一)—— 简介(附有文件下载链接)
SimpleFOC(二)—— 快速入门 (开环控制)
SimpleFOC(三)—— AS5600角度读取
SimpleFOC(四)—— 闭环控制
SimpleFOC(五)—— 双电机控制
SimpleFOC(六)—— PowerShield和AS5047P
SimpleFOC(七)——STM32(Bluepill)的应用
SimpleFOC(八)—— 理论+实践 深度分析SVPWM