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

【疯壳·无人机教程8】开源编队无人机-GPIO(LED 航情灯、信号灯控制)

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
COCOFLY教程
——疯壳·无人机系列
GPIO(LED 航情灯、信号灯控制)
/ e  k& j! P- Y7 T  a5 c/ l9 H3 e
  e( i6 G" U+ M1 X1 \
1 C, p) h$ H% M, ]
& K' b/ a3 N! h; n8 E! b- q
   3 o1 @' Q" H( b" K
    图1
1 L8 C1 n9 D9 p; A5 I! P6 z  X" ]5 ~
    一、LED" z/ W/ H; I/ z& T7 W$ g
    1.1LED 简介
* l7 E, B- \. D# O& k1 E6 z    LED(Light Emitting Diode)即为发光二极管的缩写。LED 是一种在生活中非常常见的照明发光器件。LED 的在我们生活中形态种类非常的多,如下图所示。
2 n/ A7 \4 ~' U' J& T9 C2 w) x! d& C$ y/ E: ]0 m* ^4 F: z
   
: S, H) A8 ^+ X' U6 y# j+ o* m    图2                         图3
3 k  S* W! z: r! |6 \4 |    尽管 LED 在我们生活中形态非常地多,但这所有的 LED 在电路里均使用如下图所示的符号来表示。
  v  S% H% E1 C/ {' k' |7 M- S2 {7 }" Y
   
5 q  |$ j* x9 J    图4
! x. {, n1 W7 p+ L2 y7 [
- a) P% q/ K: J& S- B5 l    1.2LED 发光原理( U3 _' J- C2 a8 l- V1 N
    LED 最重要的一个发光结构就是灯内如绿豆大小般的灯珠。虽然它的体积很小,但它却内有乾坤,如下图所示为 LED 内部构造。" O3 l5 @' C2 g9 L0 A

$ {2 G. h3 [* [6 P! N+ P! [    . f% D' D- N# q' q4 U; b
    图55 P7 J: x! d9 ^* ]8 N

. D7 E) s# b+ n% p! h0 }    这个结构极其复杂,一共分为好几层:最上层叫做 P 型半导体层、中间层为发光层、最下层叫做 N 型半导体层。* v+ {0 y+ V0 c8 P" ]4 \( d
    从物理学角度来理解:当电流通过晶片时,N 型半导体内的电子与 P 型半导体内的空穴在发光层剧烈地碰撞复合产生光子,以光子的形式发出能量(即大家看见的光)。, x2 `* k! d" L
    二、GPIO
# L2 b) e! m# D3 O    2.1GPIO 简介
" W. X6 v9 |3 ~3 s1 f  |9 u    GPIO(General-purpose input/output),通用的输入输出的简称,单片机的引脚可以供使用者自由使用,可以配置为输出,也可以配置为输入。其中输出又可以是输出“高电平”或者“低电平”。在电子电路中“高电平”是电压高的状态, 用逻辑来表示即为 1,“低电平”是电压低的状态,用逻辑来表示即为 0。) p* c# o6 N1 g
    STM32F103 系列是意法半导体基于 ARM Cortex M3 内核的 32 位单片机, 飞控上用的主核心是 48 脚的 STM32F103CBT6,其引脚如下图所示。
, a8 Q7 W( ?) l4 k; W9 r0 D4 T: V6 v1 v
% C. _( r* s% f5 ]' J- \* r
    ' S- @% P$ k5 l
    图6
2 J+ V7 A" \3 ^, X( x) x6 V7 X# z! _4 ?; u; |7 C
    STM32F103CBT6 的 GPIO 的功能较多,有 A、B、C、D 等四组 GPIO,每组每个 GPIO 口都可以作为输出输出口使用之外, 还能作为复用引脚使用, 比如串口、I2C、SPI 等特殊接口的引脚。 但是需要注意的是每个引脚的复用功能是有限制的, 所以硬件连接时需要注意每个引脚有哪些复用功能, 这个可以在STM32F103 的数据手册中查看。GPIO 口一共有 8 种模式,分别为:浮空输入, 上拉输入,下拉输入,模拟输入,开漏输出,推挽输出,推挽式复用功能,开漏式复用功能,如下表所示。
. I8 J5 L' V0 u2 e8 X+ ]* ^    STM32F103GPIO 工作模式
8 R' I! ]( w5 j4 n- w" L& j7 i% t- h
  4 J1 b% A0 F& D! I6 r
    图7
/ V" m0 |0 @2 c3 T5 N3 {, V    这 8 种功能我们就不一一介绍了, 有兴趣可以上网搜索了解一下,这里主要讲解一下开漏输出和推挽输出的区别。4 y# h) ]3 H- Q& j/ b  I
    (1)开漏输出:
7 C  r, h( i8 b: I9 C6 a    输出端相当于三极管的集电极. 需要上拉电阻才能得到高电平, 利用外部上拉电阻的驱动能力,减少 IC 内部的驱动,驱动能力强,适合于做电流型的驱动, 可达到 20mA。- f; p+ k- ^; I2 f1 _( A+ L
    (2)推挽输出:$ T; k: y% p5 G
    可以输出高,低电平,连接数字器件,是由两个参数相同的三极管或 MOSFET 以推挽方式连接,各负责正负半周的波形放大任务。电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高,既提高电路的负载能力, 又提高开关速度。
$ V3 V# b, J8 {* i# {9 h    总结一下:推挽输出可以输出强高低电平,连接数字器件;而开漏输出只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行,适合于做电流型的驱动,其吸收电流的能力相对强(一般 20ma 以内)。' ]  H( z6 m' _: L5 `
    2.2GPIO 相关寄存器; }9 P& ^/ p9 p) y
    STM32F103 的每个 GPIO 端口有:两个 32 位配置寄存器(GPIOx_CRL 和GPIOx_CRH)、两个 32 位数据寄存器(GPIOx_IDR 和 GPIOx_ODR)、一个 32 位置位/复位寄存器(GPIOx_BSRR)、一个 16 位复位寄存器(GPIOx_BRR)、一个 32 位锁定寄存器(GPIOx_LCKR)。
& K9 i  P1 L/ ]+ H4 B  b    (1)GPIOx_CRL 寄存器(x=A~G)
5 n8 a1 Y  V4 E  j: f' W. x5 T* O
, C- e- C# s  Y8 c) v$ @* @# L) }    
5 }4 v. W$ [+ s% w% Y    图8" |% R9 h2 T; ~- N! U. g  E& V8 h( ^
    该寄存器用于配置 IO0~7 的输入输出模式以及速率设置。
- N  V) B8 V) H& H2 H    (2)GPIOx_CRH 寄存器(x=A~G)
2 p. {! G: A2 i/ D+ j, I( ]7 t' ~6 p/ Z  y9 x- y
4 d9 ]5 \8 w, p2 U* b
    . u& l, z! X# s& y
    图9+ s7 u+ D9 r8 Y; u# J
    该寄存器用于配置 IO8~15 的输入输出模式以及速率设置。. ?9 S4 Q7 F% s" E
    (3)GPIOx_IDR 寄存器(x=A~G)
6 Q2 b% [+ h0 E( C* ?- |  [" i" o* n# ]9 m% X
    * v( k2 @6 Z& c/ v4 t
    图10
2 i% R* D/ x, J& x7 w2 u! h    IDR 是 GPIO 的输入数据寄存器。通过 IDR 寄存器可以读出 IO 的状态。需要注意的是 IDR 寄存器只能以字(16 位)的形式读出。) n( |6 S7 U; |& O2 f
    (4)GPIOx_ODR 寄存器(x=A~G)
. l' |3 w- |! d5 d8 J" I
% D$ {$ w# O9 M6 X8 M, I, A3 x2 F    
+ `* a& M( O6 V7 ?9 a: U1 U    图114 j( z  B# X5 F  d
' g- n. q# z- ?3 r
    ODR 是 GPIO 的输出数据寄存器。通过 ODR 寄存器可以输出高低电平。
$ y7 M9 Q3 v- |. Q9 U* c    (5)GPIOx_BSRR 寄存器(x=A~G)
; x) ~. J7 e' S; h, n" a0 c  V2 }1 C6 D
    4 x6 u6 q4 f' a+ b, T
    图12
6 x0 L! d. q  O' L
7 ], |# B2 E* ?0 |$ b    BSRR 是GPIO 的端口位设置/清除寄存器。BSRR 寄存器的高 16 位是清除IO 位,低 16 位是置位 IO 位。需要注意的是 BSRR 只有在写入 1 的时候,相应的功能才有作用,写入 0 是无效的。
$ n1 o% y( T0 @    (6)GPIOx_BRR 寄存器(x=A~G)
9 a: F$ Y; x- _% `" S% X4 o- c8 o3 H0 z
    7 K. x* a( Q4 s$ s: D
    图13
& v$ R3 P/ @7 _5 K8 [) y* V    BRR 是 GPIO 的端口位清除寄存器。BRR 基础只有在写入 1 的时候,相应的功能才有作用,写入 0 无效。- o) J4 ^" U4 ?  A! H5 t
    (7)GPIOx_LCKR 寄存器(x=A~G)0 O! n: g, S' A4 U; E. B
6 N8 P: f) K" b3 x
   
& D" Z3 e7 t& I, [# @    图142 a1 n9 J5 l4 o/ p, @) [
    LCKR 是GPIO 的端口配置锁定寄存器。LCKR 寄存器用来锁定IO 口的配置, 设置后,除了复位后不能再配置 IO 的状态。
6 Z9 W: M" _8 l# q2 A, ?
% f& r' f4 ]( q! {) X4 }$ Q    2.3GPIO 实验
1 W+ F1 R3 c& @* d  U    本节实验的内容是周期性点亮无人机的航情灯以及信号灯,其中航情灯在四个螺旋桨底下,而信号灯则在开关两侧。
  H- H% O& t* \, X+ \  |) E    查看原理图可以得知无人机的航情灯同一接在 NPN 三极管 Q1 上,而三极管的基极又接在了单片机的 PA8 上;两个信号灯分别接在了 PC13 和 PC14 上。
9 W  X, n6 z3 C; T
- @' g/ s; E% I) I+ ~! O! T7 ?% C& {7 c
   
! u& ?$ R" j3 ^. M    图15                                                                                  图16: k3 t+ D$ ]/ M# I/ S( v0 q
6 a8 ]. w' }' t; j' A

* h* o' j$ p4 |1 \5 p    
" f# S$ S/ S4 C2 @4 A6 d4 h    图17
, n) o# `$ d! T! j9 o8 G+ A) h: t- x- K
    编写代码的思路如下表所示
4 m/ o  U4 V7 f5 a# }
# w! ]0 g, y0 l: R/ H  o     ; E% p0 R0 x) X/ s- |2 {5 F1 j
    图18  y1 n/ @1 ?  b) s
    按照代码思路,编写代码(通过调用官方库) 如下图所示:% h" s  ]& T' p- b; d" L  k
  [4 _) U+ }* F
   
! \: _7 I5 ~! D4 N4 ?  A0 t8 u" M    图19: r9 d* E9 Q5 b( T2 \% |0 j7 ]

9 H- m! @3 }' B8 q
$ K1 H$ }# K: g    / t' b0 B2 R3 }/ D" z  ~, u# @
    图20- U) @* B* b6 X/ U$ v
    完成配置后只需要周期点亮以及关闭 LED 即可。
- C7 }9 I. Q) O( F* E& P& P% E7 b4 O" f* j& y1 C% T4 ^
    % `8 c. O2 s1 R2 @% Y' Z8 [0 u
    图21
9 o3 w. ]' ?9 r    其中延时如下图所示。6 R7 E# W$ S3 P) W0 R  F
2 _+ Y0 n( |; w" h: V
# S1 c- @3 z9 v$ E* }
    图22
/ I3 o' ]; s+ z/ q2 Q    保存、编译、下载,如下图所示,1 为保存,2 为编译,3 为下载。
3 K' o# R1 W; K% \1 A8 F
8 Q  [- K# [/ n9 Z( r, N5 o
0 i0 X- c% e7 q  
: |8 j) H# c6 H  m    图23
! B, b" m- y. A8 Z    下载代码到飞控上,就可以看到飞控的 LED 指示灯以及四个螺旋桨下面的航情灯周期闪烁的现象了,如下图所示。' \( m6 Z5 E3 e
* d/ M" D' J4 ?6 l& W

0 m$ k; I; B& y/ Y( y6 W    
+ m* F& e* ?# {    图24
9 @# P1 q7 ?1 N! y8 I0 s; i
/ p+ O4 y6 q9 i
' e$ ~' u. f8 I$ b0 D
0 V, a0 W" }' }  G9 z4 h3 M+ d文件下载请点击: 【1】GPIO(LED航情灯、信号灯控制).pdf (1.02 MB, 下载次数: 0)
8 |/ ]1 v$ V5 f4 P6 V5 N$ m
' V. L* K5 l5 r5 _3 i
  • TA的每日心情
    开心
    2022-12-5 15:27
  • 签到天数: 1 天

    [LV.1]初来乍到

    2#
    发表于 2022-9-7 17:30 | 只看该作者
    更了解无人机了
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-26 23:51 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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