라즈베리 파이 스텝 모터 제어 - lajeubeli pai seuteb moteo jeeo

안녕하세요.

오늘은 스텝 모터를 제어하는 실습을 해보겠습니다.

제품 구매 ↓↓

준비물

스텝 모터는 펄스 모양의 전압에 의해 일정 각도 회전하는 모터입니다. 회전 각도는 입력 펄스의 신호의 수에 비례하고 회전 속도는 입력 펄스 신호의 주파수에 비례합니다. 스텝 모터를 구동하려면 사용하려는 모터는 몇 상 모터인지 어떤 여자 방식을 이용하여 동작시킬 것인지를 고려해야 합니다. 모터를 구성하고 있는 권선 수에 따라 한 펄스 당 회전하는 회전각이 달라집니다. 키트에 들어있는 스텝 모터는 28bjy-48로 스텝 각은 5.625도입니다.

스텝 모터의 여자 방식

1. 싱글 코일 여자 방식

한 번에 하나씩 전류를 여가 하는 방식

4->3->2->1

(싱글 코일 타이밍 차트)

2. 풀스텝 구동

한 번에 두 개씩 전류를 여가 하는 방식

4,3->3,2->2,1->1,4

(풀 스텝 타이밍 차트)

3. 하프 스텝 구동

풀 스텝을 반으로 나누어 회전각을 더 작게 회전시키는 방식

4,3->3->3,2->2->2,1->1->1,4->4

(하프 스텝 타이밍 차트)

이렇게 다양한 방식이 있지만 오늘은 싱글 코일 여자 방식을 사용해서 스텝 모터를 제어해 보겠습니다.

회로

회로와 실제 부품에 차이가 있습니다. 모터 드라이버 뒷면의 핀 명을 잘 확인하고 연결해 주세요.

예제 코드

import time

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

StepPins = [8,9,10,11]

#출력설정

for pin in StepPins:

  GPIO.setup(pin,GPIO.OUT)

  GPIO.output(pin,False)

StepCounter = 0 // 스텝세는 변수

# 싱글코일 여자방식 시퀀스

StepCount = 4

Seq = [[0,0,0,1],

       [0,0,1,0],

       [0,1,0,0],

       [1,0,0,0]]

try:

    while1: // 무한반복

        for pin inrange(0, 4):

            xpin = StepPins[pin]

            if Seq[StepCounter][pin]!=0: // Seq[][]0아니면 동작

                GPIO.output(xpin, True)

            else:

                GPIO.output(xpin, False)

        StepCounter += 1 // 1 증가

        # 시퀀스가끝나면다시시작

        if (StepCounter==StepCount):

            StepCounter = 0

        if (StepCounter<0):

            StepCounter = StepCount

        #다음동작 기다리기

        time.sleep(0.01)

except KeyboardInterrupt: //Ctrl+c => 종료

    GPIO.clenup()

동작

시퀀스의 순서를 반대로 하면 반대로 회전합니다.

여러 가지 방식으로 스텝 모터를 제어해 보세요.

감사합니다.^^