RP2040 에는 하드웨어 타이머 기능중에 Encoder모드가 없다.
하지만 RP2040의 PIO기능을 이용하면 쉽게 구현 가능하다. 그래서 라이브러리로 만들어 공개한 분이 있다.
https://github.com/jamon/pi-pico-pio-quadrature-encoder
Encoder 예제 코드를 RP2040 SSM 보드에 맞게 수정해서 구동하니 잘 동작 한다.
#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);
}
반응형