打印
[AT32F403/403A]

使用定时器实现编码器脉冲计数功能

[复制链接]
98|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dffzh|  楼主 | 2025-3-20 16:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dffzh 于 2025-3-20 16:13 编辑

#申请原创#
雅特力MCU AT32F403ACCT7的部分定时器自带编码器模式,可以实现编码器的脉冲计数功能,比如使用定时器2 TMR2实现对编码器的脉冲计数功能。
编码器模式的内部结构如下:

编码器模式分类及BSP初始化配置如下:

编码器模式的计数方向如下:

配置过程:
1、 配置通道模式寄存器CM1的C1DF[7:4],设置通道1输入信号的滤波值;
配置通道模式寄存器CM1的C2DF[15:12],设置通道2输入信号的滤波值;

2、 配置通道控制寄存器CCTRL的C1P和C1CP,设置通道1输入信号的有效电平;
配置通道控制寄存器CCTRL的C2P和C2CP,设置通道2输入信号的有效电平;



3、 配置通道模式寄存器CM1的C1C[1:0],设置通道1为输入模式;
配置通道模式寄存器CM1的C2C[9:8],设置通道2为输入模式;



4、 配置次定时器控制寄存器STCTRL的SMSEL[2:0],选择编码器模式;
选择哪种编码器模式是配置的重点:
经过竞品分析和确认,项目上需选择4倍频模式,即选择编码模式C;
5、配置寄存器PR的PR[15:0],设置计数器计数周期;开启增强模式,PR值扩展至32位;
配置寄存器DIV的DIV[15:0],设置计数器计数周期;


6、 配置定时器2的增强模式,将PR值扩展至32位;

7、 配置TMR2_CH1和TMR2_CH2对应的IO为复用模式;
但是看官方库里配置的是普通输入模式;

8、 配置CTRL1寄存器的TMREN,使能计数器;
脉冲计数:
在main程序里循环调用以下接口即可读取到脉冲值:
返回值类型是一个 32位无符号整型数据。

3649867dbcc2add921.png (114.27 KB )

3649867dbcc2add921.png

5443767dbccab6742e.png (152.41 KB )

5443767dbccab6742e.png

使用特权

评论回复
沙发
dffzh|  楼主 | 2025-3-20 16:21 | 只看该作者
@21小跑堂,申请原创,敬请审核。

使用特权

评论回复
板凳
电竞孔乙己| | 2025-3-20 20:37 | 只看该作者
这个实际运行的结果有没有,实现效果咋样。

使用特权

评论回复
地板
我喜欢打游戏| | 2025-3-20 20:45 | 只看该作者
可以支持多高的采样率

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

19

帖子

1

粉丝