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.

[参考译文] ADS1148-Q1:ADS 数据限制 ti 16383

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

https://e2e.ti.com/support/data-converters-group/data-converters/f/data-converters-forum/1002839/ads1148-q1-ads-data-limit-ti-16383

器件型号:ADS1148-Q1
主题中讨论的其他器件:ADS1148

您好!

我正在使用 ADS1148 ADC、我正在读取0-16383而不是0-65536的值  

有人能帮我解决这个问题吗

还有一个问题是、可以测量单个 AIN 引脚上的双极电压  

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

    您好、Vivek、

    您必须提供更多信息、以便我们能够支持您的请求。 您能否详细提供以下信息:

    • 如何将输入信号应用到 ADC
    • 施加到 ADC 的电压
    • ADC 寄存器设置
    • ADC 原理图

    使用 ADS1148时、仅当使用双极模拟电源(例如+/-2.5V)时、才能测量双极输入信号。

    布莱恩

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

     我正在使用 ADS1148Q1 IC、并从  电位计施加0V 至+5V 的模拟输入、该电位计连接到 AN0引脚、所有其他模拟输入引脚均接地

     

    使用的代码<>

    //1)检查 DRDY 引脚上的 CRO
    //2) SCK 引脚数据检查
    //3)复位引脚连接到数字引脚


    #include
    int a = 555;
    const 字节读取= 0b11111111;
    #define RESET 7 //复位引脚
    #define START 8 //开始条件引脚
    #define DRDY 9 //数据就绪引脚
    float d、e;
    浮点平均值;
    int cnt;
    void setup()

    Serial.begin(115200);

    引脚模式(启动、输出);
    引脚模式(RESET、输出);
    引脚模式(DRDY、输入);

    digitalWrite (RESET、HIGH);

    digitalWrite (START、HIGH);//这用于 START 转换引脚以启动转换启动
    SPI.begin();

    digitalWrite (SS、low);
    SPI.transfer (0x06);
    延迟(1);
    SPI.transfer (0x16);
    SPI.transfer (0x40);
    SPI.transfer (0x0E);


    SPI.transfer (0x01);//MUX0  
    SPI.transfer (0x00);//VBIAS
    SPI.transfer (0x30);//MUX1
    SPI.transfer (0x08);//SYS0
    SPI.transfer (0x00);//OFC0
    SPI.transfer (0x00);//OFC1
    SPI.transfer (0x00);//OFC2
    SPI.transfer (0x00);//FSC0
    SPI.transfer (0x00);//FSC1
    SPI.transfer (0x40);//FSC2
    SPI.transfer (0xA0);//IDAC0
    SPI.transfer (0x00);//IDAC1
    SPI.transfer (0x80);//GPIOCFG
    SPI.transfer (0x00);//GPIODIR
    SPI.transfer (0x80);//GPIODA

    digitalWrite (SS、HIGH);
    延迟(10);

    digitalWrite (SS、low);

    SPI.transfer (0x20);//从地址0开始读取
    SPI.transfer (0x0E);//读取0xE + 1 = 15字节
    uint8_t MUX_0 = SPI.transfer (0xFF);//读取多路复用器0
    uint8_t VBIAS = SPI.transfer (0xFF);
    uint8_t MUX_1 = SPI.transfer (0xFF);
    uint8_t SYS0 = SPI.transfer (0xFF);
    uint8_t OFC0 = SPI.transfer (0xFF);
    uint8_t OFC1 = SPI.transfer (0xFF);
    uint8_t OFC2 = SPI.transfer (0xFF);
    uint8_t FSC0 = SPI.transfer (0xFF);
    uint8_t FSC1 = SPI.transfer (0xFF);
    uint8_t FSC2 = SPI.transfer (0xFF);
    uint8_t IDAC0 = SPI.transfer (0xFF);
    uint8_t IDAC1 = SPI.transfer (0xFF);
    uint8_t GPIOCFG = SPI.transfer (0xFF);
    uint8_t GPIODIR = SPI.transfer (0xFF);
    uint8_t GPIODAT = SPI.transfer (0xFF);
    digitalWrite (SS、HIGH);
    延迟(5);
    digitalWrite (SS、low);
    SPI.transfer (0x04);
    延迟(1);//sync 命令
    digitalWrite (SS、HIGH);

    void loop(){

    if (digitalRead (DRDY)= low){

    digitalWrite (SS、low);
    延迟(7);
    SPI.transfer (0x12);
    延迟(1);
    unsigned int high_byte = spi.transfer (0xFF);
    延迟(1);
    unsigned int low_byte = SPI.transfer (0xFF);
    延迟(20);
    digitalWrite (SS、HIGH);

    unsigned int adc_data =(((uint16_t) high_byte)<< 8)|((uint16_t) low_byte);
    serial.println ((adc_data * 4)& 0xFF00);
    延迟(500);

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

    您好、Vivek、

    感谢您提供更多信息。

    ADS1148-Q1不支持采用单极电源的接地基准输入。 如需更多信息、请参阅 ADS1148-Q1数据表中的公式3。 因此、您的配置无效、您应该在电阻分压器(POT)的高侧进行测量、而不是在低侧进行测量。

    此外、请记住、ADS1148-Q1具有双极编码方案。 因此、ADC 输出代码的范围为-FS 至+FS、或-VREF/增益至+VREF/增益。 当您设置 MUX1 = 0x30h 时、即0011 0000b、用于选择 ADC 的内部2.048V 基准电压。 SYS0为0000 1000b、选择增益为1、数据速率为1000SPS。 这将建立一个-2.048V 至+2.048V 的 ADC 输出代码范围。 但是、您输入的是0-5V 电压、因此您可以看到如何无法实现 ADC 的整个满量程范围(位数)。 请纠正这些问题、您应该会看到更好的结果。

    我还将指出、您使用的外部基准(MCP1541)是4.096V 基准。 但是、您可以施加到 ADS1148-Q1的最大差分基准电压为 AVDD - AVSS - 1V、在您的情况下仅为4V。 尽管 ADC 接近、但在使用4.096V 基准电压时、您仍会在其建议的条件之外操作 ADC。 如果您打算使用外部基准、请记住这一点。

    布莱恩

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

      您好、Bryan、

    我在7通道双极 ADC 输入电压范围-2.5V 至+2.5V 的范围内执行了该电路。

    我无法从渠道读取数据、请帮我解决任何其他解决方案、我无法在代码中识别此电路中的任何问题。

    给定的电源

    AVDD +2.5V、AVSS -2.5V

    DVDD +3.3

    //从通道读取数据的代码
    //Arduino UNO 板

    #include
    uint8_t HIGH_BYTE[16];
    uint8_t low_bytes[16];
    uint16_t ADC_DATA;
    uint8_t DATA_READY;
    uint8_t received_val = 0;

    #define RESET 7 //复位引脚
    #define START 8 //开始条件引脚
    #define DRDY 9 //数据就绪引脚

    void setup(){
    Serial.begin(9600);
    引脚模式(RESET、输出);
    引脚模式(启动、输出);
    引脚模式(DRDY、输入);
    digitalWrite (复位、低电平);
    延迟(10);
    digitalWrite (RESET、HIGH);

    延迟(16);
    SPI.begin();

    digitalWrite (SS、low);
    延迟(16);
    SPI.transfer (0x06);
    延迟(1);
    SPI.transfer (0x14);//选择的连续数据读取模式7个通道

    SPI.transfer (0x40);
    SPI.transfer (0x0E);
    SPI.transfer (0x00);//MUX0
    SPI.transfer (0x00);//VBIAS
    SPI.transfer (0x30);//MUX1
    SPI.transfer (0x52);//SYS0
    SPI.transfer (0x00);//OFC0
    SPI.transfer (0x00);//OFC1
    SPI.transfer (0x00);//OFC2
    SPI.transfer (0x00);//FSC0
    SPI.transfer (0x00);//FSC1
    SPI.transfer (0x40);//FSC2
    SPI.transfer (0x06);//IDAC0
    SPI.transfer (0x89);//IDAC1
    SPI.transfer (0x80);//GPIOCFG
    SPI.transfer (0x00);//GPIODIR
    SPI.transfer (0x80);//GPIODAT
    digitalWrite (SS、HIGH);
    延迟(10);

    digitalWrite (SS、low);


    SPI.transfer (0x20);//从地址0开始读取
    SPI.transfer (0x0E);//读取0xE + 1 = 15字节
    uint8_t MUX_0 = SPI.transfer (0xFF);//读取多路复用器0
    uint8_t VBIAS = SPI.transfer (0xFF);
    uint8_t MUX_1 = SPI.transfer (0xFF);
    uint8_t SYS0 = SPI.transfer (0xFF);
    uint8_t OFC0 = SPI.transfer (0xFF);
    uint8_t OFC1 = SPI.transfer (0xFF);
    uint8_t OFC2 = SPI.transfer (0xFF);
    uint8_t FSC0 = SPI.transfer (0xFF);
    uint8_t FSC1 = SPI.transfer (0xFF);
    uint8_t FSC2 = SPI.transfer (0xFF);
    uint8_t IDAC0 = SPI.transfer (0xFF);
    uint8_t IDAC1 = SPI.transfer (0xFF);
    uint8_t GPIOCFG = SPI.transfer (0xFF);
    uint8_t GPIODIR = SPI.transfer (0xFF);
    uint8_t GPIODAT = SPI.transfer (0xFF);
    digitalWrite (SS、HIGH);

    digitalWrite (SS、low);
    SPI.transfer (0x04);
    延迟(10);

    void loop(){
    digitalWrite (开始、高电平);
    延迟(10);
    digitalWrite (start、low);
    DATA_READY = 1;
    延迟(1);
    while (data_ready = 1)

    DATA_READY = digitalRead (DRDY);

    for (int i=0;i<15;i++)//读取7个通道的14个字节数据

    digitalWrite (SS、低电平);//low slave select 引脚
    延迟(7);
    // spi.transfer (0x12);
    HIGH_BYTE[i]= SPI.transfer (0xFF);
    low_byte[i]= SPI.transfer (0xFF);
    延迟(20);
    digitalWrite (SS、HIGH);
    ADC_DATA[i]=(((uint16_t) high_byte[i])<< 8)|((uint16_t) low_byte[i]);//数据存储在数组中
    serial.print (adc_data[i]);//adc 数据打印

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

    您好、Vivek、

    您能否为您的系统提供 SPI 事务的逻辑分析仪数据或示波器快照? 如果通信出现问题、这将是诊断问题的最佳方法。 在对器件进行读写操作时、请包含 DIN、DOUT、SCLK、CS 和 DRDY。 这将有助于我们了解 SPI 时序是否正确以及 ADC 是否发出和理解正确的命令。

    布莱恩