编码器测速原理与实现

这篇具有很好参考价值的文章主要介绍了编码器测速原理与实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、测速原理

通常情况下编码器旋转一周会输出固定的脉冲数,即编码器的分辨率,通过测量固定时间T内编码器输出的脉冲数即可求得电机的转速。
假设编码器的分辨率为P,T时间内测得脉冲数m个,则单倍频(编码器转动一圈输出的脉冲数与分辨率相同)情况下电机转速为:
编码器测速原理,STM32,编码器测速,单片机,stm32
(其中m/p为编码器转过的圈数,再除以时间即为转速)
编码器AB相输出两列相位差为90°的方波,当A相超前于B相90°时为正转,相反,B相超前于A相90°时为反转
编码器测速原理,STM32,编码器测速,单片机,stm32

为了提高采样精度,利用软件实现四倍频,即将编码器的分辨率提高4倍。原理图如上,一个小周期内AB两相分别各有一个上升沿和下降沿,只需要在AB两相的每个上升沿、下降沿进行采集,这样就实现了四倍频技术,即如果编码器分辨率为p,则现在编码器转动一圈就可以采集到4p个脉冲

二、CubeMX配置编码器模式

stm32的部分定时器有编码器模式,可以直接利用该功能采集编码器脉冲数
编码器测速原理,STM32,编码器测速,单片机,stm32
先配置串口,方便后期打印采集的数据

编码器测速原理,STM32,编码器测速,单片机,stm32
我这里采用定时器4做测速,选择编码器模式,Encoder Mode选择Encoder Mode T1 and T2,这个模式下将在AB相的上升沿和下降沿进行脉冲技术,即四倍频

编码器测速原理,STM32,编码器测速,单片机,stm32
配置一定时器用于定时读取和清空脉冲数,此处设置每500ms读取一次

编码器测速原理,STM32,编码器测速,单片机,stm32打开定时器全局中断

编码器测速原理,STM32,编码器测速,单片机,stm32
配置时钟

编码器测速原理,STM32,编码器测速,单片机,stm32
编码器测速原理,STM32,编码器测速,单片机,stm32
编码器测速原理,STM32,编码器测速,单片机,stm32

打开创建好的工程,在主函数中启动编码器脉冲采集和定时器中断
编码器测速原理,STM32,编码器测速,单片机,stm32
编码器测速原理,STM32,编码器测速,单片机,stm32
重定向
编码器测速原理,STM32,编码器测速,单片机,stm32
定时器中断服务函数中读取采集到的脉冲数,TIM2的计数值为0-65535,采用short int类型对其强制类型转换,若TIM2计数器值为0 ~ 32767,则强制转化后的值仍为0 ~ 32767,电机正转;
若TIM2计数器值为32768 ~ 65535,则强制转化后的值仍为-32768 ~ -1,电机反转;使用一阶滤波减小误差,每次采集的脉冲数保存至new_capturenumber,编码器转动一圈输出4096个脉冲,则new_capturenumber/4096为编码器转动的圈数,最后除以采集时间500ms就得到了电机转速(r/s)

三、利用外部中断采集脉冲

有些单片机没有编码器功能,如esp32,我们可以利用外部中断对编码器输出脉冲进行计数
编码器测速原理,STM32,编码器测速,单片机,stm32编码器测速原理,STM32,编码器测速,单片机,stm32
设置PE11 PE14的外部中断,上升沿、下降沿均触发

编码器测速原理,STM32,编码器测速,单片机,stm32
打开全局中断

编码器测速原理,STM32,编码器测速,单片机,stm32
配置一定时器每500ms读取一次脉冲值

编码器测速原理,STM32,编码器测速,单片机,stm32
打开定时器全局中断

编码器测速原理,STM32,编码器测速,单片机,stm32
编码器正反转时,脉冲波形如上图所示,我们可以先定义pulse_num来对脉冲进行计数
当A相下降沿时,若B相为低电平则为反转,pulse_num减一,若B相为高电平则为正转,pulse_num加一
当A相上升沿时,若B相为低电平则为正转,pulse_num加一,若B相为高电平则为反转,pulse_num减一
当B相下降沿时,若A相为低电平则为正转,pulse_num加一,若A相为高电平则为反转,pulse_num减一
当B相上升沿时,若A相为低电平则为反转,pulse_num减一,若A相为高电平则为正转,pulse_num加一
即:

/* USER CODE BEGIN 2 */
int pulse_num=0;
/* USER CODE BEGIN 2 */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
//PE11 - A相发生中断
 if(GPIO_Pin==GPIO_PIN_11){
  //A相下降沿
  if(HAL_GPIO_ReadPin(GPIOE,A_phase_Pin)==0)
  {
    if(HAL_GPIO_ReadPin(GPIOE,B_phase_Pin)==0)
      pulse_num--;
    else
      pulse_num++;
  }
  //A相上升沿
  else
  {
    if(HAL_GPIO_ReadPin(GPIOE,B_phase_Pin)==0)
      pulse_num++;
    else
      pulse_num--;
  }
}


//PE14 - B相发生中断
else if(GPIO_Pin==GPIO_PIN_14){
  //B相下降沿
  if(HAL_GPIO_ReadPin(GPIOE,B_phase_Pin)==0)
  {
    if(HAL_GPIO_ReadPin(GPIOE,A_phase_Pin)==0)
      pulse_num++;
    else
      pulse_num--;
  }
  //B相上升沿
  else
  {
    if(HAL_GPIO_ReadPin(GPIOE,A_phase_Pin)==0)
      pulse_num--;
    else
      pulse_num++;
  }
		
}
}

编码器测速原理,STM32,编码器测速,单片机,stm32
最后在定时器中断函数中对采集到的脉冲个数处理,注意需要手动清空pulse_num文章来源地址https://www.toymoban.com/news/detail-582400.html

到了这里,关于编码器测速原理与实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32编码器电机测速(hal库)

    记录一下今天参考别人的代码实现了四个电机的测速。   编码器被广泛应用于电机测速,实现电机闭环控制 。所以不论是自己做小车还是后续参加各种比赛,必须要学会编码器测速。         编码电机其实就是一个带有编码器的电机,我的这个电机是一个带霍尔传感器的

    2024年02月13日
    浏览(41)
  • STM32之增量式编码器电机测速

    编码器,是一种用来测量机械旋转或位移的传感器。它能够测量机械部件在旋转或直线运动时的位移位置或速度等信息,并将其转换成一系列电信号。 . 按监测原理分类 光电编码器 光电编码器,是一种通过光电转换将输出轴上的机械几何位移量转换成脉冲或数字量的传感器

    2024年02月13日
    浏览(27)
  • STM32-微项目07-旋转编码器计数及测速

    一、微项目实现目标: 检测旋转编码器模式下,检测旋转编码器的转动计数值及转速。并且区分转向,一侧转动增加cout,转速值为正,一侧转动减少count,转速值为负;   二、微项目硬件配置需求: 1,stm32F103C8T6核心板一块 2,0.96寸OLED显示,用于显示计数 3,旋转编码器,

    2024年02月08日
    浏览(27)
  • Stm32-使用TB6612驱动电机及编码器测速

    最近在 学习编码电机以及尝试使用编码电机测速 。遇到了很多问题,花费了很多时间,在这里做一个记录,对自己学习到的知识进行一个总结 找了很多资料,看了很多视频,这些太多了,以至于让我不知道究竟哪一个是正确的,今天看这个,明天看这个,导致自己的学习效

    2023年04月16日
    浏览(55)
  • 【STM32】【HAL库】定时器编码器模式测速

    目录 概述 HAL设置  定时器的编码器模式 定时器设置  常用函数 代码 电机AB相增量型编码器的介绍和解码方法在这里介绍过了 电机编码器 https://blog.csdn.net/m0_57585228/article/details/125791283 测速可以使用外部中断进行脉冲计数 很多型号的单片机中有专门的电路来计算脉冲的速度和

    2023年04月18日
    浏览(48)
  • 编码器测速原理与实现

    通常情况下编码器旋转一周会输出固定的脉冲数,即编码器的分辨率,通过测量固定时间T内编码器输出的脉冲数即可求得电机的转速。 假设编码器的分辨率为P,T时间内测得脉冲数m个,则单倍频(编码器转动一圈输出的脉冲数与分辨率相同)情况下电机转速为: (其中m/p为

    2024年02月17日
    浏览(41)
  • STM32定时器捕获编码器模式测速和方向测不准问题

    ** 问题概述 关于STM32编码器模式电机测速的资料网上一抓一大把,却发现真的拿过来用还是有问题的,比如刚刚做了个东西,是个个头比较大的麦克纳姆轮车,控制运动就需要精确的测量转速和方向,我用的是直流有刷、减速比90、11线霍尔编码器的减速电机。 原本想着用个

    2024年02月15日
    浏览(36)
  • 【单片机】STM32单片机读取旋转编码器,TIM定时器编码器模式捕获,程序

    旋转编码器简单来说,就是会输出2个PWM,依据相位可以知道旋转方向,依据脉冲个数可以知道旋转的角度。一般旋转一圈有一个固定数值的脉冲个数。 旋转编码器广泛用于电机、或者角度传感器,STM32的定时器可以直接接入这两个波形获取到信息。 前两个引脚(接地和Vcc)

    2024年02月13日
    浏览(35)
  • matlab读取pwm波数据,不用timer的方法,这里可以参考。Matlab/Simulink之STM32开发-编码器测速

    这里提供了一个不用timer的方法,可以参考: https://blog.csdn.net/weixin_36967309/article/details/88699830 Matlab/Simulink之STM32开发-编码器测速

    2024年01月18日
    浏览(44)
  • 【程序】【必须】编码器电机测速,原理+代码+滤波

    参考资料: https://blog.csdn.net/lzzzzzzm/article/details/119416134 野火STM32电机开发教程 常见的编码器有两种,分别为霍尔编码器和GMR编码器。 1.1 霍尔编码器 ​ 霍尔编码器圆盘上分布有磁极,当圆盘随电机主轴转动时,会输出两路相位差90°的方波,用这两路方波可测出电机的转速和

    2023年04月23日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包