모터 제어 및 PWM 설정


모터 제어 관련 주요 함수

모터 포트 인스턴스 생성

모터를 이 보드에 연결하고 ExpansionDCMotor() 함수를 이용해 특정 해당 포트에 대한 인스턴스를 생성합니다.

ExpansionDCMotor dcmotor(sid, port);

PWM 주기 설정

setPeriod() 함수를 이용해 PWM의 주기를 설정합니다.

dcmotor.setPeriod(period);

모터 제어

setWidth() 함수를 이용해 모터제어를 위한 유효시간을 설정합니다.

dcmotor.setWidth(width);

유효시간은 PWM의 HIGH신호가 출력되는 시간입니다. 이 시간과 PWM주기에 따라 듀티사이클이 결정됩니다.

듀티사이클(%) = 유효시간 / 주기 * 100

이 함수가 실행되는 순간 듀티사이클에 따라 모터가 구동됩니다.

예제

#include <PhpocExpansion.h>
#include <Phpoc.h>

byte spcId = 1;

ExpansionDCMotor dcmotor(spcId, 1);

int width = 3000;

void setup() {
    Serial.begin(9600);
    while(!Serial)
    ;

    Phpoc.begin(PF_LOG_SPI | PF_LOG_NET);
    Expansion.begin();

    Serial.println(dcmotor.getPID());
    Serial.println(dcmotor.getName());

    dcmotor.setPeriod(10000);
    dcmotor.setWidth(width);
}

void loop() {
    if(width > 0) {
        width -= 100;
        dcmotor.setWidth(width);
        delay(100);
    }
}

기타 함수

PWM 극성 설정

setPolarity() 함수를 이용해 PWM신호의 극성을 설정할 수 있습니다.

dcmotor.setPolarity(pol);

회전 방향 설정

setDirection() 함수를 이용해 모터의 회전 방향을 설정할 수 있습니다.

dcmotor.setDirection(dir);

※참고: 실제 모터의 회전 방향은 PWM 극성 설정과 회전 방향 설정에 영향을 받습니다.

PWM 극성 설정 회전 방향 설정 실제 회전 방향
정상극성 정방향 시계방향
정상극성 역방향 반시계방향
반대극성 정방향 반시계방향
반대극성 역방향 시계방향

감쇠모드 설정

setDecay() 함수를 이용해 감쇠모드를 설정할 수 있습니다.

dcmotor.setDecay(decay)