找回密码
 注册
关于网站域名变更的通知
查看: 249|回复: 1
打印 上一主题 下一主题

【飞控开发高级教程1】疯壳·开源编队无人机-飞控整机代码

  [复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-21 11:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
COCOFLY教程
——疯壳·无人机系列
飞控整机代码走读、编译与烧写

& g+ @- H, j6 j$ m7 m; J6 Y; A/ e) M4 H0 X# }1 R) P: w! a; _) Y& j% v

1 D8 b. x% E- G! t1 f
3 j% w( f$ ?- d9 K2 Y5 b- K' y0 L
7 M1 K0 B9 @7 K# c& V& |图16 _* |0 J' T7 I7 _8 p* w' p0 b

# T$ T" @6 H0 E
( M$ A0 H: J2 d) r5 F& B7 j一、代码架构+ R* k2 C! L. p+ @  E& D
  飞控的整体代码工程由 8 个工作组组成,分别是 Ctrl、Driver、VL53L1X、STM32_LIB、USB、USB/Lib、StartUP 以及 Drv_Point,如下图所示。; u& m+ X: o" i6 x. Z# X: l
/ X/ f3 ?- s) J4 ^3 r; U

/ W; z) b8 x+ V) h. d1 _8 N图2
* J( h$ c. u! O1 E7 ~  各个组的具体的代码功能如下表所示。% X* T2 x1 F- f& M5 P. j
# h; A) b4 Q3 z) m; J  e6 O# d9 W

# k- q% E/ H) a2 C4 u+ k+ z表1
# D7 \9 `5 U3 r1 R% b
) F5 M6 g5 H  |: P二、代码走读: u6 D5 B, w  x/ V' b$ c
- ~7 ^+ i; ~2 m5 }5 `, G
  系统的主函数部分是整个代码的起始运行位置,在主函数内主要做两个事情:1、初始化外设及参数,2、轮询线程。
. B. {( P0 }7 r* x
9 e9 D; p6 w4 x1 z/ U) }% S & \' B4 a: p6 e! a
图30 d% X1 U: {) v: v' d# k5 ?
  系统的每一个线程都已经分配好了运行周期,在不同的线程里执行不同的事情,线程的切换通过函数指针的形式切换,而系统的运行时间由 sysTick 提供即系统的“滴答”时钟。各个线程的入口如下。+ n) ]) `  K+ J5 O+ @) E
5 v3 N. p% c1 a0 K1 S3 c
8 Q/ f' S% ~8 E  Y
图4
) v0 U- G# X) }- t+ G2 M! V  分别有 1000ms 周期的任务、50ms 周期的任务、20ms 周期的任务、10ms 周期的任务、6ms 周期的任务、4ms 周期的任务、3ms 周期的任务以及 2ms 周期的任务。
: W3 j. ?8 Q6 q5 h* o  整个飞控可以平稳飞行,重点在于控制部分,即工作组“Ctrl”里面的代码。如下图所示为“Ctrl”组的代码框架。- k6 k: f( ~0 @. z; V

. t' i% U( K9 ?7 W- v0 V' _# Y - _( J+ g, e7 r# y
图5$ ~& X; l% k- [9 i2 g
  其中与遥控器、上位机的数据通信处理包含在 Data_Transfers.c 内。里面无非就是对数据包进行拆解包、封装包等。如下图所示为对接收到的遥控器数据进行解包分析的代码。
* a; m5 R$ R7 M$ x9 L3 t0 E1 E* X
) M# S1 Z& f0 P5 f$ j. u& ]  ] , j# r6 q2 W$ p" t2 }3 f8 x" E
图6
+ D) d" t* ~& o8 k9 w$ Q1 M6 a  X+ }1 S8 S

- K# @, j; ?* p3 T图7
: }8 H4 X/ y2 a3 H: {3 {
+ |5 \. x) n1 v$ M, A- {* C
9 ]6 a/ S( t1 N图8
% T0 D- e& \2 i( [# c9 k# e9 `! c9 Q! n2 i" r, ~) Q9 Q( p! i

' u4 v, w# w+ w* S5 B/ k9 t图9
, ?' J- E' |: }/ M2 _" [7 C" X' B# i) C
( B$ \4 y# x. q; S: \ 1 d' U% H8 D5 `  x- h
图106 E5 m1 t' Q* J- V$ W

, n# O( U$ S$ R   r7 j% N+ o+ \- A
图11
, D5 R& r5 {% N7 b' @1 r- J  K1 {7 T
( P; B% Q5 w5 }9 v, r/ e" \+ c
图12/ u( s: M8 |$ g9 u# @, V

8 E0 _# b, S  d8 u
( x2 M4 b% j: S( o( V图13# p6 V/ X% r) ^3 t7 O
0 b0 J1 ~# a0 i
( @* q* n# ~/ N7 u

4 J+ C5 k' I7 m$ a( z图14: u- y: ]1 f( F1 O
  三轴数据的获取处理在 mpu_perpare.c 内,如下图所示。9 F  q; [8 O- H& \2 ]6 R( q
" E5 J$ m* O' G* `! v( d

( B" W5 L2 z9 H. e0 m' y" ?& d 9 @; I: Q7 Q; m

) k+ E- X* {, N* _$ h1 O1 q图15, B% S5 N& j9 u. n$ y4 V
  PID 控制相关代码集中在 Ctrl.c 及 Alt_Ctrl.c 内,其中 Ctrl.c 负责角度环、角速度环 PID 控制,而 Alt_Ctrl.c 则负责高度环、高度速度环的 PID 控制。
2 d1 p! b2 x) C  IMU.c 和 MotionCal.c 是保证整个飞控平稳飞行的重要一环,这两个 c 文件主要负责飞控的姿态解算、数据融合处理等。
3 A% h6 u3 J8 _5 [0 `, R) ^
& @* K; i$ b6 ~" \+ }
- X5 N6 h4 k. t0 k6 l: I  工作组“USB”以及“USB/Lib”,负责通过 STM32 自带的 USB,虚拟出串口,方便与上位机进行通信。
! H7 E! g8 }+ j9 H1 U  此外为了保护开发者的劳动成果,Player_Flight.lib 还封装了秘钥验证激活算法、多机编队控制、水平方向的速度和位置环的 PID 控制以及 3D 翻滚控制代码。/ K) B6 m5 S% L8 x- p& I2 T
  保存、编译最后把代码烧写的飞控主板中,配合遥控器就可以正常使用了。如下图所示 1 为保存、2 为编译、3 为下载烧写。
# t' W. s  Y" L4 s, J! o
, Q1 U: D- l: H
+ }6 K* U/ h) Q5 r- }0 s( v$ u) }图16
5 H' [3 R) P1 y0 v, k
# }) K) A1 L& T* o/ M  b
6 l5 C6 a5 p. b& U  L0 V
# c# z& b6 Q3 N7 A) ~! H$ n  n6 ?6 C/ _3 U4 K1 y* P  d8 ?
2 \5 O% z9 f$ e  p3 X4 }+ c
更多完整学习资料和对应开源套件,请登陆官网:“疯壳”
$ \$ ?& m! ~' S6 C
" f! y% M+ ]+ F5 ^9 a; m: Z如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系7 C: z: l& h+ R' j& k

2 R7 ^7 ~8 S* u0 S  p* y文件下载请点击: 【1】飞控整机代码走读、编译与烧写.pdf (1.17 MB, 下载次数: 1) 2 _9 s% G! W8 H

! H! r) z) ^. l, a7 D. s3 g& }6 t9 Q" k) E" S

该用户从未签到

推荐
发表于 2022-7-21 13:32 | 只看该作者
看看,学习学习。多多交流技术上,或者使用上的问题。以解决问题为原则。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 19:42 , Processed in 0.171875 second(s), 28 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表