文章目录

  • 一、前言
  • 二、本次实验的编码器
  • 三、编码器与STM32的连接
  • 四、CubeMX的配置
    • 4.1、RCC
    • 4.2、Clock Configuration
    • 4.3、TIM2
    • 4.4、生成代码
  • 五、Keil
    • 5.1、Target
    • 5.2、C/C++
    • 5.3、Debug
  • 六、代码
    • 6.1、main.c
  • 七、DEBUG
    • 7.1、用手让步进电机逆时钟旋转约1圈
    • 7.2、用手让步进电机顺时钟旋转约1圈
  • 八、示波器
  • 九、细节补充
    • 9.1、Encoder Mode

一、前言


STM32工程:

链接:https://pan.baidu.com/s/1o4lovPLwxNpSxf_jlLvCBA
提取码:hf2i

STM32F407,STM32F103,STM32H743的TIM都有编码器的功能。STM32的TIM上的编码器功能真的非常强大,它是纯硬件计算的,意味着MCU不需要参与脉冲数的计算(所以不需要进入中断做累加了),MCU只需要在合适的时间上读一下脉冲总数即可。如果你的闭环控制频率是500Hz的话,那么每2ms就需要读一下脉冲总数。通过STM32CubeMX可以非常便利地使用STM32的编码器功能去读取编码器反馈的脉冲数,在CubeMX生成的代码后,添加一点点代码就能实现该功能了。

有关步进电机与编码器的知识介绍,可以查看广州硬石科技《硬石YS-F4Pro开发板开发手册》从第40章开始。在嵌入式运动控制领域,广州硬石科技算是资料比较多的。

在机器人开发中,我经常使用步进电机。为了能够实现运动的闭环控制,步进电机是一定要增加编码器的。如下图所示:

**虽然这边博文不是介绍编码器的基本知识,但是为了看懂代码的目的。**编码器的关键参数需要了解一下:

1、分辨率

其实就是电机的转轴旋转一周,编码器的A相或B相(就是一个相)输出多少个脉冲信号而已。如下图的编码器所示,电机的转轴旋转一周,编码器的某一个相反馈3600个脉冲。

2、脉冲的电压

脉冲其实就是PWM信号,有1与0两种状态。一定要弄清楚脉冲的1是多少V(最好用示波器确认好!!!),不小心的话会烧掉芯片。STM32芯片基本都是支持3.3V与5V(容忍值,在芯片手册能查到是否支持5V)。

如下这个编码器,当VCC与GND接入5V时,它的脉冲的最高电压就是5V。

3、编码器的相数

一般的工业控制,采用两相(A/B相)的编码器足够。如下图所示,使用A相/B相就好了,细心的同学肯定发现,不是还有一个Z相吗?答案是,是有Z相,但是它的作用是电机的转轴旋转一周后,才反馈一个脉冲。其实就是反馈电机转了多少圈。这个Z相真的没什么用,原因是我通过A/B相也能知道电机旋转的多少圈,而且转了1/360也能测出来。但是Z相的话,只能测试1,2,3,4圈,无法测量0.5圈,0.3圈。

二、本次实验的编码器



分辨率:1000线 (意思是电机的转轴旋转一周,A相反馈1000个脉冲,B相也会反馈1000个脉冲)

脉冲电压:5V (博文最后,有示波器的观察,可以看到电压)

编码器相数:A/B相(Z相是电机转轴旋转一周,才反馈一个脉冲)

三、编码器与STM32的连接


编码器与单片机需要在同一个GND上(不然单片机与编码器怎么沟通呀),接着给编码器输入5V电源。

四、CubeMX的配置


4.1、RCC

4.2、Clock Configuration

4.3、TIM2

选择TIM2的原因是,只有TIM2与TIM5是32位的计数器(-2147483648 ~ 2147483647),其他TIM都是16位的计数器(-32768 ~ 32767)。说白了,当步进电机在旋转时,16位的计数器会频繁溢出,程序里要做好计数器溢出的处理。当使用TIM2与TIM5的32位计数器时,我觉得就可以省去了处理"计数器溢出"的问题了。

博文的后面,会解释为什么选用"Encoder Mode TI1 and TI2"即4倍频模式。

4.4、生成代码


五、Keil


5.1、Target

5.2、C/C++

5.3、Debug

六、代码


6.1、main.c


七、DEBUG


7.1、用手让步进电机逆时钟旋转约1圈

用手拧着电机的转轴逆时钟旋转一周(手动很难做到刚刚好的1圈),encoder_Counter = 4040(Encoder Mode TI1 与 TI2的四倍频模式),编码器是1000线 * 4倍频 = 4000个脉冲。脉冲的方向是:0x01(可以说是CW,也可以说是CCW。这取决于我们项目的定义)

7.2、用手让步进电机顺时钟旋转约1圈

程序复位后,用手拧着电机的转轴顺时钟旋转一周(手动很难做到刚刚好的1圈),encoder_Counter = -4040(Encoder Mode TI1 与 TI2的四倍频模式),编码器是1000线 * 4倍频 = 4000个脉冲。脉冲的方向是:0x00(可以说是CW也可以说是CCW。但是,如果0x01是CW的话,那么CCW肯定就是CCW)

八、示波器


最后,我用示波器观察一下电机的B相。步进电机旋转时,B相究竟会输出怎么样的电平。从GIF图看到,脉冲的高电平电压是5V左右。

九、细节补充


9.1、Encoder Mode


Encoder Mode一共有三种模式:

1、Encoder Mode TI1

2、Encoder Mode TI2

3、Encoder Mode TI1 and TI2

其实,这三种模式是决定定时器计数的方式,如下图所示:

通过时序图来理解Encoder Mode TI1 and TI2为什么能将脉冲数4倍频,也解释了TIM是如何判断脉冲的方向。

STM32F407+CubeMX-使用TIM计算编码器的脉冲总数,并计算脉冲方向相关推荐

  1. 二叉树遍历算法的应用——计算二叉树的深度、计算二叉树的节点总数、计算二叉树的叶子节点数(均采用递归的思想)

    //二叉树遍历算法的应用 //1.计算二叉树的深度 int Depth(BitTree T){if(T==NULL)return 0;//如果是空树,返回0else{m=Depth(T->lch ...

  2. STM32F407+Cubemx学习应用[4]——DMA收发ModbusRS485数据——RS485温度传感器

    STM32F407+Cubemx学习&应用[4]--DMA收发ModbusRS485数据--RS485温度传感器 硬件 串口参数 Cubemx配置工程 Keil中代码 测试 本<STM3 ...

  3. 电机控制基础——定时器编码器模式使用与转速计算

    上篇电机控制基础--定时器捕获单输入脉冲原理介绍了定时器捕获输入脉冲的原理,那种方式是根据捕获的原理,手动切换上升沿与下降沿捕获,计算脉冲宽度的过程原理比较清晰,但编程操作起来比较麻烦. 对于电机测速 ...

  4. STM32F407 CUBEMX RT-Thread USB虚拟串口(VCP)

    STM32F407 CUBEMX RT-Thread USB虚拟串口(VCP) 记录一下STM32平台下使用RT-Thread使用VCP 首先确定HAL_Drivers下是否有RT-Thread提供的 ...

  5. 计算编码器零点电角度偏移量

    编码器零点电角度偏移量 同步电机的控制,转子的位置是必要的反馈.电机的磁极的换向,控制的是电角度. 编码器的安装和电角度,存在误差. 机械角度的反馈,在多极对数时,需要做一个电角度的转换,进入控制的转 ...

  6. 伺服电机脉冲控制的多种方式(AB相脉冲,方向脉冲,CW/CCW脉冲)

    脉冲信号可以分为AB相脉冲,脉冲+方向,CW/CCW脉冲. 这三种信号格式,在十几年前或者还有明显的相对优缺点和适用场合,现在就已经无所谓了,即使在使用上还是有所区分,也基本上是由于历史习惯. 1.A ...

  7. 第一章 计算思维与一种表述计算思维的框架------计算之树

    第一章 计算思维与一种表述计算思维的框架------计算之树 1.硬件 vs. 软件 2.计算思维 3.计算之树--计算思维的一种多维度观察框架 3.1计算之树的树根(技术或思想) 3.2计算之树的树 ...

  8. R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关系数、拟合回归模型使用两个回归模型的残差计算偏相关性系数

    R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关系数.拟合回归模型使用两个回归模型的残差计算偏相关性系数 目录

  9. R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关或者部分相关性系数并用建设检验检验相关性的显著性

    R语言偏相关或者部分相关性系数计算实战:使用psych包计算(Partial Correlation)偏相关或者部分相关性系数并用建设检验检验相关性的显著性 目录

最新文章

  1. .NET 开源项目 StreamJsonRpc 介绍[中篇]
  2. 漫谈边缘计算(二):各怀心事的玩家
  3. html id怎么设置密码,苹果手机怎么设置id账号和密码或重设密码
  4. 35 岁以下科技创新 35 人之一,这位博士解开美团 AI 的冰山一角!
  5. icmp协议_计算机网络基础(七)网络层ICMP协议
  6. 「leetcode」110.平衡二叉树(详解)
  7. 成功解决:Could not initialize SDL - No available video device (Did you set the DISPLAY variable?)
  8. Java URI和URL
  9. 使用Rider和Emmylua进行UnLua配置
  10. 微信小程序会议管理+后台管理系统
  11. iphone强制旋转屏幕_锁定iPhone屏幕旋转
  12. UserWarning: Usage of dash-separated ‘script-dir‘ will not be supported in future versions. 笔记
  13. 怎么连接vm的远程服务器,vm虚拟机连接远程服务器(vm虚拟机搭建服务器)
  14. Kotlin 苦海无涯(一)
  15. office中计算机剪贴画,Office 2010的剪贴画
  16. 监控dns流量有哪些方法?
  17. python画圣诞树代码解读_python画,圣诞树,花,爱,Python,绘图,爱心,Turtle,篇
  18. 简单爬虫+ 线程+SQL+网页
  19. 计算机知识学习,网站推荐.
  20. ios11适配 以及会有的坑

热门文章

  1. 关于protege的dot error的问题
  2. Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种...
  3. linux下svn常用指令(转)
  4. 如何从需求文档中辨认客户(一)
  5. 突破技术界限,FVS大屏编辑模式,真正让大屏做到所见即所得
  6. 企业自助分析难以推动?我用这套四步走方案解决了这个难题
  7. 今天的捉蝴蝶真有趣的 格式工厂
  8. 相信冬天已来FreeEIM
  9. 《飞鸽传书》把写程序和文学创作相提并论
  10. 中国人写的编译器-值得看看