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/ADS7841:ADS7841Q 数据转换公式以及相应的 Linux 驱动程序和应用程序

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/751346/linux-ads7841-ads7841q-data-conversion-formula-and-corresponding-linux-driver-and-application

器件型号:ADS7841

工具/软件:Linux

尊敬的 TI:

   我们正在为其中一个项目使用 ADS7841Q 开发 i.MX8QXP。 我们将 ADS7841Q 连接到处理器的 SPI 总线之一。 在这里、我们找不到 ADS7841的驱动程序。 我们配置了 spidev 器件、如下所示。

lpspi3{(&P)
       #address-cells =<1>;
       #size-cells =<0>;
       FSL、SPI-num-chipsects=<1>;
       pinctrl-names ="default";
       pinctrl-0 =<&pinctrl_spipl3 &pinctrl_spipl3_cs>;
       CS-GPIO =<&GPIO0 16 GPIO_ACTIVE_LOW>;
       状态="正常";

       spidev@0x00{
               兼容="spidev";
               SPI-max-frequency =<20000000>;
               reg =<0>;
       };
};

使用 spidevtest able 发送 SPI 数据包、如0x9F、0x00 (8位模式)。 但是、从 SPI 读取数据时、我们得到的是 CH0电压的一半。

为什么 ADC 的工作方式是这样的。?

这里使用的是静态的

void adcout_process (int sampled_data 短整型)

       浮点电压、Vref、adc_bit;
       VREF = VREF_5V;
       //ADC_BIT = ADC_12位;
       ADC_BIT = 256;//8位模式
//     adc_bit = 1024;//10位模式
       printf ("adcout_process::原始数据0x%X\r\n"、sampled_data);
       VOLT =((Vref/ADC_BIT)*(float)采样数据);
       printf ("电压:%f\r\n"、伏特);

运行命令:./spidev_test -v -b 16 -O

输出:CH0中电压的一半

请帮助我们获得精确的电压。 我们将采集10个样本。

如果您共享 Linux 驱动程序和要使用的应用程序、将会大有帮助。

 此致、

Ranjith Hebbar

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

    您好 Ranjith、

    感谢您的发帖。

    很抱歉、但我无法理解您的固件例程。

    在12位模式下、Vref = 5V、1 LSB 等于5V/2^12代码= 1.22mV/代码。  您能描述一下如何配置 ADC 吗?  

    • 单端或差动输入
    • 转换率
    • 电源电压
    • 基准电压
    • 转换模式

    我们没有为该器件分发的 Linux 驱动程序。

    此致、

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

    尊敬的 Ryan、

         我们使用8位模式、Vref 和 Vcc =5V。

    • 单端模式    
    • 转换率5kHz
    • 电源电压5V
    • 基准电压5V
    • 转换模式8位模式

       我们需要以下说明:

       我们使用 spidev 驱动程序配置 ADC7841 SPI。 现在、我们将 SPI 模式配置为0 .i.e、CPOH = 0和 CPOL =0。 请告诉我们 ADC 将在哪种模式下工作。 (要配置的 SPI 模式?

       2.它可以运行的 SPI 频率是多少? SPI 时钟频率和转换速率是否相同?

       我们使用以下命令通过 SPI 发送

            MOSI 0x9F 0x00 (由于8位模式单端)

       此处使用的转换公式是  

         静态空 adcout_process (短整型采样数据)

           浮点电压、Vref、adc_bit;
           VREF = VREF_5V;
               ADC_BIT = 256;//8位模式
           printf ("adcout_process::原始数据0x%X\r\n"、sampled_data);
           VOLT =((Vref/ADC_BIT)*(float)采样数据);
           printf ("电压:%f\r\n"、伏特);
    }    

     我们将获取10个样本并获取平均值、然后传递到 Sampled_data。

    root@imx8qxpmek:~./spidev_test -v -O
    SPI 模式:0x2
    每字位数:8.
    最大速度:500000Hz (500KHz)
    TX | 9F 00 ____________ ________ ________ ________ ________ _______ ||。
    RX | FF 7F _____________ ________ ________ ________ ________ _______ ||。
    TX 2的大小
    主:偏移量0:0xff
    主:偏移量1:0x7f
    主:x0=0x7f
    main:SAMPLING_COUNT 为1时的 SAMPLING_DATA 0x7F

     这里的问题是、我们得到的电压恰好是通道0中电压的一半。 例如、我们应该得到4V、但我们得到2V。通过电位计将电压更改为5V、我们得到2.5V、而对于3V、我们得到1.5V。 请帮助我们解决此问题。

    此致、

    Ranjith Hebbar V S

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

    尊敬的 Ranjith:

    您很可能缺少转换结果的 MSB。 MSB 将始终锁存在第10个 DCLK 上升沿。 这意味着您必须使用 SPI 模式0 (CPOL = CPHA = 0)。

    我还忘了问、每次转换发送多少个时钟?

    要回答您的其他问题、DCLK 和转换率不相同。 DCLK 是器件的唯一时钟输入、用于转换和串行接口。 DCLK 频率和每次转换的时钟数(15、16或24)决定了转换速率。

    例如、如果您的目标是在每次转换16个时钟的情况下实现5kSPS、则 DCLK 必须至少为80kHz。 在这种情况下、命令字节将与之前采集的转换数据重叠(请参阅图4)。


    此致、