正交编码器溢出处理

news2024/9/22 17:31:27

文章目录

  • 1.正交编码器
    • 1.1 参数特性
    • 1.2 应用范围
  • 2.正交编码器使用
    • 2.1 溢出问题
    • 2.2 中断模式
    • 2.3 循环模式
      • 延伸



1.正交编码器

  正交编码器一般指的是增量式光栅(磁栅)编码器,通常有三路输出信号,A相、B相、Z相,俗称ABZ编码器。所谓正交,即是A相信号和B相信号相位相差90°,根据AB相位的前后,即可判断旋转机构正转还是反转。Z相信号,是旋转一圈后输出的信号,也称为零点信号。

在这里插入图片描述

正交编码器


1.1 参数特性

  • 线数,旋转一圈的脉冲数,如1024线、2500线、10000线
  • 工作电压,3.3V、5V
  • 差分信号,工业应用,为了增加抗干扰能力,ABZ信号通常以差分信号输出
  • 无Z相信号,一些编码器无Z相信号

1.2 应用范围

  • 与电机结合应用,组成伺服电机,直流电机、交流电机、步进电机等
  • 转速测量
  • 多媒体音量调节
  • 鼠标滚轮
  • 游戏手柄

2.正交编码器使用

  • 使用GPIO模拟,适合低速场合,如鼠标滚轮、多媒体音量调节
  • 专用编码器接口,基本上主流的MCU、MPU都支持,适合高速场合使用

  一般情况下使用专门的编码器接口,即是支持正交计数的定时器,由CPU硬件上实现脉冲计数和方向判断,用户只需从定时器寄存器获取脉冲计数和方向,相比使用GPIO模拟效率和精度高。定时器接口还支持边缘采集,可以实现2倍频、4倍频信号;例如5000线编码器,通过4倍频后,单圈实现20000脉冲,最低识别精度为360/20000°。

在这里插入图片描述

STM32编码器接口定时器计数

2.1 溢出问题

  正交编码器接口定时器计数,与定时器位数密切关联;通常定时器有8位、6位、32位;目前主流ARM处理定时器以16位为主,高端处理器支持32位。对于8位计数器,溢出大小为2^8=255;16位计数器溢出大小为2 ^16=65535;32位计数器溢出大小为2 ^32=4294967294。


  以50000线编码为例,经过4倍频后,单圈为20000脉冲;如果是8位计数器,单圈则溢出78次;16位计数器,3圈后溢出。对于高速场景,是不允许的。

  • 如果使能溢出中断,则中断频率过高,影响CPU其他任务
  • 如果未使能中断,CPU运算能力需要在单圈溢出前获取计数值

  以主流16位定时器为例,分别实现以上两个方式溢出处理。


2.2 中断模式

  如果速度不高,或者中断频率容忍度在设计范围,不影响其他任务的正常执行,则可以开启溢出中断,增加一个圈数计算变量,实现起来是非常方便的。实现步骤如下:

  • 初始正交编码器接口,复位计数值为0
  • 重新溢出中断,正转时圈数值减1,反转时圈数加1
  • 实际位置脉冲值=圈数编码器线数4+当前计数值(未满一圈)

伪代码

int64_t count = 0;

/* init encoder timer  */

/* reset encoder timer count */

/* IRQ handler */
void irq_handler(void)
{
	if (direct == CCW)
	{
		count--;
	}
	else
	{
		count++;
	}
}

/* read real pos */
int64_t read_real_pos(void)
{
	int64_t pos= 0;

	temp = count*(2^16 + 1) + (int64_t)__HAL_TIM_GET_COUNTER(&timer);
	return pos;
}

  注意有符号数运算,初始值为0;正转时易于理解。对于反正:初始值计数为0,翻转值65530,产生溢出中断一次,实际值为-36636+65530=-6。



2.3 循环模式

  对于高速场景,高频中断占用大量CPU资源,导致其他任务未能及时执行,这是不允许的。定时器计数溢出后归零,在未开启溢出中断时,用户无法感知溢出多少次。因此,我们只需保证处理周期内最多允许一次溢出,处理周期依赖于实际软件复杂度、编码器线数、最大转速。先上伪代码。


#define MAX_COUNT (50000*4)
#define TURN_COUNT (MAX_COUNT/2)	

int64_t pos_fun(void)
{
	static int64_t last_pos = 0;
	int64_t temp_pos = 0;
	int64_t real_pos = 0;
	int64_t current_pos = timer_read_pos();
		
	temp_pos = current_pos - last_pos;
	if (temp_pos >= MAX_COUNT)
	{
	    temp_pos -= TURN_COUNT;
	}
	else if (temp_pos < -MAX_COUNT)
	{
	    temp_pos += TURN_COUNT;
	}

	last_pos = current_pos;
	real_pos += temp_pos;
		
	return real_pos;
}

实现原理:

  • MAX_COUNT 为单圈计数值
  • TURN_COUNT 为一个计算临界值,通常取单圈数值的一半
  • 处理时,当前计数值与上一次值比较,如果差值大于TURN_COUNT ,说明发生反转溢出,则减去单圈值;如果差值小于-TURN_COUNT ,说明发生正转溢出,则加上单圈值
  • 处理周期,取决于软件设计和最大转速,确保这个周期内最多发生一次溢出

延伸

  实质上,该方式也适用于一些绝对式编码器场景;如单圈绝对式编码器,该类编码器以数字接口(SSI、CAN、BISS、并口)输出位置信息,最大支持记录一圈的绝对位置,超出单圈位置后归零。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98920.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2022年度系列工作总结】「国内软件质量调查问卷」针对于本年度软件质量分析总结报告

前提背景 针对于目前的软件行业而言&#xff0c;软件的质量目前越来越被大家所在关注&#xff0c;慢慢的QA以及SQA的角色也变得愈加重要。接下来我就针对于我司&#xff08;XXX&#xff09;的相关的实际开发情况对应的【2022年国内软件质量调查问卷】&#xff0c;为大家梳理和…

[附源码]计算机毕业设计Python大学生考勤管理系统论文(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

听说Linux基础指令很多?这里都帮你总结好了

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 You can’t use up creativity. The more you use, the more you have. 创造力…

微软数据科学家助理(Data Scientist Associate)认证考试通过经验分享(DP-100)

今天冒着大疫情&#xff0c;去海淀的test center参加考试&#xff0c;通过了微软DP-100 在 Azure 上设计和实现数据科学解决方案&#xff0c;并且获得了经 Microsoft 认证&#xff1a;Azure 数据科学家助理 的证书。 经 Microsoft 认证&#xff1a;Azure 数据科学家助理 考试结…

Hadoop编译源码

文章目录第一章 Hadoop编译源码1.1 前期准备工作1.2 Jar包安装配置maven的环境变量在 mirrors节点中添加阿里云镜像安装gcc make配置环境变量1.3编译源码第二章 常见错误及解决方案第一章 Hadoop编译源码 1.1 前期准备工作 1&#xff09;CentOS联网 配置CentOS能连接外网。Li…

力扣(LeetCode)1703. 得到连续 K 个 1 的最少相邻交换次数(C++)

贪心 将至少连续 KKK 个 111 放在一起。首先考虑他们是相邻着放在一起的&#xff0c;然后考虑性质 : 设相邻摆放后&#xff0c;起始 111 的位置是 mid{mid}mid &#xff0c;对于每个 111 的位置 aia_iai​ &#xff0c;它需要被摆放的位置是 amidia_{mid}iamid​i 。考虑一个等…

【Effective_Objective-C_2对象,消息,运行期2】

文章目录前言12.理解消息转发机制消息转发动态方法解析动态方法解析的前提备援接受者完整的消息转发消息转发全部流程要点总结13.用“方法调配技术”调试“黑盒方法”方法调配动态消息派发系统和IMP如何交换方法实现要点总结14.理解“类对象”的用意在类的继承体系中查询类型信…

【经济学】【综合篇】经济机器是怎样运行的

原视频&#xff1a;经济机器是怎样运行的 (时长30分钟) Ray Dalio 前言&#xff1a;经济与我们每一个人息息相关&#xff0c;经济社会的一些变革或举措也会直接或间接的反映到我们每个个体身上。了解经济&#xff0c;提高自己的认知&#xff0c;可以帮助我们更好的参与经济活动…

excel数据统计技巧:如何对表格区域内所含字母进行计数

小王是一家快餐店的财务人员。受疫情影响公司开展了店外销售业务&#xff0c;所有销售采取手工记账的方式。为了简化销售人员的工作量&#xff0c;为每种商品指定了一个字母代码&#xff0c;营业员只需要记录每一单销售的商品代码即可。下面是根据手工记账登记的销售记录表&…

论文投稿指南——中国(中文EI)期刊推荐(第8期)

&#x1f384;&#x1f384; EI是国际知名三大检索系统之一&#xff0c;在学术界的知名度和认可度仅次于SCI&#xff01; 【前言】 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊。其中&#xff0c;中文期刊的…

【运筹优化】子集和问题(Subset Sum Problems , SSP)介绍 + 动态规划求解 + Java代码实现

文章目录一、问题介绍二、动态规划求解思路三、Java代码实现一、问题介绍 子集和问题&#xff08;Subset Sum Problems , SSP&#xff09;&#xff0c;它是复杂性理论中最重要的问题之一。 SSP会给定一组整数 a1,a2,....,ana_1,a_2,....,a_na1​,a2​,....,an​ &#xff0c;…

手写Spring7(实现bean的初始化、销毁)

文章目录目标设计流程项目结构一、实现1、 定义初始化和销毁方法的接口2、Bean属性定义新增初始化和销毁3、执行 Bean 对象的初始化方法4、定义销毁方法适配器(接口和配置)5、定义注册销毁对象、销毁实现6、创建Bean时注册销毁方法对象7、虚拟机关闭钩子注册调用销毁方法二、测…

UNIAPP实战项目笔记55 自定义Tabbar并使用Tabbar事件拦截未登录跳转到登录页面

UNIAPP实战项目笔记55 自定义Tabbar并使用Tabbar拦截未登录跳转到登录页面 点击购物车和我的的时候需要拦截并验证登录 通过验证的直接跳转,为通过验证的跳转到登录页面 通过自定义tabbar来实现 实际案例图片 正常跳转 拦截跳转 代码 pages.json 页面配置 {"pages&qu…

JDBC编程相关知识(实现图书管理系统进阶版)

目录 一、配置MySQL数据库驱动包 二、JDBC常规操作 1、创建数据源 2、建立连接 3、操作数据库&#xff0c;执行sql语句 4、关闭资源 三、JDBC实现图书管理系统 1、建表 2、连接数据库 3、创建实体类 a、Book类 b、BookShelf类 c、User类 d、Administrator类 e、…

jsp+ssm计算机毕业设计大学生足球预约信息【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

java计算机毕业设计springboot+vue青少年编程在线考试系统

项目介绍 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。 论文主要是对青少…

AIGC stable diffusion完整部署手册 for linux

准备工作 &#xff08; GPU服务器4G显卡 &#xff09;&#xff1a; 1. 建议 Python3.10.7 以上的版本&#xff0c;最低不能低于3.10.5 2. pip pip3的版本升级到最新 pip 22.3.1 3. 安装python3.10.7之前先安装和升级 openssl-1.1.1q 4. yum安装源改成 阿里云 或者 清华 …

English Learning - L1-4 从此没有不会的表达(下) 2022.12.15 周四

English Learning - L1-4 从此没有不会的表达&#xff08;下&#xff09; 2022.12.15 周四5 动名词5.1 动名词都有什么作用作主语做表语做定语动名词做定语有啥讲究&#xff1f;做宾语5.2 动名词的复合结构---成功加入动名词自己的主语逻辑主语动名词复合结构作宾语时用普通格和…

2021年度汇总丨20大热门TWS耳机功能配置汇总解析

疫情下的时间匆匆而过&#xff0c;2021已成为过去&#xff0c;2022年正式开启。在过去的一年中&#xff0c;以TWS耳机为代表的音频市场依旧保持着健康稳定的发展&#xff0c;彰显这一市场超强的活力和朝好的未来发展。 回顾2021&#xff0c;这一年中&#xff0c;我爱音频网365天…

直线检测霍夫变换VS深度学习

1. 引言 直线检测有很多应用&#xff1a;例如&#xff0c;创建矢量化图、端点检测等。在这篇文章中&#xff0c;我们不讨论其具体的应用程序&#xff0c;而是重点关于于如何使用传统算法和深度学习的方法来进行直线检测&#xff0c;这里我们将对二者进行相关比较。 闲话少说&a…