野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 17198|回复: 41

【STM32驱动正交编码器】是时候分享一波编码器代码了

[复制链接]
发表于 2016-6-14 13:58:19 | 显示全部楼层 |阅读模式
来来来,是时候分享一波编码器代码了

我不得不说我其实是经常混原子论坛的,但是手里的开发板却是野火的这波套路怎么样

废话不多说了哦,分享的是增量编码器的代码哈,之前有借鉴过别人的代码,根据自己的理解和需要做了更改,结果还是不错了,现在单把编码器的模块抽离出来分享下,在别的论坛我也有分享。

编码器的原理我就不多废话了,到处都能搜到,还有一种是音响编码器,那个东西我稍稍提一下吧,就是尽量不要直接接入单片机哈,那玩可不是数字量的东西,只是纯粹的机械开关而已,直接接入的话

是需要考虑消抖的,只靠软件消抖的话可能会有些影响(只是个人认为的,也是我水平有限),我一般+个整形的电路,很简单的三极管电容电阻一组合就OK了,效果一点不比正统的光电增量编码器差。

代码有两种,一个是用定时器的编码器模式,另一个用的是外部中断,其实用什么办法都可以,只要能认到信号不跑偏就好,个人不推荐用外部中断的方式,原因我想大家应该知道的,当然大家还是按自己喜好而定吧




STM32正交编码器.rar

300.51 KB, 下载次数: 2910

编码器模式

STM32正交编码器_外部中断.rar

302.02 KB, 下载次数: 1699

外部中断

本帖被以下淘专辑推荐:

回复

使用道具 举报

发表于 2016-6-14 14:42:21 | 显示全部楼层
cool,谢谢分享
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-14 15:03:00 | 显示全部楼层
fire 发表于 2016-6-14 14:42
cool,谢谢分享

3Q  火哥
回复 支持 反对

使用道具 举报

发表于 2016-6-14 15:06:51 | 显示全部楼层

客服反馈经常有人问正交编码的程序,以后要是再问到我就发这个帖子给他们
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-14 15:11:08 | 显示全部楼层
fire 发表于 2016-6-14 15:06
客服反馈经常有人问正交编码的程序,以后要是再问到我就发这个帖子给他们

其实我在刚接触单片机的时候也有这个问题,原因就是当初还年轻,哈哈,时序的概念感很差,然后就搁置一边了,经过了一段时间后再回头看正交编码器鉴相的问题确实是好简单,当初因为会的东西少,所以解决问题的思路有局限性,估计现在刚接触这个的都是遇到这类问题了
回复 支持 反对

使用道具 举报

发表于 2016-6-14 15:12:49 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-6-14 15:11
其实我在刚接触单片机的时候也有这个问题,原因就是当初还年轻,哈哈,时序的概念感很差,然后就搁置 ...

其实我也不会
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-14 15:24:56 | 显示全部楼层

如果你不会的话,只能说是你没有用到这个东西,没接触而已,像你这种大神级水准的人,看一遍那思路就像闪光灯似的,唰唰唰 都是灵感
回复 支持 反对

使用道具 举报

发表于 2016-6-14 15:39:17 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-6-14 15:24
如果你不会的话,只能说是你没有用到这个东西,没接触而已,像你这种大神级水准的人,看一遍那思路就像闪 ...

也不能这样说啊
回复 支持 反对

使用道具 举报

发表于 2016-6-14 19:11:49 | 显示全部楼层
下载学习
回复

使用道具 举报

发表于 2016-7-24 21:44:35 | 显示全部楼层
#楼主     请问楼主,是不是你的第一个程序只能测电机转动的方向啊?   串口只输出0,1,0,1,测速还要定时器捕捉对吗?
回复 支持 反对

使用道具 举报

发表于 2016-7-24 21:44:55 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-6-14 15:24
如果你不会的话,只能说是你没有用到这个东西,没接触而已,像你这种大神级水准的人,看一遍那思路就像闪 ...

#楼主     请问楼主,是不是你的第一个程序只能测电机转动的方向啊?   串口只输出0,1,0,1,测速还要定时器捕捉对吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-25 09:23:06 | 显示全部楼层
kobe_515 发表于 2016-7-24 21:44
#楼主     请问楼主,是不是你的第一个程序只能测电机转动的方向啊?   串口只输出0,1,0,1,测速还要 ...

我所有分享的东西都是功能模块,你们自己要按自己的需求进行扩展,我的代码接上所有电路后转动编码器你从串口打印信息可以看到当前已经转过多少数值,你提取到这些数值后不就可以想干什么就干什么了么
回复 支持 反对

使用道具 举报

发表于 2016-7-25 10:52:44 | 显示全部楼层
可是我用您的代码,编码器AB相分别街上PB6,7,然后串口只打印出0,1,0,1,这应该是不对的吧?   
我用的是平衡小车之家的那个AB相的霍尔增量式编码器,减速比20:1的,不知道我哪里出问题了?
QQ图片20160725105225.png
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-25 12:49:27 | 显示全部楼层
kobe_515 发表于 2016-7-25 10:52
可是我用您的代码,编码器AB相分别街上PB6,7,然后串口只打印出0,1,0,1,这应该是不对的吧?   
我用的 ...

你把你用的那种编码器的样子也传上来看看,仔细看下数据脚是否需要上拉~~
回复 支持 反对

使用道具 举报

发表于 2016-7-25 14:51:38 | 显示全部楼层
请问下 stm32f103只有tim4能计编码器脉冲吗 为什么我试了其他定时器都不行了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-7-25 15:44:42 | 显示全部楼层
jishixuan55 发表于 2016-7-25 14:51
请问下 stm32f103只有tim4能计编码器脉冲吗 为什么我试了其他定时器都不行了

看手册,只要有对应硬件的都可以
回复 支持 反对

使用道具 举报

发表于 2016-7-25 16:56:45 | 显示全部楼层
原来两个最小系统的独立电源要共地,谢谢楼主大神帮忙指导了一下,解决问题了,程序是好的
回复 支持 反对

使用道具 举报

发表于 2016-8-8 17:16:10 | 显示全部楼层
请教楼主,直接读取CNT的值,计数器计数溢出怎么办?应该开溢出中断吧。虽然你的程序中没有溢出。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-9 09:10:29 | 显示全部楼层
李小龙 发表于 2016-8-8 17:16
请教楼主,直接读取CNT的值,计数器计数溢出怎么办?应该开溢出中断吧。虽然你的程序中没有溢出。

如果要读取数值那么大的话肯定是要额外加东西了,中断是个办法~
回复 支持 反对

使用道具 举报

发表于 2016-8-9 16:54:52 | 显示全部楼层
AB相可以分别计数吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-9 19:45:36 | 显示全部楼层
暴躁的小黄瓜 发表于 2016-8-9 16:54
AB相可以分别计数吗?

不可以,那样不准确,而且那么弄没什么意义,AB本来是一个整体
回复 支持 反对

使用道具 举报

发表于 2016-8-10 09:36:11 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-8-9 19:45
不可以,那样不准确,而且那么弄没什么意义,AB本来是一个整体

那如何变向
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-10 09:50:37 | 显示全部楼层

变向还是辨向?AB有90度相位差的,比如A高电平时判断B状态,B为高设为正转,B为低设为反转 就行了
回复 支持 反对

使用道具 举报

发表于 2016-8-10 09:57:46 | 显示全部楼层

如果芯片没有编码器模式,可以自己规定,比如A相在上升沿时,检测B相电平,若为低电平,则规定正向,反之,逆向。A,B相有1/4周期的相位差,根据脉冲波形,很容易分析的
回复 支持 反对

使用道具 举报

发表于 2016-8-10 10:10:53 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-8-10 09:50
变向还是辨向?AB有90度相位差的,比如A高电平时判断B状态,B为高设为正转,B为低设为反转 就行了

谢谢解答,学习了
回复 支持 反对

使用道具 举报

发表于 2016-8-10 10:11:18 | 显示全部楼层
李小龙 发表于 2016-8-10 09:57
如果芯片没有编码器模式,可以自己规定,比如A相在上升沿时,检测B相电平,若为低电平,则规定正向,反之 ...

谢谢解答,学习了
回复 支持 反对

使用道具 举报

发表于 2017-5-8 20:54:50 | 显示全部楼层
大神你好,我是本科在读的小菜鸟,我现在想用stm32、陀螺仪、编码器让智能小车实现直线行驶应该怎么做啊?谢谢
回复 支持 反对

使用道具 举报

发表于 2017-5-25 00:19:59 来自手机 | 显示全部楼层
这个可以啵
回复 支持 反对

使用道具 举报

发表于 2017-11-10 10:05:00 | 显示全部楼层
谢谢分享好东西。
回复 支持 反对

使用道具 举报

发表于 2017-11-13 17:21:37 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

发表于 2018-4-19 13:04:26 | 显示全部楼层
谢谢分享!!!!!!!!!!!!!!!!
回复

使用道具 举报

发表于 2018-8-30 16:57:03 | 显示全部楼层
感谢分享,楼主太给力了!!
回复 支持 反对

使用道具 举报

发表于 2019-5-12 17:22:53 | 显示全部楼层
THANKS!!!                                   
回复 支持 反对

使用道具 举报

发表于 2019-5-12 19:44:03 | 显示全部楼层
楼主 下载的那个失效了
回复 支持 反对

使用道具 举报

发表于 2019-5-12 19:46:50 | 显示全部楼层
我晓得了 被火哥拓展分享了
回复 支持 反对

使用道具 举报

发表于 2019-6-16 23:06:38 | 显示全部楼层
感谢分享,有个小问题请教一下,用扫描程序没问题,但用中断程序出来的数值不稳定,而是一下增加好几个数字,我给中断里加了延时好多了。请问还有什么方法解决这个问题嘛
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:52:38 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-7-25 09:23
我所有分享的东西都是功能模块,你们自己要按自己的需求进行扩展,我的代码接上所有电路后转动编码器你从 ...

就是说  我的电机驱动 加上这个编码器  就可以打印出来 我的电机的转速?
回复 支持 反对

使用道具 举报

发表于 2019-12-8 12:53:08 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-7-25 09:23
我所有分享的东西都是功能模块,你们自己要按自己的需求进行扩展,我的代码接上所有电路后转动编码器你从 ...

就是说  我的电机驱动 加上这个编码器  就可以打印出来 我的电机的转速?
回复 支持 反对

使用道具 举报

发表于 2019-12-10 17:00:22 | 显示全部楼层
为什么我这最后打印出来的 是循环递变的数    减到零之后又重新开始减  这样循环
回复 支持 反对

使用道具 举报

发表于 2020-4-30 16:54:13 | 显示全部楼层
kobe_515 发表于 2016-7-25 16:56
原来两个最小系统的独立电源要共地,谢谢楼主大神帮忙指导了一下,解决问题了,程序是好的 ...

您好!我的编码器也不能正常计数,和你的情况类似。请问两个最小系统的独立电源要共地是什么意思呀
回复 支持 反对

使用道具 举报

发表于 2020-4-30 17:27:22 | 显示全部楼层
ㄗs-.蝸牛· 发表于 2016-7-25 09:23
我所有分享的东西都是功能模块,你们自己要按自己的需求进行扩展,我的代码接上所有电路后转动编码器你从 ...

楼主您好!我的STM32驱动正交编码器,串口显示的也只有0,1,2.不能正常显示计数值。与网友kobe_515的情况差不多。请问他最后的解决办法中说的两个最小系统独立电源要共地是什么意思呀
回复 支持 反对

使用道具 举报

发表于 5 天前 | 显示全部楼层
正好需要!谢谢LZ!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|联系站长|手机版|站点地图|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号-2 ) 大学生ARM嵌入式2群

GMT+8, 2020-5-28 19:10 , Processed in 0.212531 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表