STM32(十六)正交编码器

news2024/9/23 3:26:10

一、简介

增量式编码器

增量式编码器也称为正交编码器,是通过两个信号线的脉冲输出来进行数据处理,一个输出脉冲信号就对应于一个增量位移,编码器每转动固定的位移,就会产生一个脉冲信号 通过读取单位时间脉冲信号的数量,便可以达到测速的效果(v=s/t),通过对脉冲信号的累加,和编码器的码盘的周长(转一圈对应距离) 便可以达到计算行走距离的效果(s=n*d)

编码器信号:

  • A 脉冲输出

  • B 脉冲输出

  • Z 零点信号 当编码器旋转到零点时,Z信号会发出一个脉冲表示现在是零位置 表示编码器转了1圈,可用来记录编码器转了多少圈,从而知道运行距离

  • VCC 电源线

  • GND 地线

编码器线数:

编码器的线数 ,是说编码器转一圈输出多少个脉冲,,,如果一个编码器是500线,说明这个编码器转一圈对应的信号线会输出500个脉冲, A B两相转一圈发出的脉冲数一样的,不过存在90°相位差

线数越高代表编码器能够反应的位置精度越高

编码器原理:

增量式编码器有两个脉冲输出,A相和B相,并且两个相位永远存在90°相位差。 如果两个信号相位差为90度,则这两个信号称为正交。由于两个信号相差90度,因此可以根据两个信号哪个先哪个后来判断方向、并且可以根据AB相脉冲信号数量测得速度,位移等,

编码器正反转:

正转的时候信号线A先输出信号,信号线B后输出 A相超前B相90度 证明是正转

反转的时候信号线B先输出信号,信号线A后输出 B相超前A相90度 证明是反转

STM32定时器编码器模式

STM32的编码器模式共有三种:

  • 仅在TL1计数(A相)

  • 仅在TL2计数(B相)

  • 在TL1和TL2都计数(A相和B相都计数)

仅在TL1计数(A相)

TI2(B相)为高电平时:

1时刻: TI1(A相)下降沿, 则向上计数(正转)。

2时刻:TI1(A相)上升沿, 则向下计数(反转)

TI2(B相)为低电平时:

3时刻: TI1(A相)上升沿, 则向上计数(正转)。

4时刻:TI1(A相)下降沿, 则向下计数(反转)

仅在TL2计数(B相)

TI1(A相)为高电平时:

1时刻: TI2(B相)上升沿, 则向上计数(正转)。

2时刻:TI2(B相)下降沿, 则向下计数(反转)

TI2(B相)为低电平时:

3时刻: TI2(B相)下降沿, 则向上计数(正转)。

4时刻:TI2(B相)上升沿, 则向下计数(反转)

在TL1和TL2都计数(A相和B相都计数)

一个脉冲信号周期完成4次跳变。精度提高

1时刻:TI2为低电平,TI1上升沿跳变,计数器向上计数;

2时刻:TI1为高电平,TI2上升沿跳变,计数器仍然向上计数;

3时刻:TI2为高电平,TI1下降沿跳变,计数器仍然向上计数;

4时刻:TI1为低电平,TI2下降沿跳变,计数器仍然向上计数。

毛刺:只有一个相位脉冲 过滤掉 编码器转动过程中可能产生的毛刺过滤掉

计数器向下计数原理相同 看图即可很好理解。

计数器向下计数:

A下降沿,B低电平

B下降沿,A高电平

B上升沿,A低电平

A上升沿,B高电平

各个值的计算:

转速计算方法:用捕获值(一秒内输出的脉冲数)/编码器线数(转速一圈输出脉冲数)/电机减数比(内部电机转动圈数与电机输出轴转动圈数比,即减速齿轮比 没有则不用除)

运动距离计算:输出的总脉冲数 / 编码器线数*编码器齿轮周长

所转角度计算: 输出的总脉冲数 / 编码器线数 *360 或 溢出中断次数*360+当前计数值

转动方向: 方向在定时器CR1的DIR位里 dir=(TIMX->CR1 & 0x0010)>>4; //取方向标志位

if(dir > 0) //向下计数 else //向上计数

注意事项:

需要增加测量的精度时,可以采用4倍频方式,即分别在A、B相波形的上升沿和下降沿计数,分辨率可以提高4倍,

如果只是测速,不要求方向,那么只需要用单片机随意选择一个信号线就行了,,然后定时器边沿触发,检测脉冲计数即可

一般是定时器的通道1和2才能作为编码器输入口,对应编码器输出的两相。

GPIO配置为配置为上拉输入模式

一个定时器做一种工作,如果你配置了编码器模式,那么剩下的通道就不能配置其他模式

两相计数模式下, 读出来数需要/4 一个脉冲信号对应四次计数

二、工程创建

1、芯片选择

  芯片:STM32F103ZET6(根据自己的板子来进行选择)

2、设置RCC

  设置高速外部时钟HSE 选择外部时钟源

7、编码器配置

  STM32自带编码器配置,使用定时器4(TIM4_CH1和TIM4_CH2),打开更新定时器中断

8、中断优先级配置

  因为编码器中断要发生在定时10ms中断内,故编码器中断的抢占优先级要大于定时10ms

三、代码示例

打开定时器的encoder模式:

HAL_TIM_Encoder_Start(&htim1, TIM_CHANNEL_ALL);

enc1 = (uint32_t)(__HA`L_TIM_GET_COUNTER(&htim1));//获取定时器的值

__HAL_TIM_SET_COUNTER(&htim4,0);// 计数器清零

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

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

相关文章

自动修改文章的软件-自动修改文案原创软件

有没有自动修改文章的软件 修改文章可能是很多人日常工作中必须完成的任务,但一般情况下,这需要人工完成。幸运的是,现在有很多文章修改软件可以帮助我们节省时间和精力。本文将向您介绍一款优秀的修改文章软件,名为147SEO&#…

SLAM论文速递【SLAM—— TwistSLAM:动态环境下的约束SLAM】—4.17(2)

论文信息 题目: Optimization RGB-D 3-D Reconstruction Algorithm Based on Dynamic SLAM 基于动态SLAM的RGB-D三维重建算法优化论文地址: https://ieeexplore.ieee.org/abstract/document/10050782发表期刊: IEEE Transactions on Instru…

Apache POI 实现用Java操作Excel完成读写操作

简介 Apache POI是一个用于操作Microsoft Office格式文件(包括xls、docx、xlsx、pptx等)的Java API库。POI全称为Poor Obfuscation Implementation,是Apache Software Foundation的一个开源项目。它提供了一组Java API,使得Java程…

LLM_StableDiffusion_studio发布

背景: 从chatgpt发布到现在已经超过半年时间,AGI的势头越来越猛。大家都在做各种的尝试和组合,把chatgpt通用的强大的知识表达和理解能力尝试应用在自己的业务场景。前期也是出现非常多的业务应用,但是主要还是围绕chatgpt本身已…

循环神经网络(RNN)简单介绍—包括TF和PyTorch源码,并给出详细注释

文章目录 循环神经网络(RNN)入门教程1. 循环神经网络的原理2. 循环神经网络的应用3. 使用keras框架实现循环神经网络3.1导入对应的库及加载数据集3.2.数据预处理3.3定义RNN模型3.4训练模型3.5测试模型 4.使用PyTorch框架实现上述功能—注释详细5.结论 循…

动静态库的制作和使用

动静态库 一,什么是库二,静态库的制作静态库原理 三,动态库的制作四,动态库的配置五,动态库的加载 一,什么是库 🚀库这个东西我们一直在使用,举个简单了例子,无论你是用…

netplan, NetworkManager, systemd-networkd简介

1、systemd-networkd简介 systemd-networkd是systemd 的一部分 ,负责 systemd 生态中的网络配置部分(systemd-networkd.service, systemd-resolved.service)。使用 systemd-networkd,你可以为网络设备配置基础的 DHCP/静态IP网络等,还可以配…

U8W/U8W-Mini使用与常见问题解决

U8W/U8W-Mini使用与常见问题解决 U8WU8W/U8W-mini简介准备工作U8W/U8W-mini在线联机下载U8W/U8W-mini脱机下载第一步,把程序下载到U8W/U8W-mini烧录器中:第二步,用U8W/U8W-mini烧录器给目标单片机脱机下载 U8W/U8W-mini烧录器使用中常见的问题…

初识Linux运维

一.初识Linux 1.Linux系统内核 内核提供了Linux系统的主要功能,如硬件调度管理的能力。 Linux内核是免费开源的,任何人都可以查看内核的源代码,甚至是贡献源代码。 2.Linux系统发行版 内核无法被用户直接使用,需要配合应用程…

淘宝iOS拍立淘微距能力探索与实现

画面模糊问题的源头也是来自用户的微距体验不佳,我们对问题深入分析,适当拆解。通过 Apple Development Doc 的查阅及实践,一步步抽丝剥茧,最终完美解决用户的体验痛点,也为我们自身沉淀了展示微距的能力。 前言 在最近…

Unix和Linux

UNIX 诞生于 20 世纪 60 年代末 Windows 诞生于 20 世纪 80 年代中期 Linux 诞生于 20 世纪 90 年代初 1965 年,贝尔实验室、美国麻省理工学院和通用电气公司联合发起了Multics 工程计划,目标是开发一种交互式的、具有多道程序处理能力的分时操作系统&a…

NTP服务与SSH服务

NTP:时间同步服务,采用UDP协议,端口号为123。 配置NTP时间服务器,确保客户端主机能和服务主机同步时间 首先,我们必须确保服务端与客户端在同一时区。 更改时区:timedatectl set-timezone asia/shanghai …

隋唐洛阳“西宫”:上阳宫的GIS视角

隋唐洛阳城简介 营建 隋大业元年(605年),在隋炀帝的授意下,隋代著名城市设计师宇文恺,在汉魏故城以西重新选址,历时8个月,日役劳工200万,兴建新都洛阳城。 城和苑 隋唐洛阳城采用…

页面注册案例

效果图: 分析业务模块: 发送验证码模块各个表单验证模块勾选已经阅读同意模块下一步验证全部模块:只要上面有一个input验证不通过就不同意提交 业务 1 :发送验证码 用户点击之后,显示05秒后重新获取时间到了&…

大国护眼学习笔记01

第一天(23.4.17) 2—11节什么是近视? 1、“近视离焦”是指成像点落在视网膜的哪里? 前面 2、“远视离焦”是指成像点落在视网膜的哪里? 后面 3、眼轴变长时,成像点会往前移还是往后移? 前移 4、…

毛灵栋 : 以兴趣为壤,育能力之实 | 提升之路系列(一)

导读 为了发挥清华大学多学科优势,搭建跨学科交叉融合平台,创新跨学科交叉培养模式,培养具有大数据思维和应用创新的“π”型人才,由清华大学研究生院、清华大学大数据研究中心及相关院系共同设计组织的“清华大学大数据能力提升项…

【RP-RV1126】Ubuntu上配置Buildroot Qt 开发板远程开发调试环境(SSH)

文章目录 一、前提二、基础设置建设Buildroot编译Qt5配置SSHBuildroot文件系统添加账号密码开发板联网Buildroot文件系统构建时打开rsync功能 三、QtCreator配置3.1 配置Qt交叉编译套件(Kits)配置Kits里面的交叉编译器配置Kits里面的qmake工具最后配置Kits 3.2 配置远程部署设备…

VLAN基础实验

实验要求: 1、PC1和PC3所在接口为Access接口 PC2/4/5/6处于同一网段:其中PC2可以访问PC4/5/6 PC4可以访问PC5,但不能访问PC6 PC5不能访问PC6 2、PC1/3与PC2/4/5/6不再同一网段 3、所有PC通过DHCP获取IP地址,且PC1/3可以正常访问PC2/4/5/6 实…

tkinter-TinUI-xml实战(9)crosschat客户端

tkinter-TinUI-xml实战(9)crosschat客户端 引言声明文件结构核心代码服务端连接登录界面主页面主文件 结语 引言 CrossChat(十字街)是一个线上匿名群聊平台,类似Hack.Chat。 现在通过websocket简单地构建一个cc的客户…

随机蛙跳算法 (SFLA)简单实现(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 随着计算机科学与技术的迅速发展,人类生存空间的扩大以及认识与改造世界范围的拓宽,人们对科学技术提出了新的和更高的要求,其…