基本原理:霍尔编码器是有霍尔马盘和霍尔元件组成。霍尔马盘是在一定直径的圆板上等分的布置有不同的磁极。霍尔马盘与电动机同轴,电动机旋转时,霍尔元件检测输出若干脉冲信号,为判断转向,一般输出两组存在一定相位差的方波信号。

使用霍尔编码器测速最主要的还是根据输入捕获计算时间。和正点原子标准例程不同的是,霍尔编码器在上电后的默认电平是高电平,当磁铁经过传感器前端时,会出现一段时间的低电平,也就是霍尔编码器上面的绿灯会有暗变亮,所以我们需要做的就是通过stm32定时器的输入捕获来确定低电平的时间,因此在配置时需要将第一次捕获设置为下降沿捕获。

第一步:配置IO口

这里选择通用定时器即可,我这里用的是通用定时器3的通道1即PA6。

设置为上拉输入,别的就不用过多阐述了,正点原子的例程设置的是下拉输入,并且使用了GPIO_Setbits(0),这里我没看懂为什么要多加这一句,按理来说这个函数应该只有在输出的时候才会配置。

第二步:定时器的初始化

TIM_BaseInit()函数,这里的时钟分割设置为TIM_CKD_DIV1即TDTS = Tck_tim,即时器时钟频率 (CK_INT)与数字滤波器 (ETR,TIx)使用的采样频率相等,这里可以随意设置,因为在出现低电平时只会出现一次下降沿,可以不使用滤波器。TIM_CounterMode_Up即向上计数模式,以及接下来的自动重装载值、预分频系数(采用变量在调用时便于更改)。

第三步:定时器通道的配置

配置TIM_ICInit()函数,初始化结构体变量,TIM_Channel即选择通道;TIM_ICFilter=0,即不使用滤波器;TIM_ICPolarity这里设置第一次为下降沿;TIM_ICPrescaler设置为没探测到一个边沿执行一次,TIM_ICSelection_DirectTI通道映射,即输入1映射到通道一。

第四步:配置中断

定时器中断设为定时器3的,并且使能更新中断以及输入捕获中断,最后就是使能定时器。这里的更新中断我认为很有必要解释一下,输入捕获中断应该很好理解,更新中断即当计数器的值等于自动重装载值时就会发生一次,设置这个的目的是为了防止在第一次捕获到下降沿后,到第二次捕获到上升沿中间过了很长时间,以至于计数器发生溢出,这样就不能简单的只将两次CCER寄存器读到的值相减,应该加上中间溢出的时间,那怎样通过硬件来知道是否发生溢出,即更新中断,进入一次更新中断代表计数器的值溢出一次。

第五步:中断服务函数

这里设置了一个8位的变量,第八位标志一次完整捕获,第七位标志是否捕获到低电平,第一位到第6位用来记录计数器溢出的次数;第二个16位变量用来存放输入捕获的值(发生捕获时CCER寄存器的值)。

在这里需要先说明两个函数,TIM_GetStatus()用来检测发生的捕获是否为输入捕获,TIM_ClearITPendingBit()用来清除中断标志位,因为定时器发生中断后中断标志位会被硬件置1,需要用软件清0,否则会一直进入中断服务函数。每进入一次中断服务函数就清楚一次中断标志位。只要发生更新中断就会进入中断服务函数,在未发生输入捕获时,STA的第8位为0,且第二个if语句判断出发生的不是输入捕获中断,变量STA的值不会发生改变(STA第8位的值一直为0,),当第一次发生输入捕获时,会执行第二个if语句,且执行里面的else下的语句,在第一次捕获到下降沿后,将变量的值全部清零,并且将计数器的值设为0(即总的计数器计数次数等于溢出的次数乘以自动装载值加上第二次捕获时检测到的val的值),同时设置第7位,标记已经捕获到一次下降沿,随后将输入捕获极性设置为上升沿捕获,等待下一次输入捕获,在这之后,发生上升沿捕获之前,每进入一次中断服务函数,即代表计数器溢出一次,执行第一个if语句,若执行的时更新中断且已经捕获到低电平,若变量STA的值已经达到最大即时间太长,这里强制给变量val赋最大值,且标志已经捕获到一次完整的下降沿,否则的话STA的值加1。直到捕获到一次高电平时,进入第二个if语句的if语句里面,相应的标志位置1,获取此时CCER寄存器的值,并反转输入捕获极性。

最后:主函数计算

这里只需要不断的获取STA的第8位是否为1,当第8位为1时,将获取的次数乘以65536(自己配置的定时器的自动重装载值),最后加上获取的val的值,因为我这里设置的预分频系数为72,即每计数一次经过1us,在获取到本次低电平的时间后,将变量STA的值设置为0,等待下一次捕获完成。

这就是我对霍尔编码器实验的全部理解,若文中有不正确的地方或者不严谨的地方,还望指正。

stm32霍尔编码器测速(标准库函数版)相关推荐

  1. STM32单片机—编码器测速

    一.实验工具:STM32开发板一块.L298N电机驱动.直流电机 以及用到的软件(STM32CubeMX.keil4) 二.编码器原理 1.概述:编码器是一种将角位移或者角速度转换成一串电数字脉冲的旋 ...

  2. STM32正交编码器测速

    一.正交编码解码原理 参考链接:https://blog.csdn.net/as480133937/article/details/98750922 二.解码思路 (1)方法一:使用定时器的输入捕获功 ...

  3. STM32 HAL库实现编码器测速

    STM32 HAL库实现编码器测速 (还开了串口1用来调试,下文没写:然后那个short的用法就是看平衡小车之家(就是喵呜实验室的文档里头的,用法确实惊艳),文末贴了工程) 编码器接口模式 TI1和T ...

  4. 【一文读懂】如何用编码器测速

    文章目录 前言 一.AB相编码器计数原理 四倍频 二.要用到的一些参数 编码器参数 电机参数 轮子参数 计算 三.代码如下(更契合原理的代码) 四倍频的代码(更新) 前言 详解编码器测速原理及实现 参 ...

  5. 传统型编码器测速方案

    传统型编码器测速方案 编码器,经常被用来测量速度或者显示电机位置,大致分为绝对值式编码器和增量式编码器,顾名思义,相对应的是产生增量或者绝对信号.增量信号不表示特定位置,只表示位置已经更改:绝对信号是 ...

  6. Stm32-使用TB6612驱动电机及编码器测速

    这里写目录标题 起因 一.电机及编码器的参数 二.硬件 三.接线 四.驱动电机 1.TB6612电机驱动 2.定时器的PWM模式驱动电机 五.编码器测速 1.定时器的编码器接口模式 2.定时器编码器模 ...

  7. STM32F103C6T6A USB虚拟串口调测 cubeIDE HAL库函数版一篇就够了

    STM32F103C6T6A  USB虚拟串口调测 cubeIDE HAL库函数版 原先手上有一块STM32F103RTC6测试版,但怎么弄不不出现usb设备(正常插上usb口pc应该会识别一个unk ...

  8. 单片机c语言计数器测速,基于51单片机的光电编码器测速.doc

    课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器.在位置控制系统中,由于电机既可能正转,也可能反转,所 ...

  9. 一种基于STM32F1 MCU的增量型编码器测速的方法

    遇到的问题 1. 编码器信号,用来计量长度,如果需要同时测量当前实时速度,在不增加接口的情况下,实现较为准确实时的测速 2. 简单的M法速度,对于低速信号,测量精度较差,实时性也不高. 测速方法 之前 ...

最新文章

  1. 置换 ---- 2020-2021 ICPC NERC 的 K. King‘s Task[置换类型思维题]
  2. centos7 tomcat9
  3. Zoom Capability
  4. 从Chrome中的css自定义样式按钮中删除蓝色边框
  5. 【深度学习】卷积神经网络实现图像多分类的探索
  6. 深入了解gradle和maven的区别
  7. 一手指天,一手指地,开!
  8. React开发(235):document.body.clientHeight
  9. 【Python笔记】网络爬虫——常用框架介绍以及 Scrapy 框架使用
  10. 海外同行首次大规模声援996.ICU,微软和GitHub员工签署联名信,一夜4700星
  11. Linux Netcat command – The swiss army knife of net
  12. 应用程序热补丁(一):如何用几行代码打造应用程序热补丁
  13. 泛微oa服务器文件,泛微oa云服务器要求
  14. Android自定义控件学习
  15. windows7计算机不显示光驱,win7系统检测不到光驱的解决方法
  16. 我的物联网大学【第二章】:Luat的出世
  17. 通俗理解torch.distributed.barrier()工作原理
  18. 详谈为什么互联网公司禁用外键约束
  19. win10如何批量修改文件名【系统天地】
  20. 华为交换机的配置大全

热门文章

  1. 关于小米智能家庭套装的十个小常识,你能答出几个?
  2. priority_queue优先队列的使用方法
  3. error LNK2005: _DllMain已经在dllmain.obj 中定义
  4. Tcp的三次握手和四次挥手过程
  5. 小球反弹(一小球从100米自由下落)
  6. 批量插入数据SQL写法,批量处理数据
  7. 如何查看oracle数据库用户最大连接数,查看跟设置oracle数据库的最大连接数
  8. TinoyOs和nesC语言
  9. A NEW COEFFICIENT OF CORRELATION文献阅读
  10. 【Web前端HTML5CSS3】15-表格