[STM32F1]一步步从零开始制作TT电机正交编码器

最近使用TT电机做小车,想装一个码盘用来测速,但是直接把码盘装在输出轴又很难做到足够的分辨率,于是就想到了一个比较冷门的方法,自制了一个码盘,并且以此为基础,给一个TT电机加装一组正交编码器。
开始吧!
1、先说一说正交编码器
从名字来说,正交编码器就是编码器的一种,百科上定义是“正交编码器一般指增量式编码器。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小……balabala……”其实就是把圆周的旋转运动转换成2路相位差90度的电平跳变信号,如下图:


上图中有Z相,相当于是零点,可以消除累计误差,部分应用中可以不使用。
这种编码器的优点就是可以根据AB相位关系推测出转动方向,而且当圆周栅格数目为n时,跳变信号可以达到4n个,变相提高了分辨率。
那说了这么多,接下来我们就用最常见最便宜的TT减速电机为基础,使用2对射式光电开关(ITR9608),制作一个带正交编码器的电机。

2、准备材料,设计ITR9608原理图并焊接
首先是TT电机,可以说是最普遍最便宜的一款了,这还是我十年前入门玩智能小车时候买的存货

上图中箭头所指的位置是本方案的关键,就是要利用这一小点凸起搞点事情,首先用助焊剂轻轻擦拭一下这段短短的轴,然后准备一个小铜片(没有铜片铝片也行,再没有,切一点万用板也可以),大小控制在10mm边长,中间钻一个2mm多一点的孔(尽量居中钻孔),就像下面这样

接下来使用助焊剂轻轻擦拭铜片,然后将铜片通过小孔安装在电机轴上,如下图

接下来的是关键一步,焊接铜片,使用60W电烙铁,快速焊接铜片的小孔,使其牢固地连接在电机轴上,对,这里其实是用来粘接码盘的一个基点,哈哈,所以我说这个凸出的一点点轴是关键。
ITR9608是一种常见的对射式光电开关,加两个电阻就可以使用了,设计了简单的原理图


按图焊接,需要焊接两个。

3、设计码盘组件安装座,并进行切割加工
 
这里有个地方要提示一下啊:上图中,两个光电开关的安装角度一定要注意,一个开关对准栅格的时候,另一个开关的位置要刚好被遮挡,这样就能保证信号“正交”,上图中使用的是24线码盘,两个传感器夹角67.5度。



4、安装码盘组件


由于上面24线码盘测试中发现会“丢失”信号,分析可能是由于栅格过于密集,后来切割了一个4线的,使用的是普通包装纸(更轻,避免对电机带负载能力产生影响)
 

5、基于stm32f103c8t6创建工程,编写驱动程序
这里主要的就是通过cubeMX对定时器模式进行配置,简单的两步就可以了,使用TIM2,在combined Channels选择“Encoder Mode”,如下图:

接下来配置一下编码模式,选择“……TI1 and TI2”,这样就会上升下降沿都计数,实际脉冲数数值上是栅格的4倍 
其他的再配置一下串口,我准备用串口打印日志,查看脉冲数。
根据配置的引脚,连接编码器和控制板(分别接PA0和PA1),



6、测试效果
手动拨动码盘一周,可以看到串口读出16个脉冲,反转的时候读出的数值是-16,这里没有写其他复杂的算法,只是周期性读取,然后清零,所以不动的时候读出来的是0
    
代码分享:
 flowControl.rar (4.4 MB)

7、总结
从硬件上来说,有点点复杂,需要特别注意码盘线数不要太多,从软件上来说,cubeMX配置还是非常简单的,也就是读取很容易,实际使用时候需要根据需求对数据进行后处理,以解析出里程、方向等更多信息。


END!
感谢阅读,感谢关注!
---------------------
作者:逍遥李
链接:https://bbs.21ic.com/icview-3172850-1-1.html
来源:21ic.com
此文章已获得原创/原创奖标签,著作权归21ic所有,任何人未经允许禁止转载。
 

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
正交编码器(Quadrature Encoder)是一种常用的位置传感器,用于测量旋转或线性运动的位移和方向。它由两个光电传感器和一个光栅盘组成,光栅盘被分隔为等距的刻线。 STM32是一款非常流行的单片机系列,提供了HAL库(Hardware Abstraction Layer),简化了对硬件的访问和操作。 在使用STM32 HAL库进行正交编码器相关的编程时,可以按照以下步骤进行: 1. 初始化正交编码器的GPIO:设置编码器的引脚作为输入,注意使能引脚也需要设置为输入。 2. 配置编码器的外部中断(External Interrupt):通过HAL库的函数调用来配置外部中断,使得在编码器的每个脉冲之前和之后都触发中断。 3. 在中断服务函数(Interrupt Service Routine)中对编码器信号进行处理:编码器每次脉冲时,中断服务函数被调用。可以通过测量脉冲的方向和数量来计算运动的位移。 4. 使用计时器(Timer)进行速度测量:HAL库提供了内置的计时器功能,可以用于测量编码器的转速。通过计时器的输入捕获(Input Capture)功能,可以精确地测量两个脉冲的时间间隔,从而计算出转速。 5. 根据需求进行功能扩展:根据具体应用的需求,可以使用HAL库的其他功能,如PWM输出控制电机速度、外设和通信接口的配置等。 通过使用STM32 HAL库,我们可以方便地实现对正交编码器的读取、位置计算和速度测量等功能,大大简化了硬件的驱动和编程工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值