分享

【STM32F4系列】【HAL库】旋转编码器(EC11)

 myallmy 2023-04-06 发布于北京

目录

概述

电气连接

波形分析

思路 

HAL初始化

代码

 成品


概述

EC11是一种增量型AB相旋转编码器

旋转编码器是一种可以无限旋转的旋钮,常被作为各种需要大量数据范围的情况(如收音机选台,音量选择等)

增量型是与绝对性做的区分,意味着输出的信号与当前的位置没有关系,与旋转的方向和角度有关

AB相指的是一种输出模式(也可以认为是一种协议)

有两个线输出根据相位判断方向,根据高低电平数量判断走过度数

电气连接

原理图

 

EC11常见额定电压是5V,实测3.3V也可以驱动,但不建议使用3.3V(会出现杂波) 

阻容是为了进行上拉输出和硬件滤波

A,B为旋转信息的输出(两相)

C为接地

SW为内部的开关,可以当作轻触按键使用(注意加软件滤波)

波形分析

数据手册的截图

实测顺时针转动一格

 

实测逆时针转动一格 

解释:

每转动一格(拿到实物自己实验下很容易理解什么叫一格),AB相会出现一个持续10-150ms的低电平,默认为高电平状态

顺时针转动时A相的低电平会比B相提前

逆时针转动时A相的低电平会比B相延后

思路 

很明显可以看出,只需要在A(或B)相的一个边沿(上升下降均可),检测另一相的电平高低即可

因此需要的外设有:

  1. 外部中断
  2. 一个输入状态的GPIO

注意:

  1. 因为要直接接入5V的电压,因此需要GPIO耐压为5V(即为数据手册表FT的管脚)
  2. 未避免干扰,输入状态和外部中断的GPIO设置为上拉模式(不知道为啥浮空输入干扰贼大)
  3. 外部中断上升沿和下降沿均可(这里以下降沿为例)

HAL初始化

外部中断和NVIC

GPIO

代码

为了便于后期的调用,这边做了一个回调函数,可以在触发顺时针或者逆时针的旋转的时候自动调用这个函数

头文件

  1. //外部中断
  2. #define EC11_A_GPIO_Group GPIOA
  3. #define EC11_A_GPIO_PIN GPIO_PIN_0
  4. // GPIO输入
  5. #define EC11_B_GPIO_Group GPIOA
  6. #define EC11_B_GPIO_PIN GPIO_PIN_1
  7. void EC11_Decode(void (*Clockwise)(void), void (*Anticlockwise)(void));

C文件

  1. void EC11_Decode(void (*Clockwise)(void), void (*Anticlockwise)(void))
  2. {
  3. //Delay_ms(1);
  4. if (HAL_GPIO_ReadPin(EC11_B_GPIO_Group, EC11_B_GPIO_PIN) == GPIO_PIN_SET)
  5. {
  6. Anticlockwise();
  7. }
  8. else
  9. {
  10. Clockwise();
  11. }

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多