锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

FPGA 20个例程篇:4.串行DAC输出模拟电压控制LED亮度

时间:2022-09-07 17:30:01 da1200二极管ldo输出串二极管ldo并一颗二极管

探索和探索常用的通信协议:

4.串行DAC输出模拟电压控制LED亮度

TLC5615是一战项目中广泛使用的串行项目DAC,一方面,我们可以通过这个例程来掌握SPI另一方面,通信的底层逻辑DAC广泛应用于电力电子、医疗设备、军用雷达等领域,如运放叠加用于给定后端功率模块基准等,如果条件允许,可购买普通1000-2000元的普通示波器,方便后期嵌入式研发,开发板在上面DAC输出端连接SMA座椅可直接连接到示波器上,即可准确测量DAC模拟信号波形和振幅值,当然,在绘制开发板原理图时,考虑到更人性化的设计,板引出红色发光二极管DAC的输出端,因此,如果手头没有示波器,可以直观地观察发光二极管的亮度,判断DAC如图1所示,在豌豆开发板上串行输出DACTLC参考电路5615。

图1 豌豆开发板Artix7上TLC5615电路

在之前的串口通信例程中,你可以回忆起是否有几个重要的概念,如波特率、开始位、停止位等SPI还有几个关键概念,比如:SCK时钟频率、CPOL、CPHA等。因此,在设计本例程的代码之前,让我们先做好准备,即更系统地学习SPI通信协议的底层逻辑和阅读TLC5615芯片手册,提炼程序设计中有用的信息点。

SPI全称为串行外设接口(Serial Peripheral Interface),可以理解为传输数据的通信协议。SPI 摩托罗拉(Motorola)公司开发的全双工同步串行总线是SOC芯片与外围设备之间的同步串行端口。

关于SPI通信有很多版本的解释,作者也用最流行的方式来解释:第一,SPI通信需要四条线,即spi_sck时钟,spi_cs片选,spi_mosi数据的主机输出从机输入,spi_miso数据主机输入从机输出;第二,spi_sck主机给出时钟,因为主从机之间SPI通信,必须保证两者之间的时钟一致,否则数据收发会紊乱;第三,SPI的CPOL极性和CPHA相位是描述spi_sck时钟特性的核心参数,即主机需要两者之间的时钟特性保持一致,才能正常通信;第四,正在建立SPI在通信过程中,主机必须降低spi_cs片选信号,使整个通信有效。

这里多说一句,在这个例程和之后SD卡例程、FLASH例程中,均由FPGA作为主机和外部设备SPI通信,所以spi_sck时钟由FPGA但在实际项目工程中,端给定FPGA和ARM端通信,往往FPGA端作为从机,这时就需要ARM端给出spi_sck时钟,FPGA通过内部快时钟检测终端spi_sck时钟上升和下降,然后相应地接收和发送数据!

关于CPOL和CPHA网上也有很多版本的说法,看起来很容易被迷惑。回头想想。CPOL和CPHA只有两个值是0或1,所以根据排列组合的原理,主机端只有四种可能性,这里作者简要整理如下:

1.CPOL为0,CPHA为0,spi_sck时钟信号空闲为低电平,采样沿上升,输出沿下降

2.CPOL为0,CPHA为1,spi_sck时钟信号空闲为低电平,上升沿输出,下降沿采样

3.CPOL为1,CPHA为0,spi_sck时钟信号空闲为高电平,上升输出,下降采样

4.CPOL为1,CPHA为1,spi_sck时钟信号空闲为高电平,上升沿采样,下降沿输出

也许具体的图片比抽象的文本叙述更直观和生动,以帮助你更好地理解SPI的时序逻辑,笔者特意找到一副非常经典的图片,如图2所示详细描述了SPI通信协议在不同CPOL极性和CPHA相位下对应的采样和输出时序逻辑,比较上面的文字叙述和下面的图片逻辑,在这里,你可以回顾一下,加速SPI理解底层时序逻辑!

图2 SPI通信协议不同CPOL极性和CPHA相应的采样和输出时间逻辑

在了解清楚SPI在通信原理之后,我们不急于开始编码。在此之前,我们需要阅读它TLC5615芯片手册,因为豌豆开发板配备外设比市场上同类开发板丰富得多,设计20个例程,不仅逐步更系统地实践和掌握FPGA设计,同时,所有板载外设都设计成不同的例程,因此在学习过程中肯定会涉及到阅读芯片手册提取关键信息的环节。

事实上,你不需要有太多的恐惧,因为成为一名优秀的嵌入式工程师,每天处理硬件,阅读芯片手册是工作中必须面对的,这里不需要像学校阅读,如学习谭浩强C语言和严伟敏数据结构,思考每一句话,学习每一个知识点,作为阅读工具书,就像学习的时候,手边会有一本英汉词典。当你看到你不认识的单词时,你可以找出它们并重复使用。你可以带着问题去看。

芯片手册通常包括:应用场景、型号介绍、引脚说明、驱动逻辑、包装尺寸、参考电路等信息,如硬件工程师需要芯片选择、板焊接、引脚说明、参考电路、型号介绍、包装尺寸等,判断所选芯片是否满足设计需求,需要引脚,然后参考手册中提供的电路进行设计原理图,并根据包装尺寸进行原始设备包装。对于软件工程师PCB板实物后,比较硬件工程师给出的原理图,更注重驱动逻辑的设计。

下面笔者带大家一起读一读TLC5615芯片手册,从项目实战的角度,提炼程序设计的有效信息,如图3所示TLC对照图2-7所示的开发板原理图,5615芯片内部结构及引脚说明,可以看到SCLK、CS、DIN分别对应了SPI通信的spi_sck时钟,spi_cs片选,spi_mosi从机输入数据主机输出,OUT对应DAC细心的学生会注意到芯片的输出REFIN引脚,这是DAC芯片的参考电平引脚,在芯片手册的第三页,我们可以发现硬件上,参考电平的值范围为2V到VDD-2V开发板之间VDD使用DC/DC的5V供电,而VREF使用纹波较小的2.5V稳压LDO供电,所以Vrefin就在芯片手册的2范围内V-3V之间。

图3 TLC5615的内部结构和引脚说明

如图4所示是TLC5615的Vout输出模拟电压值计算说明,所以我们可以知道这个串行DAC的位宽是10bit,例如,根据芯片手册给出的例子,参考电平Vrefin是2.048V, Vout=2*Vrefin*din/1024,当din取值1023时,Vout输出接近于4.096V,当din取值0时,Vout输出是0V。在原理图中,我们给出的参考电平Vrefin是2.5V,如果din取值1023时,Vout输出接近于5V。

图4 TLC5615的Vout计算输出模拟电压值

      如图5所示是对TLC5615芯片控制的时序逻辑,这其实就是个标准的SPI通信协议,当然芯片手册标明了SPI通信中保持时间和建立时间的区间范围,同时需要注意到DAC每次发送din的数据位是12位,其中前10位是有效数据,后2位是无效数据,这里我们把后2位都统一发送位2位的0。

 图5 对TLC5615的控制时序逻辑

       如图6所示是TLC5615与SOC芯片连接示意图,大家可以清楚地看到芯片手册里要求对SPI控制DAC的CPOL极性和CPHA相位已经给出,即CPOL和CPHA均为0,也标明了DOUT即spi_miso引脚可以不连接,但可以用于验证数据的传输,因为豌豆开发板搭载很多外设引脚紧张,所以原理图上没有把DAC的DOUT引脚引出。

 图6 TLC5615与SOC芯片连接示意图

       到这里已经把SPI的底层通信逻辑、TLC5615手册的有效信息都整理完毕,下面就只用动手编码即可,在这个例程中笔者和大家一起去写一个通用性的SPI底层逻辑,如表1所示是该模块的信号列表, 模块中CPOL和CPHA通过输入信号给定,所以其具有更多的通用性,如图7所示是CPOL和CPHA均为1时SPI通信的时序逻辑,即spi_sck时钟信号空闲为高电平,上升沿采样,下降沿输出,有兴趣的同学可以用Timegen去动手画一画CPOL和CPHA均为0时SPI通信的时序逻辑,也都大同小异,如图8是 SPI底层模块的代码设计,大家可以对照图7的时序图尝试写出对应的verilog代码。

 图7 CPOL和CPHA均为1时SPI通信的时序逻辑

信号列表

信号名

I/O

位宽

clk

I

1

rst_n

I

1

spi_en

I

1

tx_spi_data

I

10

spi_cpol

I

1

spi_cpha

I

1

spi_mosi

O

1

spi_sck

O

1

spi_cs

O

1

表1 spi_driver模块信号列表

图8 SPI底层模块的代码设计

      在这个例程中我们来实现一个基本功能,FPGA控制串行DAC芯片循环输入0-1023,改变电压模拟控制LED亮度,这里通过一个计数器模块每隔10ms时间从0-1023,如表2所示是定时向SPI总线输入数据计数器模块的信号列表,该模块的代码设计如图9所示,非常简单只是用一个定时器cnt0数10ms时间,再用一个定时器cnt1数0-1023的数,然后每隔10ms把数据发往spi_driver模块。

信号列表

信号名

I/O

位宽

clk

I

1

rst_n

I

1

spi_mosi_dout

O

10

spi_mosi_dout_vld

O

1

表2 spi_mosi_dout模块信号列表

图9 定时器发数模块的代码设计

        如图10所示是串行DAC输出模拟电压控制LED亮度顶层文件的例化,这里我们用PLL IP核事先把50Mhz的晶振时钟分配成6.25Mhz的,再给spi_driver使用,spi_driver模块也对时钟进行了四分频,即DAC的驱动时钟为1.5625Mhz,笔者在各个模块中也把关键信号添加到ILA IP核,方便大家上板观察,如图11所示,是串行DAC的SMA座子连接到示波器上所观察的输出波形,可以清楚地看到示波器的横坐标(时间坐标是2S一格),纵坐标(电压坐标是2.5V一格),完全符合预期,因为原理图中TLC5615的VREF引脚是由2.5V给定参考,当DIN输入是1023时,DAC的输出按照之前芯片手册的分析,则接近于5V即纵坐标接近两格,从0数到1023,一共用了10ms*1024约等于10秒钟即横坐标五格左右。

 图10 串行DAC输出模拟电压控制LED亮度顶层文件的例化
 

 图11 示波器观察到的串行DAC模拟电压输出

源工程代码下载链接(含datasheet):

链接:https://pan.baidu.com/s/1VcqGSmEySWSn_pz-PPdldQ 
提取码:5krv 
 

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章