Микрошаг для оси Z с шаговым двигателем - PullRequest
2 голосов
/ 07 октября 2019

Я довольно новичок в 3D-печати, так как мне нужно управлять шаговым двигателем для осей X, Y и Z. У меня есть два шаговых двигателя и микрошаговый драйвер (CW-5045) и, конечно, Raspberry pi 3 с платой расширения.

Я хочу, чтобы ось Z переместилась для 3D-принтера, нажав на нужныйкнопка. Кнопки предназначены для данной позиции для перемещения оси Z вверх и вниз. Я думал, что у меня 2-3 кнопки, которые должны перемещать 25 микрослоев, 50 микрослоев и 100 микрослоев. (Я не уверен, является ли это микрослоем или микрометрами).

Код, упомянутый ниже, был тем, который я пробовал, но шаговый двигатель издает какой-то шум, но я не видел никакого движения вось.

Я пробовал с этим справочником: настройка двигателя биполярного привода leadshine DM860 на 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()

Я думаю, что мне не хватает контроля скорости двигателя. Я хотел бы точно управлять двигателем с шагом в несколько шагов, задавая желаемое позиционное значение, а не только двигатель, работающий сверху вниз.

1 Ответ

0 голосов
/ 23 октября 2019

С помощью одного из участников форума 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 будет меняться в соответствии с расчетами (зависит от угла мотора и количества пройденного за один оборот расстояния).

Peace

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...