使用步进电机需要步进电机和步进电机驱动板两样东西,我使用的电机和驱动板型号分别为28BYJ-48-5V和UL2003芯片的五线四相步进电机驱动板
首先说明步进电机的驱动原理
驱动板上有IN1, IN2, IN3, IN4四个接口,根据资料得知这四个接口依次设置为低电平就可以驱动,我们分别用杜邦线将GPIO 21(Pin 40),GPIO 20(Pin 38), GPIO 16(Pin 36), GPIO 19(Pin 35)和IN1,IN2,IN3,IN4一一相连。
每次将四个GPIO端口按下表依次设置好电平后,可以sleep几十毫秒来控制转速
序列 | GPIO 21 | GPIO 20 | GPIO 16 | GPIO 19 |
0 | LOW | HIGH | HIGH | HIGH |
1 | HIGH | LOW | HIGH | HIGH |
2 | HIGH | HIGH | LOW | HIGH |
3 | HIGH | HIGH | HIGH | LOW |
4 | LOW | HIGH | HIGH | HIGH |
… |
示例代码:
#!/usr/bin/python
#coding: utf8
import RPi.GPIO as GPIO
import time
import sys
from array import *
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
steps = int(sys.argv[1]);
clockwise = int(sys.argv[2]);
arr = [0,1,2,3];
if clockwise!=1:
arr = [3,2,1,0];
ports = [40,38,36,35] # GPIO 21(Pin 40) GPIO 20(Pin 38) GPIO 16(Pin 36) GPIO 19(Pin 35)
for p in ports:
GPIO.setup(p,GPIO.OUT)
for x in range(0,steps):
for j in arr:
time.sleep(0.01)
for i in range(0,4):
if i == j:
GPIO.output(ports[i],True)
else:
GPIO.output(ports[i],False)
执行 python motor.py 90 0 可以顺时针转动大约80度。
执行 python motor.py 90 1 则可逆时针转动大约80度。