10. EC11旋钮编码器接口

EC11编码器模块是增量式(正交)编码器,两相正交输出,带按键,旋转360°可发20个周期脉冲, 用来测量位置、速度或旋转方向。

下图是野火EC11编码器模块:

../_images/show-peripheral-ec11.png

扩展板板载1个EC11旋转编码器接口:

../_images/show-board-ec11.png

EC11旋转编码器接口接自XL9535的扩展IO,原理图如下:

../_images/show-circuit-ec11.png

与野火EC11旋转编码器的接线方法如下:

编码器

扩展板EC11接口丝印

驱动注册

SW

A1

coder_sw

A

B1

coder_A

B

A2

coder_B

C

B2

coder_C

注解

旋转编码器的C引脚实际已经在模块内部接GND,实际没有用到,可以不接。

编码器默认使用内核gpio-key驱动,只是消抖时间不同,执行如下命令修改/boot/uEnv/uEnv.txt,开启XL9535插件:

1
sudo vi /boot/uEnv/uEnv.txt
../_images/show-dtbo2.png

开启插件后重启开发板,执行如下命令查看引脚注册情况:

1
gpioinfo
../_images/show-operation-gpioinfo.png

执行如下命令查看对应的事件:

1
ls /dev/input/by-path/ -l
../_images/show-operation-bypath.png

本次代码测试将打印EC11旋转编码器状态。若接上OLED屏,会同时在OLED屏上显示累计步数,但需要提前打开对应的设备树插件。

10.1. python代码测试

python测试代码为:lubancat_rk_code_storage/expansion_board/ec11/python/ec11.py

以鲁班猫1为例,测试前需要将输入事件修改为实际的输入事件。需要将I2C OLED接口修改为实际的I2C接口:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
 '''
 filename : ec11.py
 '''

 ...

 oled_i2c = busio.I2C(board.I2C3_SCL, board.I2C3_SDA)

 ...

 ec11_SW_event = '/dev/input/event8'
 ec11_A_event = '/dev/input/event7'
 ec11_B_event = '/dev/input/event6'

 ...

将ec11.py所在的整个文件夹传到板卡,执行以下命令运行程序:

1
2
# 运行程序
sudo python ec11.py

操控ec11旋钮和按键,程序输出如下:

../_images/show-operation-coderun-py-01.png
../_images/show-operation-coderun-py-02.png

10.2. C代码测试

C测试代码为:lubancat_rk_code_storage/expansion_board/ec11/c/ec11.c

以鲁班猫1为例,测试前需要将输入事件修改为实际的输入事件。需要将I2C OLED接口修改 为实际的I2C接口:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
/* filename : oled_dht11.c */

...

#define EC11_SW_EVENT   "/dev/input/event8"
#define EC11_A_EVENT    "/dev/input/event7"
#define EC11_B_EVENT    "/dev/input/event6"

...

ret = oled_init(3);

...

将ec11.c所在的整个文件夹传到板卡,执行以下命令编译和运行程序:

1
2
3
4
5
# 编译程序
sudo make

# 运行程序
sudo ./ec11

操控ec11旋钮和按键,程序输出如下:

../_images/show-operation-coderun-c-01.png
../_images/show-operation-coderun-c-02.png