STM32(HAL)--使用定时器TIM的Encoder Mode来读取旋钮编码器的脉冲数

这篇具有很好参考价值的文章主要介绍了STM32(HAL)--使用定时器TIM的Encoder Mode来读取旋钮编码器的脉冲数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一 旋钮编码器相关知识

二 STM32CubeMx配置

三 程序编写

3.1 相关函数介绍

3.2 程序编写

四 实验结果


一 旋钮编码器相关知识

旋转编码器是一种位置传感器,输出脉冲信号可以用来确定编码器的旋转角度和旋转方向。

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

编码器中有两个开关,当旋钮旋转后,开关会依次导通,开关结构图如下图所示

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

如果我们将旋钮开关的引脚C接GND,引脚A和B通过上拉电阻接高电平,当旋钮旋转后开关会依次导通,A、B口的波形如下图所示。

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

旋钮反转,A相波形会落后于B相

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

所以我们可以开启STM32单片机定时器的输入捕获功能,统计A、B引脚的上升沿和下降沿的个数,可以知道旋钮编码器旋转了多少度;通过判断当A端口为下降沿时,B端口是高电平还是低电平,就可判断旋钮编码器的旋转方向。

已知旋钮编码器旋转一圈的脉冲数是20个,那们A、B引脚共产生了20×4=80个上升沿和下降沿。假设STM单片机定时器采集到20个计数值,我们通过计算可知旋钮编码器旋转360*20/80=90度。

二 STM32CubeMx配置

1. 定时器设置

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

2. 定时器引脚设置为上拉输入模式

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

3. 这里补充一下STM32定时器编码器模式的相关知识

        如果TI1和TI2接单片机分别接旋钮编码器的A、B引脚时,编码器正转时,计数器会向上计数,反转时会向下计数(计数值为0后,下次计数从65535开始往下计数)

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

三 程序编写

3.1 相关函数介绍

//1.定时器3的通道1和通道2的Encoder Mode开启使能函数
HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_1 | TIM_CHANNEL_2);

//2.返回值当前脉冲计数值,也可对脉冲计数值进行重新置位
int cnt=__HAL_TIM_GET_COUNTER(&htim3);
__HAL_TIM_GET_COUNTER(&htim3)=0;//脉冲计数值清0

//3.返回值为bool类型,当计数器向下计数时,返回true,可以用来判断编码器旋转方向
 __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);

3.2 程序编写

定义两个全局变量(之所以定义成全局变量,是为了方便后边将这个变量变量在debug模式中添加到watch窗口中查看)

/* USER CODE BEGIN PV */
uint8_t Direction;
uint16_t CaptureNumber;
/* USER CODE END PV */

在main函数中开启编码器模式

/* USER CODE BEGIN 2 */
HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_1 | TIM_CHANNEL_2);
/* USER CODE END 2 */

while(1)循环中不断循环检测当前的脉冲计数值

/* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    Direction=__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3); //读取编码器旋转方向
    CaptureNumber=__HAL_TIM_GET_COUNTER(&htim3);   //读取脉冲计数值
  }
  /* USER CODE END 3 */

四 实验结果

点击红色按钮进入debug模式

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

点击全速运行

stm32旋钮,STM32,stm32,单片机,嵌入式硬件

旋转编码器,即可在watch窗口观察到定时器脉冲计数值的变化了

______

______

源码github仓库地址:GitHub - HaoJosephWen/Code-of-blog文章来源地址https://www.toymoban.com/news/detail-607253.html

到了这里,关于STM32(HAL)--使用定时器TIM的Encoder Mode来读取旋钮编码器的脉冲数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32F4使用高级定时器(TIM1和TIM8)输出PWM问题

    STM32F4使用高级定时器(TIM1和TIM8)输出PWM时要使用TIM_CtrlPWMOutputs使能PWM输出,否则不会输出PWM波形,这一点是和通用定时器输出PWM不一样的地方,通用定时器是不用配置TIM_CtrlPWMOutputs函数的。、

    2024年02月15日
    浏览(43)
  • STM-32:TIM定时中断—定时器定时中断/定时器外部时钟

    定时器可以对输入的时钟进行计数,并在达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等

    2024年02月09日
    浏览(58)
  • TIM-定时器——STM32

    TIM(Timer)定时器 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器

    2024年02月02日
    浏览(64)
  • STM32—定时器(TIM)_基本定时

    本文主要通过介绍定时器基本结构去学习如何使用定时器进行定时。 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断,从而达到计时功能。 本文从通用定时器介绍。本文所使用芯片为 STM32F103C8T6,拥有TIM1-TIM4 四个定时器资源。 图.2为基本定时器结构  

    2024年02月02日
    浏览(51)
  • STM32单片机(六)TIM定时器 -> 第二节:TIM定时中断练习(定时器定时中断和定时器外部时钟)

    ❤️ 专栏简介:本专栏记录了从零学习单片机的过程,其中包括51单片机和STM32单片机两部分;建议先学习51单片机,其是STM32等高级单片机的基础;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 :适用于想要从零基础开始学习入门单片机,且有一定C语言基础的的童鞋

    2024年02月09日
    浏览(41)
  • STM32--TIM定时器(1)

    STM32的TIM(定时器)是一种非常常用的外设,用于实现各种定时和计数功能。 它是基于时钟信号进行计数,并在计数值达到设定值时触发中断,执行相应的操作 。 一般来说,STM32中有三类定时器: 在我们这款STM32F03C9T6有4种定时器资源: TIM1,TIM2,TIM3,TIM4 ; 对于定时器,类型越

    2024年02月12日
    浏览(44)
  • STM32--TIM定时器(3)

    输入捕获IC(Input Capture),是处理器捕获外部输入信号的功能 。基于定时器抓取输入信号指定触发方式之间的长度。通过输入捕获功能,我们可以测量脉冲宽度和测量频率。 在每个高级定时器和通用器都有 4个 输入捕获通道。 当通道输入引脚出现指定电平跳变时,当前CNT的值

    2024年02月12日
    浏览(46)
  • STM32--TIM定时器(2)

    输出比较,简称OC(Output Compare) 。 输出比较的原理是, 当定时器计数值与比较值相等或者满足某种特定条件时,比较通道会产生一个输出信号,这个输出信号可以用来触发外部事件,如控制其他外设的操作,或者驱动外部电路 。 在每个高级定时器和通用定时器都拥有4个输

    2024年02月13日
    浏览(46)
  • STM32中TIM定时器定时功能详解(适用基本,通用,高级定时器)

    定时器有高级定时器、通用定时器、基本定时器三种类型。具体功能如下。 上面是每种定时器所具有的功能。 我们可以看到每种定时器都有一个定时功能,(可能是名字的由来吧)。当然,每个定时器都可以来使用定时功能,但是我们往往在基本定时器和通用定时器上面使用

    2024年01月19日
    浏览(63)
  • STM32笔记----5、TIM定时器

    时基单元:由自动重装载寄存器、预分频器、计数器组成。 来自RCC的TIMxCLK:一般是系统的主频,72MHz。 预分频器(16位):对进来的频率进行分频,写0,不分频,输出72MHz。写1,2分频,输出36MHz。以此类推。 计数器(16位):对预分频器后的计数时钟进行计数。 自动重装载

    2024年01月22日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包