本程序试验使用 32G12K128-LQFP48 来驱动无传感器无刷三相直流电机,使用PID控制.
关于无感三相无刷直流电机的原理, 用户自行学习了解, 本例不予说明.
本例使用四轴飞行器2212电机带大疆9450桨测试,效果不错,速度稳定,请看视频。
P0.3接的电位器用于设定转速, 顺时针旋转电位器电机加速.
或者使用串口设定转速,也可以允许返回数据用串口绘图显示设定转速、当前转速、PWM值曲线。
电位器ADC读数转换成0~2047,对应设定转速0~204.7转/秒,
串口命令切换电位器还是串口设定转速。测试时如果电机装有螺旋桨,请务必注意安全,
由串口控制切换到电位器控制前请确认电位逆时针转到底。
I2C接口OLED12864显示相关参数。
串口单字符指令(不分大小写):
0: 不返回串口绘图数据(上电默认)
1: 返回串口绘图数据
V: 允许电位器控制转速(上电默认)
U: 允许串口控制,上电默认电位器控制
单字符命令回显本字符。
串口发送字符串设置采样时间、目标转速、pGain、iGain、dGain,数据之间逗号分隔:
8,60,10,200,100,
8: 采样(处理)时间间隔, ms.
60: 目标速度, 单位: 转/秒. 电位器调速时忽略.
10: pGain比例增益, 单位: *1
200: iGain积分增益, 单位: *0.001
100: dGain微分增益, 单位: *0.001
******************************************/
以前版本,本意为了简单,所以启动很简单,但由于使用完全开环启动,适应性差。
这个版本修改启动算法,参考了一下论坛网友bhx的启动算法,一些变量定义都意一样的,在此特别感谢bhx!
其程序参考帖子如下:
分享一个低成本STC8H1K08无刷小电调
https://www.stcaimcu.com/thread-17391-1-1.html
(出处: 国芯技术交流网站)
实测启动比较容易成功。启动时检测反电动势正常后再切换到闭环。
不同的电机其特性可能差别很大,如果启动不顺畅,则调整跟电机特性相关的一些宏参数以适应您的电机。
例子提供2个电机的参数,一个是四轴飞行器2212电机(高转速),一个是家用直流风扇电机(低转速),以供参考。
我测试我手上大部分电机都可以,低速的用风扇电机的参数,高速的用2212的参数。
风扇电机由于带16寸的扇叶,惯性很大,所以要慢速启动。而2212带的是大疆的9450桨,惯性小,所以启动快。
P0.3接的电位器用于设定转速, 顺时针旋转电位器电机加速.
电位器ADC读数转换成0~1023,对应设定占空比0~1023/1024,
关于电机转速:
很多人都问电机能转多快,其实程序只关心能换相多快,即电角度转速,电机实际转速跟磁极数有关。
本程序最快换相速度为12KHz,最小换相周期大约80us,对应电角度转速(换相转速)为 12KHz/6 *60=12万转。
实际电机转速跟磁极数N有关,电机转速 = 换相转速 / N/2,N/2也称磁极对数。
四轴飞行器的电机容易看出磁极数,数一下转子上的钕铁硼磁铁数就OK,比如2212电机是12N14P,即12槽14极,12个线圈,14个磁极。
对于2212电机,最高转速为 120000/14/2=17143转。
对于电吹风/吸尘器这类电机,需要很高的转速,只有2个磁极,最高转速就是12万转。
电路预览,附件有详细电路。
电位器控制的响应曲线:
串口控制的响应曲线,40.0转/秒(2400转/分)
与70.0转/秒(4200转/分)的切换响应曲线: