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.

[参考译文] ADS8332:ADS8332:通过读取ADC结果的无效数据

Guru**** 2557740 points
Other Parts Discussed in Thread: ADS8332

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/592094/ads8332-ads8332-invalid-data-by-reading-adc-results

部件号:ADS8332

您好,

我有两个采用菊花链配置的ADS8332。 写入和读取我的CFR寄存器可与以下配置配合使用:

CFR1 = 0b11.1011万111101</s>11.1101万

CFR2 = 0b11.1011万011101</s>1.1101万

目前,我尝试读取所有16个通道,其中在通道1和9上连接了窦性信号(70 Hz,采样频率2000 Hz)。 SCLK与41.67 ns一起工作(对应于(12 MHz))。 Matlab中的图示显示无法再现窦性信号。

代码:

void startADC(Int16_t ADS833x_result[number_channels][size],int cycle){

   UINT16_t循环计数;   //通过空闲循环计数时间
   UINT16_t通道编号=8;


   对于(LoopCount=0;LoopCount<Channel_Number;LoopCount++)
   {

      Int16_t tempBuffer[2];
      用于(int i =0;I<2;I++){
         TempdBuffer[i]=0;
      }

      Timer_Enable (Timer1,FALSE);
      Timer_CounterSet (TIMER1,0);
      Timer_Enable (Timer1,TRUE);
      GPIO _PinOutClear (gpioPortB,1);
      //最小40 ns的计时
      while (Timer1->CNT<3){
         ;
      }
      Timer_Enable (Timer1,FALSE);
      GPIO _PinOutSet (gpioPortB,1);

      while (GPIO_PinOutGet(gpioPortB,1)!=1){
         ;
      }
      ADS833x_ReadRegister(&tempdBuffer[0],0xD000);


      ADS833x_result[LoopCount][cycle]= tempBuffer[0];
      ADS833x_Result [LoopCount+8][cycle]= tempBuffer[1];
   }


}

void ADS833x_ReadRegister (Int16_t dataBuffer[2],uint16_t命令)    

   UINT16_t ReadData_MSB =命令>> 8;
   UINT16_t ReadData_LSB =命令和0xFF;

   UINT16_t ADC1_MSB;
   UINT16_t ADC1_LSB;
   UINT16_t ADC2_MSB;
   UINT16_t ADC2_LSB;


   GPIO _PinOutClear (gpioPortB,6),GPIO _PinOutClear (gpioPortB,0);


   ADC2_MSB = USART_SpiTransfer (USART2,ReadData_MSB);
   ADC2_LSB = USART_SpiTransfer (USART2,ReadData_LSB);
   ADC1_MSB = USART_SpiTransfer (USART2,0);
   ADC1_LSB = USART_SpiTransfer (USART2,0);

   GPIO _PinOutSet (gpioPortB,6),GPIO _PinOutSet (gpioPortB,0);


   dataBuffer[0]=(((ADC1_MSB<8)|0x00FF)&((ADC1_LSB)|0xFF00));
   dataBuffer[1]=(((ADC2_MSB<8)|0x00FF)&((ADC2_LSB)|0xFF00));


}

我对CH1和CH9中的信号重建不良(尽管采样频率为2000 Hz)以及CH2和CH10中的曲线感到惊讶。

但是,我已经反复检查了所有代码行,SPI (在ADC和MCU之间)和UART (在MCU和PC之间)连接,在转换时必须发现错误。 此外,更改时钟极性和相位对结果也没有积极影响。 此外,随函附上一份时间图:

(读取所有16个通道-->一个循环)

(放大-->读取两个通道)

谢谢,此致,

Sebastian

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

    您好,Sebastian:

    推荐的SPI设置为CPOL=1,CPHA=0。 如果您已经在写入寄存器并且能够成功读取/确认寄存器设置,则不需要更改这些设置。

    正弦输入信号的共模电压是多少?
    您能否共享ADS8332的完整示意图,其中显示了电源连接,所有相关的旁路电容器,输入驱动电路/RC滤波器和参考驱动电路? 此设计是否位于具有专用接地层的PCB板上?

    谢谢,此致,
    路易斯

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

    您好,Luis,

    以下所附图表回答了您的问题。 是的,设计在蚀刻印刷电路板上,带有专用接地层。

    谢谢,此致,

    Sebastian

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

    不幸的是,这个问题尚未解决。 我感谢每一个参考和建议。

    谢谢,此致,

    Sebastian