【外网项目分享】STM32 Blue Pill 物联网扩展板(上)
$ L1 j4 O$ p7 t m; g4 e0 `, m
, q+ A0 H5 [' |) ]9 I6 |' K$ R" E
; H0 _6 p8 f3 s$ `+ x8 N# p( F, Y5 l$ j8 h$ o
STM32现在是家庭智能网格兼容
; G5 z+ g. m8 f7 J9 B0 M
5 @& {) ?9 z& W/ H' r, p, ^什么是家庭智能网格?/ G, b+ p3 I7 z, s5 }2 D
3 k0 P! c- R% {
正如在家庭智能网格Hackaday项目中所描述的,它是一个物联网网格框架,使用树莓派的定制射频传感器和中继器。它是开放源码的,可以与MQTT和OpenHAB2连接。
# }7 x3 o( |" q$ }' _( q1 T' }2 i$ p& q0 n+ @5 E E
mesh协议被设计得足够简单,这样您就可以在空闲时间自己理解并调试它,同时还具有实用的功能级别。在这个洪水网格项目日志中有关于网格协议的更多细节* C% L7 y( o: O2 h, V3 Q, k
: E+ Y- O% \) L1 h3 u) x7 lSTM32的硬件支持
# V: J4 U4 y6 ^% \
5 q* W4 \$ Y: e+ x/ z$ g! x- U- RF节点:已经在使用github STM32 RF节点项目上可用的源代码运行
- RF PIO:用于PIO伺服控制的github固件也是如此9 Z: X# ^4 n. i( \& g0 x- W9 _
& X$ \$ ]0 Q- L. D/ [* M' b
STM32应用程序
0 _, U$ R0 k) T: B4 W; c+ [/ H3 O4 |+ N' L
- 加热器:固态继电器的pwm控制
- 嗅探器:不是真正的射频嗅探器,而是协议嗅探器,因为它忽略了格式,但仍然必须坚持一个通道,这有助于查看请求和确认调试。
- uart接口:8 T X8 s; _3 l3 F4 t2 d1 P/ R
( g/ ^0 W+ r) P9 k" A5 f$ j
射频狗收集广播到网格中的信息/ l: o( [% L4 B' ~
使用确认将目标消息加入到特定节点。请注意,确认是从目标到源的网格宽度,而不是像增强的Shockburst那样从一点到另一点。
2 y" i1 a4 c! G) X. F( X现在,正如我们在下面几节中所看到的,STM32带来了使用ARM mbed的可能性以及它所带来的一切。
! t5 F% E! T; y5 s$ Y$ W$ P& r2 U3 }3 a2 h% O
容易使用网格函数与ARM mbed和现代c++
( E, [ ~* S" A4 E1 k- G# J7 i& y/ Q l$ V. k6 n W
在这里,我们可以从RF uart接口中找到充当RF加密狗的代码片段。在github上完成文件/ J7 m4 E9 G/ s# Q6 y* d
//nRF Modules 1:Gnd, 2:3.3v, 3:ce, 4:csn, 5:sck, 6:mosi, 7:miso, 8:irq
1 _$ o- ?9 k5 V6 TRfMesh hsm(&rasp, PC_15, PA_4, PA_5, PA_7, PA_6, PA_0);2 \' ~9 t/ c4 ]" q: ~" j
void rf_broadcast_catched(uint8_t *data,uint8_t size)' ]( \* m7 d- A! G! g
{% |% f `) @7 ]* E0 G+ V- |
switch(data[rfi_pid])% [( N. V# A0 k- a" t( X4 n
{
6 w& d; P1 n1 b# |) |; A/ E1 W. P& _ case rf_pid_0xF5_alive:
2 o8 g2 x0 W6 D- s, G...; S" C0 g6 K( ?# x" n
int main()8 r j: K7 F* R: L9 n5 ?
{2 k- g3 J7 P# m0 f3 W
hsm.init(CHANNEL);
. `8 p4 [6 C2 B hsm.setNodeId(NODEID);2 p/ p7 j6 q1 O, F
hsm.attach(&rf_broadcast_catched,RfMesh::CallbackType::Broadcast);: F- N9 a7 C! S' J. j1 Q
...
% N5 v B# ^ a K0 @- 提供监听和发送的通道,这个通道是可以更改的,目前网格是在单个通道上运行的,这是根据通道集群和通道交换得来的特性。
- 通过广播连接到一个网格事件8 \5 _" V1 \. h6 i) M
. m; O4 L9 s/ q/ E/ N" p1 ~
这里,我们有一个节点应用程序的代码片段,它使用公认的对等消息。在github上完成文件
X. {! O; y! ~6 ^: f* F1 Wvoid rf_message_to_me(uint8_t *data,uint8_t size)/ @/ T- j1 }2 g% ]' L |
{0 _ i% z( A9 h8 @9 R- q
if(data[rfi_pid] == rf_pid_heat)
' ~/ z/ W( B8 g. F {3 m6 _) x0 z4 [; N5 F3 Y
heat_val = data[4];//heat_val payload : Size Pid SrcId TrgId HeatVal CRC
0 ?% i! ]$ x% W6 `+ j+ H...; Z( t7 K" b. _' T& ~. b
main()
4 d" v6 ~+ j! g" p5 n1 x8 D: c- t{9 O8 u+ C, w/ h9 Y7 H. f* x# T8 y
hsm.init(CHANNEL);
& I- R- k( H* q# G hsm.setNodeId(NODEID);$ _1 y/ w$ g0 L _5 A
hsm.attach(&rf_message_to_me,RfMesh::CallbackType::Message);
: m# V$ E; g7 t- l. I$ p0 L- l' ~... & H4 G: l( ?. S3 R; T5 u" b" k
- 附件是一个消息类型。
- 由于节点id已经提供给了mesh驱动程序,因此只提供与目标节点id匹配的消息。
- 确认传输也由网格驱动程序处理。
4 p) p# k% i8 u' l6 |5 n O9 K - ^9 q* X8 T7 r& b8 N3 L! C
给自己弄个j-Link" W. t. q+ V" O0 _! @* [* t
; |. |5 [6 L8 E- X
像专业人员一样调试
" j8 A+ u3 u l# k. T" M& l
- t; R1 R$ ?* @- {- 因为将低成本flasher和使用ST-Link和co混用,导致我我错失了调试得良好机会,
- 为了获得ARM-M0和RF的单SoC,我不得不开始使用RE,所以我必须有一个闪烁器和调试器
- 请注意,将ST- link更新为J-Link OB并将其与ST组件以外的组件一起使用是错误的。
- 所以我决定用j-Link EDU
( F, V ]! u6 P3 B- p c+ ]( I- R: m) O
为什么是j-Link EDU ?! K y, h# B0 k
4 K, S- Z$ @* T$ Q- p- u) h没有必要为诸如“它就是奏效的!”这样的理由争论太多。,这是真的,我试过了,也兼容了所有严肃开放的IDE,所以让我们更专注于比较
6 u* A( s/ _: j/ i1 H8 t2 Y9 X4 q4 t- I) Q) M
与ST-Link相比,j-Link提供的VTref输入可以感知目标电压,因此可以使用它自动化脚本。 $ M. {* [- J7 U R) [
N" I( A3 g, x3 |' v5 ]# X# ]
注意,埃杜是相对便宜(60€)使用仅供爱好者和教育,但有一个对于皮层M更便宜的EDU-mini(16€)。 ' F& E/ U! r+ t, w7 ~. i
i' e1 \1 B( p, O
EDU比mini有更高的下载速度,支持更多的CPU变体。 " \ O! h# K+ {% K+ c2 ~2 Z. y
) M4 n( w0 `5 x
它可以控制电源高达300毫安5V完全关闭目标,这是非常重要的测试自动化,因为它不同于复位。 6 J4 v- W. o' i* ^( q7 h
, e l1 s* f& o+ d
它有一个虚拟UART,而不是从ARM cortext中提升,但是您可以使用外部UART保持您的ARM程序不被修改,并将其连接到调试器的外部插脚。 5 v( M: p% t1 M
7 I; l4 W% u, ?' z- Q! D所以你可以试用,调试器,电源控制,电压传感和UART
6 C% P/ a- o6 [/ W( B4 x! R
/ y' P% U0 M8 y; Y; Tsegger设备的安全性正在提高,所以您不必担心在SW更新之后克隆会停止工作。 0 _) u3 K, V. H- x T J
0 T6 ] Y) F/ G! M+ H' \1 U c
从这里去哪里, Q0 j* Y$ W8 f5 @, b- H2 Z
) m" \$ W Y: F- {4 |2 G我将开始更新我的脚本和环境使用j-Link edu,我将打破与ST-Link实用程序的兼容性。
: m3 R( _0 A1 i p4 C6 L8 Z9 X+ C5 C" U# A& S$ S: w
我将评估调试器接口Ecpilse和segger特定的 # P2 `; j! t g5 A* G
! {! t+ c- _6 V1 }8 W" R! M, t$ a4 q
我将开始使用python包装调试接口,使其快速且可访问 . q H: Q7 Q. j/ h2 W
1 J' S. w# Z' m& ], T$ J* t; U感觉无刷直流速度和位置控制: X* N$ E+ R* @
7 ?2 W2 C( ?9 D/ P9 m* E" x
实验设置 / b% a" ]( c+ K t' u: Z* ~
- PS4操纵杆非常适用同时操纵多个变量,适用于实验,触摸板增加了位置参考的可能性。
- 这里的树莓派不是BLDC控制所需要的,而是作为游戏杆的界面,加上它的开发环境更适合编程。
- 虽然射频节点板内置了USB接口,但是USB软件集成起来比较复杂,而且使用内存,所以UART还有时间进行实验。USB到UART的连接也可以达到同样的效果。
- RFPIO板用于伺服电机控制而不是无刷直流电动机,但它是一个很好的无刷直流电动机实验平台,因为它公开了PWM输出并具有无线电连接。
- 无线电连接在这里用处不大,但它实际上是和非常重要的隔离介质之间的测试PC机和电机测试台。这种优势在这里没有使用,只是因为电源已经调节了电流。
+ h: @- O! ^7 N8 r ) M9 a6 n! [. @) {3 P
注意安全: ?: b( N! N1 z! k* Y, k8 F
( U3 H9 _* {- ~1 ~0 h使用带有实验控制器的普通电池是危险的,可能会导致测试台着火。使用保险丝、限流电源或可靠的控制器。 " g5 F. A1 l6 x" ~
9 w+ {6 Y7 j$ s0 l. m/ X$ m% j, e- 一个便宜的逻辑分析仪在使用的模式下,与Saleae logic SW一起工作,这是一个伟大的和经济的分析组合。
- 来自eBay的L6234D使用了一个商业化的模块,但是这个模块没有提供太多的选项,因为所有的支持都是连接在一起的,并且没有感应电阻。所以这只能在开电压回路中控制。* h2 S% A) E" J7 M. }
& E, O$ P& L! e) O, Q( L: k演示
% X! W# }+ N; P - N% M$ S' `, a R
这个演示中有趣的部分不是第一次旋转bldc的革命,而是:
, m& c7 z: J7 F- 在不同的环境中集成这么多小的SW协议
- 通过直接操纵多个变量并在逻辑分析仪上观察脉冲,人们可以感受到无刷直流电动机是如何工作的
, q2 M- u1 k! Z v, L. o7 K* k& [. R7 _( ]
$ k( ?. K) c# m) f; S开环控制:BLDC =步进电机 $ i$ d. J) z) e4 \
- 在不考虑转子位置的情况下,改变每个线圈的电压总是可能的。
- 如果电压不足以处理扭矩,这肯定会导致步骤的缺失。正如在BLDC中步骤是巨大的一样,错过它们会造成伤害,并且不会被忽视。
- 解决的办法是增加电压,但是你浪费的能量不是转矩,而是保持电机的位置。由于没有反作用力,电机处于静止状态时,电流要大得多。
- 在这里使用的无刷直流电动机消耗约50毫安,转速很少每秒和高达180毫安在停止位置与7.2伏特。
: U/ q+ z5 K' s1 @; B
" Q9 |/ w4 S& }( g: X$ I
控制参数 $ T9 t( y2 _# Z8 E8 e
每一个关于BLDC控制的新视频或图表都能让我理解更多的东西,这就是为什么尽管互联网上有大量的文档和教程,为什么不添加另一个简单的视图。 3 E( w) s4 t! P* u$ [& D. e
- 速度在应用下一个电角度位置之前作用于延迟,注意最大命令更新频率小于pwm信号频率,否则无效(图中两者的比例不相同)。
- 电压增加了脉冲宽度。虽然这里只显示了一个pwm信号,但是这3个信号的宽度脉冲都是成比例地增大和减小的。
- 从软件的角度来看,这个位置甚至更简单,因为你只需要根据手指在触控板上的移动比例增加或减少电角度。每个角度的正弦信号被用来定义相应电桥的脉冲宽度。) T' C, k" o g
软件
8 ^. u U& c1 B: K& V7 E5 \+ N& I抱歉把源代码作为图片,但源代码插件是如此菜了,代码几乎无法阅读,所以我保持VSCode的颜色。/ W; h" d' o% _" C4 A: b
& \" L$ |6 Y( B7 G ?& U神奇的地方就是,角度为int,让它更简单,我甚至不使用一个合适的单位作为放射微粒或学位,而256°256/360单位适合表窦porecessed一旦和存储为查找。! }3 n1 @1 L' u$ o1 J! s
) a6 c/ L9 g3 O+ u4 U: W9 K1 @! y( k; _4 V6 @8 E3 q. b
当M3以72MHz运行时,对浮点数的实时计算花费了7.2 us,而这里的查找函数只花费了大约1 us,所以对于50 us pwm周期= 20 KHz(最大控制刷新率)来说,这仍然是值得的。4 l/ u3 e; v q6 W' d/ t
! a& L ]3 a5 n$ R. k" H3 Y, f" f$ _, G8 y" W7 ]0 |6 V- }! d
请注意,L6234D可以高达150千赫从死开关时间的观点。5 E3 }, z2 C( j
# H# F: _4 y4 s6 O9 F* B
* ]/ X7 y/ _: Z* ^
我使用mbed-os作为开发环境,为什么要这么复杂的使用它呢?8 A! a: k7 C' Z& V3 a
PwmOut pwm1;
" B1 F+ y: c6 r6 [% M# T
% L; j3 r& d( E% P1 r0 ]& [pwm1 = 1;
! ?6 B4 t6 q* Z* h Y: d这很利于开箱即用的配置和初始化。它可以为您做任何事情,从cmsis HAL api调用到计算应该将哪些引脚分配给哪些替代函数。它配置pwm模式,所有堆栈都要经过赋值运算符的重载,这会使函数时间从微秒变为毫秒。# T/ N2 R, F( M$ g3 ]
; v8 r1 e/ L% U5 ?0 O" s
这就是为什么寄存器的直接使用是围绕一条指令的。! z- T$ G2 Y& ?1 {% `, P) E u
l7 ^+ e5 f. V) @" p6 L V& Z. p- L; _
信号, y, ]7 R6 _6 o( H/ X
! M8 W" W# p& O
- 我们可以在逻辑分析仪上看到中心对齐的pwm信号。
- 注意,频率显示为10khz,而不是上面提到的20khz,这是正确的,因为将两个脉冲粘在一起可以将变化减少一半。
1 x7 x5 F3 ?$ X7 a8 t, ?6 m
5 I2 D- E0 h8 @0 n0 L; |! T! s/ a' ?8 W- i+ v- W0 U! W
结论
7 M% C; R2 D. x1 d8 l1 I$ K
5 X0 Z8 h% O# g( I) a% g$ w一旦你同时控制了速度和电压,你就能更好地了解电机什么时候停了,什么时候没踩踏板,你可以按住它,施加更高的电压,看它什么时候能克服施加的扭矩。这不是科学,但是可以让你更加随意的处理其他科学公式。
6 w4 h, k) p! i& g) v7 P5 Y7 s2 w" Z9 D! x7 c3 _# I
下一步是查看扭矩控制回路,然后可能是反电动势监控,为BLDC设计一个特定的扩展板,并在面向现场的控制视频前进行冥想。但可以肯定的是,对于我的倒立摆移动机器人的计划来说,这种控制已经足够了。
: ^$ A2 L. \- w) {2 k1 [8 K6 |) t( T. ~: J
即将到来&创意
. q" w: S8 l9 }$ l4 B/ D/ p
, Q3 M, U+ u# y( ~ V带有传感器的射频节点已经启动并运行,RFPIO已经启动并运行,是时候考虑下一步应该做什么了。
$ K! ?$ B& n! F5 _
! f- r6 P" n7 W- G; p- 超声制图采用多种低成本HC-SR04或05
! S9 g5 j$ H) ]7 X" l Z$ _ $ t* b; }7 t( T. m1 G& `$ q# ~4 B( j
实验见hello_超声样本。
v k1 x! E' ]/ d: ]: A( ~3 C 扩展板应该为多个超声波传感器提供准备就绪的连接输出
+ \5 N8 M" U; P [' X' N( W* x- BLDC:经过很长时间的犹豫和反射后,一个严重的跳跃机器人操场不能绕过电机控制. ^" g6 e7 p1 h! J
+ z. U7 `; T" j/ n' u; z. Q: _+ m
使用L6234 PowerSo20模块或稍后一些较低的电流L6234直接浸在同一块板上。
G/ \; Q" Y5 w! k. O3 [8 w* j- 只使用伺服:x24引脚和x12伺服的RFPIO双使用不是只使用伺服的最优尺寸,也许另一种最优的布图对于一些疯狂的多伺服项目会更方便。, o7 K% z8 }$ h5 }; i4 O
& h5 F8 ]. \" K5 t& J
+ |3 ~; r8 f5 _8 N! n% U6 B! y: ]# g1 S& J' A J
来源>>! X. u N" ~( `) H! {+ J
|