TLC5620型b
AI summary
TLC5620型DAC驱动设计涉及数模转换器的基本原理和实现,包括设计背景、原理、实现步骤及仿真测试。设计使用TLC5620芯片,支持4通道8位电压输出,采用串行接口传输数据,并通过时序控制实现输出电压的同步更新。设计分析包括时序参数和线性序列表,仿真测试验证了不同命令码下的输出电压计算。
Last edited time
Sep 24, 2024 06:59 AM
Last edited by
Tags
Serial Communication
Communication Protocols
Data Transmission Methods
Digital Signal Conversion
DAC Control Mechanisms
Voltage Output Systems
一:设计背景
- DAC(Digital-Analog Converters):即数模转换器。
- 设计领域(航天航空/军工/数字信号处理等…)
- 组成(D/A转换器基本由4个部分组成:即权电阻网络、运算放大器、基准电源和模拟开关)
- DAC是一种将二进制数字量形式的离散信号转换成以参考电压为基准的模拟量的转换器。
二:设计原理
- 设计时采用ZX-2板卡上的DAC芯片TLC5620。
- 通过TLC5620芯片手册可知:
- 4通道8位电压输出型数模转换器
- TLC5620接收串行接口控制器发送过来的11位数据(MSB优先:
- TLC5620内部结构(采用双缓冲结构)
- 首先通过三线制串行接口总线给所有的DAC传输需要更新的数据,然后通过控制LDAC信号将所有的DAC的电压值同步更新在对应输出通道上。
- TLC5620端口描述
- 串行接口时序
- 细节描述部分
- 时序参数表
A1A0~RNG~D7~D0)
A1A0:通道选择位(00:A通道 01:B通道 10:C通道 11:D通道)
RNG:电压增益位(0:1倍增益(输出电压范围在0~Vref(2.5V)之间)
1:2倍增益(输出电压范围在0~2*Vref(5V)之间))。
D7~D0:8位数据位(输入数字数据)。
对于数据传输:共11位(A1A0 RNG D7~D0),按照MSB~LSB进行串行传输。
当LOAD为高时,在每一个CLK的下降沿,会将数据移入到DAC的寄存器中;11位数据会持续11个串行时钟CLK,当所有的数据移入完成时,LOAD拉低,会将数据从串行输入寄存器中转入到选中的DAC中。
当LDAC为高时,输出的电压数据不会立刻更新在对应的DAC通道上;当LDAC为低时,将所有的DAC的电压值同步更新在对应输出通道上。
三:设计实现
TLC5620芯片手册中输入信号在驱动时为输出,输出信号在驱动时为输入。
在设计时需要驱动端口为CLK、DATA、LOAD、LDAC,在手册中均为输入,那么驱动时均为输出。
- 设计架构
- 设计分析及实现
时序参数可以参考上述时序参数表。
CLK(max)=1MHZ T=1000ns
在本设计中采用时钟周期1200ns(满足CLK<1MHZ),半周期600ns(方便节拍计数:30)。
采用线性序列表实现:
由于器件在时钟下降沿读取数据,所以驱动时需要在上升沿丢出数据(保证读取数据时刚好在时钟的中心位置),满足时序要求。
线性序列表:LSM
节拍 | LSM_1S | LSM_2S | 说明 |
0 | (sys_rst_n==0):cnt=0 | (sys_rst_n==0):clk=0,data=0,load=1,ldac=1 | 初始值 |
10 | cnt=cnt+1 | clk=1,data=cmd_code[10] | MSB:A1 |
40 | cnt=cnt+1 | clk=0 | |
70 | cnt=cnt+1 | clk=1,data=cmd_code[9] | A0 |
100 | cnt=cnt+1 | clk=0 | |
130 | cnt=cnt+1 | clk=1,data=cmd_code[8] | RNG |
160 | cnt=cnt+1 | clk=0 | |
190 | cnt=cnt+1 | clk=1,data=cmd_code[7] | D7 |
220 | cnt=cnt+1 | clk=0 | |
250 | cnt=cnt+1 | clk=1,data=cmd_code[6] | D6 |
280 | cnt=cnt+1 | clk=0 | |
310 | cnt=cnt+1 | clk=1,data=cmd_code[5] | D5 |
340 | cnt=cnt+1 | clk=0 | |
370 | cnt=cnt+1 | clk=1,data=cmd_code[4] | D4 |
400 | cnt=cnt+1 | clk=0 | |
430 | cnt=cnt+1 | clk=1,data=cmd_code[3] | D3 |
460 | cnt=cnt+1 | clk=0 | |
490 | cnt=cnt+1 | clk=1,data=cmd_code[2] | D2 |
520 | cnt=cnt+1 | clk=0 | |
550 | cnt=cnt+1 | clk=1,data=cmd_code[1] | D1 |
580 | cnt=cnt+1 | clk=0 | |
610 | cnt=cnt+1 | clk=1,data=cmd_code[0] | LSB:D0 |
640 | cnt=cnt+1 | clk=0 | 11位数据完成 |
670 | cnt=cnt+1 | load=0 | 在CLK下降沿后LOAD拉低之间保持最少50ns(600ns) |
700 | cnt=cnt+1 | load=1 | LOAD拉低持续时间最少250ns(600ns) |
710 | cnt=cnt+1 | ldac=0 | LOAD拉高到LDAC拉低最少0ns(200ns) |
740 | cnt=cnt+1 | ldac=1 | LDACD拉低持续时间最少250ns(600ns) |
- 仿真测试
- 假设在测试中给定的命令码:cmd_code=11’b01_0_1010_0101
- 假设在测试中给定的命令码:cmd_code=11’b11_1_1111_1111
- 假设在测试中给定的命令码:cmd_code=11’b11_1_1010_0101
A1A0=2’b01(所选通道B通道)
RNG=1’b0(电压增益:1倍)
CODE=8’b1010_0101
VO(DACB)=Vref*CODE/256(1+RNG)=2.5V*165/256(1+0)=2.5V*165/256~= 1.61V
A1A0=2’b11(所选通道D通道)
RNG=1’b1(电压增益:2倍)
CODE=8’b1111_1111
VO(DACB)=Vref*CODE/256(1+RNG)=2.5V*255/256(1+1)=2.5V*255/256*2~= 4.98V
A1A0=2’b11(所选通道D通道)
RNG=1’b1(电压增益:2倍)
CODE=8’b1010_0101
VO(DACB)=Vref*CODE/256(1+RNG)=2.5V*165/256(1+1)=2.5V*165/256*2~= 3.22
Datasheet
Loading...