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

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

[复制链接]
STMCU小助手 发布时间:2022-12-9 17:00
想装一个码盘用来测速,但是直接把码盘装在输出轴又很难做到足够的分辨率,于是就想到了一个比较冷门的方法,自制了一个码盘,并且以此为基础,给一个TT电机加装一组正交编码器。" B* G5 j% Q- d" x9 p0 i) {: G
开始吧!  F  P/ d' \% y
1、先说一
说正交编码器2 H9 O- f+ M+ [, Q9 B
从名字来说,正交编码器就是编码器的一种,百科上定义是“正交编码器一般指增量式编码器。增量式编码器是将位移转换成周期性的电信号,再把这个电信号转变成计数脉冲,用脉冲的个数表示位移的大小……balabala……”其实就是把圆周的旋转运动转换成2路相位差90度的电平跳变信号,如下图:
! }% ~3 H0 C% _* ~3 u) u
3 Y9 ^1 s, C/ D( d8 r' W
3 z* I# X" k5 N  ]6 Z上图中有Z相,相当于是零点,可以消除累计误差,部分应用中可以不使用。
! x7 A" F, M& h( |% F/ }这种编码器的优点就是可以根据AB相位关系推测出转动方向,而且当圆周栅格数目为n时,跳变信号可以达到4n个,变相提高了分辨率。
# N' W# i9 T( Y( s1 f/ Y% e- V那说了这么多,接下来我们就用最常见最便宜的TT减速电机为基础,使用2对射式光电开关(ITR9608),制作一个带正交编码器的电机。
2 v$ F3 {  D% G+ l4 i
4 V4 R# d" c" k3 G  O7 B  K9 y- x2、准备材料,设计ITR9608原理图并焊接
( B1 P1 x8 X, o* t/ C首先是TT电机,可以说是最普遍最便宜的一款了,这还是我十年前入门玩智能小车时候买的存货  {( L; L1 ~# R1 P0 B! `% f

7 K0 T0 ^" H, \- f! U' `上图中箭头所指的位置是本方案的关键,就是要利用这一小点凸起搞点事情,首先用助焊剂轻轻擦拭一下这段短短的轴,然后准备一个小铜片(没有铜片铝片也行,再没有,切一点万用板也可以),大小控制在10mm边长,中间钻一个2mm多一点的孔(尽量居中钻孔),就像下面这样' W9 @2 f0 b! D/ u  D- t. Q

, R% O% ~0 ~. [7 X, r; l0 a7 ?接下来使用助焊剂轻轻擦拭铜片,然后将铜片通过小孔安装在电机轴上,如下图9 `0 q1 a* X  b  y* ]
# T5 t2 e( N3 V, g# [9 V! T
接下来的是关键一步,焊接铜片,使用60W电烙铁,快速焊接铜片的小孔,使其牢固地连接在电机轴上,对,这里其实是用来粘接码盘的一个基点,哈哈,所以我说这个凸出的一点点轴是关键。
( Y$ k( t0 p; V5 lITR9608是一种常见的对射式光电开关,加两个电阻就可以使用了,设计了简单的原理图: Q* E8 O( {! s& ^9 p% _
$ ~4 ]- O' u& d' L1 ^" ^- q: D$ z9 i
, j' B% R, P  f% v% k. @
按图焊接,需要焊接两个。
- t& @6 |# y3 V' U( U  H: `( e6 p$ Y4 r# T1 W* d( L; s+ A
3、设计码盘组件安装座,并进行切割加工1 `( {: r4 t* O, S/ Y, C/ t+ v
: S3 m% I0 a* T0 i( E' L
这里有个地方要提示一下啊:上图中,两个光电开关的安装角度一定要注意,一个开关对准栅格的时候,另一个开关的位置要刚好被遮挡,这样就能保证信号“正交”,上图中使用的是24线码盘,两个传感器夹角67.5度。
' r9 {) A) k0 p" s* N8 R
3 E( }2 t5 T/ L/ l0 o( |- }
: a( j) m8 P- J) S4 w" C* y) a- i+ B/ d
4、安装码盘组件
" O( b' m1 q) W( g
# o# S/ a9 [6 o1 n3 Q1 d) O$ x0 z; Z: n# n7 J3 _$ z# M
由于上面24线码盘测试中发现会“丢失”信号,分析可能是由于栅格过于密集,后来切割了一个4线的,使用的是普通包装纸(更轻,避免对电机带负载能力产生影响)
3 |1 V' k* ^  D- D
3 J% H0 ^/ N# i* x1 y: ~$ b" X8 w1 X
% p0 h3 s5 B5 U! ~- x. E* y5、基于stm32f103c8t6创建工程,编写驱动程序
" O: G6 E, h1 y这里主要的就是通过cubeMX对定时器模式进行配置,简单的两步就可以了,使用TIM2,在combined Channels选择“Encoder Mode”,如下图:  x% o! M: d$ U1 R6 F" V
$ w1 }4 @7 m3 J7 m0 v
接下来配置一下编码模式,选择“……TI1 and TI2”,这样就会上升下降沿都计数,实际脉冲数数值上是栅格的4倍
) K3 k& F8 P* n; P其他的再配置一下串口,我准备用串口打印日志,查看脉冲数。* H1 y* x5 _+ U' L: h( n1 V% O
根据配置的引脚,连接编码器和控制板(分别接PA0和PA1),
& F6 N) Y: B3 U, o# V& s9 E8 N8 x3 R9 F( D3 d' J- Z
5 C( p5 l: P, Z

1 J4 T  w" Y1 X! j2 y9 Y6、测试效果: X# X4 r7 X! |9 L$ G, x
手动拨动码盘一周,可以看到串口读出16个脉冲,反转的时候读出的数值是-16,这里没有写其他复杂的算法,只是周期性读取,然后清零,所以不动的时候读出来的是0
- f9 u3 Q7 q/ z    ' k& H! `: h9 b% w0 j
' T3 e. ~! q$ {; [9 h/ W) N

4 X6 G: }) Q$ V/ \8 E: b, z$ L) ~7、总结
$ r8 N* [. S5 F从硬件上来说,有点点复杂,需要特别注意码盘线数不要太多,从软件上来说,cubeMX配置还是非常简单的,也就是读取很容易,实际使用时候需要根据需求对数据进行后处理,以解析出里程、方向等更多信息。  K4 C; ?# t7 a( _' Q( {( L
2 f, [& V3 P1 b
6 I( r# k( `, d# X, r/ t. c* d
END!
( I) j: ~# [; s8 R; A感谢阅读,感谢关注!
( h9 r$ I* h+ G3 h7 X---------------------) |4 P. H& B7 ^1 F6 a- ^8 w8 o
作者:逍遥李
. H. h5 k- |% w
赞 收藏 评论0 发布时间:2022-12-9 17:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版