你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验之谈】基于STM32F1一步步从零开始制作TT电机正交编码器的经验分享

[复制链接]
STMCU小助手 发布时间:2022-12-9 17:00
想装一个码盘用来测速,但是直接把码盘装在输出轴又很难做到足够的分辨率,于是就想到了一个比较冷门的方法,自制了一个码盘,并且以此为基础,给一个TT电机加装一组正交编码器。9 F) d3 p7 ?% g5 ?. G; b! }) E
开始吧!
6 u% f2 X2 h0 |* R* v/ V7 [1、先说一
说正交编码器
; {8 _) o! q* ?4 L7 F3 U6 C从名字来说,正交编码器就是编码器的一种,百科上定义是“正交编码器一般指增量式编码器。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小……balabala……”其实就是把圆周的旋转运动转换成2路相位差90度的电平跳变信号,如下图:$ b2 J7 h7 \) R3 s0 c0 b, `

* L3 s' ?$ v* L/ d2 o8 M) \4 c% ^, P# Q, W8 i8 `% |
上图中有Z相,相当于是零点,可以消除累计误差,部分应用中可以不使用。
; X3 t: R8 b5 m7 t% n, g- |9 T6 g) S: ?这种编码器的优点就是可以根据AB相位关系推测出转动方向,而且当圆周栅格数目为n时,跳变信号可以达到4n个,变相提高了分辨率。
+ F: W/ e) L# |0 R7 _- j那说了这么多,接下来我们就用最常见最便宜的TT减速电机为基础,使用2对射式光电开关(ITR9608),制作一个带正交编码器的电机。
  S9 n7 h- b5 F+ r8 x% W
- q4 Z7 s& G5 Z' ^2、准备材料,设计ITR9608原理图并焊接3 ^$ L2 L4 \$ d# F' D$ w
首先是TT电机,可以说是最普遍最便宜的一款了,这还是我十年前入门玩智能小车时候买的存货: z. a: R. ~2 W; a0 i% W" a

0 `) R' _- W* e上图中箭头所指的位置是本方案的关键,就是要利用这一小点凸起搞点事情,首先用助焊剂轻轻擦拭一下这段短短的轴,然后准备一个小铜片(没有铜片铝片也行,再没有,切一点万用板也可以),大小控制在10mm边长,中间钻一个2mm多一点的孔(尽量居中钻孔),就像下面这样
' x, x3 w. @' t! n1 K
: Z4 A4 T4 T  B" h$ v# I8 y接下来使用助焊剂轻轻擦拭铜片,然后将铜片通过小孔安装在电机轴上,如下图! C4 e% d5 Y/ g2 H

1 N1 c: h) J5 c) b/ q; U9 |  L接下来的是关键一步,焊接铜片,使用60W电烙铁,快速焊接铜片的小孔,使其牢固地连接在电机轴上,对,这里其实是用来粘接码盘的一个基点,哈哈,所以我说这个凸出的一点点轴是关键。% G9 h7 |' l8 U6 Q& k0 F
ITR9608是一种常见的对射式光电开关,加两个电阻就可以使用了,设计了简单的原理图+ X* }0 ]; o( J% r4 g* d; H
+ g8 U6 S1 }' ^0 w* G4 f

* s, ?6 R8 t8 r按图焊接,需要焊接两个。, `/ W  V, Q2 `* X' r, o
5 d4 l1 j/ U6 f
3、设计码盘组件安装座,并进行切割加工9 s$ b' }* I2 y* U

1 d( d. v! E7 K4 D+ U5 f, o- l( g这里有个地方要提示一下啊:上图中,两个光电开关的安装角度一定要注意,一个开关对准栅格的时候,另一个开关的位置要刚好被遮挡,这样就能保证信号“正交”,上图中使用的是24线码盘,两个传感器夹角67.5度。
$ R7 J/ j8 F& w' x  M* a1 Y
& l9 k; o7 W5 Y5 S# M" W% M& Y  y1 s9 v4 T

0 j* w0 |) F, j4 z8 O; X4、安装码盘组件& E- `7 x/ k5 V5 I- l) E0 B

2 B! x, t$ G  P$ B- c3 j" Y; \' G% [6 F& Z) C
由于上面24线码盘测试中发现会“丢失”信号,分析可能是由于栅格过于密集,后来切割了一个4线的,使用的是普通包装纸(更轻,避免对电机带负载能力产生影响)
& q; G, _( L( A7 j( }& p6 X" z & F  g0 w; E' V- D% P7 e: G

9 E6 g  v+ g; a: ]5、基于stm32f103c8t6创建工程,编写驱动程序* @( N8 R/ W8 Q; F0 Z7 R
这里主要的就是通过cubeMX对定时器模式进行配置,简单的两步就可以了,使用TIM2,在combined Channels选择“Encoder Mode”,如下图:( D! V0 D1 x' H* J+ g
0 d- U# Y/ B3 H; ?4 i, h0 C  ~
接下来配置一下编码模式,选择“……TI1 and TI2”,这样就会上升下降沿都计数,实际脉冲数数值上是栅格的4倍
; t: p- {2 j1 d9 u. D1 _' X+ [其他的再配置一下串口,我准备用串口打印日志,查看脉冲数。
1 S( P" |4 I! h/ f根据配置的引脚,连接编码器和控制板(分别接PA0和PA1),
( h& D5 q: h# v7 \% _' c! w- y& ]6 Y" O( l  U

* N& J! L. T& r) m' ?/ f- Z+ R: n( W) S0 ^: N+ j' O, x
6、测试效果8 D: ]2 \2 S! o$ d# K1 L
手动拨动码盘一周,可以看到串口读出16个脉冲,反转的时候读出的数值是-16,这里没有写其他复杂的算法,只是周期性读取,然后清零,所以不动的时候读出来的是0' ~" S' ]5 \! k2 I+ ~
   
# D, ?+ ?) P" E5 h! @+ w- _6 f' b( V
  g% a: u3 a6 E2 l
7、总结& E; g9 K& d+ w# `
从硬件上来说,有点点复杂,需要特别注意码盘线数不要太多,从软件上来说,cubeMX配置还是非常简单的,也就是读取很容易,实际使用时候需要根据需求对数据进行后处理,以解析出里程、方向等更多信息。' r; W* C4 b1 U" v$ F: f6 T
2 J- r4 s. J; r+ S, S2 j

6 m% M/ E% L1 [0 CEND!0 ?3 ^) B5 x0 D- \, f9 F/ c
感谢阅读,感谢关注!8 {/ ?* ]$ ?' F9 N) S" b
---------------------3 B7 b9 L& i( E. l+ r$ h* W: a2 o
作者:逍遥李
6 i  ?5 H# S7 e) Y7 K
收藏 评论0 发布时间:2022-12-9 17:00

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版