[라즈베리파이 + DC모터 + PYTHON] 1. 라즈베리파이와 MD10C로 DC모터 제어하기

알도 2017-11-15 (수) 17:23 7년전 10680  

라즈베리파이 MD10C DC모터 제어하기


안녕하세요.

지난번에는 아두이노, DC모터 드라이버, 엔코더를 이용해서 위치제어하는 방법을 알아봤는데요.

[아두이노 + DC모터]1. L298로 DC모터 제어하기

[아두이노 + DC모터]2. DC모터 엔코더 사용하기
[아두이노 + DC모터]3. 엔코더를 이용한 정밀한 모터 위치 제어


이번에는 아두이노를 라즈베리파이로 바꿔서 해보겠습니다.

모터와 모터 드라이버에 관한 이론적인 부분은 위에서 첫번째 강좌를 참고하시길 바랍니다.

먼저 오늘 사용하게 될 DC모터 드라이버는 Cytron사의 MD10C입니다.

메카솔루션 링크 - http://mechasolution.com/shop/goods/goods_view.php?goodsno=330761&category=131014

제작사 홈페이지 - https://www.cytron.com.my/p-md10c

제품명과 모양만 봐도 아실만한 분들은 아시겠지만 MD10C는 상당히 고출력 모터를 위한 드라이버 입니다.

대략 일반적인 모터가 10mA~3A 정도라고 생각하시면 되고, 전에 사용한 DC 모터 드라이버 중에

L298이 4A, L9110이 800mA 정도인 것을 생각하면 상당한 출력을 내는 드라이버라고 할 수 있습니다.


아누이노와 다른 점은 아두이노에서는 내부에 하드웨어로 구성된 타이머를 통해 매우 정확하고 빠른 PWM을 출력하는데 반해

라즈베리파이는 소프트웨어적으로 GPIO출력핀의 HIGH, LOW를 변경해 PWM을 출력하기 때문에 라즈베리파이가 할일이 많으면 많을수록 PWM이 불안정하게 됩니다.

이유는 아두이노는 실제 모터 제어를 목적으로하는 마이크로컨트롤러인데 반해, 라즈베리파이는 라즈비안이라는 운영체제를 통해 개인용컴퓨터로써의 역할에 더 중점을 두었기 때문이죠.

실은 라즈베리파이에 하드웨어 PWM을 출력하는 핀이 2개 있지만, 한개는 설계상 사용할 수 없고 한개는 C언어로만 사용할 수 있습니다. 파이썬 라이브러리가 있긴한데 제가 사용하는 라즈베리파이 3는 지원하지 않아서 실험해 볼 수 없었습니다.


만약, 전문적으로 다수의 모터를 제어하고 싶으시다면 아두이노와 연동하여 사용하시거나, 아래와 같은 제품을 사용하시기를 추천합니다.

http://mechasolution.com/shop/goods/goods_view.php?goodsno=439&category=131014


회로 구성은 아래와 같습니다.

PWM을 소프트웨어적으로 출력하는 코드이기 때문에 코드상에 핀번호와만 일치한다면 GPIO핀 중 #12, #26과 같이 #숫자로 되어있는 핀은 모두 대체 가능합니다.




아래는 코드입니다.


import RPi.GPIO as IO
import time


pwmPin = 19
dirPin = 13


IO.setwarnings(False)
IO.setmode(IO.BCM)
IO.setup(pwmPin, IO.OUT)
IO.setup(dirPin,IO.OUT)


p = IO.PWM(pwmPin, 100)
p.start(0)


while 1:
    IO.output(dirPin, True)
    for x in range (100):
        p.ChangeDutyCycle(x)
        time.sleep(0.1)
    time.sleep(0.5)
    for x in range (100, 0, -1):
        p.ChangeDutyCycle(x)
        time.sleep(0.1)
    time.sleep(0.5)
    IO.output(dirPin, False)   
    for x in range (100):
        p.ChangeDutyCycle(x)
        time.sleep(0.1)
    time.sleep(0.5)
    for x in range (100, 0, -1):
        p.ChangeDutyCycle(x)
        time.sleep(0.1)


모터를 천천히 시계방향으로 가속하다가 최고속도에서 다시 감속하여 정지한 다음 다시 반대방향으로 반복하는 코드입니다.



메이크쉐어 PC버전 로그인
로그인 해주세요.

회원가입

쪽지

포인트

스크랩
기초강좌(배우고)
부품사용법(익히고)
프로젝트(공유하고)
게시판
메이크쉐어 PC버전 로그인