STM32系列:定时器编码器/正交解码模式——使用HAL库

         STM32定时器的正交解码模式多用于检测电机的编码器脉冲数做闭环控制,如PID。本文简单介绍一下定时器在Cubemx如何配置以及程序引用到的API函数。

一、前期准备

1、硬件:

  • STM32C8T6最小系统板
  • USB-TTL串口模块
  • ST-Link下载器
  • 2、软件:

  • keil5-IDE
  • cubeMX 
  • 二、cubeMX配置

    1、配置RCC——选着外部时钟源

    2、配置SYS—— Serial Wire模式

    3、时钟树拉满72M

    4、配置串口1          

     5.编码器模式配置

  • 这里配置哪一个定时器都可以,只要在第2步存在 Encoder Mode 选项即可。
  • 第3步Encoder Mode T1 是只计上升沿,Encoder Mode T2是只计下降沿,Encoder Mode T1 and T2 就是2种都计。注意:此处可分别配置2个通道的触发模式,但截图只截到其中一个通道
  •  

     6.生成工程

            略

    三、keil5代码

    1、串口配置

            可以参考:STM32系列(HAL库) ——使用串口打印的3种方式,推荐第二种方法。

    2、main函数

            ①在while(1)循环前添加初始化

    uint16_t Count=0;
    uint16_t Diretion=0;
    HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);
    

          ②在whlie(1)循环中打印方向和计数值

     Diretion =  __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim2);     
     Count = __HAL_TIM_GET_COUNTER(&htim2);
     printf("转动方向:%d  脉冲数:%d \r\n",Diretion,Count );
     HAL_delay(500);
  • __HAL_TIM_IS_TIM_COUNTING_DOWN(&htim2):返回 0 或 1 ,代表转动方向
  • __HAL_TIM_GET_COUNTER(&htim2):返回计数脉冲值
  • 如果想看相同时间间隔的脉冲值,可在获得计数后使用 TIM2->CNT=0; 语句将定时器计数值清零。默认情况下定时器会计满65535后变成0
  •  

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32系列:定时器编码器/正交解码模式——使用HAL库

    发表评论