历史上的今天
返回首页

历史上的今天

今天是:2025年01月28日(星期二)

2021年01月28日 | STM32编码器接口,以及应用编程

2021-01-28 来源:eefocus

关于编码器

编码器的种类有很多,什么增量式编码器、绝对值编码器,有轴或者无轴编码器,电压输出、推拉输出、集电极开路输出等等。但不管什么类型的编码器,其目的都类似,得到转动的角度,角速度、位移等。


本文讲述常见的增量式编码器,增量式编码器也可以叫正交编码器,也就是说可以通过其A、B的相位知道编码器是正转,还是反转,还可以根据编码器参数得出旋转了多少角度等。


常见的增量式编码器A、B、Z三根线代表什么意思呢?使用过编码器的人不难理解,这里简单给初学者讲述一下:


A、B两线提供相位相差90度的脉冲信号,用其来计算旋转的角度;Z线为过零点线,也就是说每转一转,经过某一点都会输出一个脉冲信号,主要用于“过零校正”,三线的信号大致如下图(左边):


图片


有些编码器出来的线有一个对应的“非”信号线(如上图右边),其实主要用于抗干扰的。


更多关于编码器的描述,请网上搜索相关的知识进行了解,本文不再讲述。


STM32编码器接口模式

在STM32芯片中,都有这么一个定时器,叫通用定时器“General-purpose timers”,定时器里面存在这么一个模式,叫编码器接口模式“Encoder interface mode”。当然,具体是哪一个TIM,可参看芯片对应的数据手册,可以一目了然。


STM32提供的编码器接口模式主要针对的就是“正交编码器”,它可以利用定时器的“计数”功能,得出编码器计了多少个脉冲;同时,它可以根据编码器AB的相位得出编码器是正转,还是反转。


图片

(图片来自STM32参考手册)


1.计算脉冲个数

有点类似TIM的捕获功能,捕获A相、B相的脉冲信号;只是编码器模式是捕获A(TI1)、B(TI2)相的边沿信号(如上图),相当于一个周期内,计4个脉冲信号的值。


2.计数器的增减(方向)

STM32的计数器会根据方向(+ 或者 -)来进行计数,TI1和TI2相位相差90,4个阶段的边沿,对应TI1和TI2不同电平信号,从这个不同的信号,硬件自身可以判断出其方向。在编码器模式下,有个寄存器(TIMx_CR1)中有一个方向位(DIR),会随着编码器旋转方向的改变而改变,我们可以通过读取该位来判断编码器的正转,还是反转。


3.TIM时基

STM32编码器接口模式,其实是通过利用AB相位TIM时基提供时钟信号,使其计数。

图片


应用编程

相信看了上面的一些描述,大家应该对编码器有所理解了。其实,在STM32中,可以通过配置编码器模式对应的函数,就能实现获取编码器传感器上面的信息了。

使用STM32提供的标准外设库,或者使用STM32CubeMX工具很容易将TIM配置成编码器模式。


1.标准外设库配置编码器

TIM_EncoderInterfaceConfig,它就是编码器接口的配置函数。简单的只需要配置该函数,使能TIM,即可实现采集编码器上面的信息。(当然,需要复杂的操作,还需要做其他相应的配置)


void ENCODER_Configuration(void)

{

  TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);

  TIM_Cmd(TIM3, ENABLE);

}


2.STM32CubeMX配置

STM32CubeMX是一套快速开发的工具,让很多不了解STM32底层的朋友可以快速的在STM32上编写应用程序。

本文说的配置编码器接口,在某些TIM上存在一个“Combined Channel”配置,可以理解为“连接通道”,也算是TIM的一种复用模式。选择里面的“Encoder Mode”即可。

图片


实例代码

本文提供的代码为一个使用标准外设库编写的简单Demo工程,其中里面附带一个工程(用于模拟编码器AB相波形的工程),如下如:

图片


该工程主要配置TIM的编码器模式,通过定时读取编码器的方向(DIR),和计数(CNT),并通过串口打印出来。


下载地址:

百度网盘:

链接:https://pan.baidu.com/s/1jH8yOqM 

密码:t4kx


GitHub:

https://github.com/EmbeddDeveloper/STM32F4_TIM_Encoder


CSDN:

http://download.csdn.net/download/ybhuangfugui/10165086


推荐阅读

史海拾趣

Cantec Electronic Co Ltd公司的发展小趣事

Cantec Electronic Co Ltd最初只是电子产业链中的一家小公司,专注于生产电子元器件。然而,在一次偶然的技术研发中,公司成功开发出了一种新型的节能芯片,这一技术突破使得公司的产品在市场上大受欢迎。随着订单量的不断增加,公司逐渐扩大了生产规模,提升了研发实力,开始在电子行业中崭露头角。

Hirose Electric公司的发展小趣事

Cantec Electronic Co Ltd最初只是电子产业链中的一家小公司,专注于生产电子元器件。然而,在一次偶然的技术研发中,公司成功开发出了一种新型的节能芯片,这一技术突破使得公司的产品在市场上大受欢迎。随着订单量的不断增加,公司逐渐扩大了生产规模,提升了研发实力,开始在电子行业中崭露头角。

First Sensor公司的发展小趣事

Cantec Electronic Co Ltd最初只是电子产业链中的一家小公司,专注于生产电子元器件。然而,在一次偶然的技术研发中,公司成功开发出了一种新型的节能芯片,这一技术突破使得公司的产品在市场上大受欢迎。随着订单量的不断增加,公司逐渐扩大了生产规模,提升了研发实力,开始在电子行业中崭露头角。

Helium公司的发展小趣事

2017年,随着区块链技术的兴起,Helium团队看到了新的机遇。他们意识到区块链的透明性和自确认性可以为物联网网络的建设带来革命性变化。于是,Helium决定将网络建设“去中心化”,并借助区块链技术重新定义激励机制。这一决策标志着Helium从单纯的物联网项目转变为融合区块链技术的创新企业。通过去中心化的方式,Helium降低了网络建设和维护的成本,加速了网络覆盖的速度,为物联网设备提供了更加便捷和经济的连接方案。

C.K Magma公司的发展小趣事

C.K Magma公司最初由一群热衷于电子技术的工程师创立。他们通过深入研究,成功开发出一种新型半导体材料,这种材料在性能和稳定性上均优于当时市场上的同类产品。这一技术突破为公司赢得了业界的关注,并吸引了第一批投资。随着资金的注入,C.K Magma公司得以扩大研发团队,进一步巩固了其在半导体领域的技术领先地位。

Gigavac LLC公司的发展小趣事

在追求经济效益的同时,C.K Magma公司也积极履行社会责任。他们注重绿色发展和可持续经营,通过采用环保材料和工艺、优化生产过程等方式,降低产品对环境的影响。此外,公司还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为公司的长远发展提供了有力保障。

这五个故事展示了C.K Magma公司在电子行业中的发展历程和取得的成就。通过技术突破、市场拓展、国际合作、创新产品和绿色发展等方面的努力,公司逐渐在行业中崭露头角,成为了一家具有影响力和竞争力的企业。

问答坊 | AI 解惑

继电器的编程,请大家帮忙呀

   请大家指点指点呀,不胜感激        要求是继电器输出低电平时报警, 由于有8个继电器所以必须知道是哪个报警,(下边只写了2个) 报警时都在P2.7口输出 ALARM  CLR  P2.7     ...…

查看全部问答>

TMS320LF2407A矢量控制变频器的开发经验

TMS320LF2407A矢量控制变频器的开发经验…

查看全部问答>

9263中WINCE屏驱动怎么做

买了一个微控VC9263-EK开发板,带了一个3.5寸的竖屏,但我现在要换用别的屏,应该怎样修改屏的驱动的呢?…

查看全部问答>

CE6.0编译出错问题

我是将BSP包中的LCD显示部分文件全部拷到另一个目录下,然后在那个目录下的一个文件里面包含了个头文件(这个头文件在那个LCD显示文件中有定义的),也更改了source文件路径的,然后编译出现一大堆错误。sysgen了也不行的。请问是什么原因? …

查看全部问答>

jrtplib 发送的数据好像收不到?

我使用2440+wince5与PC通过jrtplib通信,现在发现pc可以发送数据到网络,但是wince方面好像不行,抓包发现icmp:port unreachable, 是不是port被占用了呢?而且icmp、udp、tcp刚好是占用同一个字节(指定网络包协议),会不会是字节顺序问题?但 ...…

查看全部问答>

●●高分求教用RDA同步SQL CE 2.0同SQL Server 2000数据的问题●●

用RDA的Pull方法的时候报错: IIS 错误 405 HTTP_STATUS_BAD_METHOD:不允许所使用的HTTP谓词。 --------------------------------------------------------------------- //我的代码 SqlCeRemoteDataAccess rda = new SqlCeRemoteDataAccess(); ...…

查看全部问答>

wince串口不能工作

我的pxa270开发版有4个串口(uart0~uart3),其中uart0用来和超级终端连接打印调试信息,下载了ce5.0。用evc编写的串口程序,打开了COM0:设置好了波特率等后writefile成功,但是不知为什么pc这边无法接收到信息,pc这边发送信息开发版也无法受到。 ...…

查看全部问答>

实现低功耗有哪些常用方法

我在做一个智能电子体温计,要求实现低功耗,系统电流小于0.3毫安。不能用贴片元件,我知道的方法就是所有三极管全用mos管,还有其他方法么?!…

查看全部问答>

用C# 开发mc 1000 应用程序

mc 1000 怎么开启CODE128码,项屏蔽其它码制,如:EAN码等 …

查看全部问答>