上一个博文介绍了编码器实现测试,这也是编码器最普遍的应用,我们需要操作的东西并不多,通常来说记录脉冲数。

STM32操作增量式编码器(一)----使用外部中断实现测速

1.增量式编码器实现定位思路

对于增量式编码器如何进行定位,我也是一直存在疑惑,并不是说整体定位算法难,这仅仅需要利用一个变量去记录当前脉冲数即可,正转递增,反转递减。但是真实情况真的如此简单吗?

首先我们需要明确两个存在的问题:

1.如何去确定正反转

2.如何准确确定正反转

可能你觉得这是同一个问题,但是真的如此吗?

对于第一个问题,1.如何去确定正反转,我们先来看看编码器正反转输出波形图。

图1-1 增量式编码器输出波形(对于Z相波形,属于零点信号,我们暂时不用理会)

从上述波形,我们可以根据AB相波形的相位差就可以判断出编码器正反转方向,软件实现大概思路就是通过定时器捕获或者外部中断的方式就可实现,这一点实现并不难。

对于第二个问题,2.如何准确确定正反转,首先看看编码器换向的输出波信图。

图2-2 增量式编码器换向输出波形图

这里就会遇到理论与现实中间隔着东西,噪声,现实!=理论,这是现实最迷人的地方。

言归正传,从波形图可以看到,编码器换向过程,输出波形就会出现抖动,它是未知的,抖动都可以认为是未知的,这个抖动正是编码器定位的遇到的最大问题,减少噪声的影响,我们应该想到各式各样的滤波算法(博主小白,只能用各式各样去修饰滤波算法了),这个滤波算法的性能将决定定位的精度,这确实也是一个深入研究的点。

2.使用STM32接口轻松实现编码器定位

为什么说STM32作为一个32位的MCU在如今的微处理器如此耀眼,当然是有原因的,STM32提供了在嵌入式领域的常用接口而且十分好用。博文使用STM32F4的编码器接口实现编码器定位。

2.1编码器接口概述

无厘头帖数据手册,像极了高中时写作文的----鲁迅曾今说过。。。。。

STM32F4的编码器接口介绍在STM32Fxx中文参考手册,英语水平较高的小伙伴也可以看英文手册。

我们通过下面的波信图分析或许更加直观一点:

图2-1 编码器接口模式下的计数器工作实例

怎么一回事呢,图中的TI1、TI2就是定时器的输入通道,例如TIM3的 CH1 -->GPIOA6、CH2 -->GPIOA7,接的就是编码器输出信号的AB相,从图中可以看到在这个官方例程配置下,计数器在TI1、TI2的上升沿下降沿都计数,相当于编码器走一步,计数器计数 * 4,最值得关注的不是这一段,是正向转动和反向转动以及抖动阶段,我们可以知道,编码器接口计数自动帮我们区分正反转,更重要的是,它帮我们处理抖动状态,wow,感动,所以说STM32好用,好用到我们只需要读CNT就可以实现定位了,仅仅需要按部就班的配置就完事。除了这个我们还发现STM32提供一个转向的标志位,不需要我们通过CNT递增递减去判断。

这个标志位是TIMx_CR1寄存器,有具体应用场合的小伙伴可以了解。

2.2 编码器接口配置

这个配置是对于寄存器配置而言的,对于操作库函数而言,这些配置几乎就是非常直观了,按部就班配置即可。

我会在代码下载中放两种代码,分别是F1和F4的,区别就是F1操作寄存器配置,F4操作库函数配置。(以下是F4配置代码)

//author:ora
//email:1301912993@qq.com#include "ROTARYENCODER.h"
#include "usart.h"
#include "lcd.h"#define ENCODER_TIM_PERIOD (u16)(65000)
#define COUNTER_RESET   (u16)30000void rotaryEncoder_init(void)
{GPIO_InitTypeDef GPIO_InitStructure;TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_ICInitTypeDef TIM_ICInitStructure;//开启时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//PA6、PA7输入模式GPIO_InitStructure.GPIO_Speed         = GPIO_Speed_100MHz;       GPIO_InitStructure.GPIO_Mode         = GPIO_Mode_AF;       GPIO_InitStructure.GPIO_OType         = GPIO_OType_OD;       GPIO_InitStructure.GPIO_Pin         = GPIO_Pin_6|GPIO_Pin_7;GPIO_Init(GPIOA, &GPIO_InitStructure);//启动GPIO复用GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_TIM3);GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_TIM3);/* Timer configuration in Encoder mode */
//  TIM3->PSC = 0x0;//预分频器
//  TIM3->ARR = ENCODER_TIM_PERIOD-1;//设定计数器自动重装值
//  TIM3->CR1 &=~(3<<8);// 选择时钟分频:不分频
//  TIM3->CR1 &=~(3<<5);// 选择计数模式:边沿对齐模式//配置定时器TIM_TimeBaseStructure.TIM_Prescaler = 0x0;TIM_TimeBaseStructure.TIM_Period = ENCODER_TIM_PERIOD;TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);//配置编码器模式TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge, TIM_ICPolarity_BothEdge);//设置输入捕获滤波器TIM_ICStructInit(&TIM_ICInitStructure);TIM_ICInitStructure.TIM_ICFilter = 6;TIM_ICInit(TIM3, &TIM_ICInitStructure); //设置初始值、使能计时器TIM3->CNT = COUNTER_RESET;TIM3->CR1 |= 0x01;    //CEN=1,使能定时器}

3.无厘头代码下载

https://github.com/oraSC/STM32-course/tree/master/%E7%BC%96%E7%A0%81%E5%99%A8

STM32操作增量式编码器(二)----使用编码器接口实现定位相关推荐

  1. STM32之增量式编码器电机测速

    STM32之增量式编码器电机测速 编码器 编码器种类 按监测原理分类 光电编码器 霍尔编码器 按输出信号分类 增量式编码器 绝对式编码器 编码器参数 分辨率 精度 最大响应频率 信号输出形式 编码器倍 ...

  2. PID:智能小车入门(位置式和增量式)

    PID:智能小车入门(位置式和增量式) 今年大二,以一个新人的角度来说一下PID及其用法,新人第一次写,有不对的请各位指正.手动狗头 大佬们走过路过可否评论一手 PS:开环:无反馈控制 闭环:有反馈控 ...

  3. STM32 电机教程 26 - ST MCLIB实战之增量式编码器位置传感FOC方案

    前言 磁场定向控制又称矢量控制(FOC), 本质上为控制定子电流的幅度和相位,使之产生的磁场和转子的磁场正交,以产生最大的扭矩. PMSM的磁场定向控制框图如下图所示: 本节将基于NUCLEO-F10 ...

  4. stm32正交编码器 原理图_恶劣环境下应用的电感式增量编码器和绝对编码器

    编码器可分为两种基本类型 - 增量编码器和绝对编码器. 增量编码器的显着特征是它报告角度的变化.换句话说,当增量编码器通电时,它不会报告其角位置,直到它具有测量的参考点. 绝对编码器明确地在比例或范围 ...

  5. 基于FPGA和ABZ增量式编码器的转子位置检测

    ​​ 前言 最近在做一个使用FPGA和增量式编码器实时检测转子位置的小课题,第一次完成从硬件到软件的设计以及软硬件的联调,想做一个总结,鼓起勇气开始自己的第一次发帖.并且,在做这个课题的过程中,发现相 ...

  6. 增量式编码器有哪些分类?增量式编码器是如何工作的?

    编码器可以对一些信号进行编码,由此可见编码器的重要性.为增进大家对编码器的认识,本文将对增量式编码器.增量式编码器分类以及增量式编码器的工作原理予以介绍.如果你对增量式编码器或者编码器具有兴趣,不妨继 ...

  7. Arduino实现增量式旋转编码器(欧姆龙e6b2-cwz6c)程序编写

    最近由于项目需求,须采用编码器进行小车的速度和里程测量.由于考虑到Arduino的编程简便性,因此采用Arduino作为控制器.搜索了相关资料,发现STM32或者51单片机的编码器程序比较多.其中ST ...

  8. 增量式编码器c语言,增量式编码器

    机器人运行过程中,电机转动会产生各种干扰信号.通过两组电源给机器人驱动系统和控制系统供电,以消除干扰对稳定性的影响. 码盘加陀螺仪的方法在应用过程中发现陀螺仪的角度会随着机械振动发生漂移,影响定位精度 ...

  9. 增量式编码器c语言,关于增量式编码器编程指导及使用方法的介绍

    关于增量式编码器编程指导及使用方法的介绍 文章来源:http://www.kindele.com/  发布时间:2016/05/13    点击数: 在目前的编码器市场,增量式编码器主要被分为三种类型 ...

  10. 增量式编码器和绝对式编码器的介绍

    一.编码器的分类 根据检测原理,编码器可分为光学式.磁式.感应式和电容式,根据其刻度方法及信号输出形式,可分为增量式.绝对式以及混合式三种. 1.增量式编码器 增量式编码器是直接利用光电转换原理输出三 ...

最新文章

  1. MySQL面试题 | 附答案解析(十四)
  2. (转)Blend操作入门: 别站在门外偷看,快进来吧!
  3. Post和Get差异
  4. 为什么说OLAP产品毁了BI?
  5. 【必懂C++】第一个程序当然是HelloWorld呀 01
  6. linux 共享移动硬盘,随时登陆上QQ 自带Linux移动硬盘实战
  7. PHPCMS 核心代码与 www 分离部署
  8. 【深入浅出WF】——持久化的过程
  9. Mysql的limit用法
  10. DockOne微信分享(一四一):如何开发部署Kubernetes Native应用
  11. 摩尔定律已经走到尽头?
  12. Excel单元格内换行(包括空行)for Mac
  13. rsync+inotify-tools和rsync+sersync实战应用的区别
  14. stm32 外部中断不起作用
  15. 六派巨量转移技术概述
  16. 浅析jQuery删除节点的三个方法
  17. 100道经典Hadoop常见面试/笔试题及答案解析
  18. 开放式漏洞评估语言(OVAL)概述
  19. 博客网页制作基础大二dw作业 web课程设计网页制作 个人网页设计与实现 我的个人博客网页开发
  20. cad缺失字体补全工具_字体下载预览缺失补齐助手-链图云字体助手下载v2.9.1.9 官方版-西西软件下载...

热门文章

  1. [从 0 开始写一个操作系统] 三、Bootloader 的实现
  2. 新媒体运营教程:名字都没起好,凭什么让用户关注你?
  3. 深度包检测(DPI)的记录
  4. matinee和matin区别_【近义词辨析】An和Année, Jour和Journée如何区别
  5. MongoDB:查询文档
  6. 桌面便签哪个软件好用?求推荐一款便签软件?
  7. 浅谈Google三篇大数据论文
  8. 如何修改mc基岩版服务器端口,我的世界基岩版服务器指令设置家
  9. 84 岁 iOS 女程序员,不得不服!
  10. Latex的pdf合并