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.

[参考译文] ADS1282:ADC 输入电压

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1185323/ads1282-adc-input-voltage

器件型号:ADS1282
主题中讨论的其他器件:REF5025

计算 ADS1282的输入电压时遇到问题。 我使用 REF5025作为电压基准。  

ADS1282连接到 TI Tiva TM4C1231D5PMT MCU。

ADS1282输入端的电压约为0.5V。  

我在 DOUT 上获得以下读数、

MCU 使用 ADC_READ()函数从 ADC 读取数据、

int read_adc (){

unsigned int adc [6];
//0。 将芯片选择线路切换为低电平(低电平有效)。
///ROM_GPIOPinWrite (GPIO_PORTD_BASE、GPIO_PIN_3、0);
//ads1282_RDATA();
ADC[0]= Rx_spi0 ();
ADC[1]= rx_spi0 ();
ADC[2]= Rx_spi0 ();
ADC[3]= Rx_spi0 ();

//1. 将芯片选择线路切换为低电平(低电平有效)。
///ROM_GPIOPinWrite (GPIO_PORTD_base、GPIO_PIN_3、GPIO_PIN_3);

INT DATA = ADC[0]<< 24 | ADC[1]<< 16 | ADC[2]<< 8 | ADC[3];
unsigned char pol 位=数据>> 31;
如果(pol 位= 0)

返回数据;

其他

数据=数据- 1;
数据=~数据;
数据=-1*数据;
返回数据;

ADC 读数(数据)通过 UART 发送到计算机。  

如果(CH > 0){
//usprintf (&status、"-%d<"、abs (data));
STATUS[0]='>';
STATUS[1]='-';
STATUS[2]= ABS (DATA)>> 24;
STATUS[3]= ABS (DATA)>> 16;
STATUS[4]= ABS (DATA)>> 8;
STATUS[5]= ABS (DATA)>> 0;
STATUS[6]='<';

否则{
//usprintf (&status、"++%d<"、abs (data));
STATUS[0]='>';
STATUS[1]='+';
STATUS[2]= ABS (DATA)>> 24;
STATUS[3]= ABS (DATA)>> 16;
STATUS[4]= ABS (DATA)>> 8;
STATUS[5]= ABS (DATA)>> 0;
STATUS[6]='<';

UARTSend (status、7);

ADC 数据被重新放入一个 c#程序中、

公共 int adc_count ()

port.Write ("M");

byte] ADC_COUNT_byte =新字节[7];

系统。线程。线程。睡眠(1);

port.read (adc_count_BYTE、0、7);

字符串结果= System.Text.Encoding.UTF8.GetString (ADC_COUNT_BYTE);
//Trace.WriteLine (结果);

int ADC_count = 0;

如果(ADC_COUNT_BYTE[1]='-')

ADC_COUNT =-1 *(ADC_COUNT_BYTE[2]<< 24 | ADC_COUNT_BYTE[3]<< 16 | ADC_COUNT_BYTE[4]<< 8 | ADC_COUNT_BYTE[5]);
trace.WriteLine ($"-ADC count ->{ADC_count}");
trace.WriteLine ($"ADC_COUNT_BYTE[2]={ADC_COUNT_BYTE[2]}");
trace.WriteLine ($"ADC_COUNT_BYTE[3]={ADC_COUNT_BYTE[3]}");
trace.WriteLine ($"ADC_COUNT_BYTE[4]={ADC_COUNT_BYTE[4]}");
trace.WriteLine ($"ADC_COUNT_BYTE[5]={ADC_COUNT_BYTE[5]}");

如果(ADC_COUNT_BYTE[1]='+')

ADC_COUNT = ADC_COUNT_BYTE[2]<< 24 | ADC_COUNT_BYTE[3]<< 16 | ADC_COUNT_BYTE[4]<< 8 | ADC_COUNT_BYTE[5];
trace.WriteLine ($"+ADC count ->{ADC_count}");
trace.WriteLine ($"ADC_COUNT_BYTE[2]={ADC_COUNT_BYTE[2]}");
trace.WriteLine ($"ADC_COUNT_BYTE[3]={ADC_COUNT_BYTE[3]}");
trace.WriteLine ($"ADC_COUNT_BYTE[4]={ADC_COUNT_BYTE[4]}");
trace.WriteLine ($"ADC_COUNT_BYTE[5]={ADC_COUNT_BYTE[5]}");

返回 ADC_COUNT;

ADC 电压的计算公式为:

公共双精度 adc_volage()

int adc_c = adc_count ();

双电压=(双电压)(ADC_c * 2.5 / Math.PoW (2、30));
//双电压=(double)(adc_c * 2.328e-9);

trace.WriteLine ("ADC 电压->{VOLTAGE}");

返回电压;

它的输出是、

-ADC 计数->-842794107
ADC_COUNT_BYTE[2]= 50
ADC_COUNT_BYTE[3]= 60
ADC_COUNT_BYTE[4]= 4
ADC_COUNT_BYTE[5]= 123
ADC 电压->-1.96228294400498

我似乎不能弄清楚我的错误。 请提出任何建议。

谢谢、

Allan

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

    你好,Allan!

    您能告诉我们您的 PGA 增益设置是什么以及如何配置 ADS1282滤波器吗?  您是否还可以在逻辑分析仪捕获中包含 DRDY?

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

    您好、Allan、

    计算:

    您的计算几乎是正确的。 对于双电压计算、该值实际上是:

    • 双电压=代码* LSB_SIZE
      • 这是所有 ADC 代码到电压转换的基础
    •  =(2 * x_FilterType * ADC_c)*(y_FullScaleRange / 2^30)
      • X_FilterType 的解释有点令人困惑。 本质上、无论您是使用 FIR 还是仅使用 sinc、都会为您提供不同的值(请参阅30与31长度、具体取决于您在下图中选择的长度)。  
        • 我这样做的方法是、如果 sinc  、x_FilterType = 1、对于 FIR、x_FilterType = 1/2或0.5。
      • 至于浮点2、我们必须以某种方式从32位操作到滤波器位。   
      • 全比例范围将在下面进行说明

    假设 G = 1 (这就是 Tom 要求您进行 PGA 设置的原因)和 FIR 模式、我得到-0.9811... 电压、这是您的值的一半。  

    那么、计算 问题是什么?

    我可以说的是、不 如果我将逻辑分析器快照转换为十六进制并执行计算、则会得到-> ADC_c = 0xCD84CBD3 ->-0.9859V。 非常接近您已经看到的内容。

    我会将两个输入接地并将它们连接在一起、以查看您在输出端获得的值。  然后、我想看到 ADC_INPUT 转 ADC_GND 以及 ADC_VREFP 转 ADC_GND 的示波器屏幕截图、以验证所需电压是否符合预期。 当输入明显是单端输入时、您会收到负数、这一点非常可疑。

    我们正在做出其他假设、即您的数据已稳定、正如 Tom 所提到的、您正在遵循 DRDY 时序、但一旦我们验证了有关 ADC 的一些更基本的假设、我们将解决这些问题。

    最棒的

    Cole