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.

[参考译文] ADS124S08EVM:通过与 EVM ADC 和 Arduino Uno 连接的应变仪进行输出数据分析

Guru**** 2511415 points
Other Parts Discussed in Thread: ADS124S08

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/815230/ads124s08evm-output-data-analysis-from-strain-gauge-interfaced-with-evm-adc-and-arduino-uno

器件型号:ADS124S08EVM
主题中讨论的其他器件:ADS124S08

您好、先生、

实际上、我使用 EVM ADC 和 Arduino UNO 完成了与皮肤摩擦传感器的 SPI 连接作为输入。 当我加载皮肤摩擦时、数据有时会改变、有时不会改变、有时数据会重复一段时间、然后会改变。 请建议问题是什么? 我们将如何确保特定的数字值属于该模拟值?

#include 
#include 
#define START 6
#define RESET 7
#define CS 4
long signed int stat;
SPISettings settings1 (4000000、MSFIRST、SPI_MODE1);

void setup (){
SPI.begin();
pinMode (CS、OUTPUT);
pinMode (RESET、OUTPUT);
pinMode (START、OUTPUT);
digitalWrite (RESET,HIGH);
delay (5);//
Serial.begin(9600);
SPI.beginTransaction(settings1);
digitalWrite (CS、low);
digitalWrite (start、low);
}

void loop (){
for (int i=0;i<10;i++)
{
if (i=0){
SPI.transfer (0x42);// WREG 寄存器地址 SPI.transfer
(0x07);// WREG 数字字节-1
SPI.transfer (0x24

);

/SPI transfer (0x24)/SPI transfer (0x1000)/SPI transfer (0x24)/IDEST.0X24/ IN1000)/SPI transfer (0x1000)/SPI transfer (0x24/ IN1000)/SPI transfer
// IDAC MUX
SPI.transfer (0x00);// Vbias
SPI.transfer (0x14);//超时位 second =1,默认值为10h
SPI.transfer (0x08);//开始转换命令
delay (1);
}
else
{
SPI.transfer (0x12);//RDATA command<
= SPI.transfer (0);
= SPI.stat.transfer (0<8
);=
SPI (n.stat.transfer);= n<.stat.transfer (0<.transfer (0<.stat.transfer);= n<.transfer (0.stat.transfer);(0.stat.transfer);/.

delayMicroseconds (250);//需要一个额外的延迟以允许下一个转换周期结束
。}
//digitalWrite (CS、HIGH);
}
spi.endTransaction ();

} 

黄色是时钟脉冲、绿色是数字示波器中的 DOUT。

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

    您好、Sushmita、

    您的程序循环仅持续几毫秒、因此我不确定您会看到什么。  此外、ADS124S08的输出是二进制补码、因此您需要对数据进行正确的符号扩展、将数据从24位值扩展到有符号32位值。  您还需要确保传感器连接牢固地连接到 EVM。

    另一个问题是您使用的增益寄存器设置。  当您尝试在 PGA 禁用的情况下使用128增益时、此设置无效。  如果您希望使用大于1的增益、则必须启用 PGA。  禁用 PGA 后、您必须将增益设置为1。  对于增益为128且启用 PGA 的情况、设置为0x0F、而不是0x07。

    范围快照应显示整个事务、以包括 RDATA 命令和所有3个字节的数据。 这需要查看 ADS124S08的 SCLK、DOUT 和 DIN。  您可能还需要在发送 RDATA 命令之前将 CS 设置为低电平、并在最后一个 SPI.transfer (0)之后将 CS 设置回高电平、从而为通信切换 CS。  这将确保如果之前的通信中有任何通信问题、SPI 总线将在下一个读取周期被复位。

    此致、

    Bob B

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Bob: 
    抱歉、我向您发送了错误的文件、新代码如下所示:


    #include #include #define START 6 #define RESET 7 #define CS 4 //#define DRDY 8 long int stat; //volatile int DRDY_STAY = LOW; SPISettings settings1 (4000000、MSBFIRST、SPI_MODE1); void setup (){ SPI.begin(); // pinMode (DRDY、input); pinMode (CS、output) ;pinreset (pinMode); 输出); pinMode (开始、输出); digitalWrite (RESET、HIGH); delay(5); Serial.begin(9600); SPI.beginTransaction(settings1); digitalWrite (CS、low); digitalWrite (start、low); } void loop (){ for (int i=0;i>=0;i++) { if (i=0){ SPI.transfer (0x42);// WREG 寄存器地址 SPI.transfer (0x07);// WREG 字节编号-1 SPI.transfer (0x24);// WREG WRITE AIN2-AIN4.SPI transfer (0x00 ); /SPI transfer (0x1000)/SPI transfer (0x1000)/SPI transfer (0x1000);/SPI transfer (0x1000)/SPI transfer (0x1000)/SPI transfer (0x1000)/SPI (0x1000)/SPI transfer (0x1000)/SPI transfer (0x1000)/SPI transfer (0x1000)/SPI (0x1000 // IDAC MUX SPI.transfer (0x00);// Vbias SPI.transfer (0x12);//超时位 second =1,默认值为10h SPI.transfer (0x08);//开始转换命令 delay (1); } else { digitalstat Write ( CS、low);SPI.transfer (0x12);//RDATA command = 0<SPI transfer (Serial);(SPI transfer = 0<8);(SPI transfer (0<8);(Serial stat.transfer);<8);(SPI transfer (Serial)<8);(SPI transfer (0<8);(Serial)<8)(Serial)<t.transfer (SPI (Serial);<8);<.print (SPI delay(1000);//需要额外的延迟以允许下一个转换周期结束 } } SPI.endTransaction(); }

    如果我将超时位设置为1、那么在 SPI 事务期间是否需要将 CS 从低电平切换到高电平?

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

    您好、Sushmita、

    您修复了一些问题、但您仍然没有对结果进行符号扩展。  虽然此代码应该起作用、但您每秒采集4000个样本、但每秒只读取其中一个样本。  我仍然不明白您的期望是什么以及您因此而收到的结果。

    您的第一个代码显示等待时间为250us、数据速率为4ksps。  但您读取的样本非常少。  现在、您正在采集大量样本、但每秒只读取一次。  打印语句的传输也需要相当长的时间。  如果您要以4ksps 的速率运行器件、则应在250us 的转换周期内读取和传输数据、否则无需以4ksps 的速率运行 ADS124S08器件。

    您能否向我解释为什么需要4ksps?  您是否已验证您能够以该速率收集数据?

    对于超时、如果 ADS124S08有足够的时间超时、则无需使用 CS。  每次传输 SCLK 的完整字节时、超时将复位。  该超时将在 SPI 复位前花费大约8ms 的时间。  这可以在1秒间隔的当前延迟下正常工作、但不会在您之前使用的250us 间隔上超时。  如果可能、我强烈建议使用 CS 来构建您的通信。

    此致、

    Bob B