AD7124是ADI一款24位的ADC芯片,性能强悍,对于开发者来说其优点:可灵活配置,用户可根据自己的需求,对应寄存器进行配置;其缺点:开发手册内容太多,长达91页,对于新手来说不了解芯片手册,找不到重点,会踩很多的坑,下面是我调试双通道采集数据过程中遇到问题,以供参考。
1.SPI时钟频率问题
ADC芯片与MCU通信采用SPI通信,SPI的CLK时钟频率经过发现,当频率大于1.5MHZ时,采集不上数据,但是单独用SPI库函数去读地址可以读出地址。当时踩的第一个坑就是时钟频率,当时用官方的驱动读数据时,仿真发现读不出来地址,就调时钟为1.5MHZ,可以读出来地址,但是读不出来采集的数据,就开始研究驱动,后来就在错误的道路上越走越远,很奇怪的一点是1.5MHZ的时钟频率可以读出ADC的地址,但是却采集不上数据。
2.寄存器配置
状态寄存器:该寄存器是一个8位只读寄存器,可通过寄存器的低四位判断当前读的是哪一个通道,这可用于判断多通道采集的通道数。
通道寄存器:AD7124-4有16个通道寄存器: CHANNEL_0至CHANNEL_15。通道寄存器起始地址为0x09 (CHANNEL_0),结束地址为0x18 (CHANNEL_15)。通过各寄存器,用户可以配置通道(AINP输入和AINM输入),AINP位和AINM位可配置模拟输入的通道,假如硬件上AINM接的是地线,即配置为AVSS,则AINP配置为AIN0即为通道0,配置为AIN1即为通道1,Setup位就配置为0,即第一种配置,这样我们的通道0和通道1都可以共用一种配置。Setup中所说的8种配置如下图1:
图1
滤波器寄存器:SINGLE_CYCLE位置1,数据在一个周期内就转换完成;FS位设置越小,通道切换读数据时建立时间越短。
3.单通道配置
单通道配置相对简单一些,0x09寄存器配置为0x8011,其它寄存器关键地方配置根据上面介绍,大部分的寄存器配置都是采用默认配置。
4.双通道配置
⑴自动遍历读取数据
如果使能了双通道,ADC将会自动遍历各通道,当每一个通道转换完成,又从第一个通道开始。转换过程如下图2:
图2
但是双通道每次切换时建立时间要注意,就是说通道切换时有一定的时间间隔,不能立即读数据,因为此时读取的数据不准确,假如建立时间太长超过了采样周期,就不能满足需求。滤波器寄存器默认配置的sinc4模式,关于通道建立时间如下图3:
图3
⑵手动切换通道
手动切换通道可以根据图1的方式,通道0和通道1采用同一种配置,切换通道时只需修改AINP位,0x09寄存器由0x8011修改为0x8031就完成了通道0切换为通道1,然后根据状态寄存器判断当前读取的通道数,建立一个二维数组,把相应通道数据对应存进二维数组中,后边取数组直接从二维数组中取即可。