| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> STM32之编码器测速应用 -> 正文阅读 |
|
[嵌入式]STM32之编码器测速应用 |
文章目录杂谈这篇博文写的时间确实有几天了,主要是想让需要的人更好地运用这一模块,同时将自己的使用经验分享给大家,就像当初迷茫的我,也是CSDN的 大佬们的指点迷津对我有了很大的帮助。 这几阶段,我主要是将一些模块知识的理解与运用,和一些项目的经验,后期打算深入编程语言与嵌入式相关技术。还有那一直想好好深入学习的数据结构,哈哈。 前言编码器在项目、竞赛中被广泛运用。很多运动控制系统都是一个闭环系统,而在这个闭环系统中,各类型的电机必然是执行器,但只有电机,那这个运动控制只能是开环的,我们需要一个反馈值,用于实现电机控制的闭环结构。编码器被广泛应用于电机测速,实现电机闭环控制。 下篇博文是上次写的关于电机控制的博文 一、何为编码器编码器(encoder)是将信号(如比特流)或数据进行编制、转换为可用以通讯、传输和存储的信号形式的设备。 二、编码器的分类按照读出方式,编码器可以分为接触式和非接触式两种。 我们在通常使用中,常以工作原理的形式进行分类,以供选型使用。 1、增量式编码器增量式编码器基本原理: 增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小。 先上图,留个印象。这是逐飞科技的一款正交编码器(有带方向的),(不是打广告)。 Z线一般是零点信号的,就是当编码器旋转到零点位置时,它会发出一个脉冲用于表示,这个位置是生产商固定的,也可以称作机械零位。 对于增量式编码器的工作原理可见这篇博文: 2、绝对式编码器绝对式编码器基本原理: 与增量式通过计数脉冲数和判断脉冲的方向不同,绝对式编码器直接输出数字的传感器,更准确的说,是能给出与每个角位置相对应的完整的数宇量输出 。 所谓的位置信息大致可以这样理解,每个位置是唯一的,编码器旋转过程中,直接读取位置即可。编码器中有光码盘(可理解为下图)。 在它的圆形码盘上沿径向有若干同心码道,每条上由透光和不透光的扇形区相间组成,相邻码道的扇区数目是双倍关系,码盘上的码道数就是它的二进制数码的位数,在码盘的一侧是光源,另一侧对应每一码道有一光敏元件;当码盘处于不同位置时,各光敏元件根据受光照与否转换出相应的电平信号,形成二进制数。 (光码盘) 绝对式编码器类别:单圈绝对编码器和多圈绝对编码器 **1、旋转单圈绝对编码器,**以转动中测量光电码盘各道刻线,以获取唯一的编码,当转动超过360度时,编码又回到原点,这样就不符合绝对编码唯一的原则,这样的编码只能用于旋转范围360度以内的测量,称为单圈绝对值编码器。 如果要测量旋转超过360度范围,就要用到多圈绝对编码器。 2、旋转多圈绝对编码器,编码器生产厂家运用钟表齿轮机械的原理,当中心码盘旋转时,通过齿轮传动另一组码盘(或多组齿轮,多组码盘),在单圈编码的基础上再增加圈数的编码,以扩大编码器的测量范围,这样的绝对编码器就称为多圈式绝对编码器,它同样是由机械位置确定编码,每个位置编码唯一不重复,而无需记忆。 这部分可详细参考这篇博文。绝对式编码器 3、编码器运用实例 先看图,这是我在智能车赛测速用的编码器,WCHF103芯片与四个编码器之间的数据传输依靠的是SPI的“分时复用”,对于分时复用的概念,前几篇博文已经介绍过了。走SPI通信这种办法,确实有一定的优点,少用一个定时器,哈哈。 后来,我又写了这个编码器与32的芯片进行SPI通信的程序,有需要的可以评论区留下邮箱。 3、霍尔编码器如下图。这个编码器挺好,便宜实用,上面两种有些小贵。霍尔编码器也是增量式编码器中的一种,有A、B相两相输出,与文章开篇的那种不同,但理解起来是一样的道理。 接下来我就讲讲自己对带编码器的直流减速电机的理解。 三、带编码器的直流减速电机详解1、直流减速电机的概念1)直流因为是直流电。 (图片更加形象生动) 2、如何运用编码器进行测速在带霍尔传感器的直流电机的条件下,电机转动一圈,通过霍尔传感器的A、B两相输出一定数量的脉冲,我们可以根据一定时间内的脉冲数计算出电机的瞬时速度。 2) 我们以stm32芯片作为主控,利用32的定时器外设的输入捕获功能,配置相关输入通道为编码器接口模式,就可以进行脉冲数的计数。 在第二种方式中,错误的脉冲信号会被输入滤波器过滤掉,所以更推荐也更常用。 注意点如下: 根据上图,编码器的A、B两相通过接线,接到定时器输入通道1、2对应的GPIO引脚上即可,这样,电机转动,就会通过编码器产生连续的脉冲输入到T1,T2中。 接下来需要详细分析一下如何利用编码器接口模式进行测速的。 首先我们应该理解脉冲计数的原理。对于计数,有三种模式, 但我们经常用第三种模式,因为提高了采样精度。具体的解释,可以看这个大佬的解释,好理解且实用博文链接 三种模式以及相关的计数方向如下表。
表中第一行,可以理解为在TI2上的脉冲为高电平时,如果TI1的脉冲为上升沿,则计数器+1,;如果TI1的脉冲为下降沿,则计数器-1。对于TI2的脉冲不进行计数,因为已经使用过其高低电平了,并且规定了只对TI1计数了。 其他行亦是这个道理。 下面这个表便是第三种模式下,计数器的工作过程,从图中我们可以知道,可以通过计数器是递增还是递减,来判断电机的正反转。而且可以看到,毛刺没过滤了,计数器碰到没有计数。 接下来,我们需要理解在编码过程中两个重要的参数。很重要!!! 1)重装载值 这两个系数在定时、PWM输出中都被运用到,且具有不同的含义,但这里我就详细讲一下在编码器计数中如何设定。 重装载值: 这里我们需要明白一点,电机转一圈输出的脉冲数是固定的,一般为360,具体的看情况,速度快了,也就可以理解为相同时间,转的圈数增多了。 预分频系数 原先定时器用作定时或者PWM输出,我们的预分频系数分的是32芯片的内部时钟,就是这个公式:CK_CNT=TIMxCLK/(PSC+1),这里的PSC就是预分频系数。但定时器用作编码器测速,这时时钟是外部时钟,也就是编码器采集的电机产生的脉冲。 预分频分的就是外部时钟的频率。 举个例子,如果你预分频系数为2,假设电机旋转一圈产生100个脉冲,则此时你单片机只能记录50个脉冲。 这两个因素应该理解的差不多了。 3、脉冲数转变成速度值方法1、那我们如何计算转速呢,设重装载值为ARR,预分频系数置PSC,电机线数为360 那么电机转一圈,编码器采集到360*4 / PSC 个脉冲,因为预分频系数为PSC。再用定时器定时m秒,记录m秒内溢出的次数为n次,得到速度为 v=( n * ARR+当前的计数值) / (360 * 4 / PSC )/ m 。 总的来说,就是算每秒转了几圈。 2、预分频系数设置为 0 ,自动重装载值设为65535。 4、程序代码第一种测速方式为例。 这段测速的思路引自这位大佬,具体文章和代码见下面链接。
总结还有一部分尚未写完,日后更新。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:31:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |