无刷电机产品图片
图(1)
注意事项
1.无刷电机使用pwm波驱动,需要先校准才可使用。校准的占空比为5%,等同于舵机45度角。
2.驱动无刷电机需要较大的电流所以,单靠单片机供电无法驱动无刷电机,需要外部供电。
无刷电机的供电方式
使用电调接外部电源供电(电池即可),如图(2)所示:
图(2)
接线方式,如图(3)所示
图(3)
具体情况需要依据开发版接线,有的开发版不需要额外接线,上面的白红蓝3条杜邦线的目的是为了接在面包版上,图(3)所示是讲解如何把无刷电机接到面包版上面:白线为负极线,红色为正极线,蓝色为信号线(接GPIO口)。
面包版接线,如图4所示:正接正,负接负,信号线接pwm波输出口(图4为stm32f103c8t6的A1,不止一个输出口依照自身需求和开发板配置来)
图(4)
视频演示
Arduino驱动无刷电机
stm32驱动无刷电机
五.代码部分:
1.stm32
(1)标准库pwm配置,如图5所示。
图5所示配置并非唯一,仅仅展示一种可行配置方案。
图(5)
通过函数调节CCR的值来修改占空比从而控制无刷电机,占空比越大无刷电机转速越快(有上限的,取决于你的无刷电机)CCR的值不固定取决于设置的预分频,计数周期以及芯片频率,具体情况会在HAL库配置教程的时钟树配置详细解释。
HAL库配置教程
使用工具:cubemax,该软件可以通过图形化界面帮我们快速配置hal库。
第一步新建工程,打开cubemax会进入图6所示界面,点击红色圈内选项新建工程。
我们依旧会支持flowchart的流程图:
图(6)
第二步选择你的芯片型号,本文介绍的是STM32F103C8t6
在1处选择芯片型号,2处点击芯片会进入芯片配置
图(7)
第三步基本配置
图(8)
图(9)
这两项为基本配置,基本上所有新建项目都需要配置这两项。特别是SYS中的debug模式一定要选择图9所选模式不然会导致无法烧录等一系列情况。
第四步配置pwm波
我们选择TIM2的通道2来产生pwm波,按下图配置。
图(10)
按照下图配置也是可以的,目的就是为了把pwm波频率配置为50hz,因为时钟的频率为72Mhz,区别只在于修改CRR值的时候所改变的占空比。在图11的配置下修改CRR的值为500和图9所示配置设置CRR的值为50的效果是一样的。
图(11)
无论哪一种情况下auto-reload-preload一定要使能,按图11配置!!!
按上述配置我们就得到了一个50HZ的pwm波(需要配置72Mhz的时钟树,下文图解)
图(12)
图12这里的pulse是依据上面的配置来填的,这只是一个初始值不影响我们后续修改。填0也行不影响。Output compare preload 要使能。
配置时钟树
上面的所有配置均基于时钟树配置,如时钟树配置出错上面的配置全部白搭。如图13所示72下方有一个72MHZmax这就是我们初始时钟频率,但是这是无法驱动舵机的,所以我们通过图10,11的配置把它配置成50hz以便驱动电机。
项目保存配置
图(14)配置名字,路径,开发工具
图(14)
勾上这两
图(15)
配置完成后点击右上角的蓝色长条按钮(G开头的英文)即可生成项目
图·(16)
下载即可看见电机转动,延迟5秒是给电机时间校准。
电机校准函数
Void init(){
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);//启动定时器
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 1000);
HAL_Delay(5000);
}
点击速度设置函数
Void setSpeed(uint8_t val){
If(val>=0&&val<=2500)
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, val);
}
Arduino
接线方式依旧是正接正负接负,信号线接任意一个可以输出pwm波的端口即可,同样需要外接电源。
图(17)
在Arduino中编码
使用Servo 自带的库函数自动生成50hz的pwm波,1000校准5秒,loop里面则可以调节电机转速。
图(18)