|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
COCOFLY教程 ——疯壳·无人机系列 飞控整机代码走读、编译与烧写
: }( I$ g, e% I- I) X5 ?4 e3 @! h' g+ \- C: R! n3 J& E
5 c; r/ v8 y6 o
4 U, `3 N7 Z6 K% @+ V: |
* b! `7 g' I5 X% q8 Q; f+ n* |! s图1
e, \% U4 W7 o) B) J* T' B; h! c1 X9 l3 K. X( b1 i N7 {( J
1 ~) @; _* z" k" u" G7 N, G9 _8 p1 l4 Z
一、代码架构! u8 C* l F1 w+ z, Y/ c
飞控的整体代码工程由 8 个工作组组成,分别是 Ctrl、Driver、VL53L1X、STM32_LIB、USB、USB/Lib、StartUP 以及 Drv_Point,如下图所示。
: T7 J% Y4 f4 V- }9 S2 ]; [
/ O# ?2 x5 H- C; x+ Q
, y# {. ]; W/ H9 I( y图2
0 S# [1 K3 m* {4 K, o 各个组的具体的代码功能如下表所示。
8 h; l5 Z# X5 Z$ ~% P5 ~5 M
! f9 X, {$ O% b* |6 k. c y2 @4 q
8 L+ ` S5 L* Y8 R! O8 j& o5 w/ `
表1. u2 v/ ]. Y; c9 w9 A% _
3 `! d. d" _/ P# o. f
二、代码走读
$ c. z( F2 x+ o; U, O) o: q
: K1 z. l) S! M% ]) V N' M$ b 系统的主函数部分是整个代码的起始运行位置,在主函数内主要做两个事情:1、初始化外设及参数,2、轮询线程。
* P9 S s( s3 B1 Y. ?. r
' E. r1 ~ u! ^- o
$ t* g3 ~3 O! w% |) [8 F
图3/ |7 \5 Z2 e$ J
系统的每一个线程都已经分配好了运行周期,在不同的线程里执行不同的事情,线程的切换通过函数指针的形式切换,而系统的运行时间由 sysTick 提供即系统的“滴答”时钟。各个线程的入口如下。1 ~: n% x5 _) B/ _
# U! s( y7 M, N: }# ?. b
! Q- U/ e, {$ H9 o, l+ B
图4: q7 H: B1 l M3 g: \* B
分别有 1000ms 周期的任务、50ms 周期的任务、20ms 周期的任务、10ms 周期的任务、6ms 周期的任务、4ms 周期的任务、3ms 周期的任务以及 2ms 周期的任务。* h- T, _/ r, I+ o+ m- X3 s# X
整个飞控可以平稳飞行,重点在于控制部分,即工作组“Ctrl”里面的代码。如下图所示为“Ctrl”组的代码框架。
, Y! F: F# `* Z" [) [- p) u" G+ Q+ x2 j
" w, M7 ~' z7 f6 h1 p+ U图5) V* K3 M- y- [: F1 M% X
其中与遥控器、上位机的数据通信处理包含在 Data_Transfers.c 内。里面无非就是对数据包进行拆解包、封装包等。如下图所示为对接收到的遥控器数据进行解包分析的代码。
( b+ v2 V# D9 A( q# c a
% c. S: [. r9 r4 k. l$ K/ h
3 X& E3 P4 W4 m' f: ~图6
/ c* F" g7 V. H3 _- d& B& ^( s5 P. \9 U$ m
; l& m8 f0 B+ M6 i. A3 u4 i
图7$ J6 T6 {( C" q, D8 t# ~
' m2 ]! _/ E' I9 l& i
( R3 m( S9 f" K0 H$ z. z6 K) H( p图8! L, Y0 w8 @& {$ p1 V7 n1 ]2 g
0 l" R* G/ E# u3 h( Z& K3 m# k E
0 _9 Y4 w8 C$ V+ ^- V
图9
2 |. S$ c# x8 R! U; x5 O, R$ e$ G+ j7 I
$ p7 g3 U& z4 B; I5 X* K8 I; Z0 Y图10
" j# A- i" B$ |0 a9 T3 F1 c6 C( l: t$ U& {* }
3 O, V4 i) p6 y5 Q2 h! ]图11
6 u* Z0 \# j3 u2 R* [6 H. w
0 \ ^0 E" H+ `' t( a
) t9 I5 B1 D0 `8 {/ f4 i图12 \: e8 R' P9 Y& _! `4 Q0 g
, s# U8 i' C( ]- y
3 \! A2 J5 o! ^3 H: Z6 Z; h0 p* n图130 q! t% {/ s+ Z
: c4 V V% X, z6 S
+ J! B7 S. N+ B7 p9 x) z/ C
6 x6 K' k& ?1 Q7 E0 T3 c- M
图14
* A8 X/ p5 d/ ?: | 三轴数据的获取处理在 mpu_perpare.c 内,如下图所示。, W, g, k# E' |! v% K$ r+ x
( Y% L s; ]7 U8 L' g
$ K" G8 S, }0 ]2 a
1 ?/ g K: ^! t7 T$ C
6 j. I* e/ a; A图15" B( j! L, W# v& F7 p! j6 N
PID 控制相关代码集中在 Ctrl.c 及 Alt_Ctrl.c 内,其中 Ctrl.c 负责角度环、角速度环 PID 控制,而 Alt_Ctrl.c 则负责高度环、高度速度环的 PID 控制。
9 y( v* Q" u2 s$ w IMU.c 和 MotionCal.c 是保证整个飞控平稳飞行的重要一环,这两个 c 文件主要负责飞控的姿态解算、数据融合处理等。1 }8 T; `5 ]5 `) s7 \6 [; M, [8 L5 I! g
+ X/ }2 ~ g. \* H2 J0 A# ]) P- n
8 ]! Z* _9 j1 l 工作组“USB”以及“USB/Lib”,负责通过 STM32 自带的 USB,虚拟出串口,方便与上位机进行通信。+ G/ |3 s, F$ B% e/ Y
此外为了保护开发者的劳动成果,Player_Flight.lib 还封装了秘钥验证激活算法、多机编队控制、水平方向的速度和位置环的 PID 控制以及 3D 翻滚控制代码。
% G, `0 l3 i: P) ]8 C$ d 保存、编译最后把代码烧写的飞控主板中,配合遥控器就可以正常使用了。如下图所示 1 为保存、2 为编译、3 为下载烧写。4 o1 C8 B$ z! }$ |) U1 H+ w( H. a
7 X/ s0 @* l4 t; g% Q& @( G
9 T) L' W: E/ C& H. S图16+ a3 E7 K- A) R# `$ p* ~; y% U. e% O
( G& }1 i( @& u3 J7 v' O
5 K7 k+ K5 q3 k9 G5 m) w) D
, B9 K" L3 ]( T- N) j; p! Z" l
a, k& U2 |* @- y
1 j( j; d8 x2 i8 N2 A; C更多完整学习资料和对应开源套件,请登陆官网:“疯壳”& `& i- o: t0 D8 ?
& K% I/ H' G: k: \0 ]5 J/ {如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系) E1 {% a4 Z' Y
" Y" D4 B. B6 K3 u3 d, [
文件下载请点击:
【1】飞控整机代码走读、编译与烧写.pdf
(1.17 MB, 下载次数: 1)
. Z2 D, j _7 w4 I) R0 N
, l1 B- N0 r; M( D1 c: `) u8 |
# x8 K! D- E. `4 a) u; W& s3 b- ~4 d |
|