EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
TLC5620型DAC芯片概述: l TLC5620C是一个具有4个独立8位电压输出型DAC的数模转换器 l 单电源5V供电 l 采用串行接口时序 l 具备4个高阻抗参考电压输入端口(对应四个DAC输出通道) l 可编程的电压倍增模式 TLC5620是一个内部具备4个独立 8位电压输出型数字——模拟转换器,每个DAC转换器都拥有一个带缓冲(高输入阻抗)的参考电压输入端口。每个DAC可以输出一倍或者两倍的参考电压与GND之间的电压值。 TLC5620使用CMOS电平兼容的三线制串行总线与各种流行的处理器进行连接,TLC5620接收控制器发送过来的11位的命令字,这11位的控制字被分为3个部分,包括8位的数据位,2位的DAC选择位,1位的电压倍增控制位。每个DAC的寄存器都采用双缓冲结构,这样,可以实现首先通过数据总线给所有的DAC传输需要更新的数据,然后通过控制信号LDAC将所有DAC的电压同步更新到输出上。
# \9 B7 [0 P7 k$ c# I3 c! c* j* p( R& O; {: i1 \, h
# @8 |+ e% v, P, t& |TLC5620型DAC芯片引脚说明: - F$ i8 }, a% G$ P6 I
0 S) s {- j- P# b
6 Z+ [' ^+ N+ h9 j) m
* u# Q/ A' e7 ` g' }TLC5620型DAC芯片详细介绍: TLC5620是由四个电阻串式DAC组成的,每个DAC的核心是一个拥有256个节点(抽头)的电阻,对应了256中不同的组合,如下表所示,每个电阻串的一段连接到GND,另一端来自参考输入缓存的输出。 每个DAC的输出都接有一个可配置增益的输出放大器,该放大器的增益可以配置为1或者2。当芯片上电时,DAC的值全部被复位到0,。每个DAC通道的输出可由下列公式计算得出: | Vo(DAC A|B|C|D) = REF * CODE/256 *(1 + RNG bit value) |
其中,Vo为输出电压值,REF为DAC的输出参考电压,CODE为输出电压值的数字量化量,如255表示按照参考电压的满幅输出(关闭电压倍增模式),0则0V输出,RNG bit value表示电压倍增模式,为0则关闭输出电压倍增模式,为1则打开输出电压倍增模式。 当串行控制字中的数据部分为0~255,RNG bit为0或者1时,输出电压与数字量化值的关系如下表所示: , d* g- G9 X0 M( p9 T
' q- g- w. a* L" {9 K' T- ^TLC 5620型DAC接口时序: 控制器对TLC5620的单个DAC设置包括两个主要操作 1. 将数字量化值以及控制位发送到TLC5620中对应的寄存器中 2. 控制DAC将寄存器中接收到的数据值更新到DAC输出上 对于数据的传输,有连续传输(11个连续的时钟周期传输11位的控制字)和2个8时钟周期传输方式(使用两次8时钟周期的传输来实现11位数据的传输)。 对于数据的更新,则使用LOAD和LDAC配合以实现。 当LOAD为高电平时,在每个CLK的下降沿,数据被移入DAC的移位寄存器中。当所有的数据位被移入完成后,LOAD被拉低,以将数据从串行输入移位寄存器中转入选中的DAC中,如上图所示: # k, I3 O7 h/ b
& i+ o# p6 F+ @$ P$ G/ ~3 q5 d5 r5 x9 w/ l
当LDAC为低电平时,选中的DAC通道的输出电压在LOAD变为低电平时更新。 当LDAC在串行数据传输过程中为高电平时,新的数据值被存在器件中,该值可以在稍后将LDAC拉低时传入DAC的输出,如下图2所示。串行总线上传输数据时,高位在前,低位在后。 1 O2 Z+ I! K" x6 F0 ^6 L8 F
% q' ~4 F0 K, A$ A
" J# i7 Z+ }9 S/ ]5 @' P- E, ~使用两个8时钟周期的传输数据(主要针对8位定长的SPI控制器)的时序图3和图4所示: % z, _2 P9 h/ i9 t# P" M
; t5 ^' Q2 I$ B* H m$ m+ `
! j4 ^2 h1 t! B- H' f: y4 d* ] r在传输时序中,标为A0和A1的两位指定了需要设置输出的DAC,具体A0和A1值与对应被选择更新的DAC如下表所示:
3 {0 z8 u, q: [& o' i0 L
7 r' y! e$ U t) hTLC5620串行数字接口的关键时序参数: 针对TLC5620的数字接口,其操作时序如下表所示。 ( n8 B# G- z9 k+ g/ t
1 F" b# o2 c/ o; c( ]& O" c( o7 i7 K
5 N2 B6 B, Q: @4 S. M! u
其中,从tSU(DATA-CLK)、开始一直到CLKfrequency都是我们在设计接口时序时,需要重点关注的参数。我们设计的控制时序必须要严格满足表中各个时序参数,否则会导致数据传输或转换失败。 芯航线ADDA模块TLC5620电路介绍: 芯航线FPGA学习套件中,提供了一个多通道串行ADDA模块。其中,DA部分所使用的芯片就是上文介绍的TLC5620,TLC5620部分电路图如下图所示:
5 o- M9 T+ ]4 r5 A4 A$ Y* G% y8 o
$ \" o3 K6 s& L) }2 r
# @: Z# Y# k7 ~5 z7 s为了给DAC的参考输入提供稳定的参考电压,这里使用专用精密参考源芯片TL431搭建了一个参考源电路,该电路如下图所示: 1 ?! X- k0 f1 C' ^* T0 H
2 e# f( T9 e8 x# u2 y) |根据5V的输入电压和输出电压/电流设计电路,按照上图设置电路即可,其中R2:R3=1:2.7得到的输出最接近3.3V(例如R1取值为1k,R2取值为2.7k) d" u4 M. l* U9 K
$ q0 H; A3 ~7 mVout = (R2+R3)*2.5/R3 = 3.7*2.5/2.7 = 3.42V 为了保证TL431 1mA的工作电流,R1需要满足 1mA< (Vcc-Vout)/R1< 500mA 这里设置R1为150欧姆,则(Vcc-Vout)/R1 = 10.5mA,满足TL431工作要求。 因此,当确定一个输出电压时,就可以得到对应的RNG和CODE了,如下式所示: ) }! g7 X' I# R) h
1 |" j+ [. Y" c. r* b然后,在我们控制DAC的输出时,只需根据所需输出的电压计算得到CODE和RNG,然后将该值通过串行接口传入TLC5620,再发出一个更新控制信号(LOAD + LDAC),就能实现控制TLC5620输出想要的电压了。 线性序列机设计思想与TLC5620接口时序设计: 这里以使用LOAD信号控制DAC更新的时序图来分析TLC5620的数字接口时序: 1 @) @3 W" F& T* T! k" x
5 _! T9 g5 v: V5 F. S9 T* C( j+ P; r+ N r. {# Q
从图中我们可以看到,该接口的时序是一个很有规律的序列,CLK信号什么时候该由低变高,什么时候由高变低。DATA信号什么时候该传输哪一位数据,LOAD信号什么时候拉低,什么时候拉高,都是可以根据时序参数唯一确定下来的。 我们可以将该数据波形放到以时间为横轴的一个二维坐标系中,纵轴就是每个信号对应的状态: / p8 V: b, ]; X2 H- O m! j5 [
* v( `- o3 G& M
0 j6 T* L, y0 `! b# C+ i
因此我们只需要在逻辑中使用一个计数器来计数,然后每个计数值时就相当于在t轴上对应了一个相应的时间点,那么在这个时间点上,各个信号需要进行什么操作,直接赋值即可。 针对TLC5620的接口时序,在FPGA中,我们以时钟周期为20ns进行设计,由于TLC5620的数字接口工作时钟最高位1MHz,周期为1000ns,因此时钟的翻转时间最小为500ns,为了给设计留有余量,因此本设计使用1200ns作为时钟周期,即时钟信号每600ns翻转一次。从而可以通过每个信号变化时的时间得到对应计数器的值: 每个时间点对应信号操作详表: 1 s' K9 ~* v' U) p# U/ O: D
( E6 R) K7 ?5 ]/ p
5 T& w! n+ c1 |8 w2 h- L每个时刻计数器操作:
" l0 F, O) }- ?/ @0 j- p& J
1 b) X9 H s$ k" r, b' n以上就是通过线性序列机设计接口时序的一个典型案例,可以看到,线性序列机可以大大简化我们的设计思路。线性序列机的设计思想就是使用一个计数器不断计数,由于每个计数值都会对应一个时间,那么当该时间符合我们需要操作信号的时刻时,就对该信号进行操作。这样,就能够轻松的设计出各种时序接口了。 9 f1 `6 n- ?9 ?1 E; m/ m% R
2 |/ l- ^' J% i' Y, \; t" s) c有了这两张表,我们就可以进行TLC5620的接口逻辑的编写了。设计TLC5620接口逻辑的模块如下图所示:
; P7 q( T& D4 N5 E8 x6 R$ V
5 Z8 i! E* Z& B# R( B其中,每个端口的作用如下所示:
$ G+ B1 o% W$ O5 V$ s* ]. P
1 S. \( j0 U! P X5 ?有了这些之后,我们就可以开始进行控制器的具体逻辑设计了。具体逻辑设计过程请参看小梅哥FPGA设计思想与验证方法视频第17课。 视频教程中的工程源码:
/ y4 A9 ^9 o) ?
4 T& m: \( H; K+ G: t/ R6 P- M- E
" c3 T# D! J7 o) d, ~. n
3 T; K1 n, W8 V; P5 C, L& _
$ f& q5 M6 I5 u4 A; ~# u; e
: a# i/ C8 x$ \9 s5 `" f5 P# d" [1 Y2 D2 {' d, ]" x* t- I
视频教程中的测试文件源码: + K( K x$ z8 `' N; Y X1 r9 W1 Y5 q
. x0 v1 U6 ?2 x# h, G+ Y" n
) V! P/ a' j/ s, i
. p! G+ ^) i! P. u6 r+ ]板级验证方法: 设计中使用了一个信号探针来通过电脑传递输出电压控制字给DAC控制逻辑,使用In system sources and probes editor工具,输入希望输出的电压值,则芯航线开发板上,FPGA控制TLC5620芯片输出对应的电压值
! @' T3 y4 [2 N! ^# s4 r9 N
- C$ `9 B( v8 @0 `; t
4 m8 h. Q5 {, i8 \/ @顶层例化模块源码: 5 v7 p4 z x% x" P& u8 v5 U" k% S# |
+ u1 j* `. J0 z/ S% B8 k, M
* D4 G1 |) |0 }7 ]0 ^. L
如果希望更加细致详细的学习本实验,请观看《小梅哥FPGA设计思想与验证方法视频教程》第17课。 如有更多问题,欢迎加入芯航线FPGA技术支持群:472607506 % x/ W. _- C+ O
7 F4 C5 i1 t; o. s5 V3 f- f. t* a& k
- S; L8 g2 E/ w& s: V附录1:ADDA V1.1模块使用说明 本模块提供两种连接方式,分为开放式接口和芯航线FPGA学习套件专用接口。开放式接口焊接普通排针,方便用于使用杜邦线与其他非芯航线FPGA学习套件的板卡相连。芯航线专用接口使用卧式排针,与芯航线FPGA学习套件的CAMERA接口相连。现分别进行介绍: 1、开放式接口:
7 E) x/ s3 m3 j6 E& Z0 y
6 b& H, C$ j* n' u) s( A0 @: ^8 s: t+ u' \
+ j n9 t% V+ G% h
本模块共有5个接插件: P1为与FPGA开发板连接的数字接口信号和电源信号,使用时使用杜邦线与芯航线开发板的GPIO 0中相应引脚相连,具体连接位置,可以参照我们提供的示例连接方法;其每个引脚的功能如下图所示: $ Z/ U3 i# w" ^8 J8 c
* p. E& F( K- f' NP2为VCC5V的连通短接点,如果使用P1上的供电引脚为模块供电,则需要将P2短接; P3为GND的连通短接点,如果使用P1上的GND引脚为GND连接到开发板,则需要将P3短接; P4为扩展供电引脚,由于芯航线核心板本身为高速数字电路,因此电源噪声相对较高,在一些需要精密测量的应用中,往往使用专用的独立供电电路为模块供电,因此可以直接将外部供电使用杜邦线接到P4上,其中P4靠近P2的针接VCC,P4靠近P3的针接GND,P3需要保持短接状态,P2则需要断开。 注意,无论何时,请不要短接P4,否则会烧毁开发板。 + m; G- j" S9 t2 y) o) r3 a6 T
2、针对芯航线FPGA学习板套件的专用插接方式: 针对购买我们开发板的用户,我们直接焊接的卧式排针,可以直接插接到我们芯航线FPGA学习套件的Camera接口上使用,插接到Camera接口时,需要单独供电,供电接口从P4接口通过杜邦线与开发板的供电输出引脚相连。如下图所示: & F4 A" E9 X: F" u" @( ]" M3 A
' I' r0 P, T9 l* b+ t6 H
( h* J( s% ]& @2 ^使用此种插接方式时,对应引脚分配如下表所示: ! y9 E0 e- `6 ^8 c
0 y0 h' m6 w, f
附录2:ADDA V1.1模块原理图 2 x# X& B2 k2 \+ i
! u3 L& K2 B! h: o, p
/ r' e( I, `) H( r) X" K8 i' j$ k/ o, x. {# F
Z, `- U6 s" K! m
芯航线电子工作室
; w2 t$ U: Y" \/ R* Y$ m
6 y1 K: E/ b" S# G" \ u2 ~" j / A! J; ~" r- c7 f: ]; v
9 R# y, B. H) ]( O# L& X
: l. W- b; ?- W% w7 W: _
& }$ x( G* f2 U8 G
9 b7 S% ]; T8 r9 x, u; y4 Q7 T, |0 k9 H
* B J) K' z4 ]* Y& F5 d+ [
$ c9 Q4 q2 D. m7 V% K
* u' D! |; x7 f: c9 T
4 w2 T' `+ y( A+ T Z4 Z
) `7 }' ]2 z" t% h: ]) N T: H- r& h. g8 F& P5 B9 ~9 P
, H; i' i/ @* ^& Y# U: z" ~
2 q0 A% q9 S- ?$ U
6 [6 f9 M: t' M( ^% A- ^4 M+ e* T Q
/ f( q* Q8 N; J
, \ B5 X( q# [
; i/ [; p! y+ ~9 f0 m2 x0 I$ t% I# B4 P" _% G. e& b4 S$ Y6 x
8 i8 W& E9 K8 n8 X9 X" n8 J
6 P6 D- D" ~3 ^# y- D
9 W2 }3 [ u( d$ O) _7 }% n" _
" w0 V$ M. t, c, _8 W) D5 t
: Y; o4 U6 K7 f. T
7 k; w, j" r3 L0 E ! |0 ~4 s1 N: ~+ A8 H/ d# n
$ `3 S0 J4 r& i& M4 }$ m : O; L7 U$ v& j* f( E$ Q
3 Z4 |' B; ]+ @8 O2 n) K4 i6 w' \# P" V y6 Q# f
+ n* H7 g$ M, p# j9 X
. Y3 p0 ^. [0 t- B4 W- l
6 N" S& ?3 t( S0 W
% q. w' H% Q6 y + {5 V3 }+ [* U
" n! C( q6 e1 W, K. O7 I
& r: a& T4 _: n- q/ p
|