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 在后台完成的。仅在需要时才会检索增量值。