STM32F429 DMA 方式连接 ADS1274

22 篇文章 6 订阅

      之前使用过ADS1246 24bit ADC 设计过产品。该芯片功能强大,可编程能力强。不过它的缺点是参数设置和通道选择,数据读写都是通过SPI 读写,无法实现DMA 模式数据传送。经测试,无法满足振动信号采集的要求。所以在设计振动信号测试IO板时,我们选择ADS1274 芯片。在本博文中,介绍如何使用STM32F429实现ADS274 的高速数据传送。内容会随着项目进展不断更新。

ADS1274 介绍

ADS1274 是TI公司的四路、128kHz、24 位同步采样 Σ-Δ ADC。相比于其它ADC 芯片而言:

  1. 它的所有功能都通过硬件引脚来选择,而不是使用SPI访问内部寄存器。
  2. 多路ADC 的采样数据通过不同的DOUT 输出,而不是使用SPI 命令来选择不同的模拟通道,所以每个通道的ADC 是同步输出的。不过这需要 FPGA 支持才可以。
  3. DOUT1 还具有SPI-TDM 的输出方式,即所有通道的数据已时分复用的方式在该通道上发送。
  4. 支持支持SPI和Frame-Sync两种模式。
  5. 支持TDM 模式,也就是在SPI 可以连续读取四个通道,不需要软件选择通道。我们选择SPI-TDM 模式

时钟输入(CLK)

     ADS1274 需要一个外部时钟输入,当最大数据速率时,低压模式可以输入27M或者13.5Mhz

低速模式可以为27M或者5.4MHz

接口模式(FORMAT[2:0])

FORMAT[2:0]

接口协议

数据模式

数据位置

000

SPI

TDM

动态

001

SPI

TDM

固定

010

SPI

离散

-

011

Frame-Sync

TDM

动态

100

Frame-Sync

TDM

固定

101

Frame-Sync

离散

-

110

Modulator

-

-

本项目选择001 固定 SPI TDM 方式 

采样模式(Mode)

MODE【1:0】模式选择max f Data
00高速144,531
01高分别率52,734
10低功耗52,734
11低速10,547

本项目选择 00.

接口

ADS1274 使用串口方式获取数据。有两种协议SPI TDM和Frame-Sync。

SPI-TDM 方式

    SPI 兼容格式是只读模式。DRDY 下降沿表示数据就绪,然后通过SCLK 移出。ADC 是从模式,MCU 为主模式。sclk 在转换过程中,可以保持低电平,或者free run。

Frame-Sync方式

类似与音频ADC 的方式,它是一种被动方式,处理器必须发送FSYNC和串行时钟信号

DRDY/FSYNC

 在Frame-Sync 模式下,这一引脚是FSYNC 的输入。在SPI-TDM 模式下是DRDY 输入。

SCLK

在Frame-Sync 模式下,SCLK 是连续的。在一个帧周期(FSYNC 时钟)内,SCLK 的脉冲数量是CLK 周期的 2幂分频数(也就是1,1/2,1/4 等)

同步信号SYNCHRONIZATION (SYNC)

当sync 为低电平时,adc 停止转换,内部计数器清零。当sync 为高电平时,转换重新启动

TEST 【1:0】

应该为00.

TDM 模式

在TDM模式下所有通道的数据都依次在一个引脚(DOUT1)顺序输出。

固定位置模式和动态位置模式

  固定模式是不管通道是否power down 都输出通道的值,当power down 时,输出为0.ao

而动态模式时,如果某个通道power down 就不再tdm 中输出。

与STM32F4 连接的方案

       我们使用过ADS1246芯片与STM32 通过SPI方式相连.使用软件读取SPI实现数据传送。传送速度不高。要提高传输速率,要做到两件事:

1 去掉软件选择模拟通道。采用所谓SPI-TDM 模式。

2 实现SPI 的DMA 传输。

本项目希望实现

  1. 采样频率 :15KHz
  2. 采样精度:24bits
  3. 模拟通道数:4

    本方案选用ADS1274芯片。实现一次采集4 个通道64个采样,采用DMA 方式实现ADS1274 与STM32F429 之间的数据传送。

设计的关键是时钟系统(我们不希望使用FPGA)。具体考虑如下:

  1. 采样周期 15KHz
  2. 数据传送速率:15KHz*24*4=1.44MHz

设计方案

采用SPI-TDM 模式

  1. 使用TIM2 产生CLK,频率 1MHz
  2. 使用TIM3 ETR 输入对DRDY 计数一个脉冲 产生触发信号 触发SPI TX DMA 产生 SCLK 时钟,每次发送12 个字节
  3. SPI DMA 要开启两个DMA stream 一个是SPI TX 另一个是SPI RX DMA
  4. SPI TX DMA 设置成循环模式。

SPI 的传输速率 4MHz (高于CLK,应该没有问题吧?)

软件没有写,本文可能有错误。

2020/2 修改

 

 

  • 0
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: STM32是一款基于ARM Cortex-M处理器的嵌入式微控制器,具有丰富的外设资源,如DMA(直接存取存储器)控制器。ADS1115是一款16位精度模数转换器,可用于将信号转换成数字信号输出。在STM32上使用DMA读取ADS1115,可以实现快速、高效且可靠的信号采集。 首先,需要配置STM32的GPIO口作为I2C总线的SCL和SDA管脚,并初始化I2C总线控制器。然后,配置DMA控制器,将ADS1115数据缓存到STM32的内存中。可以使用STM32提供的库函数或写驱动程序方式来实现这些功能。 在读取ADS1115数据时,首先向ADS1115发送设定读取位置和采样频率等配置命令。然后,启动DMA传输,让DMA自动把ADS1115的数据存放到STM32的内存中。读取完成后,可以通过回调函数进行数据处理,并将结果发送给其他设备或存储到SD卡等介质中。 通过DMA读取ADS1115可以提高数据采集效率和系统可靠性,减少CPU的负担,同时减少因CPU占用率过高而产生的数据丢失等问题。在设计嵌入式系统时,需要综合考虑输入信号的稳定性、处理速度和系统复杂度等因素,选择适合的采集方式。 ### 回答2: stm32是一款基于ARM架构的微控制器,能够通过DMA(直接内存访问)技术来高效读取ADS1115模数转换器的数据。 首先,需要在stm32上配置DMA通道和ADS1115的I2C通信。DMA通道将被用来实现数据的直接传输,而I2C通信则是stm32通过总线协议进行ADS1115数据的传输。 其次,需要编写代码来初始化DMA的配置,确定传输的数据长度和位置,以及配置I2C的通信参数。然后,通过启用DMA和I2C通信来开始数据传输。在传输过程中,DMA通道可以在不占用CPU资源的情况下从ADS1115缓冲区中读取数据,并将其传输到对应的内存地址中。 最后,通过解析DMA中的数据来获得ADS1115模数转换器的读数。可以通过简单的计算来将数字信号转换为模拟信号。 通过以上步骤,stm32就可以通过DMA技术高效地读取ADS1115模数转换器的数据,实现了高效稳定的数据采集操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值