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

【基于STM32L432的飞控】 精华  

[复制链接]
Cortexxx 发布时间:2016-10-21 14:29
本帖最后由 Cortexxx 于 2016-11-23 14:00 编辑 5 N7 l$ O/ {& `3 A- ?

0 U& H) f; M5 g. U& ]4 _* }' j# U8月份众筹的板子  今天分享一下四轴飞控    o( U% M* D( M. t, n6 ^1 ]/ w# ]7 R( c
Nucleo 32板子比较小比较适合做飞控
% Q' g/ n% @5 s采用了互补滤波和串级PID. V3 x3 Z4 [' w8 R' Z) O
个人认为最重要的就对PID的了解 和PID的调试
0 D; l5 a& x! `3 P, u! d! r' @
6 k% W  g& z( Y
# }! q" P  f  q第一步 买买买  h0 H" ]1 @( ?- }5 u9 `9 t& A5 p
无刷电机: LZ买的是朗宇2212 980KV 电机;    买电机的时候不要贪小便宜,贵一点无所谓,买个正品比什么都重要;当然如果程序写的好,电机好坏就无所谓了。. Y  B- K. Y  d- K
电子调速器: aka 电调 好盈20A
) I) l+ p2 s& e$ ^& G5 w9 r" Z5 g3 H8 I螺旋桨: 9寸
8 l/ S4 {2 f* {4 o遥控器:天地灰6II
/ _6 [. F: M8 m. X/ I! p   遥控器比较贵,建议买个二手的玩玩。天6足够用了 6通道的。
3 M7 ~/ [: o) t- d9 D% X! P航模锂电池:HRB 3S 35C 3000mAh  种类挺多的 钱多就买好的 没钱就买个中等价位的;无底洞!! btw 还要买充电器. g( D* l# L2 O% l& \) F: h
6轴传感器:mpu6050 8 I& O# ^- h5 P! R! J) e
主控芯片:STM32L432 主频100MHz Nucleo32 体积比较小做飞控板很不错的;之前用了一块Nucleo64做过,实在有点大!7 ]  F3 V" W" d+ t, p# ^
机架:450% R* b' @: R2 j8 E* c
PS:还需要一个降压模块12V->5V的 酱就差不多圆满了 还有一些小东西 比如说 镍氢电池 扎线带  blah blah blah3 C; |; K* e1 \
- o8 l: f) Y& v* t( d( }/ {2 p. y0 }

9 i5 E5 j& \. B6 N1 Z. t$ D第二步 调试陀螺仪
* V' y: l! ]1 |* F安装什么的就不说了 还要当然如果是第一次做的话 做个十字形的比较好调试 LZ是新手所以做了一个十字形的
) g8 B# w- M: C+ J5 E! K# \/ @' @mpu6050用的是IIC接口 LZ用的软件模拟的IIC
, H# N# w* F3 Z6轴传感器 分别是3个方向x y z 方向的加速的 和角速度
4 P4 ?0 }* V% oLZ采用的是最简单滤波方式--互补滤波 ! n+ G" b6 X& W( f2 u/ a
卡尔曼滤波没弄过,想弄卡尔曼的话自己好好学学吧!毕竟响应速度快。8 j, \4 W* V  b4 M/ d, i1 a
, K; e# A/ a- J# D8 r+ a/ t5 O: T5 p4 m
1.IIC 和 UART 程序
  R  ?& M4 J( M' E9 `# g2.初始化mpu6050
) H2 t9 Y8 r9 H4 S6 b3.滤波- F: p* T" c+ r# L- K9 G2 O
QQ截图20161123135923.png & G, z, E( _% n2 [9 h9 U( j
  1. <blockquote>mpu.AXtemp=(float)((Get(0x3b)-145)*0.2f+mpu.AXtemp*0.8f);
复制代码
在滤波之前需要消除零点漂移  加速度 和角速度都有零点漂移 而且产生零点漂移的因素有很多 温度 气压 etc..
+ j. A! I* {& u9 q  `! h/ u所以每次启动程序的时候都要初始化零点误差。 LZ只初始化了 角速度的零点误差。因为加速度的零点误差 需要放在一个固定的已知角度来调; 1 e2 ~' ?% G5 d' H( S, L, S( h
上面的 程序1 是互补滤波 & z  s8 d+ A4 a4 I0 D. j
AX AY AZ是加速度的值
4 g2 ^$ y  ^$ A! `/ n* {- U# pGX....      是角速度的值0 k0 j8 D1 e3 N: q# z0 G7 x" q
GXErr        是角速度的零点误差值
- H, j4 S$ r7 |0 ~' ?* aGET 加速度 和角速度值的时候 用了一个低通滤波
# o9 E% E6 n0 ?9 e5 n7 O' I+ {: d然后开始单位换算  之后的anglex+=(mpu.AX-anglex)*0.05f+mpu.GX/500.0f*0.95f;  是互补滤波 由于Z轴是旋转轴用不到加速度所以就直接把角速度积分的到 角度(自旋)的偏移量;
3 g$ |' ]( K1 w0 E; O" s! t! e得出来的角度也不知道好不好看 所以这时用串口把得到的角度发出去,然后用Excel把得到的点绘制成折线图。观察图像是否圆滑。有没有阶跃。1 D9 Y$ ]' Y$ D% E1 u  [/ t5 k
                       角度读取的时间间隔必须保持一致                     ' |7 k. J( {/ g7 g" z
所以必须用定时器读  LZ采用500Hz的读取速度。 因为之后还有积分微分呢 周期T必须一致
% K  |5 Q, H7 x9 H" {- e  J第三步 遥控器&电机驱动
  S  s" ^/ R" d- I8 }遥控器发送信号到接收器,接收器输出50Hz的PWM 高电平时间≈1.0ms~2.0ms 具体多少用逻辑分析仪看看吧!
% ?: s) j2 X. \" t1 L! q8 r5 _0 f只是让自己知道占空是比多少这还远远不够 还需要让单片机知道!8 I) _: Z+ O7 G* |
两种方法:输入捕获   或者外中断加定时器' @; g* l7 @) Z/ z. n
LZ用的是外中断加定时器  上升沿来个中断让读一下 TIMx->CNT的值 然后下降沿在GET一下TIM->CNT寄存器的值  两次值做差就得到的高电平时间。酱就可以了;很简单的;! O' D2 @% u4 y: x
无刷电机的驱动
) {+ K8 e' N/ XMCU输出PWM(50Hz 高电平时间和遥控器的高电平时间一致或者成一定比例)->电调->无刷电机4 ?/ I6 l# V( S& X/ h
我是这么写的程序:1.当接收器的值小于一定值的时候 关掉所有电机  2.然后把增大的值 X0.5或者0.6(自己定) 在加上基础的值
# {" t. P  R; M$ l( P; D; u第四步 PID
, |3 |" }9 F$ _& p4 |1 j7 aPID控制器 包括比例积分微分4 Z/ U9 v( }% w7 z6 z& Q5 S; [* @, k
航模采用的是位置式PID" Z5 E# C6 R  a, W+ A9 I3 X
比例环节 理解很简单就是误差 × Kp 可以理解为系统响应的速度Kp的值越大响应速度越快 过大就开始震荡+ R$ _6 U/ h" z( i' q

0 v: U! H' R" o( a; f3 l8 n
' ^, d/ Q" h( z- D* [6 F1 Z
微分环节 微分就是求导  位移求导就相当于速度  速度求导就相当于加速度  mpu6050自带角速度 就不必把角度求导了 直接用陀螺仪输出的角度就即可;" n) o8 D/ e  J3 h9 o
可以把微分环节看做一个负反馈,或者说当做一个阻尼系统,如果速度越快微分出来的值就越大 当做负反馈来较小相应速度。当时 朋友给我举过一个例子,一个摆锤,抬到一定角度之后松开。一开始的时候摆锤的高度最大,所以垂直于 摆锤绳子上的力(沿运动方向的力)最大。可以把这个力理解为比例环节的值。当 摆锤 运动到零点时(期望位置) 速度最大,我们做的PID目的就是让他在0点的时候停下来。OK 这时候我们引入了 微分环节(阻尼系统)--空气阻力, 空气阻力一定是速度越快阻力越大。 这样的话摆锤在来回摆动第20个周期之后停了一下。很明显阻尼系统太小了。那好吧!!这次我们把摆锤放在水里,可能两个周期就停了。所以我们就说这事一个调的比较不错的PD系统。(没有积分环节所以没有I) 4 s5 l7 b9 U# @7 U3 D) ]! [* E, Q; A
上面的例子可以看出 放在水里 比放在空气里面要好 但是要理解成微分环节 越大越好!!!- r4 h" _$ e9 U

1 w% E& H% l0 U1 ^! R# l7 {

' u! e, ^" [, H; H% G) j( D积分环节:I 积分 换句话说就是累加的和  作为一个成熟的飞控系统 积分相当重要。但是 自己写的飞控感觉对I的要求并不算高。
; @5 ~: g8 k! Z" I- HI 累计误差,误差值的累加如果说你的飞机的重心不在中心上,那么一定要加一定的I作为补偿。
7 |1 Z( l0 D# y1 ~$ I$ i再用上面的那个例子 这回把摆锤放在沙子里,好吧!!他根本不回到达零点!!沙子的阻力太大了,所以这时候我们需要加上个 积分环节 选出累计误差。时间越长累计误差的值就越大。可以想象一下一开始差了1°,控制时间是100Hz 的话 一秒钟之后就到了100°。相当可怕了 所以积分环节一定要加上限!!!而且积分的Ki要小一点!!
2 C* a4 J: X, v' ?) g0 |& I* h0 W) |: h9 d; K3 j, w8 e! [
+ |1 r# y! ]# k4 N
这样调试完成了 去空地上试一试,JEEEEEEEZ 四轴跟陀螺一样在地上转!9 p; d) ~3 ?  S4 @& O7 W3 N- J
没错 我们还需要最Z轴进行PID 和上面的调试方法差不多 只是我们只用到了Z轴的角速度D。 Z轴速度的积分想到与 角度P, Z轴角速度积分之后再积分。相当于I。
2 F1 u9 j1 F' N

& h2 [/ S, u6 y+ ]) {, L  SPID系统也要在定时器中断里面运行  控制周期指的就是这个!!!  速度可以降到100Hz或者50Hz!如果降低频率的话需要对PID的一些参数进行修改!!!!!!!
* J6 |' Q2 Q4 Z0 i% t
5 u5 D, ^% w. h; K! M1 ]- A
第五步 PID的调试  重中之重
7 |/ O: Z1 a5 n6 G. QLZ对PID的调试也没什么经验,这东西全凭感觉! 而且需要和你的四轴有一定的情感,随心所动2 X. n/ y% i$ D
如果感觉自己的PID不稳定的话 可以使用串级PID  就是上面的到的PID输出的值 作为第二PD(没有I) 的P的输入量,然后微分D 这次需要把角速度进行一次微分,得到角加速度。 PWM_D_Y=(mpu.GY*500.0f)*PWM_KD_Y;  我程序里面写的*500 其实相当于/0.002; 然后在输出给电机。
' ^8 B% j# S  y3 k6 X" k$ ^  ]- A5 m2 \
上图!上图!上图!. T$ v# l1 |/ y% t' q) o5 b
P61123-105423.jpg 9 }: t0 C8 }; t9 q# {9 r

& j$ ~0 d8 b% _8 f9 l% I( V P61123-105429.jpg * Q9 E  n; p; C0 C
" f9 ?$ N' X: \( f7 U' k! t
P61123-105439.jpg
8 \8 s- A* o$ P; m, j
" x  L. T4 ]0 A" b( l' l' O里面带的那个ESP8266的是我之前想法的帖子 但是没发 这回把那个工程再贴上去吧 9 Y: b% f$ r" r" ?9 b! d5 V7 z+ F
仅仅只是点个灯 而且属于局域网的wifi 没连接外放 如果连接外网的话需要在网上租一个云服务。太麻烦了 而且还需要花钱 就没弄!
# L  ~8 O. o( o+ F  Y
" ~& G1 h9 {0 u" ^4 I: D+ d2 o; ^ Flight_Ctrl.rar (1.42 MB, 下载次数: 296)

评分

参与人数 1 ST金币 +10 收起 理由
zero99 + 10

查看全部评分

收藏 5 评论45 发布时间:2016-10-21 14:29

举报

45个回答
Cortexxx 回答时间:2016-11-28 14:19:39
zmh169 发表于 2016-11-28 09:018 W9 {, G6 \* M& x" H% m
门外汉,看热闹。飞控就是控制电调的中央控制单元吧,相当于汽车的ECU?
: H3 ]+ q4 ~8 A% I
对 但是我对汽车电子不太了解。差不多就是个闭环控制 读取实时角度 反馈给单片机 然后根据角度 改变电机转速。 达到动态平衡。
Cortexxx 回答时间:2016-10-22 18:05:14
g921002 发表于 2016-10-22 14:24$ `! o9 L3 D" V) @# B
裡面有關ESP8266的代碼跟使用很棒,感謝!!

6 c% F, |4 z( a6 T) L4 X  最开始玩了一下WiFi 然后就直接拿那个模板写的飞控了  
jackten 回答时间:2016-12-4 20:27:27
谢谢分享                 
zero99 回答时间:2016-10-21 15:54:31
谢谢分享
11:493 回答时间:2016-10-21 15:55:49
多谢分享。学习了。
车厘子 回答时间:2016-10-21 16:35:05
高二毛 回答时间:2016-10-21 17:31:06
感谢分享。
assssdz 回答时间:2016-10-21 22:24:22
:):):)
ynwscfsfi 回答时间:2016-10-22 00:14:39
感谢分享!
disheng4688 回答时间:2016-10-22 09:24:42
谢谢分享
黑皮男 回答时间:2016-10-22 10:39:19
多谢分享
andrewz 回答时间:2016-10-22 13:08:44
谢谢分享~
g921002 回答时间:2016-10-22 14:24:54
裡面有關ESP8266的代碼跟使用很棒,感謝!!
zbber 回答时间:2016-10-22 15:23:18
感谢分享
原田夜舞love 回答时间:2016-10-23 23:13:44
谢谢分享( n7 t5 n. M* R' w% L
爝火燃回春浩浩 回答时间:2016-10-24 01:49:17
支持,太赞了。收藏了。
1234下一页

所属标签

相似分享

官网相关资源

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