STM32(HAL库)——光电编码器、M/T法测量电机转速

这篇具有很好参考价值的文章主要介绍了STM32(HAL库)——光电编码器、M/T法测量电机转速。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一 编码器

二 电机测试的三种方法

三 STM32CubeMx配置

四 程序编写

五 实验结果

一 编码器

常见的用于电机测速的编码器有霍尔编码器和光电编码器两种。两者测速的基本原理不同,但都是输出两路相位差90°的脉冲信号。这里以光电编码器为例介绍一下测速原理。

STM32(HAL库)——光电编码器、M/T法测量电机转速

光电编码器是由光源、光码盘和光敏元件组成。 光栅盘是在一定直径的圆板上等分地开通若干个长方形孔。由于光电码盘与电动机同轴,电动机旋转时,光栅盘与电动机同速旋转,经发光二极管等电子元件组成的检测装置检测输出若干脉冲信号,通过计算每秒光电编码器输出脉冲的个数就能反映当前电动机的转速。

输出波形:

STM32(HAL库)——光电编码器、M/T法测量电机转速

  • 方向:A、B相脉冲波形相差90°,A相位在前表示顺时针旋转,B相在前表示逆时针旋转。
  • 计数:在STM32编码器模式(EncoderMode)中,A相和B相每产生一个上升沿或者下降沿,我们就让计数器加1。故产生一个脉冲时,计数值为4(A相1个上升沿和1个下降沿,B相1个上升沿和1个下降沿)

二 电机测试的三种方法

  • M法:在规定时间内检测脉冲个数来获得被测速度,适合测量高速速度。
  • T法:测量相邻两个脉冲间的时间,再来反算速度,适合测量低速速。
  • M/T法:同时测量检测时间和在此时间内脉冲发生器发出的脉冲个数来测量速度。

相关方法的具体实现可以看这篇博客文章:M法、T法以及M/T法测速原理概述 - 知乎 (zhihu.com)

下面例程使用M法测量电机的转速。

具体的实现方法是:定时器2定时时间设置为10ms,定时器3开启输入捕获通道。定时器定时时间到了后,获取当前的脉冲计数值,这样便可计算出当前的电机转速。然后将计数值清0,方便下一次计数。

三 STM32CubeMx配置

STM32(HAL库)——光电编码器、M/T法测量电机转速

------

STM32(HAL库)——光电编码器、M/T法测量电机转速

设置定时器2,定时时间10ms,并开启定时器中断

这里补充一下定时器计数时间的计算公式:Tout=(arr+1)*(psc+1)/Tclk,本例程中APB1外设时钟频率为72MHZ,故Tclk=1/72000000 所以Tout=(200*3600)/72us =10ms

STM32(HAL库)——光电编码器、M/T法测量电机转速

开启定时器3,并且配置为编码器模式。

四 程序编写

  /* USER CODE BEGIN 2 */
HAL_TIM_Base_Start_IT(&htim2);
HAL_TIM_Encoder_Start(&htim3,TIM_CHANNEL_1 | TIM_CHANNEL_2);
  /* USER CODE END 2 */

在mian()函数中开启定时器中断和编码器计数模式

/* USER CODE BEGIN 4 */
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
    if(htim==&htim2)
    {
        uint32_t CaptureNumber;   
        int Direction;
        Direction=__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim3);
        CaptureNumber =    __HAL_TIM_GET_COUNTER(&htim3);
        if(Direction)  //如果向下计数,真实的脉冲计数值=65535-CaptureNumber
            CaptureNumber=65535-CaptureNumber;
        Speed_Motor=CaptureNumber*60/0.01/4/13/30;
        // 脉冲数量/4倍频/单圈脉冲数/减速比例/定时时间(s)×60    单位 r/min        
        __HAL_TIM_GET_COUNTER(&htim3) = 0;//计数值清0;
     }
}
/* USER CODE END 4 */

在定时器中断回调函数中计算电机的转速;这里需要注意一点,如果向下计数,真实的脉冲计数值=65535-CaptureNumber。具体可参考文章:STM32(HAL)--使用定时器TIM的Encoder Mode来读取旋钮编码器的脉冲数_Joseph Wen的博客-CSDN博客

电机转速=脉冲数量/4倍频/单圈脉冲数/减速比例/定时时间(s)×60 单位 r/min,我这里选用的电机编码器,电机旋转一圈,产生13个脉冲,电机的减速比是30。

五 实验结果

STM32(HAL库)——光电编码器、M/T法测量电机转速

STM32(HAL库)——光电编码器、M/T法测量电机转速

进入Debug模式中,将变量Speed_Motor添加到watch窗口,可以看到电机的转速为每分钟65转。

______

______

源码github仓库地址:GitHub - HaoJosephWen/Code-of-blog文章来源地址https://www.toymoban.com/news/detail-469542.html

到了这里,关于STM32(HAL库)——光电编码器、M/T法测量电机转速的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • stm32霍尔编码器电机测速原理

            本次选用的编码器电机为13线的霍尔编码器电机,电机减速比为30:1,转动一圈输出13*30=390个脉冲。轮胎直径为75mm,轮胎周长为pi*d=3*75=225mm.定时器采用四倍频计数,则一圈输出390*4=1560个脉冲。具体编码器知识这里就不多说了。          根据测速原理:假设编

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

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

    2024年02月13日
    浏览(31)
  • SimpleFOC移植STM32(九)—— ABZ编码器电机

      SimpleFOC、ODrive和VESC 教程链接汇总:请点击     在SimpleFOC代码中,ABZ信号和霍尔电机信号处理方式很像,都是信号边沿触发中断,在中断中获取状态计算角度。 本次移植驱动板103和官方代码保持一致。 驱动板405采用的是定时器计数脉冲,处理方式不同。   ABZ或者ABI,叫

    2023年04月11日
    浏览(83)
  • stm32 HAL库 4096线ABZ编码器

    @[TOC]目录 买的是这个 AB相代表计数方向,Z代表过零点 也可以选上DMA 中断 找一个空闲管脚 打开对应中断 用DMA 过机械零点就+/-360

    2024年04月17日
    浏览(70)
  • STM32 HAL库 AS5600编码器程序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 STM32 HAL库 AS5600编码器程序 提示:这里可以添加本文要记录的大概内容: AS5600磁性旋转位置编码器是一款可编程、12位高分辨率、非接触式的设备,具有卓越的可靠性和耐久性。这个旋转位置传感器提供

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

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

    2023年04月16日
    浏览(61)
  • PLC实验—西门子S7 1200读取旋转编码器数据并计算电机转速

    注意PTO控制步进电机实验博途软件需要V14版本,不然没有PTO功能块 软件的下载请点击下方百度网盘的链接 链接:https://pan.baidu.com/s/11mQFVnaQxrUy4W9nGIk8Jw 提取码:6lva 详细的操作指导视频已经放到了B站上 Simens S7-1200读取增量式编码器数据 Simens S7-1200根据编码器数据计算电机转速

    2024年02月05日
    浏览(47)
  • 【STM32】HAL库自学记录-旋转编码器的使用

    通过本文可学会两种实现判断旋转编码器正转反转的方法,可根据自己的应用场景来选择使用哪种方法。 1、芯片:STM32F103RCT6 2、STM32CubeMx软件 3、IDE: MDK-Keil软件 4、旋转编码器模块 5、XCOM V1.4串口软件 图中C端为GND。 方向 :A相和B相相差一个相位,一般来说是90°。A相信号在

    2024年02月11日
    浏览(42)
  • 【STM32】【HAL库】定时器编码器模式测速

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

    2023年04月18日
    浏览(49)
  • (STM32)PWM输出控制电机旋转并且使用编码器读取脉冲数

    目录  前言 一、pwm输出让电机转  1.电机的接线说明 2.驱动的接线说明 3.pwm输出代码  pwm.c pwm.h 4.输出pwm控制电机旋转 二、配置定时器编码器模式 1.定时器编码器模式 编码器原理 编码器相关的概念 2.编码器模式——代码部分 3.获取脉冲数 三、定时读取编码器读取的脉冲数

    2024年02月03日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包