一、基础:PY102板引脚图
二、进阶:通过PY102板+A4988板带步进电机(一)A4988驱动模块
(1)因为A4988内置了译码器,我们可以可以通过控制器的2个引脚来控制步进电机,一个控制旋转方向,另一个控制步数。
(2)A4988提供了五种不同的微步控制:全步(full-step),半步(haft-step),四分一步(quarter-step),八分之一步(eight-step)和十六分之一步(sixteenth-step)。
(二)引脚功能说明:
(1)DIR:控制转动方向,=1:正转,=0:反转;
(2)STEP:接PWM,旋转步数控制,每个脉冲对应转一个角度;
(3)VDD:接3.3V或者5V;
**(4)VMOT:电机直流供电:8~35V;**使用一个47uf的电解电容来保护驱动板免受瞬时电压的冲击
**(5)1A和1B引脚连接到步进电机的一相,2A和2B引脚连接到步进电机的另一相;**通常四相电机红绿为一组,蓝黄为一组。
(6)sleep,reset:通常短接;(RESET这个端口的配置,必须至高电平,否则脉冲被忽视,至于需不需要供地,这个没看板子的线路图,不过不需要自己去共地。所 以你们电机不动的原因不在于共地上,而在于RESET这个没有接入高电平上,可以直接接3.3V-5V ,也可以接Pin口上)
(7)MS1, MS2 和 MS3针脚用于微步设置。MS1和MS3引脚具有100kΩ的下拉电阻,MS2引脚具有50kΩ的下拉电阻。 当改变细分时,直到下一个STEP 上升沿改变才会生效。
重点:步进角微步驱动
即将每一步再细分,如一步是90度,全步时一圈四步;8分步时,一圈32步。微步主要使用驱动电压的大小进行分段。(详见《小型直流电机控制电路设计》P151)。当然16分步最平稳。
000:全步 2相 ;
100:半步 1-2 phase;
010:四分步 W1-2 phase;
110:八分步 2W1-2 Phase;
111:16分步 4W1-2 Phase
(8)ENABLE针脚用于打开和关闭场效应管的输出,低电平打开,高电平关闭。(三)A4988的电路图
四、步进电机
(1)将电脉冲信号转变为角位移或线位移的开环控制电机。(
(2)42步进电机两相一般为50齿,步距角1.8,相电流1.3-1.7A)。(3)细分控制:两相步进电机的基本步距角是1.8°,即一个脉冲走1.8°,如果没有细分,则是200个脉冲走一圈360°,细分是通过驱动器靠精确控制电机的相电流所产生的,与电机无关,如果是16细分,则发一个脉冲电机走0.1125°,即3200个脉冲走一圈360°。
五、步进电机与直流电机控制小车的差异
(1)定时器配置
直流电机:PWM模式
步进电机:输出比较模式(输出4路不同频率的PWM波)
(2)直立控制
直流电机:PD控制
步进电机:P控制
(3)速度反馈与控制
直流电机:编码器反馈
步进电机:上一个控制周期计算的频率值代替编码器反馈
六、代码
from pyb import Pin, Timer
p_out2 = Pin('X4', Pin.OUT_PP) # MS1,MS2,MS3对应X4,X5,X6,都取高电平,即16细分
p_out2.high()
p_out3 = Pin('X5', Pin.OUT_PP)
p_out3.high()
p_out4 = Pin('X6', Pin.OUT_PP)
p_out4.high()
p_out1 = Pin('X3', Pin.OUT_PP) # DIR接X3 ,
y1 = Pin('Y1', Pin.IN) #输入红外探头
x3 = Pin('X3', Pin.OUT_PP)
#p_out1.high() #有人时DIR高电平,正转
tm2 = Timer(2, freq=100) # 定时器2,频率100HZ
tm3 = Timer(5, freq=500) # 选择定时器5,频率800HZ(决定速度)
while 1:
#高电平输入时(有人)
if y1.value() == 1 :
# print(y1.value())
# x3.value(1)
p_out1.high() #有人时DIR高电平,正转
pyb.LED(2).on()
pyb.LED(1).off()
led3 = tm2.channel(1, Timer.PWM, pin=Pin.cpu.A15) #
led3.pulse_width_percent(50) #LED3的频率100HZ,近似长亮。 亮灯led3
a4 = tm3.channel(1, Timer.PWM, pin=Pin.cpu.A0) # 选择通道1和定时器5对应引脚A0
a4.pulse_width_percent(50) # 占空比50%。PWM信号从X1输出给A4988的STEP脚,STEP接X1即A0
pyb.delay(10000) #LED灯亮灯时间
#低电平输入时(无人)
else:
# print(y1.value())
# x3.value(0)
p_out1.low()
pyb.LED(1).on()
pyb.LED(2).off()
led3 = tm2.channel(1, Timer.PWM, pin=Pin.cpu.A15) #
led3.pulse_width_percent(50) #LED3的频率100HZ,近似长亮。 亮灯led3
a4 = tm3.channel(1, Timer.PWM, pin=Pin.cpu.A0) # 选择通道1和定时器5对应引脚A0
a4.pulse_width_percent(50) # 占空比50%。PWM信号从X1输出给A4988的STEP脚,STEP接X1即A0
pyb.delay(3000) #LED灯亮灯时间