步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机,每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比,因此,步进电动机又称脉冲电动机。
步进电机通常需要搭配一个步进电机驱动模块(也叫步进电机驱动器)来工作。步进电机驱动器是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度(称为“步距角”),它的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速和定位的目的。
四相步进电机按照通电顺序的不同,可分为单四拍、双四拍、八拍三种工作方式。单四拍与双四拍的步距角相等,但单四拍的转动力矩小。八拍工作方式的步距角是单四拍与双四拍的一半,因此,八拍工作方式既可以保持较高的转动力矩又可以提高控制精度,驱动器相当于开关的组合单元。通过上位机的脉冲信号有顺序给电机相序通电使电机转动。
本文使用到的是 28BJY-48 型步进电机。
硬件连接
首先需要将步进电机和电机驱动板连起来,直接将电机的白色插头插入驱动板上的白色插槽(注意卡扣方向)即可。
再将驱动板和树莓派 Pico 连接起来,接线如下:
电机驱动板的 + 引脚接 Pico 的 VSYS。
电机驱动板的 – 引脚接 Pico 的 GND。
电机驱动板的 IN1 引脚接 Pico 的 GP18。
电机驱动板的 IN2 引脚接 Pico 的 GP19。
电机驱动板的 IN3 引脚接 Pico 的 GP20。
电机驱动板的 IN4 引脚接 Pico 的 GP21。
编程
将下面的代码保存在 Pico 的根目录,命名为 main.py。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | from machine import Pin import utime # 步进驱动模块的引脚初始化 in1 = Pin( 18 ,Pin.OUT) in2 = Pin( 19 ,Pin.OUT) in3 = Pin( 20 ,Pin.OUT) in4 = Pin( 21 ,Pin.OUT) ROUND_VALUE = 509 delay = 1 # 四相八拍步进电机的顺序值 STEP_VALUE = [ [ 0 , 0 , 0 , 1 ], [ 0 , 0 , 1 , 1 ], [ 0 , 0 , 1 , 0 ], [ 0 , 1 , 1 , 0 ], [ 0 , 1 , 0 , 0 ], [ 1 , 1 , 0 , 0 ], [ 1 , 0 , 0 , 0 ], [ 1 , 0 , 0 , 1 ], ] # 重置引脚输出低电平 def reset(): in1( 0 ) in2( 0 ) in3( 0 ) in4( 0 ) # 单步顺时针转动,count 为步数值,可为负数(逆时针) def step_run(count): direction = 1 if count < 0 : direction = - 1 count = - count for x in range (count): for bit in STEP_VALUE[::direction]: in1(bit[ 0 ]) in2(bit[ 1 ]) in3(bit[ 2 ]) in4(bit[ 3 ]) utime.sleep_ms(delay) # 以指定角度顺时针转动,a 为角度值,可为负数(逆时针) def step_angle(a): step_run( int (ROUND_VALUE * a / 360 )) # 重置驱动板 reset() # 逆时针转 90 度 step_angle( - 90 ) # 以单步方式持续顺时针转动 while True : step_run( 1 ) |
程序中定义了这款步进电机的驱动方式和参数。有两种方法驱动它:step_angle(角度) 或 step_run(步数)。
运行之后,可以看到步进电机先逆时针转动 90 度,再顺时钟持续运行下去。
发表评论