본문 바로가기

RaspberryPi/RP2040

[RP2040 SSM] 엔코더(Quadrature Encoders) 테스트

RP2040 에는 하드웨어 타이머 기능중에 Encoder모드가 없다.

 

하지만 RP2040의 PIO기능을 이용하면 쉽게 구현 가능하다. 그래서 라이브러리로 만들어 공개한 분이 있다. 

#include "hardware/pio.h"
#include "quadrature.pio.h"

#define QUADRATURE_A_PIN 10
#define QUADRATURE_B_PIN 11

PIO pio = pio0;

uint offset, sm;
void setup() {
  Serial.begin(115200);
  offset = pio_add_program(pio, &quadrature_program);
  sm = pio_claim_unused_sm(pio, true);
  quadrature_program_init(pio, sm, offset, QUADRATURE_A_PIN, QUADRATURE_B_PIN);
}

uint old = 0;
void loop()
{
  pio_sm_exec_wait_blocking(pio, sm, pio_encode_in(pio_x, 32));
  uint encoder_value = pio_sm_get_blocking(pio, sm);
  
  if(encoder_value != old)
  {
    Serial.println(encoder_value);
  }
  
  old = encoder_value;
  delay(1);
}
반응형