步进电机 Z 轴微步进

Microstepping for Steppermotor Z-axis

我是 3D 打印的新手,因为我需要控制 X、Y 和 Z 轴的步进电机。 我有两个步进电机和一个微步驱动器 (CW-5045),当然 Raspberry pi 3 带有扩展板。

我希望通过单击所需按钮移动 3D 打印机的 Z 轴。按钮用于给定位置上下移动 Z 轴。我想有 2-3 个按钮,它们应该移动 25 个微层、50 个微层和 100 个微层。 (不知道是微层还是微米)

下面提到的代码是我试过的代码,但是步进电机发出一些噪音,但我没有看到轴有任何移动。

我试过这个参考:

我知道我可以使用 Octoprint 等外部打印机控制器,但该项目处于初始阶段,因为我没有所有设备。所以我想从步进电机入手。

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

CW = 1     # Clockwise Rotation
CCW = 0    # Counterclockwise Rotation
SPR = 200   # Steps per Revolution (360 / 1.8)


GPIO.setup(21,GPIO.OUT)
GPIO.setup(20,GPIO.OUT)

GPIO.output(21,False)


microStep = 0
step_count = SPR
delay = .0208

GPIO.output(20, GPIO.HIGH)
while True:
    for x in range(step_count):
        GPIO.output(20, GPIO.HIGH)
        sleep(delay)
        GPIO.output(20, GPIO.LOW)
        sleep(delay)

    sleep(.5)
    GPIO.output(20, GPIO.LOW)
    for x in range(step_count):
        GPIO.output(20, GPIO.HIGH)
        sleep(delay)
        GPIO.output(20, GPIO.LOW)
        sleep(delay)

    microStep = microStep + 1
    print(microStep)

GPIO.cleanup()

我想我缺少控制电机速度的方法。我想通过给定所需的位置值而不仅仅是从上到下的电机 运行 来精确地控制电机。

在 raspberry pi 论坛的一位成员的帮助下,问题已经解决。

为了以后提到像我这样的人

import RPi.GPIO as GPIO
import time
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

GPIO.setup(21,GPIO.OUT) # direction
GPIO.setup(20,GPIO.OUT) # step

step_count = 72727  # number of step to run  change this to change where it stops
delay = 0.001

# drive motor clockwise number of steps set by step count
GPIO.output(21, GPIO.HIGH)
    print (" Drive CW ", step_count ,"steps")
for x in range(step_count):
    GPIO.output(20, GPIO.HIGH)
    sleep(delay)
    GPIO.output(20, GPIO.LOW)
    sleep(delay)

# stop motor for 5 seconds    
print (" Stop")
sleep(5)
input("Press Enter to continue...")
# drive motor counter clockwise number of steps set by step count
print (" Drive CCW ", step_count ,"steps")
GPIO.output(21, GPIO.LOW)
for x in range(step_count):
    GPIO.output(20, GPIO.HIGH)
    sleep(delay)
    GPIO.output(20, GPIO.LOW)
    sleep(delay)

# end of program
print (" End program")

GPIO.cleanup()

step_count会根据计算变化(取决于电机角度和每转一圈移动距离的计数)。

和平