10. EC11旋钮编码器接口¶
EC11编码器模块是增量式(正交)编码器,两相正交输出,带按键,旋转360°可发20个周期脉冲, 用来测量位置、速度或旋转方向。
下图是野火EC11编码器模块:
扩展板板载1个EC11旋转编码器接口:
EC11旋转编码器接口接自XL9535的扩展IO,原理图如下:
与野火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
|
开启插件后重启开发板,执行如下命令查看引脚注册情况:
1 | gpioinfo
|
执行如下命令查看对应的事件:
1 | ls /dev/input/by-path/ -l
|
本次代码测试将打印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旋钮和按键,程序输出如下:
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旋钮和按键,程序输出如下: