我用的F103zet6的板子。

首先知道你的编码器

1.减速比,我的是1:120

2.编码器的      线数=脉冲=分辨率  大约可以等于哈哈哈。我的是11线的。

那么就可以求得我们的电机转一圈需要多少个脉冲,11*120=1320个。

我之前有一段时间不知道自己的减速比和线数,其实是有方法的就是不太准,就是在编码器模式下用串口调试助手看看大约电机转一圈,数值的变化,建议还是不要这样弄,因为不准。

( ̄▽ ̄)话不多说上图上操作:

                                                                串口打开

TIM1来控制电机 打开两个通道

T IM4         1秒触发一次中断

TIM3  开启编码器模式

打开这个(不知道叫什么)

打开这个(只知道叫晶振也不知道干啥的)

最最最最重要的优先级TIM3设为1   TIM4设为0  后面再说

时钟树

我们再来接线

M+,M-  是电机线,A,B线是连在编码器模式的引脚上 我的是pa6,pa7.剩下俩连到板子相应的引脚上就行。如果你不会连电机线,那就看他https://www.bilibili.com/video/BV1Xt411372X?spm_id_from=333.337.search-card.all.click&vd_source=6f1f0eada9bd8f336a8298b4db2ffd5b

好了上程序   o-o

让串口助手可以用

该打开的都打开,   注意最后一行我将定时器三的值设置为30000(跟别人学的)

主函数就一句话

完整的定时器回调函数

等你敲完以上代码就可以看到效果了(那个**的值实际上是ocount的值)

为啥出现第一行的问题我也不知道。。。。。。。。可能是复位的原因吧

现在我讲讲写定时器三和定时器四回调函数的原因:先看定时器四它的作用是1秒触发一次中断同时对得到的编码器的脉冲值进行计算

dir得到电机正转还是反转,count的到编码器值。

rdata和 ldata分别计算正反转获得的值   这里的 /4就是当时T1T1的四倍频,而rflag和lflag的值就要看定时器三了他的意思是编码器定时器走完一个周期(即我设定的0-65535)计数就加一,你可能会问你当时不是把定时器三的值设置成了30000吗加到65535不是没走完一个周期吗,但是你想第一次从30000加到65535虽然没走完一个周期但是你可以把flag看成一个新周期的开始而不是旧周期的结束。这样就想通了。

rcir和lcir分别是正反转的圈数  ocount是上一次count的值。lspeed和rspeed就是正反转的速度啦。你可能会问为啥计算速度是会有一个if判断count和ocount这是因为无论是定时器的数值加(0加到65535)还是数值减(65535到0)都会有一个突变的过程(正方向65535到0,反方向0到65535)这个情况时需要注意的如果我不加这个判断那就会出现以下情况

可以看到这里面有一个速度值突变了。就是这个原因。

还有一个问题就是我求ldata时候为啥我的lflag-1呢了原因是我给单片机通电时它的count默认是0的这时候它的lflag自动加了1,所以我不得不减去1     (难受一批)

还有最重要一件事就是中断问题照理来说tim3是编码器的值这个需要不断获取不应该优先级最高吗但是我们注意恰恰因为tim3高的话就困在tim3里出不来了,也就是说此时tim4公式中获取不了tim3中flag的值导致tim4无法计算的问题。所以把tim4设优先级高。

最后从别人哪找了个速度计算公式摆上。当然我的单位时间可不是5ms啊!

其中还有些问题没有解决,代码如果由更好的写法,欢迎大佬的讲解  。抱拳抱拳~~~~~~~

cubemx—编码器测速(其中遇到的问题分析以及部分解决办法)相关推荐

  1. 铁通用户,宽带测速很快,可是上网很慢的解决办法

    最近上网很慢,尤其是想要csdn上写个日志,半天打不开. 可是我是17mb的带宽,用各种测速软件测试也确实是很快的速度.可就是网页打的很慢. 还用说,就是铁通公司慢的dns服务器,跟个什么似得,懒得骂 ...

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

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

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

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

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

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

  5. 51单片机电机测速程序c语言,基于51单片机光电编码器测速.doc

    基于51单片机光电编码器测速 PAGE PAGE 2 课程设计报告 课程名称: 微机原理课程设计 题 目: 基于51单片机的光电编码器测速 摘要 光电编码器是高精度位置控制系统常用的一种位移检测传感器 ...

  6. 直流有刷电机编码器测速基于STM32F302R8+X-NUCLEO-IHM07M1

    文章目录 前言 一.编码器测速原理 二.STM32F302R8+X-NUCLEO-IHM07M1直流电机编码器测速 2.1.功能需求 2.2.硬件设计 2.3.软件设计 2.3.1.底层配置 2.3. ...

  7. smb测速工具_编码器测速例子

    编码器测速例子 各位好,我现在要用 CPU226 通过编码器测电机转速,看了许多手册编的程序总是测不出来, 编码器用的是 A/B 两相的,那位能给发个简单的例子啊, 转自网上的回答, 我也正在学习这个 ...

  8. 旋转编码器测速c语言程序,官方例程中编码器测速程序高低速怎么区分

    如下是官方编码器测速的程序: //**** High Speed Calculation using QEP Position counter ****// // Check unit Time ou ...

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

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

最新文章

  1. MATLAB基本语法 初学者
  2. 不依赖任何系统API,用c语言实现gbk/utf8/unicode编码转换
  3. 设计模式示例_复合设计模式示例
  4. c# 衍生类和基类的构造顺序
  5. 作者:杨婧(1983-),女,博士,中国科学院计算技术研究所工程师。
  6. linux shell java 参数_java调用linux中的shell脚本传递参数并返回执行结果
  7. SpringAOP中的JointPoint和ProceedingJoinPoint使用详解(附带详细示例)
  8. 商务与经济统计 第三章案例
  9. 压力单位PSI,PSIG, PSIA的区别
  10. 无线打印机服务器属性,为什么我的打印机能在打印机
  11. 当地特色旅游系统 计算机毕业设计 微信小程序开发
  12. Android架构分析之硬件抽象层(HAL)
  13. 年终盘点一 | 云原生的 2022 年:降本提效、全面 Serverless 化
  14. 微信小程序截屏保存图片
  15. 微信小程序 轮播图 swiper图片组件
  16. Logic BIST
  17. dubbo解析-Merger接口作用及其实现类介绍
  18. SqlServer-STUFF理解基础知识
  19. 信息时代企业的核心特征-读《硅谷之谜》
  20. nyoj 455-黑色帽子

热门文章

  1. github项目管理和贡献代码
  2. 大数据生态(六)zookeeper集群部署(Linux和Windows[含一键启动脚本])
  3. ROS用python编写订阅者和发布者(使用存放在其他package的自定义msg文件)
  4. 【二维码识别】基于matlab GUI灰度+二值化+校正二维码生成与识别【含Matlab源码 635期】
  5. (转)项目管理经验分享 - 项目经理的核心竞争力
  6. java 设置背景色_背景颜色的设置
  7. HowTo create a basic Maphack
  8. 关于 Outlook 上莫名其妙的未读邮件
  9. 正则匹配替换最后一位字符
  10. 【kali-漏洞利用】(3.4)免杀Payload 生成工具(下):Veil后门使用、监听失败原因