극한의 아두이노 DIY생활 - RC카8

in hive-137029 •  2 years ago 

안녕하세요 Jimae입니다.

오늘은 모터드라이버를 사용하는 방법에대해 알아볼까합니다.

정확히는 라이브러리를 추가해서 사용하는 방법이지만요.

이것은 라이브러리가 들어간이상 생각보다 제어하기 쉬워집니다.

image.png

https://github.com/RobTillaart/DRV8825

이런 라이브러리가 있는대요.

예전에 제가 사용한거랑 약간틀리내요.

image.png

이 라이브러리로 나중에 실험하면 좋겠지만 기존에 사용했던 라이브러리를 가져오도록 하겠습니다.

https://github.com/laurb9/StepperDriver

image.png

생각보다 많이 변했내요.

기존에는 A4988, DRV8825 드라이버를 취급을 했었지만 생각보다 많이 늘었습니다.\

2년전까지 관리가 되었내요.

#include "DRV8825.h"

#define MOTOR_STEPS 200
#define RPM 120

#define DIR 8
#define STEP 9
#define SLEEP 13 // optional (just delete SLEEP from everywhere if not used)

#define MODE0 10 
#define MODE1 11
#define MODE2 12

DRV8825 stepper(MOTOR_STEPS, DIR, STEP, SLEEP, MODE0, MODE1, MODE2);

void setup() {
    /*
     * Set target motor RPM.
     */
    stepper.begin(RPM);
    // if using enable/disable on ENABLE pin (active LOW) instead of SLEEP uncomment next line
    // stepper.setEnableActiveState(LOW);
    stepper.enable();
    
    // set current level (for DRV8880 only). 
    // Valid percent values are 25, 50, 75 or 100.
    // stepper.setCurrent(100);
}

void loop() {
    delay(1000);

    /*
     * Moving motor in full step mode is simple:
     */
    stepper.setMicrostep(1);  // Set microstep mode to 1:1

    // One complete revolution is 360°
    stepper.rotate(360);     // forward revolution
    stepper.rotate(-360);    // reverse revolution

    // One complete revolution is also MOTOR_STEPS steps in full step mode
    stepper.move(MOTOR_STEPS);    // forward revolution
    stepper.move(-MOTOR_STEPS);   // reverse revolution

    /*
     * Microstepping mode: 1, 2, 4, 8, 16 or 32 (where supported by driver)
     * Mode 1 is full speed.
     * Mode 32 is 32 microsteps per step.
     * The motor should rotate just as fast (at the set RPM),
     * but movement precision is increased, which may become visually apparent at lower RPMs.
     */
    stepper.setMicrostep(8);   // Set microstep mode to 1:8

    // In 1:8 microstepping mode, one revolution takes 8 times as many microsteps
    stepper.move(8 * MOTOR_STEPS);    // forward revolution
    stepper.move(-8 * MOTOR_STEPS);   // reverse revolution
    
    // One complete revolution is still 360° regardless of microstepping mode
    // rotate() is easier to use than move() when no need to land on precise microstep position
    stepper.rotate(360);
    stepper.rotate(-360);

    delay(5000);
}

예제 소스를 가져왔습니다.

우선

DRV8825 stepper(MOTOR_STEPS, DIR, STEP, SLEEP, MODE0, MODE1, MODE2);

를 보게되면 각핀과 MODE 핀까지 연결이 되어있내요. 스탭을 어떤각도로 설정할건지를 여기서 다 설정을 합니다.

#define MOTOR_STEPS 200

#define DIR 8
#define STEP 9
#define SLEEP 13 // optional (just delete SLEEP from everywhere if not used)

#define MODE0 10
#define MODE1 11
#define MODE2 12

그런 다음 setup 함수에서 시작을 하죠.

stepper.begin(RPM);

begin 함수를 부르면 속도 설정을 하는대요.

#define RPM 120

120으로 설정하고

stepper.enable(); 을 사용하여 모터를 움직일 준비를 합니다.

stepper.setMicrostep(1);  // Set microstep mode to 1:1

    // One complete revolution is 360°
    stepper.rotate(360);     // forward revolution
    stepper.rotate(-360);    // reverse revolution

    // One complete revolution is also MOTOR_STEPS steps in full step mode
    stepper.move(MOTOR_STEPS);    // forward revolution
    stepper.move(-MOTOR_STEPS);   // reverse revolution

    /*
     * Microstepping mode: 1, 2, 4, 8, 16 or 32 (where supported by driver)
     * Mode 1 is full speed.
     * Mode 32 is 32 microsteps per step.
     * The motor should rotate just as fast (at the set RPM),
     * but movement precision is increased, which may become visually apparent at lower RPMs.
     */
    stepper.setMicrostep(8);   // Set microstep mode to 1:8

    // In 1:8 microstepping mode, one revolution takes 8 times as many microsteps
    stepper.move(8 * MOTOR_STEPS);    // forward revolution
    stepper.move(-8 * MOTOR_STEPS);   // reverse revolution
    
    // One complete revolution is still 360° regardless of microstepping mode
    // rotate() is easier to use than move() when no need to land on precise microstep position
    stepper.rotate(360);
    stepper.rotate(-360);

그리고 나서 rotate, move 를 이용해서 모터를 움직이고

setMicrostep 를 이용해서 속도를 조절하고 있죠.

이 모터는 각도로 움직이기때문에 이런식으로 하고있고 라이브러리로 되어있어 편하게 할수있습니다.

물론 처음에 올렸던 라이브러리가 제가보기에는 더편하게 쓸수있을것 같내요.

오늘은 여기까지 다들 좋은 하루 되세요.

극한의 아두이노 DIY생활 - RC카1
극한의 아두이노 DIY생활 - RC카2
극한의 아두이노 DIY생활 - RC카3
극한의 아두이노 DIY생활 - RC카4
극한의 아두이노 DIY생활 - RC카5
극한의 아두이노 DIY생활 - RC카6
극한의 아두이노 DIY생활 - RC카7

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Google is paying $27485 to $29658 consistently for taking a shot at the web from home. I joined this action 2 months back and I have earned $31547 in my first month from this action. I can say my life has improved completely! Take a gander at what I do... https://www.old.richpath8.com