如何通过DSP配置外设采样芯片AD7705
在公司实习期间,项目中采用DSP28069作为主控芯片,然而,由于DSP28069自带的ADC采样精度仅为12位(4096级),而项目要求上需要实现更高精度的采样,因此我们引入了一款外部ADC芯片TM7705,其芯片和美国的产品AD7705芯片在功能和配置上基本上一致,但国产化的TM7705在价格上要便宜很多,是一个很好的替代品。由于只是一个初学者,在网络上想着搜点可以直接套娃的DSP代码,但搜索一圈下来,居然没有一篇关于DSP的代码,全是关于STM32的,当然代码的参考价值也很大,但在一些配置上又有所不同,所以在做项目过程中走了很多弯路,遇到了很多问题,为此,我决定整理出这份笔记,以供大家参考。如果其中有任何问题或不足之处,欢迎批评指正!

如图,上面是TM7705的封装图,主要能使用上的有SCLK、CS、RESET、IN1、IN2、DIN、DOUT和DRDY引脚。在配置之前需要了解这些引脚的功能。
(1)SCLK:此引脚与DSP上的SPISCLK引脚相连接,DSP作为主机向TM7705外设发送时钟,为模块提供稳定的工作频率,确保各个模块能够同步工作,避免因时钟不同步导致的错误或冲突;
(2)CS:片选信号也就是所谓的使能信号,同样与DSP相连接,通过在DSP上发送低电平使能CS引脚控制芯片的开启与关闭。
(3)RESET:同样与DSP相连接,功能不用多说,复位作用;
(4)IN1、IN2:与采样信号输入端连接,通常间接连接到实际采样点。需要注意的是,这些引脚的输入电平不能超过2.5V,否则可能会损坏芯片。因此,在电路设计中需特别留意输入信号的电平范围。
(5)DIN、DOU:这两个引脚也与DSP相连接,DSP上的SPIMOSI引脚与DIN相连接,SPIMISO引脚与DOU相连接;
(6)DRDY:数据准备就绪引脚(Data Ready)。这是TM7705的一个关键引脚,用于指示数据状态。当DRDY为低电平时,DSP可以从TM7705中读取采样数据。这一功能对数据采集的正确性和同步性至关重要,是使用TM7705的一个难点,需要特别注意引脚的时序和状态判断。
介绍完这些,也可以确定好这些引脚在DSP上的GPIO状态,在此就不仔细介绍了,直接给出结果,选定好DSP上的引脚,将引脚的功能配置成SPI功能,其中,SPICLK为输出引脚,SPIMOSI为输出引脚,SPIMISO作为输入引脚,SPICS为输出引脚;RESET选为GPIO功能,作为输出引脚,DRDY选为GPIO功能,作为输入引脚。
关于SPI的配置方面,在此不过多强调,值得注意的是,需要配置好SPI发送指令的极性,一共有4种极性,这个如果配置错了,对于该芯片的调试结果影响很大,要仔细看好该芯片的时序图来配置。
接着就是他的时序代码的编写了,来看一下关于7705的寄存器配置和功能。




从上图可以看见,该芯片的配置都是依托于通信寄存器来实现的,可以说通信寄存器就是该芯片的C位,上电后,该芯片默认初始状态为写通信寄存器,所以不需要一开始向7705发送写通讯寄存器的操作,但值得注意的是,防止接口序列丢失,需要在配置寄存器前,向7705发送足够长时间的高电平来实现SPI复位操作,从手册上看至少需要32个串行时钟周期(即32个1)。紧接着就可以对7705进行写其他寄存器的操作了。


在复位完成后,紧接着就可以对时钟寄存器进行配置了,从通讯寄存器的位表可以看见,想要配置时钟寄存器需要通过SPI发送数据0x20(0010 0000),即选择时钟寄存器,写操作,正常模式,选择采样通道IN1+和IN1-,在写完后就可以配置时钟寄存器了。那么在时钟寄存器上值得注意的是CLKDIV、CLK、FS位了,CLKDIV和CLK的配置取决于芯片的外部晶振,我使用的晶振是4.9152MHz的外部晶振,根据手册上的说明,这两位全写1,FS的配置决定了采样芯片的采样频率以及DRDY的电平周期,这是很重要的配置,如果配置的不合理,可能会直接导致输出的结果不正确。我目前采用的是250hz的输出频率,结合以上所述,对于时钟寄存器的配置就是发送0x0e(0000 1110)。在配置完时钟寄存器后,该芯片会自动返回写通讯寄存器的状态,不需要发送写通讯寄存器的指令。


配置完时钟后,就可以对设置寄存器进行配置,和之前步骤相同,需要向通讯寄存器中发送指令0x10(0001 0000),然后就可以对设置寄存器进行配置了,首先需要配置模式,一般采用自校正模式,这个时间一般很长,所以在写代码时,需要注意该步骤的时间延迟,自校正结束后,模式自动切换为普通模式,实现正常的采样。校准开始时,DRDY处于高电平,直到数据寄存器中有新的有效数据,DRDY才回到低电平,DRDY从高电平到低电平这个过程的持续时间是 9 ×1/输出速率。增益默认为1,极性按自己的需求来配置,我这边单极性即可,其他默认为0,所以发送的指令为0x44(0100 0100)。到目前为至,对于基本的采样功能的底层配置就全部完成了。下面就可以对数据寄存器进行读取采样数据了。同样配置完设置寄存器后,芯片默认返回通讯寄存器,根据位表,向7705发送0x38(0011 1000)实现选择数据寄存器,读指令和通道1的操作。然而读指令是8位的,数据寄存器是16位的,并且发送读指令的同时,DOUT端不能自动向外发送数据,所以需要用户在向7705芯片中发送两个8位的空白指令(如0xff)来激活采样芯片的时钟信号等,这时候输出总线上才会出现16位的采样结果。
说到这里,基本的原理与步骤全部介绍完毕了,但实现上来确实会有很多问题,下面,我将对我所遇到的问题来进行解释。
(1)DRDY常高问题,配置时,出现过DRDY一直输出高电平的问题,后面发现与时钟寄存器的输出频率有关系,开始时设置的输出频率为50Hz,导致了输出DRDY的频率很低,为20ms一个周期,DRDY还没有输出就已经开始进行自校正模式了,使DRDY一直为高电平,后面改成了250Hz,就可以正常输出了;
(2)硬件部门也有出错,将SPIMOSI与DOUT,SPIMISO与DIN相连接,后面测试时看见在芯片的输出端一直有数据才发现该问题,后面向硬件部门反映了该问题;
主要的问题就这两个,可供大家参考,然后对于测试结果来看,网络上全是代码以及时序操作的描述,对于调试过程中的示波器观测结果几乎没有出现过,用户在配置时,很难看出问题在哪,针对这一个问题,我将最后的测试结果的示波器观测图放在下面(tip:仅供参考):

图一
从图一的示波器上可以看见,上电后,DSP向TM7705发送了10个0xff的无效指令,作用就是前面所说的复位作用。
图二
接着向芯片中发送选择时钟寄存器和配置时钟寄存器的指令,如图二所示;

图三
然后向芯片发送选择设置寄存器和配置该寄存器的指令,如图三所示;

图四
图四所示,在配置完设置寄存器后,DRDY在很长一段时间才有下拉的电平,这一阶段就是自校正的过程,所以在配置时,需要注意添加延迟时间,要比此过程要长才可以。

图五
配置完后,等待自校正完成。如图五所示,可以看见在DRDY信号端出现了250Hz的周期性波动,这就是设置的输出频率。

图六
如图六所示,发送选择读数据寄存器的指令后,在发送两个无效的指令,在保持DRDY一直处于低电平的状态下,芯片的DOUT端就可以输出数据了,此处要注意,发送的读指令要在DRDY一直处于低电平的状态,不要再250Hz的周期性变化处进行读操作(可以通过延迟来实现),DOUT数据被读完后,DRDY自动返回高电平。
代码部分再网络上看了很多个版本,很多部分借鉴了名为“TM7705(AD7705)驱动调试总结-基于stm32f103zet6-填坑日记”的博客。下面给出DSP的代码,给大家参考。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)