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

안녕하세요 아이씨뱅큐라비입니다~!

오늘은 스텝 모터 제어하는 것에 대하여 알아보려고 하는데요!

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

호잇호잇~!

자 다 함께 따라와 주시길 바랍니다! 얍! 얍! 얍!

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

라즈베리 파이 4B

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

스텝 모터

스텝 모터란?

스텝 모터란 한 바퀴의 회전을 많은 수의 스텝들로 나눌 수 있는 브러쉬리스 직류 전기 모터입니다.

즉 스텝 상태의 펄스에 순서를 부여하고 주어진 펄스 수에 비례한 각도만큼 회전하는 모터입니다.

스테핑 모터의 경우 코일이 감긴 것은 비슷하지만 묶여서 전선으로 나가게 됩니다.

또한 정류자가 없어 계속 도는 경우가 없기 때문에 회전수나 정밀하게 위치 조정하는 곳에 쓰이게 됩니다.

미세한 각도 제어가 가능하기 때문에 3D프린터에 가장 많이 꼭 필요한 모터입니다.

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

또한 스텝 모터는 앙페르의 오른손 법칙을 이용합니다.

철심에 전선을 감아서 전류를 흘리면 전자석이 됩니다.

여기서 전자석은 동서남북 총 4곳에 위치하여 있습니다.

이 전자석을 따라 가운데의 자석은 회전하게 됩니다.

1상 여자 방식보다 2상 여자 방식이 힘이 더 큽니다!!!

왜냐하면 자석 하나가 끌어당기는 1상 여자 방식 보다

자석 두 개가 끌어당기는 2상 여자 방식이 더 크게 당기기 때문입니다.

또한 스텝 모터를 더욱 편하게 제어하기 위해 스텝 모터 드라이버가 존재합니다.

스텝 모터 드라이버를 사용하게 된다면 여러 가지를 신경 쓰지 않고 제어를 더 편하고 쉽게 할 수 있습니다!!!

1. 하드웨어를 아래와 같이 구성으로는 IN1, IN2, IN3, IN4 순서로 GPIO 핀 12,16,20,21번으로 연결을 해줍니다!

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

2. 우선 sudo nano Stepmotor5.py의 명령어를 이용하여 관리자 권한으로 nano 파일을 생성해줍니다! (사용하고싶은 이름).py로 하여 저장하시면 됩니다!

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

3. 소스코드입니다! 아래의 코드는 정회전을 하는 것을 알 수 있고 파일을 저장할때는 ctrl+x를 누르고 y버튼 엔터를 누르시게 되면 저장이 되는것을 알수있습니다!

import time import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) StepPins = [12,16,20,21] 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: while 1: for pin in range(0, 4): xpin = StepPins[pin] if Seq[StepCounter][pin]!=0: GPIO.output(xpin, True) else: GPIO.output(xpin, False) StepCounter += 1 if (StepCounter==StepCount): StepCounter = 0 if (StepCounter<0): StepCounter = StepCount time.sleep(0.01) except KeyboardInterrupt: GPIO.clenup()

4. 결과! 아래의 영상에서 step모터가 정회전 하는것을 알수있습니다!

오늘 강의 어떠셨나요? 강의가 유용하다면 좋을 것 같네요~!

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

오늘은 여기까지~! 다음 시간에 또 만나요 제발~~~!

안녕하세요.

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

제품 구매 ↓↓

준비물

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

동작

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

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

감사합니다.^^