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.

[参考译文] Linux/ADS1256:如何进行数据采集(7500样本/秒及更高)

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

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/593886/linux-ads1256-how-to-make-data-aquisition-7500-sample-sec-and-higher

部件号:ADS1256

工具/软件:Linux

你好,我是大学新生。 现在,我想通过使用Raspberry 3 B型和ADS1256 (www.waveshare.com/.../DA_Board)从 Geophone或加速计获取数据来进行数据采集。  我的基本要求是每秒获取7500个数据,并将其保存到SD卡中。 我使用的是与此链接共享的原始编码,并进行了一些修改。

这是我的代码

int main()
{
uINT8_t id;
	Int32_t ADC[8];
	Int32_t volt[8];
	uint8_t i;
	uint8_t ch_num;
	int32_t itEMP;
	uint8_t buf[3];
如果(!BCM2835_init())
返回1;
BCM2835_SPI_BEGIN();
BCM2835_SPI_setBitOrder (BCM2835_SPI_bit_Order_LSBFIRST); //默认值
BCM2835_SPI_setDataMode (BCM2835_SPI_MODE1); //默认值
BCM2835_SPI_setClockDivider (BCM2835_SPI_Clock_diver_1024)1024);//默认值
BCM2835_GPIO Fsel (SPICS,BCM2835_GPIO _FSEL_OUTP);//
BCM2835_GPIO写入(SPICS,高);
BCM2835_GPIO Fsel (DRDY,BCM2835_GPIO _FSEL_INPT);
BCM2835_GPIO_SET_Pud (DRDY,BCM2835_GPIO PUD_UP); 	

ID = ADS1256_ReadChipID();
printf("\r\n");
printf("ID=\r\n");
	if (id !=3)
	{
		printf("错误,ASD1256芯片ID = 0x%d\r\n",(int)id);
	}
	else
	{
		printf("确定,ASD1256芯片
	
	ID,ADS556_gain =1256";ADS556_gid 1256_gid = f0%f56;12
ADS1256_StartScan(0);
	ch_num = 4;	

	文件*pfile;
	pfile=fopen("log//myfile.txt","w");

int nIndex =0;


Int32_t nValue=0;
while (nIndex<2.25万)
	{

	while ((ADS1256_Scan()== 0));
		nValue = ADS1256_GetAdc (ch_num);
	buf[0]=((UINT32_t)ADC[0]>> 16)和0xFF;
	buf[1]=((UINT32_t) ADC[0]>> 8)和0xFF;
	buf[2]=((UINT32_t)ADC[0]>> 0)和0xFF;
		fprintf (pfile,"%d\t%ld \n",nIndex,nValue);		
		BSP_DelayUS(1);
		printf ("%ld %ld\n",nIndex,nValue);	
		nIndex++;
	}
	fprintf (pfile,"test");
	fclose (pfile);

BCM2835_SPI_END_();
BCM2835_close(); 	
返回0;}



2.25万表示我要获得3秒的数据样本是7500。 我已经计时了运行时间。 当同时将数据写入文本文件时,完成调查需要花费26秒。
如果我不将数据写入文本文件,它需要花费7秒的时间才能完成,也就是说,1秒代码只能获得大约3000-4000个4000个数据。

我不知道原因是什么。 请告诉我如何操作。
提前感谢。

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

    您好,非政府组织,

    欢迎来到TI E2E论坛!

    我没有看到问题的描述。 您是否遇到了特定问题?

    简单地看一下您的代码,我会仔细检查SPI配置以确保它是正确的,下面两行的内容很有把握:

    BCM2835_SPI_setBitOrder(BCM2835_SPI_bit_Order_LSBFIRST);//默认2835默认
    
    BCM2835_diver_setClockDivider (BCM2835_SPI_clock_1024);//默认1024默认值 

    SPI位顺序看起来可能不正确,我想确保SCLK频率设置正确(它不能超过CLKIN或ADC时钟频率的1/4)。

    此致,
    Chris

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

    您好,Chris先生。

    感谢您的回复。 实际上,代码运行得还可以。 但是,我想提高采样率(每秒数据数)。 如您在此代码中所见


    ADS1256_CfgADC (ADS1256_GANE_8,ADS1256_7500SPS)7500);


    我想获得7500 SPS,运行代码时,需要7秒才能获得2.25万个数据点,这意味着实际SPS仅为3000SPS。 我已经将编码中的SPS转换为3万SPS。 但是,我只能获得3000SPS的数据的最大实际SPS。 我是否错过了一些要点?

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

    您好,非政府组织,

    您的CLK和SCLK频率是多少?

    您是否查看过逻辑分析器或示波器上的SPI通信,以查看您是否正在读取可用的数据?

    我怀疑/DRDY正在以正确的数据速率(7500 SPS)切换,但您可能会因为只读取每隔一个结果而丢失数据。 这可能是因为您的SCLK频率太慢,或者您的处理器或代码对/DRDY信号的响应速度不够快。 您可以在读取数据时尝试删除printf()和fprintf()函数,因为这些函数通常需要大量的处理器和时间。 如果您可以先尝试将数据保存到内存中,然后在完成数据收集后,您可以显示数据并将其写入文件。

    此致,
    Chris