|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
COCOFLY教程 ——疯壳·无人机系列 飞控整机代码走读、编译与烧写 , E' U/ K8 N9 e/ G& p& i
. Q( {2 d# H3 [5 f; C5 A7 T/ J6 f7 m+ d: R. X5 B$ b
4 E6 N/ u4 p% w {
& b7 F' o( R% b% d5 G
图1
/ D! M' D3 ?& u. y3 |6 K' n- O- S& R% z% ^7 x
$ y6 E6 C4 i/ V' m% ^一、代码架构
9 d% P. j i/ X, N) l7 ^ 飞控的整体代码工程由 8 个工作组组成,分别是 Ctrl、Driver、VL53L1X、STM32_LIB、USB、USB/Lib、StartUP 以及 Drv_Point,如下图所示。
/ X: C1 G9 u0 n/ B1 m1 t8 S
" [& i! y9 g+ o0 [$ I
( E0 P5 w) J* D6 [, K# [3 b$ `图29 ]1 r8 f& ?0 b7 o, X- \2 V
各个组的具体的代码功能如下表所示。( N( m5 Z, r) y; V' k% M" Z
- E% h9 d z+ t r$ A6 j
! Q& P# m& L8 w! {$ \表1$ ?: [2 G' T1 f+ [" f/ N
9 N* T7 Y+ `: j, { }二、代码走读
$ @4 M. v4 x; p8 y" _( X' [+ J
h7 D8 p' w2 d 系统的主函数部分是整个代码的起始运行位置,在主函数内主要做两个事情:1、初始化外设及参数,2、轮询线程。( S; _( E* l( W6 o8 s
, K8 M: g: L. j( v7 g8 `, {1 m
+ ?/ i, |* } n) V6 [& s! }图3
, s* K! v* d! `/ W4 o) n7 X 系统的每一个线程都已经分配好了运行周期,在不同的线程里执行不同的事情,线程的切换通过函数指针的形式切换,而系统的运行时间由 sysTick 提供即系统的“滴答”时钟。各个线程的入口如下。
. N5 s8 t& B% i' o" H5 D: s" }3 Z: F/ S( [) {+ g' e
q+ u( C& ]+ e" K5 v& u
图4% }) ~! k3 J5 g. L7 H7 P
分别有 1000ms 周期的任务、50ms 周期的任务、20ms 周期的任务、10ms 周期的任务、6ms 周期的任务、4ms 周期的任务、3ms 周期的任务以及 2ms 周期的任务。5 g1 @% k( X, A/ r% @" \
整个飞控可以平稳飞行,重点在于控制部分,即工作组“Ctrl”里面的代码。如下图所示为“Ctrl”组的代码框架。- f- A9 Q3 C8 T7 ^" _
6 d, H# Q! s$ e$ C- C
0 t2 C/ w+ ^2 s( O
图5
& |# }8 Y9 @& [) x C 其中与遥控器、上位机的数据通信处理包含在 Data_Transfers.c 内。里面无非就是对数据包进行拆解包、封装包等。如下图所示为对接收到的遥控器数据进行解包分析的代码。
! H: t1 W2 Y3 x) f# h, o) A7 w. g1 {& N) X0 m5 F
2 C0 M% Y- R, T' [7 R0 s
图64 b% l0 N# z8 d, V
; \# U9 H' c- Z8 Z' A# v' M
$ s% F2 O, P4 a) k+ b图7
' ~0 `+ ~) N3 Q0 e1 O' R( r6 h& w* V R @* a4 e, r" s
- _; Y! C* e) O" X
图8
: N/ ~% J( C2 L
7 J' r) ~. Y, S% h
- \8 L1 k% q C0 e, f! v. t
图97 ?! O- \ X: s, _* c" D7 p. P
, a( Y4 X- m+ }) U
0 q( Q! J$ H4 V/ {图109 D. q" P5 o7 z; q' w
* X5 j& M9 a* d, O% F1 ^# j6 C
+ y5 Z! H" W2 t图112 L( f) t6 G$ A7 B- D
( r6 E9 h& w) D3 O
7 Z, ~: t3 c$ ?$ J# a& Z图12
1 M- E: t" i9 n5 o" X9 l" t* L+ P7 i* m0 b
" \7 D- \( p1 O9 g( A图13
9 O- a( x% R" B: r" K) e+ b, l+ F. g) ?5 e0 @$ G, h, C/ x) T3 r
9 F' ?, D) T# `$ E
7 m0 }, v- X1 T$ C7 Z6 P } C图14' D$ V- R2 U0 {# \- a4 I
三轴数据的获取处理在 mpu_perpare.c 内,如下图所示。2 L9 V' S" R6 a" Q0 ]
0 L. D8 `$ M3 }# k+ c6 U0 D7 k
. h5 D' @1 L$ b
! S1 T4 Y& x; o$ }1 `$ o
; m" [ q) a+ l
图15; o) i& g# o! L) z9 S- y
PID 控制相关代码集中在 Ctrl.c 及 Alt_Ctrl.c 内,其中 Ctrl.c 负责角度环、角速度环 PID 控制,而 Alt_Ctrl.c 则负责高度环、高度速度环的 PID 控制。3 `2 @/ X& z: O. t
IMU.c 和 MotionCal.c 是保证整个飞控平稳飞行的重要一环,这两个 c 文件主要负责飞控的姿态解算、数据融合处理等。
( C, K' v4 ^ T) |+ y, F- ?' {! X4 t* z/ ~- o8 a
T1 |: W/ p5 l2 E9 I7 o
工作组“USB”以及“USB/Lib”,负责通过 STM32 自带的 USB,虚拟出串口,方便与上位机进行通信。+ b% c0 W& k( I J
此外为了保护开发者的劳动成果,Player_Flight.lib 还封装了秘钥验证激活算法、多机编队控制、水平方向的速度和位置环的 PID 控制以及 3D 翻滚控制代码。
) R; q$ W+ x, G; f 保存、编译最后把代码烧写的飞控主板中,配合遥控器就可以正常使用了。如下图所示 1 为保存、2 为编译、3 为下载烧写。
$ w4 C5 z H! I$ y1 p2 x# F* e) r* D1 W% W* d! A# p
p/ x7 M v1 ]3 c2 d图162 R K. W: T1 ~" H6 `" f/ J% n
, v9 s, w1 m- F! s: X
7 T3 r! D& @5 N$ ?1 l5 a$ a
& K2 `$ v0 h! C" \& }2 d% i$ `6 x+ s
) _$ V5 C- N( a0 x1 |' ^' W4 P" r2 `4 S: r G C( [% R
更多完整学习资料和对应开源套件,请登陆官网:“疯壳”
% ^% Z! W! w2 f: r" |& x. ]9 @( E1 q5 ^7 t% ]+ q- a0 u
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系8 i" h% P. h9 k, r
1 }) N+ \+ Z6 [- \/ s0 ~/ f文件下载请点击:
【1】飞控整机代码走读、编译与烧写.pdf
(1.17 MB, 下载次数: 1)
$ w$ m: O5 P( M& q4 L: x6 G8 l
& P' }; O/ R( C1 N" `% D/ y
* r+ `8 `( P( M! ~" g' P
|
|