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

STM32机器人手臂控制器

[复制链接]
丿灬幸灬 发布时间:2018-11-2 21:10
本帖最后由 丿灬幸灬 于 2018-11-5 11:27 编辑
, o1 ^1 l. y% w& z, S! `) e: |. m8 H9 H! S; i; E  |
功能:提供电源,PWM电平转换,和Wii Nunchuck连接器。: \$ b$ V- k/ p, l
用于与EEZYbotARM MK2一起工作。+ }0 O. k* f' G! H8 T

& d/ I$ W5 n9 b1 H* X1 ]- a  D% g- {) K+ Z' }/ t8 Z; v) A2 E
这个STM32扩展板有一个开关调节器可控制3到6个舵机。它还将一个3.3 V PWM信号从单片机转换为5 V电平,并具有电源启动信号。
& v! }* q/ V; \0 @2 m2 m  t一个独特的功能是它的Wii Nunchuck连接器。通过I2C让它成为控制机械臂(如EEZYbotARM MK2)的理想设备,。我使用Nunchuck,通过固件在线Mbed编译器来直观的控制EEZYbotARM MK2。8 i5 u4 q6 e4 G: r8 Z4 r
+ J- m4 n8 N) O$ y
更人性化的固件  H" _' u3 \6 j7 |
* @( t4 N; v) P3 g* [
修订后的pcb已经发货,但预计将于周二到达,所以不幸的是他们无法赶上Hackaday奖机器人技术竞赛的截止日期。同时,我一直在调整固件。固件在Mbed上,所以您也可以为其他支持的微控制器编译它。我一直在使用STM32L073和STM32L476 MCUs,所以它们至少在正确的引脚上具有所需的PWM功能。
! i( ~# q: u0 j* I
2 E2 ]4 N- @) G1 ?, U' K# ~4 R& q' V* BEEZYBot手臂MK2使用三个伺服器控制手臂和第四伺服器的末端执行器。Wii Nunchuck控制器有一个操纵杆和两个按钮。这实际上允许控制三个“轴”。其中两个来自操纵杆(上/下和左/右),第三个来自两个按钮。最初,我的固件使用这三个直接控制三个主要的伺服,例如,移动操纵杆上下移动一个伺服。这很容易实现,但它不是很直观的使用,因为手臂的末端不只是水平或垂直移动,而是沿着一个更复杂的轨迹。
  i0 W* M7 _4 p/ D5 H: \2 ~7 ^
8 y0 y6 ^% Z4 m3 O1 u5 ~: E, `% [我想最好是能向上/向下,手臂的末端能垂直移动。这是一个有点复杂的实现,因为它涉及到移动多个伺服器和做一些数学计算,以找出他们需要如何移动。数学只是高中的三角学,如下面的草图所示。从本质上讲,我需要计算角度α(α的总和₁和α₂)和γ,可以用来计算主臂的角度(l₁)和小胳膊贴上(l₂)。* K$ k! T* t+ F% h2 Q0 t7 I/ i

8 ~4 V2 h5 e. E8 u! V2 u" Z 11111.png
1 v" E; Z1 U$ y7 J! C' ]9 e' t/ Z& p. u
这个数学计算是在pos_to_angle函数中实现的:! H' w3 ~% s+ S$ E

$ z7 w! ]3 X$ ^/ q) {. ~( V' @
  1. <font color="#000000">void pos_to_angle(double *horz_angle, double *vert_angle, double radius, double height)% l. ~0 |- i2 a; [* u
  2. {- N' [1 _% N) D5 m" j. W
  3.     double alpha1 = atan(height/radius);
    ! K; z: g0 V1 P$ C
  4.     double bf_2 = radius*radius + height*height;) k5 `  c* W# Z3 ~3 |# h9 x
  5.     double alpha2 = acos((bf_2 + L1*L1 - L5*L5)/(2*sqrt(bf_2)*L1));
    8 ]  N+ \( T& g
  6.     *horz_angle = PI/2 - (alpha1 + alpha2);
    # N6 v% G8 Y) K6 R* `
  7.     double beta2 = acos((L1*L1 + L5*L5 - bf_2)/(2*L1*L5));
    " Z1 N+ [3 S; F, v" R
  8.     *vert_angle = PI - beta2 - alpha1 - alpha2;, B/ R* x/ A, S7 Z' _
  9. }% A7 C( F- S& u! P6 [* }( j
  10. </font>
复制代码

. O8 f4 T" ~( _, ]我做了一个加快的机械臂运行视频演示" _; X! k3 K. O6 ?2 |
: v0 E+ X( P' O5 S9 b
固件首先允许你校准,这涉及到定位手臂,使主臂是垂直的,另一个是水平的。按下开关2执行校准,节省了每个伺服电机的偏移量。注意,固件的编写是为了与EEZYBot ARM MK2一起工作。使用其他机器手臂,你需要调整常量(如l₁)和可能是数学,如果手臂有不同的运动的联系。! m9 R( r( Z! p' f( F
. F* g9 S2 B% ^1 f" z- j" A
实际上操作手臂是非常直观的。操纵杆上的上/下水平移动末端执行器。背面的两个按钮垂直移动,操纵杆上的左/右旋转手臂围绕底座旋转。要打开/关闭末端执行器,同时按下两个按钮会激活另一个“模式”,其中操纵杆上的上/下现在打开/关闭末端执行器。7 j. G0 T- i" i# ^1 G1 W
; P3 b8 y- f+ k; m, v7 p
我对这个项目的进展非常满意。假设正在交付的修订2 pcb修复了电源启用信号的问题,这个项目将被完成!8 I! d* W. v3 u. E9 A' m. d& @. @
5 U: F4 V5 T: A
. |1 {! E: p2 j4 p8 l. P
Gerbers2完成1 P, v+ X. W' Y" i- n
/ t7 M0 `1 [2 [0 i1 O
Gerbers2完成了。第一次修订版的改动如下:
/ h3 g# h. W* P, x
0 @: `3 ]! x, }6 q! c3 D, n将POW_EN信号改为STM32单片机上的5V容忍度引脚,这样保护二极管就不会夹紧电压,防止PFET关闭(在前面的日志中讨论过)。6 v/ Q- ~7 _8 u% w$ o! a
使接头稍微宽一点。第一个版本太窄了,我不得不把它归档。9 e9 _; P$ X3 V; n, ~! Z8 Q' B+ y& f
将一些PWM信号移动到不同的引脚。STM32 MCUs不是完全与pin兼容的,所以我选择了在更多MCUs上有PWM可用的引脚。; n! m& @( R" \" m: Z( a
为提供标头添加了一些丝网标签(主要用于调试)。/ j# c1 N. \/ L. }7 r7 Y8 F# N( q, P6 ]
PCB在GitHub上。
! C$ P) a5 M7 K+ @" F) h, l
/ g$ p  m9 x8 d! y6 N6 |# G
( H0 I. c8 B  c8 v- W4 ?. m
+ @, N' I+ h$ k7 |$ @1 W尝试第一个PCB
1 ^6 `! m4 Z+ ~' ?
8 R6 ]- F: N  h3 e- z: K

: d& f3 O! J" N$ c" ]: w这周我收到了PCB,我焊接了一个。( ]3 n" B$ D+ v$ o% j: @6 Y+ |- {6 t

6 k' L0 Q% E8 H- K+ v4 l到目前为止,它基本是起作用的。我到目前为止遇到的主要问题是电源启动信号,它被拉到5v,它的门在应该很高的时候太低了几百毫伏,所以它控制的PFET不会关闭。; r" Q0 s7 |6 E2 h$ V5 d
! _# j/ t  z, o; g8 `% P$ q
3.png 1 P# \+ q# T+ x' L7 i" `
9 f& L# m5 h! L/ K" u
当POW_EN被拉低时,PFET就会打开马达。  b3 `! z. Q$ c( h) I% {( o

" y% ]. S' T" A& a

2 a8 F7 ?+ W! ?' _6 i我在STM32L476上使用pin PA4在开漏模式来控制它。我认为这应该是工作的,但不幸的是,这个大头针不是一个5v容忍大头针。查看数据表,我认为是pin上的保护二极管导致了这个问题。这意味着电源启动信号不幸地不能工作在这个修改的PCB。它应该连接到一个5v的容忍度引脚,也称为数据表中的“TT”引脚,例如PA2。
2 ?. h! j5 w2 E5 `$ s/ a, ]. V/ v- t8 P* G

( p' q* {, Y$ X9 w  J2 o  C: @7 o8 x$ U2 V) f
1 G' D- I- i3 J, F3 z$ Y9 n
从更积极的方面来看,平移电路正在工作。在调试完上面的问题后,我损坏了顶部的铜层,所以我做了一个混乱的焊接修复如下所示重新连接5V引体向上。NFETs将3.3V PWM从微控制器转换为5V用于伺服系统。注意,由于FETs是反向的,PWM信号的占空比也需要反转。我成功地移动了一个伺服电机,并且开始使用在线Mbed编译器组装一些固件。项目在这里。3 I" L4 O0 \/ k/ V; h; x3 ^6 C
* `4 `9 A9 I* R' r# w8 ?8 D$ o
) C% s8 s7 E! A$ s: Y
4.jpeg : V9 }+ {: F- l$ w5 |& s
7 `. E2 h, y4 R
! ^/ `3 e8 h( F: Y! {% [5 \5 b/ t
一个丑陋的修复短针R7到Q2到R13。这是在5v网络上。Q2是没用的,因为它永远不会关闭。; O2 {- g6 j7 T" {) ]

6 C# C( N/ k5 V 5.png
: f2 `0 t8 H, ~  X! I) u, T' I- }% u! V  a3 m" c1 v' c4 B; A1 H
, \) |% B+ D$ q3 \9 b+ y; z- z
7 X) a. m, ~6 n# a

' L0 \5 {. \2 M6 N& N# Pnfts将3.3 V PWM信号转换为5V。您可以控制多达6个伺服器。+ K0 _% P. ]3 s* J$ f  x
. B7 ]) x6 v  @# ]* Y( A9 T, s& o; ~
7 D! O+ `& n$ f0 h6 Q( U

  N. T1 G3 C; D" Q, Q- j最后,我还检查了Nunchuck接口。不幸的是,连接器有点太窄了,所以我不得不把它打磨一下。但是在Mbed上使用wiflood chuck库可以很好地实现I2C通信。2 f1 C5 |3 x3 K' O' [' F

) {6 [8 v, f1 m3 k8 o
4 D; \/ J0 L0 o( ~5 w用于控制舵机的Nucleo扩展板
6 t+ T7 m8 J, f9 h! M7 G 6.jpg 7 T+ |- A4 v- i$ N( G# |
3 H2 ?, f# a0 a2 f" s3 p1 b
$ D( T. R# H* Y( Z) L. [' L
我想要控制的EEZYbotARM MK2。! F6 T' m- |$ R* T: U, D, b8 L4 c
# |* \9 Y/ p) Q' {( S9 [
我决定使用我的Prusa i3mk2,并且已经为EEZYbotARM MK2机器人手臂的部件进行了3d打印。它使用了三个更大的MG995或MG946伺服电机,以及一个更小的塑料SG90伺服电机,用于“抓取器”(正式称为“末端执行器”FYI)。我没有给电路布线,也没有买现成的东西,而是决定做一个PCB来驱动伺服电机。这让我有机会添加一些现有解决方案中不可用的东西:Wii Nunchuck连接器。4 y3 c, Y' F# W

# H6 m8 \: C8 {) S( ^+ [2 A! _, u$ B2 O  w# ?! Q5 W
伺服电机采用PWM信号控制,厂家指定工作电压为4.8 V - 6.6 V。STM32核板在3.3 V下工作,我读到过3.3 V PWM可能用于驱动伺服电机。但是,为了安全起见,我添加了一些FETs来将3.3V PWM转换为5v。
2 a9 M- v' v6 P  v& R/ k+ @" ` 77.png ) t: v' P+ N/ _  c

9 S$ p% J, P: @  s3 f$ a% ]' r另一台伺服电机的PWM信号(此电压为7.2 V,而非6.6 V)* U% y0 ?1 {1 w, z" ?8 w& V8 J% {* o
# O8 |, C/ W% x1 G# ]$ v
88.png
# [+ q& \1 E& Q3 p( j6伺服电机连接器
4 J  \, f1 i/ O4 l
% r  W& M8 y' M4 v! f0 y
% `- J2 Q! X3 n: }0 S
( k* d" o6 v3 ]3 ^5 j  O: w最后,我添加了一个Wii Nunchuck连接器。这基本上是一个PCB卡边缘连接器我从这里复制的。我使用一个简单的I2C接口,打算用它来控制机械手臂3 M0 }3 g, Y8 M
9548371525490976144.png 4 z5 M# N# O3 Y7 C# N; F
; ~) ~4 y; \3 W8 ~, j
Wii Nunchuck连接器(J2)。
: ~- @; g4 ^/ W3 ?* G9 M- \# ~这个PCB是一个STM32扩展板,所以它使用了与主板一起工作的Morpho板。
  o$ v& Q5 \- [8 C9 i4 q" G% p第一个版本的第一个布局已经完成,并且已经被发送去制作。6 T5 `- g5 |3 L; H  d1 z. s4 T$ z8 Y8 }
4 w' X2 i1 i2 ?+ _
相关资源见GitHub代码见mbed+ E. |7 r3 T, d9 b
原文请见hackaday1 j4 E, s1 z$ H

/ c, N0 B" p$ a. o$ K

STM32 Servo Expansion Board Schematic Rev 2.pdf

下载

63.76 KB, 下载次数: 17

STM32 Servo Expansion Board Schematic.pdf

下载

117.85 KB, 下载次数: 18

赞 收藏 1 评论5 发布时间:2018-11-2 21:10

举报

5个回答
mzy2364 回答时间:2018-11-2 21:54:58
厉害  谢谢分享
STM1024 回答时间:2018-11-3 10:05:16
五个自由度?这些小零部件都是3D打印的吗?价格如何?有木有性价比高的加工,推荐一下?
丿灬幸灬 回答时间:2018-11-3 14:12:58
stm1024 发表于 2018-11-3 10:05: o" r$ m0 D3 U1 H7 e. `7 c3 a
五个自由度?这些小零部件都是3D打印的吗?价格如何?有木有性价比高的加工,推荐一下? ...

  c2 {1 N* |% W/ x, B, u8 W6 M EEZYbotARM.zip (4.99 MB, 下载次数: 19)
STM1024 回答时间:2018-11-3 17:56:13
5 t7 U6 H) P+ {1 T2 }$ T& z
啊,谢谢,我是想问一下你是找谁打印的,质量还不错~推荐一下
zjczm 回答时间:2018-11-5 10:10:19
厉害厉害。学习一下

所属标签

相似技术帖

官网相关资源

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