步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(及步进角)。可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
本 demo 采用步进电机 28BYJ48 型四相八拍电机,使用 ULN2003 芯片驱动,电压为 DC5V—DC12V。当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。当通电状态的改变完成一个循环时,转子转过一个齿距。

这个步进电机内部有个真正的步进马达转子,每一个脉冲能使这个真正的转子转动5.625°,看下图的数据表格中的减速比是1:64,意思是这个真正的步进马达转子转动64周才能让输出轴转动1周,因此下图的表格中步距角度才写的是5.625°/64,表明的意思是一个脉冲可以让输出轴转动5.625°/64的角度。所以要让马达转一周(360°), 则需要360/5.625*64=4096个脉冲。 脉冲(或拍)的数量决定转动的角度,单位时间内脉冲(或拍)的数量决定转动的速度。

四相步进电机可以在不同的通电方式下运行,常见的通电方式有如下三种:
一相励磁:单(单相绕组通电)四拍(A+,B+,A-,B-……)

二相励磁:双(双相绕组通电)四拍(A+B+,B+A-,A-B-,B-A+……)

一二相励磁:八拍(A+B+,B+,B+A-,A-,A-B-,B-,B-A+,A+……)

硬件连接
本 demo 基于BL706_IOT开发板,连接方式如下:


软件实现
软件代码见 examples/pwm/pwm_step_motor

配置 PWM 设备时钟源,见 bsp/board/bl706_iot/clock_config.h

配置 PWM 设备复用引脚,见 bsp/board/bl706_iot/pinmux_config.h


使能 BSP_USING_PWM_CH0, BSP_USING_PWM_CH1 , BSP_USING_PWM_CH2, BSP_USING_PWM_CH3 并配置 PWM 设备配置,见 bsp/board/bl706_iot/peripheral_config.h

首先调用 pwm_register 函数注册 PWM 设备的一个通道,当前注册 PWM 通道0/1/2/3
然后通过 find 函数找到设备对应的句柄,保存于4个句柄中
设置 4个通道 的频率为 125hz,占空比为37.5%
使用 device_open 以轮询模式来打开 4个通道

使用 device_contorl 函数,配合 DEVICE_CTRL_PWM_DUTYCYCLE_CONFIG 指令,修改4个 PWM 通道的的高低阈值。

编译和烧录
CDK 编译
打开项目中提供的工程文件:pwm_step_motor.cdkproj
参照 Windows 下使用 CDK (类 MDK Keil)开发指南 的步骤编译下载即可
命令行编译

原作者:BL_MCU_SDK 开发指南