STM32编码器接口,以及应用编程

发布者:BlissfulJourney最新更新时间:2021-01-28 来源: eefocus关键字:STM32  编码器接口  应用编程 手机看文章 扫描二维码
随时随地手机看文章
关于编码器

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


本文讲述常见的增量式编码器,增量式编码器也可以叫正交编码器,也就是说可以通过其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


关键字:STM32  编码器接口  应用编程 引用地址:STM32编码器接口,以及应用编程

上一篇:一篇很简单,有必要了解的文章 - STM32复位来源(寄存器版)
下一篇:关于STM32的计数和延时

推荐阅读最新更新时间:2024-10-11 13:17

基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的方法
我们都知道硬件看门狗的目的:是用来监测系统,防止系统死机,并在死机的情况下使系统复位重启。 在RTOS操作系统中,如果任务(线程)较多,出现高优先级任务长时间占用CPU资源,低优先级任务长时间得不到执行这种想象,那么我们的系统就是具有Bug的系统。 如上描述,假如我们的线程没有死机,只是长时间得不到执行。在这种异常情况下,我们又不希望系统复位,只希望执行特定代码,那我们该如何来避免这种问题呢? Ⅰ 关于看门狗 硬件看门狗:利用一个定时器计数电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时“喂狗”。 因此程序正常工作时,定时器总不能溢出,也就不能产生复位信号。如果程序出现故障,不在定时周期内
[单片机]
基于<font color='red'>STM32</font>、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的方法
STM32调试485(sp3485)技术总结
1.首先说明一下本人这次使用的STM32芯片是STM32F103RB,使用的资源是片内的USART1。 2.下面是我的电路连接图: 注:电路可以稍做修改更好,在B和A分别接下拉电阻到地和上拉电阻到5v,阻值选择为10K即可,这是为了在没有进行数据传输时保证两条数据线的状态为确定值。 做一下简单的说明: (1)PA8是sp3485的发送/接收使能端,sp3485只能支持半双工的通信,所以这个引脚就是来控制这个芯片到底是收数据还是发数据的。 (2)在有些电路连接中,sp3485的A和B端会一个被连接一个上拉电阻到3.3V,另一个会连接一个下拉电阻到GND,这样做的目的是当本sp3485不参与通信时不会影响网络的稳定性。 3.本次调
[单片机]
<font color='red'>STM32</font>调试485(sp3485)技术总结
意法半导体(ST)推出新款STM32 Nucleo开发板
2016年2月22日,意法半导体(STMicroelectronics,简称ST)推出价格实惠且尺寸紧凑的STM32 Nucleo-144系列开发板,加强其对市场领先的STM32系列32位闪存微控制器的支持。新款的144引脚开发板进一步扩大现有STM32开发生态系统的范围,通过提升板上连接通信功能,让客户能够使用从能效最高的到性能最高的任何一款STM32微控制器快速开发应用。 新款开发板完全兼容现有STM32开发生态系统,包括专用的应用扩展插接板,让开发人员能够在最终应用中轻松集成从电机驱动器到环境传感器的专用功能。此外,新开发板还通过三种连接端口提供无限的应用扩展功能,除现有的Nucleo-64板上的Arduino Uno和
[嵌入式]
意法半导体(ST)推出新款<font color='red'>STM32</font> Nucleo开发板
STM32开发工具荣登EE Times年度10大产品榜首
    意法半导体以创新的STM32 Primer2手持原型开发工具荣登EE Times 2009年度10大产品的榜首。STM32 Primer2手持原型开发工具让产品开发人员轻松使用意法半导体的基于ARM Cortex-M3的32位STM32微控制器的强大功能。STM32 Primer2和其它产品凭借在EETimes的 EE Product Center中所记录的点击量进入十大排名榜。     意法半导体的STM32 Primer2于2009年2月发布,大小如同手机,提供彩色触摸屏、强大的音频等多项功能,让开发人员能够快速设计外观时尚的演示产品。与传统的工程开发电路板不同,用户使用STM32 Primer2可以演示高品
[嵌入式]
再造STM32---第十六部分:SysTick—系统定时器
本章参考资料《ARM Cortex™-M4F 技术参考手册》 -4.5 章节 SysTick Timer(STK), 和4.48 章节 SHPRx,其中 STK 这个章节有 SysTick 的简介和寄存器的详细描述。因为SysTick 是属于 CM4 内核的外设,有关寄存器的定义和部分库函数都在 core_cm4.h 这个头文件中实现。所以学习 SysTick 的时候可以参考这两个资料,一个是文档,一个是源码。 16.1 SysTick 简介: SysTick—系统定时器是属于 CM4 内核中的一个外设,内嵌在 NVIC 中。系统定时器是一个 24bit 的向下递减的计数器,计数器每计数一次的时间为 1/SYSC
[单片机]
再造STM32---第十六部分:SysTick—系统定时器
STM32 HAL库学习系列第7篇---定时器TIM 输入捕获功能
基本方法 1.设置TIM2 CH1为输入捕获功能; 2.设置上升沿捕获; 3.使能TIM2 CH1捕获功能; 4.捕获到上升沿后,存入capture_buf ,改为捕获下降沿; 5.捕获到下降沿后,存入capture_buf ,改为捕获上升沿; 6.捕获到上升沿后,存入capture_buf ,关闭TIM2 CH1捕获功能; 7.计算:capture_buf - capture_buf 就是周期,capture_buf - capture_buf 就是高电平所占时间。 时钟配置: 引脚看是否需要上拉 做项目中的一个例子: /** * 函数功能: TIM_IC配置 * 输入参数:
[单片机]
<font color='red'>STM32</font> HAL库学习系列第7篇---定时器TIM 输入捕获功能
关于STM32能否使用malloc申请动态内存的问题
首先,malloc( )属于标准C语言函数,当然可以在单片机上使用,如STM32可以先在启动文件中设置heap的大小,再使用动态内存分配: Heap_Size EQU 0x00000200 \也就是 512字节; 但是一般单片机的内存都比较小,而且没有MMU,malloc 与free的使用容易造成内存碎片。而且可能因为空间不足而分配失败,从而导致系统崩溃,因此应该慎用,或者自己实现内存管理。 以下摘自网络: 在函数中使用malloc,如果是大的内存分配, 而且malloc与free的次数也不是特别频繁,使用malloc与free是比较合适的, 但是如果内存分配比较小,而且次数特别频繁,那么使用mall
[单片机]
STM32实现编码器M法测速接线
接线 编码器电机、电机驱动(这里用的L298n)、STM32、电源(可以是12V电池)的接线如下 3.3 代码编写 encoder.h中的内容 #ifndef _ENCODER_H_ #define _ENCODER_H_ #include stm32f1xx.h //电机1的编码器输入引脚 #define MOTO1_ENCODER1_PORT GPIOA #define MOTO1_ENCODER1_PIN GPIO_PIN_0 #define MOTO1_ENCODER2_PORT GPIOA #define MOTO1_ENCODER2_PIN GPIO_PIN_1 //定时器号 #define ENC
[单片机]
<font color='red'>STM32</font>实现<font color='red'>编码器</font>M法测速接线
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved