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

STM32机器人手臂控制器

[复制链接]
丿灬幸灬 发布时间:2018-11-2 21:10
本帖最后由 丿灬幸灬 于 2018-11-5 11:27 编辑
+ ?9 w8 ?$ t& S( N
/ t4 W0 z6 w% E7 {& D功能:提供电源,PWM电平转换,和Wii Nunchuck连接器。  i! k6 N8 p7 a
用于与EEZYbotARM MK2一起工作。
# |' N* x; }& O8 S5 T: l9 s" ?) u" t) g  K  D$ A9 V

2 L( L0 ]* d% ^& V) H0 K. `0 z这个STM32扩展板有一个开关调节器可控制3到6个舵机。它还将一个3.3 V PWM信号从单片机转换为5 V电平,并具有电源启动信号。2 M' r" m8 A8 V# f2 S& Y
一个独特的功能是它的Wii Nunchuck连接器。通过I2C让它成为控制机械臂(如EEZYbotARM MK2)的理想设备,。我使用Nunchuck,通过固件在线Mbed编译器来直观的控制EEZYbotARM MK2。
; @( ]6 t  _$ [: t6 N4 ^4 E% p) I/ g; j9 u$ `8 Z
更人性化的固件
5 c3 ~8 h! a" i# _
1 P) c9 ^! S' K( P" ^0 f% ]修订后的pcb已经发货,但预计将于周二到达,所以不幸的是他们无法赶上Hackaday奖机器人技术竞赛的截止日期。同时,我一直在调整固件。固件在Mbed上,所以您也可以为其他支持的微控制器编译它。我一直在使用STM32L073和STM32L476 MCUs,所以它们至少在正确的引脚上具有所需的PWM功能。* K+ L+ j/ d. p6 @

2 m7 Z: Q3 P, z: ]EEZYBot手臂MK2使用三个伺服器控制手臂和第四伺服器的末端执行器。Wii Nunchuck控制器有一个操纵杆和两个按钮。这实际上允许控制三个“轴”。其中两个来自操纵杆(上/下和左/右),第三个来自两个按钮。最初,我的固件使用这三个直接控制三个主要的伺服,例如,移动操纵杆上下移动一个伺服。这很容易实现,但它不是很直观的使用,因为手臂的末端不只是水平或垂直移动,而是沿着一个更复杂的轨迹。
+ u9 O7 @) M- a9 \7 z( c' }% W" I; ]0 ]3 f8 q9 V
我想最好是能向上/向下,手臂的末端能垂直移动。这是一个有点复杂的实现,因为它涉及到移动多个伺服器和做一些数学计算,以找出他们需要如何移动。数学只是高中的三角学,如下面的草图所示。从本质上讲,我需要计算角度α(α的总和₁和α₂)和γ,可以用来计算主臂的角度(l₁)和小胳膊贴上(l₂)。9 z+ s# G0 S& f* o/ r6 X' N$ u, U) i
" s6 `. ?+ H8 ?+ _
11111.png
% S; Y/ k2 H% n6 [6 U1 l  ^
' u% M) J& v+ [5 ]. g这个数学计算是在pos_to_angle函数中实现的:! `  I' G9 y- g' N. p
; v5 `: E, E* B
  1. <font color="#000000">void pos_to_angle(double *horz_angle, double *vert_angle, double radius, double height)
    / V. T  B9 B. u3 L- ~
  2. {# ?8 L- g& A0 r' W+ l
  3.     double alpha1 = atan(height/radius);
    . q5 t7 s* u! h4 s
  4.     double bf_2 = radius*radius + height*height;9 h6 w- m+ O9 B7 ]: k2 K2 o5 ?) M8 x
  5.     double alpha2 = acos((bf_2 + L1*L1 - L5*L5)/(2*sqrt(bf_2)*L1));
    ! C  i" v" s) W' p( l9 S5 u
  6.     *horz_angle = PI/2 - (alpha1 + alpha2);! y5 H! O) Y6 o6 i& U
  7.     double beta2 = acos((L1*L1 + L5*L5 - bf_2)/(2*L1*L5));9 j- j" J2 h- i% c6 _: x' M5 u) z1 z
  8.     *vert_angle = PI - beta2 - alpha1 - alpha2;/ `, Q6 u! a: i* _
  9. }' ^3 @9 ]1 ]3 R7 c7 p* s* T5 O$ k
  10. </font>
复制代码
! b2 L3 A. M" ^2 v1 f, d! k; G
我做了一个加快的机械臂运行视频演示
# g( a  P3 x* D; F5 u
- P& R: N/ _1 I/ v% h* U2 D固件首先允许你校准,这涉及到定位手臂,使主臂是垂直的,另一个是水平的。按下开关2执行校准,节省了每个伺服电机的偏移量。注意,固件的编写是为了与EEZYBot ARM MK2一起工作。使用其他机器手臂,你需要调整常量(如l₁)和可能是数学,如果手臂有不同的运动的联系。/ X$ v  U0 H7 S4 h' ~* f5 |) s
# M0 C# i) ?; f2 z
实际上操作手臂是非常直观的。操纵杆上的上/下水平移动末端执行器。背面的两个按钮垂直移动,操纵杆上的左/右旋转手臂围绕底座旋转。要打开/关闭末端执行器,同时按下两个按钮会激活另一个“模式”,其中操纵杆上的上/下现在打开/关闭末端执行器。6 S$ ^* R6 h) d+ z& g, M, \
7 b" K$ ^) F# m9 ]" K
我对这个项目的进展非常满意。假设正在交付的修订2 pcb修复了电源启用信号的问题,这个项目将被完成!
9 I$ y. M3 [9 Z( H- P; q( r% \8 Y2 B2 ^. L

; u& }; i" U2 M$ R& g  hGerbers2完成. ?( A8 E, g0 Z8 M: u

$ C4 y5 K, I8 e  t6 h  MGerbers2完成了。第一次修订版的改动如下:
. N0 A# C1 d9 J* l" u5 ?) l% P. K) d$ A: j  c5 h8 D4 L
将POW_EN信号改为STM32单片机上的5V容忍度引脚,这样保护二极管就不会夹紧电压,防止PFET关闭(在前面的日志中讨论过)。; Z8 ~/ C& B/ r9 f, T
使接头稍微宽一点。第一个版本太窄了,我不得不把它归档。4 U# C% U4 _5 A: O: o( W. G- E
将一些PWM信号移动到不同的引脚。STM32 MCUs不是完全与pin兼容的,所以我选择了在更多MCUs上有PWM可用的引脚。
! T4 W! {8 i; s2 ^6 G; x为提供标头添加了一些丝网标签(主要用于调试)。6 \0 K1 }# G" g' K: G. p: ~
PCB在GitHub上。$ d0 u* }2 _/ I( U1 c9 r% `
% V0 k5 W; G' j# f- @1 f' _

. Q8 s: J# H2 I  x$ a) x# r! ^8 R- ^$ l6 H
尝试第一个PCB# h) ^! J& [; l% [. Q$ I

% }% E0 f: S8 h+ U, r

/ @6 e: E! g# _这周我收到了PCB,我焊接了一个。% u; B) m3 K+ F  X

0 p* [2 P: b, O3 V! E到目前为止,它基本是起作用的。我到目前为止遇到的主要问题是电源启动信号,它被拉到5v,它的门在应该很高的时候太低了几百毫伏,所以它控制的PFET不会关闭。
: @: Q+ ?7 i/ s! `$ o: C
* J  k, K9 p) k. ~9 t+ Q. | 3.png 7 N; M# t. j" @" D( T+ o
2 A, D; J! f8 ]9 M+ D
当POW_EN被拉低时,PFET就会打开马达。
, i$ r( G# ]. y2 ~
% e+ R: C6 m5 b' x. i& B1 G9 ]
9 A( h4 o& h" v: ^, _1 X
我在STM32L476上使用pin PA4在开漏模式来控制它。我认为这应该是工作的,但不幸的是,这个大头针不是一个5v容忍大头针。查看数据表,我认为是pin上的保护二极管导致了这个问题。这意味着电源启动信号不幸地不能工作在这个修改的PCB。它应该连接到一个5v的容忍度引脚,也称为数据表中的“TT”引脚,例如PA2。6 P; T" M5 u' H" p- R" a# g- z

' J- }& K. p' ^6 t+ \% P

5 B7 z& G# Q# A4 {2 M
0 j% y! T' z8 _2 s
8 l$ k  D  f; f: s0 f5 e' N. X  @
从更积极的方面来看,平移电路正在工作。在调试完上面的问题后,我损坏了顶部的铜层,所以我做了一个混乱的焊接修复如下所示重新连接5V引体向上。NFETs将3.3V PWM从微控制器转换为5V用于伺服系统。注意,由于FETs是反向的,PWM信号的占空比也需要反转。我成功地移动了一个伺服电机,并且开始使用在线Mbed编译器组装一些固件。项目在这里) r8 Q8 Z% n, O: F) ?+ L
0 |7 ?) m( _2 o3 Y# }

) [8 f8 E7 h9 M; L$ h& H' U# a0 H 4.jpeg - p* A1 I9 s  Y9 _3 n
" @; Q3 X/ D' k2 K& c

% T3 k% m* R% E6 \, v一个丑陋的修复短针R7到Q2到R13。这是在5v网络上。Q2是没用的,因为它永远不会关闭。& w% F7 v* _/ D- T( `

& T  ?+ I! s& K- I4 Q8 ?, J, U, Y 5.png , v3 ?+ H2 S* K, c0 W. `4 j# N% K
$ u# l$ h8 A+ B  T- ~0 h
3 u; \# P" Z& H, H9 I- i; g$ E7 T
9 w7 _3 H! J: w

+ A& M3 d5 M4 ^" ~/ Pnfts将3.3 V PWM信号转换为5V。您可以控制多达6个伺服器。$ T3 n" ?, c! k1 o5 K- \

# O( }* F8 Q3 T: C" B& y  @" Z% m. O- Q6 S$ j0 W; L

8 e3 f$ _6 \7 U! P, |- t/ }/ ]最后,我还检查了Nunchuck接口。不幸的是,连接器有点太窄了,所以我不得不把它打磨一下。但是在Mbed上使用wiflood chuck库可以很好地实现I2C通信。$ W8 v! m, `& d. l

* W2 |6 x5 [5 K4 D$ G0 D! u! X& ~; M3 g+ r0 ~
用于控制舵机的Nucleo扩展板
& ?# O" `9 w% \! v; b% f 6.jpg
/ N* I1 h0 s5 K) W0 k
0 X% _7 a8 U( Z# R

5 |$ `8 y( h1 v: \) a: y我想要控制的EEZYbotARM MK2。  U8 d# B+ \0 J8 \( g% Y

  I$ @7 e) `0 D" ]$ \: c$ M我决定使用我的Prusa i3mk2,并且已经为EEZYbotARM MK2机器人手臂的部件进行了3d打印。它使用了三个更大的MG995或MG946伺服电机,以及一个更小的塑料SG90伺服电机,用于“抓取器”(正式称为“末端执行器”FYI)。我没有给电路布线,也没有买现成的东西,而是决定做一个PCB来驱动伺服电机。这让我有机会添加一些现有解决方案中不可用的东西:Wii Nunchuck连接器。
2 F0 G" t' N$ j1 w/ G% P+ j7 m  r0 L5 X1 m1 o, q
. {& ], \/ Z4 D: X$ \* J) h* w
伺服电机采用PWM信号控制,厂家指定工作电压为4.8 V - 6.6 V。STM32核板在3.3 V下工作,我读到过3.3 V PWM可能用于驱动伺服电机。但是,为了安全起见,我添加了一些FETs来将3.3V PWM转换为5v。
3 F: `: b' g- H9 r% I, j- o 77.png : }# T$ ~2 h$ {

3 n1 a8 d/ ]; m' X另一台伺服电机的PWM信号(此电压为7.2 V,而非6.6 V)0 I& [' @2 \2 C& X$ t4 u

1 V4 a. b. z. u4 U+ v) K 88.png
! B0 B" z" }% Y: J: c8 G1 L, ~6伺服电机连接器/ X) H  p3 \6 c& {! t& U

" t* \( L5 B7 E2 B" U& @) _1 v& S9 L6 J
5 t1 f7 s. b8 e( t1 o) \
最后,我添加了一个Wii Nunchuck连接器。这基本上是一个PCB卡边缘连接器我从这里复制的。我使用一个简单的I2C接口,打算用它来控制机械手臂
# k$ L) X5 k$ C1 m! f 9548371525490976144.png 5 ^$ ?5 k! l' B- t( N
7 f  W5 v' H/ h3 q8 q+ w1 u
Wii Nunchuck连接器(J2)。
  ]3 x  N% c, E$ I3 a* y: v1 y/ s& }这个PCB是一个STM32扩展板,所以它使用了与主板一起工作的Morpho板。1 N: ^- i+ G" m! ]7 y5 ]5 P
第一个版本的第一个布局已经完成,并且已经被发送去制作。
3 t1 `8 A( ]9 z9 @$ \! }0 _- ]& ]2 V/ ~5 T- L
相关资源见GitHub代码见mbed
, G0 I) F* S! f原文请见hackaday$ B. |8 M5 m2 K1 v
  D  t$ H8 }: g1 b- t

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
* T& z% f# d8 F6 t! s$ @5 o. I5 M五个自由度?这些小零部件都是3D打印的吗?价格如何?有木有性价比高的加工,推荐一下? ...

/ l( `3 [, o" Z  U! Y EEZYbotARM.zip (4.99 MB, 下载次数: 19)
STM1024 回答时间:2018-11-3 17:56:13
: @2 A  }1 ~$ C6 X
啊,谢谢,我是想问一下你是找谁打印的,质量还不错~推荐一下
zjczm 回答时间:2018-11-5 10:10:19
厉害厉害。学习一下
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版