【问题标题】:Microstepping for Steppermotor Z-axis步进电机 Z 轴微步
【发布时间】:2020-02-04 12:42:26
【问题描述】:

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

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

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

我已尝试使用此参考:setup leadshine DM860 bipolar driver motor on raspberry pi

我知道我可以使用 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()

我想我无法控制电机的速度。我想通过给出所需的位置值来精确控制电机的微步,而不仅仅是电机从上到下运行。

【问题讨论】:

  • 我已将延迟从 0.0208 更改为 0.005 我可以看到逆时针方向的运动,但电机一直运行到终点。

标签: python-3.x raspberry-pi3


【解决方案1】:

在树莓派论坛的一位成员的帮助下,问题已经解决。

以后对像我这样的人的引用

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 会根据计算而改变(取决于电机角度和一圈移动距离的计数)。

和平

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 2020-05-30
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多