|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
COCOFLY教程 ——疯壳·无人机系列 ADC(摇杆控制)
+ |- B* x7 P, J+ l4 i" V+ F' x: f0 U9 [2 Y/ A% @( \* t
2 |. n% l- s$ u9 @+ \# n
~; w- j- q# v0 |, ?4 B3 {
图1
# s: r6 \- b" E+ c) i: T
- @7 I L' Y" k) a9 K; B) y1 G( a) [! z$ W
一、摇杆
+ ^$ ]& s6 K4 G5 e 1.1摇杆简介! O5 l# s4 E0 v1 ^' w5 s* P2 t
+ N. i5 h! W- Y5 s2 x; A _. Y: I 摇杆由于符合人体工学、操作简单,广泛应用于各类的玩具中,例如遥控飞机、遥控小车等。如下图所示为摇杆模块的实物图。% i! Y$ ?7 E8 A" x8 K- d+ M
8 i& f5 r+ d: l& F! i
" h+ ~ }" l/ a8 |7 h7 u& ~! I
图2; }" s$ p4 }& [, Z7 I$ O2 k
1.2摇杆原理9 d h' Q# \. c% K+ y
摇杆的根本无非就是两个电位器,也就是常说的滑动变阻器,一个电位器对应摇杆的上下方向,而另一个电位器则对应左右方向。
$ }2 \8 q8 B; ?1 o* H 摇杆的引脚一端接上电、一端接上地,另外一端就负责采集电压的变化值即可,判断摇杆是往哪个方向拨动。# m+ Q& ?5 s1 [& n( n4 ~. k
/ v; T4 S0 \( f4 z8 _" A 二、ADC
2 q/ p4 @! F1 `1 s$ }: P1 U 2.1ADC 简介6 F5 m5 V- ^; g9 }& V7 O
7 q2 J6 E8 [8 Q/ } ADC(Analog-to-Digital Converter),模数转换器即 A/D 转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入电压信号转换为一个输出的数字信号。由于数字信号本身不具有实际意义,仅仅表示一个相对大小。故任何一个模数转换器都需要一个参考模拟量作为转换的标准,比较常见的参考标准为最大的可转换信号大小。而输出的数字量则表示输入信号相对于参考信号的大小。
0 {3 b$ b" w# q( s, T# ^- b0 Q* O9 x' O6 b5 H2 {
那么什么是模拟量、数字量呢?模拟量是指变量在一定范围连续变化的量; 数字量是物理量的一种,它们的变化在时间上是不连续的,总是发生在一系0 B, Z3 }4 F( y; h
列离散的瞬间。这一类物理量叫做 数字量。如下图所示为数字量与模拟量的对比图。7 s6 ]1 Y9 Z) w! O3 B! x; @# J/ C, p
! E4 A! x' Y3 T0 C3 i% v; C
5 e" {$ y6 ^' p {1 u* p
图3: V" `! m2 I7 I1 o4 `
那么把模拟信号准换成数字信号的过程就称为 ADC 模数转换。 ?! m$ D/ A+ A
模数转换器的种类很多,按工作原理的不同,可分成间接 ADC 和直接 ADC。间接 ADC 是先将输入模拟电压转换成时间或频率,然后再把这些中间量转换成数字量,常用的有双积分型 ADC。直接 ADC 则直接转换成数字量,常用的有并联比较型 ADC 和逐次逼近型 ADC。% [' t0 q( l( ]6 j, @
并联比较型 ADC:采用各量级同时并行比较,各位输出码也是同时并行产生,所以转换速度快。并联比较型 ADC 的缺点是成本高、功耗大。
% F2 }" T8 o: ^9 X/ B: N 逐次逼近型 ADC:它产生一系列比较电压 VR,但它是逐个产生比较电压, 逐次与输入电压分别比较,以逐渐逼近的方式进行模数转换的。它比并联比较型ADC 的转换速度慢,比双积分型 ADC 要快得多,属于中速 ADC 器件。
* Z- e q# Y/ f( b; e# @ 双积分型 ADC:它先对输入采样电压和基准电压进行两次积分,获得与采样电压平均值成正比的时间间隔,同时用计数器对标准时钟脉冲计数。它的优点是抗干扰能力强,稳定性好;主要缺点是转换速度低。6 w" M6 D1 J, X" X* B4 K R/ F& d* L
ADC 常用的技术指标有:
; }1 t/ V/ e2 g* s! u) @ (1)采样精度 :即分辨率,一般有 8 位、10 位、12 位、16 位等;
5 i1 K1 Y9 N( P) }6 ~: c6 Q (2)转换时间 :即每次采样所需的时间,表征 ADC 的转换速度,与 ADC5 C6 B3 u" P2 d7 ]% W, @
的时钟频率、采样周期、转换周期有关;
3 s! \# x4 `8 S: w& r1 ~) E (3)工作电压 :需要注意 ADC 的工作电压范围、能否直接测量负电压等;
8 H3 [& w7 I! O& Y z# X (4)ADC 类型 :如上面所提到的,ADC 有多种类型,不同类型的 ADC 有不同的性能极限。$ z- I8 _& q+ m* s: j
9 ^/ V. z7 P% r$ d: I1 ]
2.2STM32 的ADC7 y0 }. [, f( j6 c3 }5 }$ Q$ v
, \; V z' u( i4 @* d% v& @ STM 32 拥有 1~3 个 ADC ,这些 ADC 可以独立使用,也可以使用双重模式
B# p- R3 P. g; |: J (提高采样率)。STM 32 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它有18 个通道,可测量 16 个外部和 2 个内部信号源。各通道的 A / D 转换可以单次、连续、扫描或间断模式执行。& `3 _: j) u, t. t9 b
ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。(因为在这里 ADC 是 12 位的,还有四位没有用到,所以存在左/右对齐的方式)。
. A* h6 S, N4 j STM32F103 系列的 ADC 外部通道和引脚对应的关系,如下图所示。, J0 e& h' Z- ]- D7 s, m; F
( b- O& ~- o0 R' A/ N$ o' I
- W; ~, o8 n+ j- p: @
. q3 \/ E- O* H" X
表15 F S) E W6 u: ]" X
N) |+ k* h: m0 D 2.3ADC 寄存器
7 S( U& M0 R, j- Z- z" A, K d& o8 ` _. ?
STM32 的 ADC 相关寄存器较多,这里只讲几个比较重要的寄存器。
: D$ \5 R4 m, F1 b: T& G (1)ADC_CR1:模数转换控制寄存器 1,如下图所示:8 X7 g# a9 ~/ k" ?* T8 i- L: ~: n
0 `: _6 r3 y6 O8 V. \, z5 S% r
/ n( v7 E" o+ \9 S g' _7 C/ b 图4
D+ a0 N( K7 ] 其中 RES[1:0]为分辨率设置位,等于 00 时设置 ADC 为 12 位,等于 01 时设置 ADC 为 10 位,10 时设置 ADC 为 8 位,11 时设置 ADC 为 6 位。
2 f& R% p7 L5 _4 A( V (2)ADC_CR2:模数转换控制寄存器 2,如下图所示:
l9 u0 Z' k+ I! p! \/ u% @" g# h T2 m& |8 t: w9 X) }
( B6 v [* {4 l i7 r, k 图5
7 g( o2 q2 ?) H8 P" A/ I* I, J7 k D 其中 ALIGN 为数据对齐位,为 0 数据右对齐,为 1 数据左对齐;CONT 为连续转换设置位,为 0 单次转换,为 1 连续转换;ADON 为 ADC 转换使能位, 关闭 ADC 转换,为 1 开启 ADC 转换。' q' ]1 |2 w. u# G
(3)ADC_DR:模数转换数据寄存器,规则序列寄存器中的 AD 转化结果都将被存在这个寄存器中,而注入寄存器的转换结果被存储在 ADC_DR 中,如下图所示:$ x+ a) C' Q' ]4 o3 U& O. d
/ a. e1 v& R7 x. J. I' |) r
9 y; X6 b* X1 U# k; m
图6
1 S+ r2 P7 [, t- r/ [3 a 其中 DATA[15:0]中存放转换的数据。
/ w$ K6 w$ K& K% `1 h& U+ F4 n0 ]2 F
0 x9 ^. F ^/ H$ i5 L8 U$ ^8 T+ o( x 2.4ADC 摇杆控制实验2 d1 J/ c- R& b/ h3 l7 T1 d
, a2 d; n6 i3 U2 |; V: }( [! e J
本节实验的内容是使用遥控手柄上的左摇杆控制遥控手柄上的电源指示灯、% b7 d& f8 R" u$ b
cocobit 编程模式指示灯、连接无人机指示灯以及紧急降落指示灯。1 Q$ Y. d- v/ f/ g) D5 r
. x7 q" q% q l o3 y+ a6 ^ 左摇杆往拨电亮电源指示灯、往下拨点亮 cocobit 编程指示灯、往左拨点亮紧急降落指示灯、往右拨点亮连接无人机指示灯。这里采用了 ADC1 多路通道规则 DMA 采集的方式。左摇杆的 ADC 接线原理图如下图所示。
( W$ Q9 T4 n8 I0 C0 I2 j0 \0 S
! j- ^" L* l" ?8 q, f9 ?
! B3 v' D. j% \/ F
5 j- K+ o' ]* _6 C 图7
8 ` @6 E8 Z& J& W9 T y1 x, W2 o% u 实验中会用到 LED,其配置可以参考遥控器开发基础教程《GPIO》一节。整体的编写代码的思路如下表所示:
9 P! f; f. {% b" f# ? 代码思路. |: g8 U% `5 @$ t. } @. }
0 b3 P( I7 t4 x
) h. ]+ i+ P8 o
3 e+ J! ?2 f" ?
表2
3 p4 Y' L. W9 C" B ADC 的初始化代码如下。8 v5 b& G2 _ @) B( @ J. `9 {$ x& w; k
' T2 b' n) F( z( E2 t+ L
5 k% Y! O$ f3 K+ ]% Y& C$ m
1 _2 s+ M8 Y/ m
* q) w/ ~5 n# I0 W( o8 M 图8
! e) \: L- \1 C1 Y& _0 W; m ADC 处理是在主循环中完成的,其代码如下图所示。' U C& c% N% T% K: J& P W
2 u; T" \$ K. O4 c
1 J1 a' w5 X: S( H 图9) I& O4 A( {5 k) M$ `/ i' L3 t4 h
- Z! o/ B) _# u4 W4 W. _! g6 N5 I( }( ^- a
如下图所示,左摇杆往左拨,紧急降落指示灯亮起。
* W! p: D$ C, F+ v6 f/ l
/ L* }& B( y. n( w
9 U+ ~8 _' `* K; g6 y; W
图10( h7 @! Q) ]5 [ Q
0 ?4 D& R6 O. ?% D7 |" g* ~9 y9 }
$ W4 H: d$ i Z$ N; G9 d" _. G
1 }; \" T9 N" i+ G1 `1 d: ]
?- L( i0 }8 s0 U5 y5 [5 ]6 ~2 J) Y( g" _6 g& d
更多完整学习资料和对应开源套件,请登陆官网:“疯壳”
( N. q H( F" B9 y
8 S% c) O: t$ z+ E2 H8 h 文件下载请点击:
【3】ADC(摇杆控制).pdf
(1.04 MB, 下载次数: 0)
2 B7 M% p9 L* p9 G1 V3 u# a3 s4 J8 W; D7 z1 }9 e+ u
* d% A% \8 w9 \9 v: m( B0 f. e
|
|