脉冲编码器
配置
cubemx
选一个定时器,设置 Combined Channels 为 Encoder Mode
接线
定时器对应的 channel 接 DT 和 CLK,正反接都可以
代码
pulse_encoder_demo.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| #include <rtthread.h> #include <rtdevice.h>
#define PULSE_ENCODER_DEV_NAME "pulse3"
static int pulse_encoder_demo(int argc, char *argv[]) { rt_err_t ret = RT_EOK; rt_device_t pulse_encoder_dev = RT_NULL;
rt_int32_t count;
pulse_encoder_dev = rt_device_find(PULSE_ENCODER_DEV_NAME); if (pulse_encoder_dev == RT_NULL) { rt_kprintf("pulse encoder sample run failed! can't find %s device!\n", PULSE_ENCODER_DEV_NAME); return RT_ERROR; }
ret = rt_device_open(pulse_encoder_dev, RT_DEVICE_OFLAG_RDONLY); if (ret != RT_EOK) { rt_kprintf("open %s device failed!\n", PULSE_ENCODER_DEV_NAME); return ret; }
for(rt_uint32_t i = 0; i <= 10000; i++) { rt_thread_mdelay(500);
rt_device_read(pulse_encoder_dev, 0, &count, 1); rt_device_control(pulse_encoder_dev, PULSE_ENCODER_CMD_CLEAR_COUNT, RT_NULL); rt_kprintf("get count %d\n",count); }
rt_device_close(pulse_encoder_dev); return ret; }
MSH_CMD_EXPORT(pulse_encoder_demo, pulse_encoder_demo);
|
注意
同一个定时器,如果某通道发了脉冲,其他通道不能再用来读取脉冲编码器了,会冲突