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.

[参考译文] ADS131E08S:ADS131E08S 与 PIC18F26K22数据读取问题

Guru**** 2534710 points
Other Parts Discussed in Thread: ADS131E08S

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1036244/ads131e08s-ads131e08s-with-pic18f26k22-data-reading-issue

器件型号:ADS131E08S

我将 ADS131E08S PIC18f26k22配合使用、以读取力传感器值。 我使用的传感器是  FSG020WNPB。  

这些是我的寄存器设置、

配置1      0xF2

CONFIG2      0xE0

接口3.      0xE8.

通道1SET      0x20

使用以下代码初始化寄存器后、我将从 ADC 读取值并将其打印在终端上。

(二

CS = 0;
PORTCbits.RC0 = 1;//START 引脚变为高电平
spiwritecommand (adc_start_cmd);
CS = 1;

时钟= 0;
_DELAY_us (10);
时钟= 1;

PORTCbits.RC1 = 1;//使 DRDY 引脚为低电平

//根据数据表、在 DRDY 变为低电平后发出此命令以读取转换结果
CS = 0;
spiwritecommand (adc_read_data_cmd);
CS = 1;

char pri [15];
int x;
CS = 0;
对于(x=0;x<27;x++)

adcArray[adcArrayIndex]= SPI_WRITE (0x00);
adcArrayIndex++;

CS = 1;
adcvalue1 = parse_24bit_adc_values (Channel1_index);
sprintf (pri、"%ld"、adcvalue1);

sendResponseViaUart (pri);
uartWriteByte (0x0D);
PORTCbits.RC0 = 0;

(三

我使用以下公式将 ADC 读取的值转换为电压、

电压= ADC 值* Vref/ADC 分辨率

其中 Vref = 2.4V

这些是我在对力传感器施加力时获得的值和相应电压

ADC 值                           电压

12615897 1.797199
14409920. 2.052767
14729408 2.098279

我尝试将电位器连接到通道1并施加固定电压  

电位计上的电压为0.348V (固定电压)
16711696 2.380666
65552 0.009338
262120 0.03734
电位计上的电压为0.257V (固定电压) 8323072 1.185664
589840 0.084026
393232. 0.056018
196624. 0.02801
720912 0.102698
655376 0.093362

每次值不断变化。 即使施加任何固定电压、值(由 ADC 读取)也会发生变化。

请建议如何继续。

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

    您好、Rekha、  

    欢迎来到我们的论坛、感谢您的发帖。  

    [引用 userid="496880" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1036244/ads131e08s-ads131e08s-with-pic18f26k22-data-reading-issue ]PORTCbits.RC1 = 1;//使 DRDY 引脚为低电平[/quot]

    /DRDY 引脚是 ADS131E08S 的数字输出。 此信号用作控制器的中断、在该中断中、您将在每次检测到/DRDY 变为低电平时输入例程来读取数据。 您在这里将 UC 上的引脚设置为输出逻辑0b。

    关于数据格式、我们的器件使用二进制补码、如表7和8所示。 该器件的满量程范围为2xVREF、LSB 使用公式9计算。

    此致、

    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="99143" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1036244/ads131e08s-ads131e08s-with-pic18f26k22-data-reading-issue/3832017 #3832017">关于数据格式、我们的器件使用二进制补码、如表7和8所示。 该器件的满量程范围为2xVREF、LSB 使用公式9计算得出。[/QUERP]

    根据这一点、ADC 读取的值将采用二进制补码格式。 那么、我需要将其转换为十进制数、然后再转换为电压校正吗?  

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

    另外、请注意、我的编码序列对于从 ADC 读取数据是正确的还是不正确的  

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

    您好 Rekha -是的、没错。

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

    操作顺序显示正确。 再说一次-/DRDY 是 UC 的输入、而不是应配置为高电平或低电平的输出。 当/DRDY =低电平时、发送 RDATA 命令后在下一帧中跟随27个空字节(0x00)的过程是正确的(您也可以保持/CS 为低电平并在一帧中完成此操作)。

    请记住、要使用 RDATA 按需读取数据、必须首先退出 RDATAC 模式(连续读取数据)、这是默认设置。 SDATAC 是退出 RDATAC 模式的命令。  

    如果您正在监视/DRDY 并且 SCLK 足够快、能够在一个数据速率周期内读取所有27个字节、则应能够使器件处于 RDATAC 模式、而无需使用 RDATA 命令。

    此致、

    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="99143" URL"~/support/data-converters-group/data-converters/f/data-converters-forum/1036244/ads131e08s-ads131e08s-with-pic18f26k22-data-reading-issue/3834849 #3834849"]您好,Rekha -是的,正确。

    那么、我是否需要将每个字节从二进制补码转换为十进制补码?

    因为我一次性从 ADC 读取27个字节...  

    3字节(状态字)+ 3字节* 8通道= 216位...

    目前、我已将电位器连接到通道1并从中读取值。  为了获得通道1电压,首先我需要将二进制补码中的 ADC 值转换为十进制,然后转换为电压....

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

    状态字和每个通道的转换结果都是24位(3字节)。 在将每个24位值转换为十进制值之前、您需要解析数据。