STM32定时器的编码器接口模式

2023-10-30

MCU为STM32L431,通用定时器框图:
在这里插入图片描述
编码器接口模式一共有三种,通过TIMx_SMCR寄存器的SMS[3:0]位来选择。模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上/下计数;模式2计数器仅在TI2FP2的边沿根据TI1FP1的电平来判断向上/下计数;模式3计数器同时在TI1FP1和TI2FP2的边沿根据另外一条线的电平来判断向上/下计数。

计数方向与编码器信号的关系:
在这里插入图片描述

使用编码器模式3,假如使用如下配置时,
在这里插入图片描述

IC1FP1和IC2FP2不反相,IC1FP1=TI1,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,对应关系如下:

向前 点位 TI1FP1信号 TI2FP2信号 相对信号及电平 计数器方向
1 上升 TI2(低) 向上
2 上升 TI1(高) 向上
3 下降 TI2(高) 向上
4 下降 TI1(低) 向上
5 上升 TI2(低) 向上
6 上升 TI1(高) 向上
向后 点位 TI1FP1信号 TI2FP2信号 相对信号及电平 计数器方向
1 上升 TI2(高) 向下
2 下降 TI1(高) 向下
3 下降 TI2(低) 向下
4 上升 TI1(低) 向下
5 上升 TI2(高) 向下
6 下降 TI1(高) 向下

在这里插入图片描述

同样使用编码器模式3,当IC1FP1极性反相时计数器的操作实例(CC1P=’1’,其他配置与上例相同),TI1极性相反,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,对应关系如下:

向前 点位 TI1原信号 TI1FP1信号 TI2FP2信号 相对信号及电平 计数器方向
1 上升 下降 TI2(低) 向下
2 上升 TI1(低) 向下
3 下降 上升 TI2(高) 向下
4 下降 TI1(高) 向下
5 上升 下降 TI2(低) 向下
6 上升 TI1(低) 向下
向前 点位 TI1原信号 TI1FP1信号 TI2FP2信号 相对信号及电平 计数器方向
1 上升 下降 TI2(高) 向上
2 下降 TI1(低) 向上
3 下降 上升 TI2(低) 向上
4 上升 TI1(高) 向上
5 上升 下降 TI2(高) 向上
6 下降 TI1(低) 向上

在这里插入图片描述

如果使用编码器模式1,IC1FP1和IC2FP2不反相,IC1FP1=TI1,IC2FP2=TI2;TI1FP1相对信号是TI2,TI2FP2相对信号是TI1,计数器在TI1FP1的边沿根据IC2FP2的电平来计数。

向前 点位 TI1FP1信号 相对信号及电平 计数器方向
1 上升 TI2(低) 向上
2 下降 TI2(高) 向上
3 上升 TI2(低) 向上
4 下降 TI2(高) 向上
向后 点位 TI1FP1信号 相对信号及电平 计数器方向
1 上升 TI2(高) 向下
2 下降 TI2(低) 向下
3 上升 TI2(高) 向下
4 下降 TI2(低) 向下

在这里插入图片描述
定时器编码器模式配置:

void Encoder_TIM2_Init(void)
{
  TIM_Encoder_InitTypeDef sConfig = {0};
  TIM_MasterConfigTypeDef sMasterConfig = {0};
  
  htim2.Instance = TIM2;
  htim2.Init.Prescaler = 0;
  htim2.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim2.Init.Period = (ENCODER_RELOAD_NUM - 1);
  htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  sConfig.EncoderMode = TIM_ENCODERMODE_TI1;
  sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
  sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
  sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
  sConfig.IC1Filter = 0;
  sConfig.IC2Polarity = TIM_ICPOLARITY_RISING;
  sConfig.IC2Selection = TIM_ICSELECTION_DIRECTTI;
  sConfig.IC2Prescaler = TIM_ICPSC_DIV1;
  sConfig.IC2Filter = 0;
  if (HAL_TIM_Encoder_Init(&htim2, &sConfig) != HAL_OK)
  {
    PRINT_ERR("Encoder Tim Init Err\r\n");
  }
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
  if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK)
  {
    PRINT_ERR("Encoder Init Mode Err\r\n");
  }

  HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_ALL);
}

其中htim2.Init.Period的值为重装载值,计数器的计数值在0(包含)至Period(包含)之间向上或向下计数,可以通过计数值的变化根据编码器接口的模式来判断编码器的方向,也可以TIMx_CR1寄存器的DIR位来判断方向。如果不需要判断编码器转过的圈数,那么重装载值可以顺便设置,比如65535;如果需要判断转过的圈数,假定使用模式3,编码器旋转一周产生的脉冲数是X,那么重装载值可以设置为(X-1)*4,因为模式3在TI1和TI2的边沿都计数,此时可以通过定时器的溢出中断来判断是不是旋转一周。

如果只需要判断旋转方向,并且编码器旋转一周的产生的脉冲数很小的话,那就使用模式1或者模式2比较好,如果使用模式3的话仅通过TIMx_CNT寄存器的值来计算转过角度的话误差比较大。

另外配置的时候编码器模式IC1Polarity和IC2Polarity的极性只能选择上升沿或者下降沿,不能设置为所有边沿,这样的话会导致计数器计数失败,并且方向判断也会有问题。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32定时器的编码器接口模式 的相关文章

  • [C++] 哈希详解

    目录 1 哈希概念 2 实现机制 2 1 插入时 2 2 查找时 2 3 缺陷 2 4 常见哈希函数 2 4 1 直接定制法 2 4 2 除留余数法 2 4 3 平方取中法 2 4 4 折叠法 注意 3 解决哈希冲突 3 1 闭散列 3 1
  • zabbix的安装配置及基本使用

    一 zabbix的安装 1 最小化安装操作系统 安装以下常用依赖包 yum install vim iotop bc gcc gcc c glibc glibc devel pcre pcre devel openssl openssl d
  • qcustomplot绘制动态曲线_第十讲 频域分析法(Nyquist曲线)

    金鸡一唱天下白 第九讲 根轨迹法 zhuanlan zhihu com 自动化人 知乎 www zhihu com 概述 频域 频率响应 分析法是研究控制系统的一种工程方法 典控制理论最重要 最主要的分析方法 应用系统的频率特性可以间接地分

随机推荐

  • 获取在本地缓存

    我们有时候需要获取在本地缓存 在这个时候我们大部分朋友们做不到 今天我找到啦这个的好办法 现在分享给你们 第一步 如果我们已登录并保存缓存的话 我们可以直接看下面的代码 这个是在我们需要的js里面获取缓存的数据 第二步 如果你还没完成登录并
  • 《计算机网络》——第四章知识点

    五类题型1 已知主机IP地址和子网掩码 求网络号2 已知主机IP地址和子网掩码 求子网 主机最多有多少个 3 已知网络号 X位子网号 求子网掩码4 已知网络号 要分成X个子网 求子网掩码和IP地址范围 5 已知子网掩码 求哪些IP地址属于同
  • 操作系统考研复习——第五章(设备管理)

    操作系统考研复习 第五章 设备管理 5 输入 输出 I O管理 5 1 I O管理概述 5 1 1 I O设备 1 什么是I O设备 2 I O设备的分类 按使用特性 3 I O设备的分类 按传输速率分类 4 I O设备的分类 按信息交换的
  • 人机(AI)四人斗地主

    最近在使用Cocos Creator做一款四人斗地主的手机游戏 半成品 仅前端 代码附在最后 仅供参考 游戏中的单机 人机 模式以及游戏过程中的托管都需要出牌算法的设计 因此借这篇博客梳理一下现有的一些思路 首先 明确 AI出牌算法的目的是
  • 使用cmd命令行启动asp.net core 以及.net 5项目

    asp net core 通过CMD命令启动
  • 在 JavaScript 中将字符串转换为数字的 7 种方法

    1 使用 parseInt parseInt 解析一个字符串并返回一个整数 允许空格 仅返回第一个数字 这种方法虽然有一个限制 如果您解析十进制数 它将四舍五入到最接近的整数值 并将该值转换为string 可能需要使用parseFloat
  • antd tree树形控件 onCheck单选并准确获取父子节点

    antd 的tree树形控件为什么没有单选属性 还是我眼瞎没找到 需求 一个只能单选的tree树形控件 并且点击选中一个节点返回当前节点信息和父节点信息 看上去很普通的需求 但是实现起来真的麻烦 就因为tree的onCheck没有单选的问题
  • EDA软件_Cadence_OrCAD Capture DRC 警告分析

    大多数DRC warning甚至某些error可以忽略不计 不影响生成网表 但是要想成为一名成熟的电子工程师 你可以忽略某些错误 但是必须懂得为什么会产生这些错误 如何消除掉这些错误 这样才能控制这些错误的作用范围 不致影响系统整体的设计
  • django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but setting

    django core exceptions ImproperlyConfigured Requested setting DEFAULT INDEX TABLESPACE but settings are not configured Y
  • 微信小程序 富文本编辑器 editor

    完整微信小程序 Java后端 技术贴目录清单页面 必看 富文本编辑器 可以对图片 文字进行编辑 编辑器导出内容支持带标签的 html和纯文本的 text 编辑器内部采用 delta 格式进行存储 通过setContents接口设置内容时 解
  • React Native Hook浅析——state处理

    前言 前提知识 函数式组件在每次props state变动时 都会重新执行整个函数 重新渲染页面 在使用React的class组件时 我们可以使用state this xxx 以及生命周期 componentDidMount compone
  • 常用的免费好用的DNS有哪些?

    阿酷TONY 原创文章 关键词 免费dns 百度dns 阿里dns 114 dns Google DNS 2019 1 24 DNS Domain Name Server 域名服务器 是进行域名 domain name 和与之相对应的IP地
  • 通讯协议057——全网独有的OPC HDA知识一之接口(十二)IOPCHDA_DataCallback

    本文简单介绍OPC HDA规范的IOPCHDA DataCallback 客户端接口 接口方法 更多通信资源请登录网信智汇 wangxinzhihui com 1 HRESULT OnDataChange dwTransactionID h
  • qt应用程序界面控件刷新不及时问题

    可尝试以下方法 1 void showEvent QShowEvent event this gt setAttribute Qt WA Mapped QWidget showEvent event 2 界面控件切换前调用 show qAp
  • 隐私信息检索(PIR)

    隐私信息检索 Private Information Retrieval PIR 技术是由Chor B等提出解决保护用户查询隐私的方案 主要目的是 保证查询用户在向服务器上的数据库提交查询请求 在用户查询隐私信息不被泄漏的条件下完成查询 即
  • 数据仓库ETL技术探究

    ETL概述 在构建商业智能系统的时候 如何正确有效地将分散在各个不同数据源中的信息整合到系统中成为了整个系统成败的关键 直接影响到系统的运行效率和最终结果 ETL正是解决这一问题的有力工具 ETL是指把数据从数据源装人数据仓库的过程 即数据
  • three.js 没有投影

    按照demo physics oimo instancing html 敲的 不知道问题出现在哪儿
  • FactoryBean和BeanFactory:Spring IOC容器的两个重要角色简介

    目录 一 简介 二 BeanFactory 三 FactoryBean 四 区别 五 使用场景 总结 一 简介 在Spring框架中 IOC Inversion of Control 容器是一个核心组件 它负责管理和配置Java对象及其依赖
  • 自定义数据类型使用QVariant转换的方法

    QVariant类型的放入和取出必须是相对应的 你放入一个int就必须按int取出 不能用toString Qt不会帮你自动转换 数据核心无非就是一个 union 和一个标记类型的type 传递的是整数 123 那么它union存储整数12
  • STM32定时器的编码器接口模式

    MCU为STM32L431 通用定时器框图 编码器接口模式一共有三种 通过TIMx SMCR寄存器的SMS 3 0 位来选择 模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上 下计数 模式2计数器仅在TI2FP2的边沿根据