STM32用作编码器接口的原理
AI summary
本文介绍了STM32作为编码器接口的原理,包括定时器配置、编码器计数的实现及相关实例代码。重点讨论了如何通过定时器实现编码器计数、处理计数溢出问题,并提供了具体的代码示例以实现编码器的初始化和数据采集功能。
Tags
STM32 Encoder Interface
Timer Configuration
Code Implementation
Last edited by
Last edited time
Sep 23, 2024 02:29 PM
这是一篇旧文,早在上大二的时候,在地下室(当时实验室在防空地下室)顺手在word上写的,当时STM32正刚刚开始蓬勃发展,如今时隔3年,整理到这里!
关于定时器实现编码器计数的两点说明
- 外部编码器为定时器提供带有方向的时钟,如下图1右上角。通用定时器总共四种时钟提供方式,现在使用的即是TI1F和TI2F的组合时钟方式。

img1
- TI1、TI2作为编码器输入口,通过配置在TI1和TI2边沿的计数位置实现所谓的倍频特性,通过向上向下计数实现鉴相,若向上计数往前走,则向下计数则是往后退的过程。由图2和图3知,控制计数点的不同,只能0/2/4倍频。


实例代码(调试通过)
到此,编码器初始化就已经配置好了,按理应该接上就能用了。但是,STM32定时器是16位,假如计数值超过65535,数据会丢失。因此,参考了http://www.21ic.com上相关资料。定义32位全局变量存储脉冲数,通过下面的程序技巧实现计数,下面程序是关键。
在SysTick中采集数值,SysTick配置为SysTick_Config(720000)即10ms。SysTick中断函数如下:
到此,编码器记里程功能完美实现。此实现代码用于2012年全国电脑鼠走迷宫大赛的电脑鼠制作中。
Loading...