树莓派PICO-旋转编码器2(arduino)

KY-040 旋转编码器与 Pi Pico 的连接

该旋转编码器有 2 个信号来了解位置:CLK 和DT。 引脚SW 引脚连接到集成按钮 (SWitch)。

以下是有关如何将 Raspberry Pi Pico 连接到 uPesy RP2040 DevKit 板的建议:

旋转编码器

树莓派 Pico

CLK

GP14

DT

GP13

SW

这里没用

+

3V3

GND

GND

增量式编码器不会以度为单位给出角度。相反,它为我们提供了所产生的增量数。在特定情况下,我们需要运用编程技巧来找出角度。我们所需要的就是增量的值。
可以使用多种技术来确定编码器的增量。最有效的方法是在不干扰程序运行的情况下检测步数,而不是采用一种 “简单粗暴” 的策略,即持续检查从编码器接收到的逻辑信号。这样可以确保当编码器快速旋转时,树莓派 Pico 能考虑到所有的步数。
 
硬件中断可用于检测逻辑电平的变化。这些中断不与 CPU 相连,因此 loop() 函数可用于执行其他任务。
#include "hardware/pio.h"
#include "quadrature.pio.h"

#define QUADRATURE_A_PIN 13
#define QUADRATURE_B_PIN 14

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

void loop() {
  pio_sm_exec_wait_blocking(pio, sm, pio_encode_in(pio_x, 32));
  uint encoder_value = pio_sm_get_blocking(pio, sm);
  Serial.println(encoder_value);
  delay(200);
}

实际上这里利用了PIO

在这里我们使用 pio0。为了获取增量的值,我们需要使用这两个函数:pio_sm_exec_wait_blocking () 和 pio_sm_get_blocking ()。

计数是通过 PIO 在后台完成的。仅在需要时才会检索增量值。

 

 
posted @ 2025-01-20 10:52  mcwhirr  阅读(107)  评论(0)    收藏  举报