|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
COCOFLY教程 ——疯壳·无人机系列 飞控整机代码走读、编译与烧写 5 k2 Z. n2 \) P7 z* M7 `" ~
/ Z4 r/ n( t! P" J+ U
+ `, o% V( Y. r) b- r+ Z; _+ _* w" i
# ]( Z( \. @6 x u2 F9 ?图17 ]8 d" k# o' D1 G9 j
% m3 k0 N+ |2 p4 K; E$ d
! E0 W6 d$ q, q/ q5 s
一、代码架构
' M, C* _, L; M" k; q 飞控的整体代码工程由 8 个工作组组成,分别是 Ctrl、Driver、VL53L1X、STM32_LIB、USB、USB/Lib、StartUP 以及 Drv_Point,如下图所示。& x6 @" k! y- h, y* j, b/ N
+ N: T3 b) j" c2 x
2 R- }# [( z/ O/ A5 p图28 ~. @" [$ v' O, @, ?. r+ x
各个组的具体的代码功能如下表所示。3 q+ S2 q: a) n! X5 J
" }% s* V4 V P6 M- ?
! n. f* F1 b9 r$ O7 A
表10 [' G8 b) A0 l* z+ X
* X; |# D! \" R) z
二、代码走读
9 v$ D4 e/ @8 z* X: O; j3 p
7 W F9 t5 h; }9 F- M# b 系统的主函数部分是整个代码的起始运行位置,在主函数内主要做两个事情:1、初始化外设及参数,2、轮询线程。" `- [5 J' |- _$ D, |3 l% [
9 G' _2 w; O0 f' B; G! ~
' s8 @$ N6 [5 K$ d$ l4 t2 m
图3
, ?* x. \6 f5 M* s) U6 W# A 系统的每一个线程都已经分配好了运行周期,在不同的线程里执行不同的事情,线程的切换通过函数指针的形式切换,而系统的运行时间由 sysTick 提供即系统的“滴答”时钟。各个线程的入口如下。
u$ p$ }2 i0 G( F( G6 {/ b* [6 N$ g4 Q7 E. B
$ c4 r n6 ^# n/ d
图4( x: H7 q/ }9 e2 n" \
分别有 1000ms 周期的任务、50ms 周期的任务、20ms 周期的任务、10ms 周期的任务、6ms 周期的任务、4ms 周期的任务、3ms 周期的任务以及 2ms 周期的任务。: I7 D0 H3 m9 U0 ^. b w) H
整个飞控可以平稳飞行,重点在于控制部分,即工作组“Ctrl”里面的代码。如下图所示为“Ctrl”组的代码框架。 V6 i( J9 r* S+ s* M9 l [) v
5 ^. P2 \/ H) T; N$ W+ R6 N
: F `6 _& c+ e+ g6 f
图5
; t8 T( R* j( H; x( a+ K5 \7 E 其中与遥控器、上位机的数据通信处理包含在 Data_Transfers.c 内。里面无非就是对数据包进行拆解包、封装包等。如下图所示为对接收到的遥控器数据进行解包分析的代码。; ]( r' ?+ Z1 y {7 g% N
) X# O" H3 I4 \8 @
5 @' D+ L+ D4 S0 g, {6 H; P图6( s; |. ~5 v$ U. D6 r
$ i' o8 g" ]5 C8 H# x
' k6 ]/ d/ Y+ t
图7
; n9 l, P6 g8 @6 a% V
4 D8 q7 g D. c+ g3 O6 m) f- }
- {2 z* T. y4 ]4 W( u8 P: v) R/ |/ F
图88 J7 H. n; L" g) p, u$ x
; j9 O& `7 u: r. D% ?: Y
& S, W3 g; k9 c( J1 H$ l图97 w, {# I" U w1 v C1 X; n
9 W4 S! D& Z. o8 I9 N5 e6 [
& | `" Z$ m5 r) V, y/ h
图10 ]$ ]6 d4 |" l6 h8 t4 \
1 X' j$ P1 @* U6 k& f( k
8 V1 C; `3 \' {. a7 f7 ^. I6 F
图11
: C% o+ u! `1 X0 `5 n: p/ U, s
6 W5 a7 }5 p- ]& ~9 k0 z
{2 q! |' I0 B- p# D, F
图127 G1 L" N' x! _4 K
9 M/ x: t5 c" I% Q" G
: G7 Z5 z6 ?4 O
图13 Z* D3 D' {& n: R. d2 x
: a1 a2 S" P' T4 j
( y1 r2 L' ?$ k& i+ o2 Z' I
6 t; _4 `6 W1 w; Z2 P图14/ ]- |+ J4 h ~, k* g7 M
三轴数据的获取处理在 mpu_perpare.c 内,如下图所示。
& y$ k: A7 ?. I% u
3 Z+ S4 i; q8 Y4 [4 k- X
& n" f' r5 E( D9 U/ G0 {. D
" Q( E1 k' p, h- q* n. a
- j$ _8 ?& m* m F; @7 v/ y
图15# R# Q9 z/ U! P* i0 L. }8 K" E
PID 控制相关代码集中在 Ctrl.c 及 Alt_Ctrl.c 内,其中 Ctrl.c 负责角度环、角速度环 PID 控制,而 Alt_Ctrl.c 则负责高度环、高度速度环的 PID 控制。
3 A* X! M5 }- b) O# j IMU.c 和 MotionCal.c 是保证整个飞控平稳飞行的重要一环,这两个 c 文件主要负责飞控的姿态解算、数据融合处理等。
! L9 t( A' Z5 \' q* L9 j2 v
9 N3 Q4 U0 t! x% x. D, |) v
5 x6 o) T) W& Q P2 D3 n; d }# w 工作组“USB”以及“USB/Lib”,负责通过 STM32 自带的 USB,虚拟出串口,方便与上位机进行通信。
* {5 e) s! P+ j3 W8 v 此外为了保护开发者的劳动成果,Player_Flight.lib 还封装了秘钥验证激活算法、多机编队控制、水平方向的速度和位置环的 PID 控制以及 3D 翻滚控制代码。
/ t6 a1 _7 q8 | S. o2 P3 p# x 保存、编译最后把代码烧写的飞控主板中,配合遥控器就可以正常使用了。如下图所示 1 为保存、2 为编译、3 为下载烧写。2 P# r* ~- |. b, n) P$ k3 ?6 W
+ y, L! S1 E. |6 M! V- L
& K; a2 V1 j3 r# n3 i/ N* e图16$ F- ~. E. C3 Q) [2 o
# ?$ q) u& B3 f& X) a' f. j+ a
) y$ S3 b( g5 N' ]4 C
: a& _3 S6 S7 }' T1 ~8 y0 b' N. ~ H; q$ l
6 X9 N4 V% c |+ i更多完整学习资料和对应开源套件,请登陆官网:“疯壳”/ T5 }! ^" \7 q3 Z6 `4 h9 T8 t! [
+ c8 d$ c0 y1 j' P
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系4 M. X! u2 c- @; x+ O
6 a- |2 A8 v! i6 m0 h8 y5 i" U3 v
文件下载请点击:
【1】飞控整机代码走读、编译与烧写.pdf
(1.17 MB, 下载次数: 1)
5 z Q8 t- }/ [+ z9 \! Q+ e5 a
* G/ B. j: }0 I. r3 L- y, v, W$ ^6 [# h. ]3 o
|
|