This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] ADS1256:验证每秒采样数输出和采样率

Guru**** 2531950 points
Other Parts Discussed in Thread: ADS1256

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1132583/ads1256-verifying-number-of-samples-per-second-output-w-r-t-sampling-rate

器件型号:ADS1256

您好、E2E 专家、

你好。

我 有一个 ADS1256板与 ESP32微控制器板连接。 我将在单端模式下获取具有500mV 直流失调电压的1V 单通道正弦信号。

我已将程序中的样本/秒设置为30k。 我使用 Arduino IDE 对控制器进行编程并读取数据。

 

我从数据表中了解到、如果我们从单个通道连续读取、那么您可以从其中每秒获取30000个样本、而且、如果我们通过切换多路复用 器来读取所有通道、我们将仅获得4374Hz。 如果我错了、请纠正我的问题。

我正在尝试验证我是否获得30ksps 输出。 我该怎么做? 感谢您的任何帮助...

我正在附加 Arduino 代码:

#include #include #define cs 5 //芯片选择#define rdy 22 //数据就绪,输入#define rst 21 //可以忽略#define SPISPEED 2500000 // tensy 3.2 @120 MHz#define SAMPLING 1024float value1float dige2float value3int ifloat xdouble VREF = 2.50#debug 1double samples[双精度](pinf);Serial.begin(115200); tin 模式(cid);cid (cid)(cid)(cid (cid);print (cid)(c //低电平也是可以的。 pinMode (rdyinput)pinMode (rstoutput)digitalWrite (rst、output) 电平)延迟(1)//板载时钟至少为4个时钟周期的低电平。 100微秒就足够 digitalWrite (rsthigh)//现在重置为默认值 delay (100)SPI.begin();//启动 SPI 总线延迟(100)while (digitalRead (rdy)){//等待 READY_LINE 变为低电平 SPI.beginTransaction(SPISettings(SPISPEEDMSBFIRSTSPI_MODE1)//启动 SPI 传输(mindelt);(0x100) Microdelay (SPI); 字节 STATUS_reg = 0x00//地址(数据表第30页)字节 STATUS_DATA = 0x01// 01h = 0000 0 0 1 =>状态:最高有效位优先、自动校准禁用、模拟输入缓冲器禁用//字节 STATUS_DATA = 0x07;// 01h = 0000 0 1 1 1 =>状态: 最高有效位优先、自动校准被启用、模拟输入缓冲器被启用 SPI.transfer (0x50 | STATUS_reg)SPI.transfer (0x00)//第二个命令字节、只写入一个寄存器 SPI.transfer (STATUS_DATA)//将数据字节写入寄存器 delayMicroseconds (100)字节 adcon_reg = 0x00//A/D Control Register = 0x0220字节/ ADCon Data (ADCon) // 0 01 00 000 =>时钟输出频率= fCLKIN、传感器检测关闭、增益1字节 adcon_data = 0x00// 0 00 00 00 000 =>时钟输出=关闭、传感器检测关闭、增益1 //字节 adcon_data = 0x01; // 0 00 00 001 =>时钟输出=关闭、传感器检测关闭、增益2 SPI.transfer (0x50 | adcon_reg)// 52h = 0101 0010 SPI.transfer (0x00)//第二个命令字节,只写入一个寄存器 spi.transfer (adcon_data)//将数据字节写入寄存器 delayMicroseconds (100)byte drate_reg = 0x03//DRATE:A/D 数据速率(地址03h) byte drate_data = 0xF0// F0h = 11110000 = 30、000SPS SPI.transfer (0x50 | drate_reg)spi.transfer (0x00) byte (0x100);//写入 SPI 数据传输(SPI);/SPI drybyte.transfer (1);/ dle/只写入 SPI 数据传输(SPI) delay (100)digitalWrite (csHIGH)spi.endTransaction ()void loop ()unsigned long msec0 = millis ()saveinarray ()unsigned long msec1 = printis ()//Serial.print ("capture interval ");//seri.prit (msec1 - msec1)= 0x0 SPI.beginTransaction(SPISettings(SPISPEED);/dime/simetrite (n.out = 0x0);/dime/simetrite (i20/(sb);/dime1sb)(n/(dimetrite);/dime/ditrite (i20/(n/)/dimetrite (n/(n/)(nec1)(n/(dimeout));tal/(n/(dimet/dimet/dimeout) I <1i++)//读取全部8个单端通道 AINx-AINCOM 字节通道= mux[i]//通道#中的模拟 while (digitalRead (rdy)){SPI.transfer (0x50 | 0x01)//第一个命令字节:0101 0001 0001 =多路复用器寄存器地址01h SPI.transfer (0x00)//第二个命令字节:0000 1-1=0只写入一个字节 SPI.transfer (channel)//数据字节:xxxx 1000将数据字节写入寄存器 delayMicroseconds (2)//同步命令1111 1100 //******** 步骤2****** spi.transfer (0xFC)delayMicroseconds (2)spi.transfer (0x00)delayMicroseconds (250)//允许稳定时间 spi.transfer (0x01)//读取数据0000 0001 (01h) //******** 步骤3****** delayMicroseconds (5)adc_val[i]= spi.transfer (0)adc_val[i]<= 8//向左移动 adc_val[i]|= spi.transfer (0)adc_val[i]<= 8adc_val[i]|= spi.transfer (0)delayMicroseconds (2)//对每个通道重复此操作 步骤4****** digitalWrite (csHIGH)SPI.endTransaction ()//ADS1255/6以二进制二进制补码格式输出24位数据。 LSB 的权重为/2VREF/(PGA (223−1))。 正满量程输入会产生输出代码7FFFFFh、负满量程//输入会产生输出代码800000h。 对于(i=0i <1i++)//单端测量 if (adc_val[i]> 0x7ffff)adc_val[i]= adc_val[i]- 16777216//do 2的补码}float 电压=((2 * VREF)/ 8388608)* adc_val[0];float read_data = adc_val[i]* 0.0000002980232;value1 = adc_valu.2 = 0.23/(0.000000x =串行/value2)/冲宽度= 0.23/打印值2)* 0.23"* 0.0000002;al/ 0.23"(1) ");//Serial.println (x);void saveinarray()for (i=0<SAMPLES1; i++)  {         test()k[i]=xSerial.print ("k[i]是:")Serial.print ("\t")Serial.print (i)serial.print ("\t")serial.println (k[i])

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您的问题答案如下:

    [引用 userid="480323" URL"~/support/data-converters-group/data-converters---internal/f/data-converters---internal-forum 1132583/ads1256-验证采样数/秒输出 w-r-t-sampling-rate 数据表中的内容]根据我的理解、如果我们从单个通道连续读取、那么您可以从单个通道每秒获取30000个样本、而且如果我们 仅通过437Hz 的多路复用器读取所有通道。 如果我错了、请纠正我的问题。[/引述]

    是的、正确

    [报价 userid="480323" URL"~/support/data-converters-group/data-converters---internal/f/data-converters---internal-forum 1132583/ads1256-验证采样数/秒输出 w-r-t-sample-rate 验证我是否获得30ksps 输出。] 我该怎么做?[/报价]

    您可以使用示波器或逻辑分析仪来验证这一点。 您可以查看 DRDY 脉冲之间的时间。 无论处于何种模式、这都应该为您提供有效数据速率(一个通道上的连续转换与所有通道之间的循环转换)

    布莱恩