엔코더 설정 및 모니터링


엔코더 관련 주요 함수

엔코더 카운터값 모니터링

모터의 엔코더포트를 이 보드에 연결하고 getEncoderPosition() 함수를 이용해 엔코더 카운터값을 모니터링 하십시오.

dcmotor.getEncoderPosition();

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

byte spcId = 1;

ExpansionDCMotor dcmotor(spcId, 1);

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(3000);
}

void loop() {
    // get the counter value of an encoder
    Serial.println(dcmotor.getEncoderPosition());
    delay(100);
}

엔코더 출력 펄스 주기 모니터링

getEncoderPeriod() 함수를 이용해 엔코더 출력 펄스 주기 모니터링 하십시오.

period = dcmotor.getEncoderPeriod();

엔코더 출력 펄스 주기의 단위는 마이크로 초(us) 입니다. 엔코더 출력 펄스 주기를 모니터링할 때 오차를 줄이기 위해서는 엔코더 샘플링 카운트를 높은 값으로 설정하시기 바랍니다.

#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.setEncoderPSR(64);
    dcmotor.setPeriod(10000);
    dcmotor.setWidth(width);
}

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

        Serial.print(width);
        Serial.print("=>");

        // get the period of an encoder's output
        Serial.println(dcmotor.getEncoderPeriod());
    }
    else
        dcmotor.setWidth(0);
}

기타 함수

엔코더 카운트 방향 설정

setEncoderPolarity() 함수를 이용해 엔코더 카운트 방향을 설정할 수 있습니다.

dcmotor.setEncoderPolarity(pol);

※참고: 실제 엔코더 카운터값은 모터의 회전 방향에 영향을 받습니다.

엔코더 카운트 방향 설정 모터의 회전 방향 카운터 값
정방향 시계방향 증가
정방향 반시계방향 감소
역방향 반시계방향 증가
역방향 시계방향 감소

엔코더 카운터값 설정

setEncoderPosition() 함수를 이용해 엔코더 카운터값을 초기화 또는 변경할 수 있습니다.

dcmotor.setEncoderPosition(pos);

엔코더 샘플링 카운트 설정

setEncoderPSR() 함수를 이용해 엔코더 샘플링 카운트를 설정할 수 있습니다.

dcmotor.setEncoderPSR(psr);