TI论坛
直播中

吴凡

11年用户 1013经验值
擅长:48674
私信 关注
[问答]

ADS1211采样数据乱跳是什么原因引起的?



  • 原理图如上用的是内部参考   10M的晶振  短接AIN1N  AIN1P  读取的数据在乱跳不是一直为0,波动还挺大,麻烦各位帮我分析一下,是什么原因引起的,寄存器,x写进去,读出来都是对的,谢谢。
    void ADS1211A_init(void){

    ADC_CS1_OFF;
    ADC_write_One_Byte(0x64); //写入INSR命令,01100100,写CMR命令 连续4字节 命令寄存器开始
    asm("nop");asm("nop");
    ADC_write_One_Byte(0x72);
    ADC_write_One_Byte(0xa4);
    ADC_write_One_Byte(0x5E);
    ADC_write_One_Byte(0x83);
    ADC_CS1_ON;
    }

    void ADCA_Output(void)
    {
    volatile unsigned long ADC_Out;//,ADC_Sum;
    static unsigned char ADC_S_Data[3]; // ADC数据缓冲区
    unsigned char i;
    static unsigned char w_Temp;

    ADC_CS1_OFF;
    ADC_write_One_Byte(0x84); //读取寄存器判断数据是否正确
    w_Temp = ADC_Read_One_Byte();
    ADC_CS1_ON;
    if((w_Temp&0x01) == 0x00)
    {
    ADC_CS1_OFF;
    asm("nop");
    //---------------------------------------------
    // 注意:ADC数据采用Offset Binary格式
    // +Full-Scale FFFFFFH
    // Zero 800000H
    // –Full-Scal 000000
    //---------------------------------------------
    ADC_write_One_Byte(0xC0);
    for(i=0;i<3;i++)
    {
    ADC_S_Data = ADC_Read_One_Byte();
    }
    ADC_CS1_ON;
    ADC_Out = ADC_S_Data[0];
    ADC_Out = ADC_Out<<8;
    ADC_Out |= ADC_S_Data[1];
    ADC_Out = ADC_Out<<8;
    ADC_Out |= ADC_S_Data[2];
    ADC_Out &= 0x007fffff;

    g_ADCABuf[0][0]=ADC_Out;

    }
    }

回帖(1)

李艳

2024-12-24 18:07:15
ADS1211采样数据乱跳可能有以下几个原因:

1. 电源不稳定:请检查电源是否稳定,不稳定的电源可能导致采样数据波动。

2. 电路干扰:请检查电路是否有干扰,如电磁干扰、电源干扰等。可以尝试使用屏蔽线和滤波器来减少干扰。

3. 接地问题:请检查接地是否良好,不良的接地可能导致数据波动。

4. 晶振问题:请检查晶振是否正常工作,晶振频率不稳定可能导致采样数据波动。

5. 代码问题:请检查代码是否有问题,如寄存器设置错误、时序问题等。

6. 硬件问题:请检查ADS1211芯片是否损坏,损坏的芯片可能导致数据波动。

针对您提供的代码,以下是一些建议:

1. 确认ADS1211的初始化设置是否正确,如采样速率、增益等。

2. 检查代码中的延时是否足够,特别是在写入寄存器后,需要等待一定的时间让ADS1211处理数据。

3. 检查代码中的读取数据部分是否正确,确保正确读取并处理数据。

4. 如果可能,尝试使用示波器检查ADS1211的输出信号,以确定问题是否出在硬件上。

希望以上建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析。
举报

更多回帖

×
20
完善资料,
赚取积分