|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 Zedd 于 2019-3-30 16:02 编辑
j$ J3 M( m9 g7 @6 r5 ?( V$ { }% c5 W' A1 c% ^3 O
0 c9 r/ [+ u2 x- B( H
- _) g; g% i. v! x1 I' n: B( y5 Z0 t. E- n$ ?
0 G+ g' g$ O- h
- a8 }; x& B4 ], U9 D实验目的
3 p9 r9 m" \7 g) T) E7 j设计一个四通道的数字电压表( L! K5 O! |; _ Z' S& b3 o
2 K q/ |) Z9 {3 |6 w1 _实验平台3 y# J) C2 V1 L D4 m" w
芯航线FPGA核心板、AD/DA模块
9 T) E3 ~9 U: H* W5 _8 b
. A. A/ C: A, k4 @8 h, d1 m p: c* g8 T( B- x; ?" Z3 }/ x: L
![]()
8 ? B0 k7 m7 r0 i( @( E/ R实验现象
. o/ {8 E- { ]' B9 R实现一个四通道的数字电压表,其中可以用按键切换测量通道并在4位数码管上显示对应的测量值。
! i+ ], K% I: E5 |1 j) H实验原理及步骤" ^: d$ D5 |+ {% L. c8 ~
数字电压表的工作原理即为,被测信号接入ADC模块的输入引脚,FPGA控制ADC的转换进程以及原始数据的采集,并将其采集到的二进制数据转换为数码管的显示数据。其中按键可以选择ADC模块不同的通道。其系统工作原理图如图1所示。
( M7 u% j. A- {7 ]) c# w* `, Z! n4 F8 n, N
) |9 Y* @6 c# x: R0 [6 }& D由工作原理图可以暂时将本系统划分为ADC控制模块、码制转换模块、按键数据模块以及数码管驱动模块组成。 5 \8 E1 I( R, D
ADC控制模块之TLV1544
: U9 L1 h* n3 g* @3 r1 {0 _本系统采用的是TLV1544芯片,其为10位的ADC。因此其理论测量精度为 ![]()
0 @" j+ a$ X, K x# d4 h- r! [6 ^0 b% b- f- B( m9 f
,且当其输出为’d Y3 g1 f3 E+ o# Y( r* c! N
时,实际电压为 , e: B7 B) c% Z2 M. v. e1 P
![]()
5 o' z. g8 w; e5 j$ o3 u
+ i, t# ?3 \+ TV。本模块的设计在基础课程已经讲解,此处不再详述。其模块接口示意图如下所示。
; b+ b9 H, C% D {" L! e' `8 G5 G2 M
( }) a0 b" B' }* s8 H
数据预处理模块
* w: Y$ z( K% ?/ w( E1 S1 hADC模块输出还是一个十位二进制数,因此需要先将数据转换成实际电压值。 6 h- d* F L- i- C1 }5 j, T. f
. ?7 M6 p6 z+ a4 l6 ]上式中3.42为满量程电压,data为输出的二进制数,1024为ADC总的阶梯数。之所以是3.42,是本模块基准电源TL341输出电压。
# @* S3 _! G1 ~这样得出的数据太小,因此先将其放大 倍。这里也可以放大其他倍数。0 Q9 V" t/ N% X. f
3 ^! J0 k5 t! e$ {经过上式的转换, 还是一个小数,这里再放大1000倍以消除小数。即实际显示的数据为实际电压的1000倍。这样就完成了二进制数到实际电压的转换。
j& w/ t% U1 `2 p0 }- c' L % z) o' K. S( S8 M$ I- {4 j
: a! N, {3 o6 m+ e
由于在上面TLV1544驱动设计中,数据更新速度为4000ns/次。这样已足够用做电压表显示,但是此处为了使数据稳定,加入均值滤波程序。本模块接口示意图如图3所示,其接口功能列表如表1所示。
2 I6 B- J- I3 R: ~5 U
) c* ]5 \: ?) t8 r4 K
: D x9 _ Z- F& a' W) m `* p* ]- @
" n M. y, ]2 e+ ]3 F3 D将累加后的数据除以1024,也就是右移10位,这里数据总位数为20直接取其高10位即可。
' F+ D$ q( I. G8 G& J0 u
& s! T( z5 W; Z7 U: G5 o, s利用上面推导的公式即可输出最后的数据。3 P1 Y0 m- G/ e- J6 ]- a4 _
' H' q7 M! k0 ~5 A: e, t码制转换模块 {$ ~3 S; h/ m! q
由于ADC输出的为10位二进制数而数码管需要的是BCD码的格式,因此需要将其进行码制的转换。
# @% C8 s6 q9 ?& h$ L, l. B首先,先了解二进制与BCD码的位数对应关系。比如一个8位二进制码,可以表示的最大十进制数为255,转换成BCD码为 0010_0101_0101,共需12位,其中每4位组成一个BCD单元。n位二进制码转换成D个BCD码的n~D对应关系表见表2。" Z. @$ s# N- p$ O0 O) r: y) r+ ]
) O: {$ E9 ?& b' H
0 \# D$ @, b& z/ R7 W
此处采用加3移位法进行转换,附件中列举了另一种方式来进行转换。以8位二进制转换为3位BCD码为例,转换步骤是:将待转换的二进制码从最高位开始左移BCD的寄存器(从高位到低位排列),每移一次,检查每一位BCD码是否大于4,是则加上3,否则不变。左移8次后,即完成了转换。需要注意的是第八次移位后不需要检查是否大于5。 $ g; [! m7 c3 H9 s O. w1 |
注意:为什么检查每一个BCD码是否大于4,因为如果大于 4(比如 5、6),下一步左移就要溢出了,所以加 3,等于左移后的加 6,起到十进制调节的作用。
+ {& \' D7 `* {9 q9 W( p表3给出了一个二进制码11101011转换成8421BCD码的时序。 " m: |4 N; f" [9 t
8 |7 R2 W" s5 W; o9 m7 `) S首先进行判断一个BCD码是否大于4,是则进行加3处理,否则输出原来数值。
3 a e' z/ z+ S" A' E( k2 ? @ 0 o/ J0 U8 Z' h$ s+ K, s8 n
由以上原理可看出,这里需要定义一个10+12位的寄存器。同时从表3克拿出有几位二进制数就需移位几次。这里为了增加适用范围,将输入定位20位的二进制数,因此输出为7*4位BCD数。这样定义一个48位的移位寄存器。低20位为二进制数,高28位为BCD码。
/ a4 m8 p& Y t* w) ]* _2 s( {) d每移位一次就需验证高28位BCD码是否大于4因此,编写以下代码。
1 K7 P0 ^. r8 e& @; m3 s
/ w8 ]( {: g5 P4 L2 x/ i* ]1 k现在编写顶层文件,其端口示意图及功能描述如下所示/
3 `+ b, e' p$ D* U( Q
. b5 U" Y; u# z0 c9 Z9 C; g/ Q- v" e5 s) d' t3 w" z1 r
% [. g& t! \% Z ]: t! j向左移位20次。 i) Z u; g T9 G$ q v
, ?9 z2 }3 {- `# O$ q7 W/ g
) y: [8 X2 w4 q# z
2 Y/ m) r# v) I% k( m5 X/ @; J3 Z* L
& K- ~/ g! G3 h# `& P$ F1 l2 E5 L, c& j4 \: f
! k3 ?1 `7 ]" V
校验以及输出最终输出数据。
& F: ~5 T8 }6 P& F8 x8 Y$ j8 t! V
$ i+ V( x0 f/ {, @按键输入模块
- h; \, m3 D W H本部分在基础课程中也有介绍,此处只给出其端口示意图。
* U+ G* v8 I6 b9 i1 a通道选择模块
, V/ }2 d: p; ?. J通过按键进行ADC四通道的选择,本模块接口示意图以及功能描述如下所示。
8 G, p7 d( S& Y& m* R* o) U/ C1 a" X( y+ V
- z& B( n: C6 y$ R4 d3 E+ W. w
* |7 T, ^: b$ A' f) U% j
, j q& I8 V( b3 s内部除了例化还需产生通道选择信号,这里用的模块有四个通道但是为何按键一来就加’d2,是因为通道选择实际信号需为0000、0010、0100、1000,这样我们就需要加’d2。
- u1 }5 Y* @: I6 G; q 6 Y A4 D5 \) Z- e7 Z9 O7 N) l k0 `
数码管驱动模块, w2 y4 P; e0 ]1 m
本部分在基础课程中也有介绍,此处只给出其端口示意图。, n+ w H5 V: l+ Y
9 l' _( W. q2 n+ u4 V' Y. G; H* B! N3 A
顶层设计
5 Z- O+ _. Z3 s3 P# ~此处只需例化各个模块即可,顶层模块接口示意图如下所示。 A9 K4 I4 d! v6 ~$ Z. ]
, `6 H9 q! O1 L0 p
+ ?% G3 G4 L& J6 v4 e
# A% z8 m. m" W1 }2 n+ Y
/ n: g% }# v4 Z: p$ Q7 E I g% |
分配好引脚下载后可以看到改变输入电压,数码管上均有正常的显示,且切换通道时数据可以随之更新。
p7 K' l, `; m F/ K5 x
1 h2 e0 q w5 H b$ V 7 d. S2 t" f2 Q) z, w$ @; r2 L
$ l o; i( a- I* H, f% _5 @
|
|