TI论坛
直播中

李玲

8年用户 1320经验值
私信 关注
[问答]

用TMS28335控制ads1256 , 采集2V的电压,每次读出来的数都不一样,为什么?


  • 我用TMS28335 控制ads1256 , 采集2V的电压,每次读出来的数都不一样,相差很大。 然后我就读初始化后的寄存器,发现读出来的寄存器的值和初始化的值不一样,这是为什么??
    下面是ADS1256的初始化程序:
    void ADS1256_Init(void)
    {
    ADS_CS = 0;

    ADS_REST = 0;
    // Delay(DELAY_10ms);
    DELAY_US(10000);
    ADS_REST = 1;
    while(ADS_DRDY);
    spiwr(ADS1256_CMD_SELFCAL);// 自校准
    while(!ADS_DRDY);
    while(ADS_DRDY); //ADS_DRDY=0时表示自校准结束

    ADS1256WREG(ADS1256_STATUS,0x04); // 高位在前、校准、不使用缓冲
    DELAY_US(50);
    ADS1256WREG(ADS1256_MUX,0x08); // A0+ AINCOM?" -
    DELAY_US(50);
    ADS1256WREG(ADS1256_ADCON,0x00); // ·
    DELAY_US(50);
    ADS1256WREG(ADS1256_DRATE,ADS1256_DRATE_500SPS); // 500sps
    DELAY_US(50);
    ADS1256WREG(ADS1256_IO,0x00); //
    while(ADS_DRDY);
    spiwr(ADS1256_CMD_SELFCAL);// 自校准
    while(!ADS_DRDY);
    while(ADS_DRDY);
    ADS_CS = 1;
    }
    读寄存器程序:
    unsigned long register_read(void)
    {
    unsigned char i=0;
    unsigned long sum1=0;
    unsigned long r1=0;
    ADS_CS = 0;
    while(ADS_DRDY); //?±ADS1256_DRDY?????±???????????÷
    spiwr(ADS1256_CMD_SYNC);
    DELAY_US(50);
    spiwr(ADS1256_CMD_WAKEUP);
    DELAY_US(50);
    spiwr(ADS1256_CMD_RREG | (ADS1256_STATUS & 0xF));
    spiwr(2);
    DELAY_US(50);
    for(i=0;i<3;i++)
    {
    sum1 = sum1<<8;
    spiwr(0);
    DELAY_US(300);
    // while(SpiaRegs.SPIFFRX.bit.RXFFST !=1);
    r1 = SpiaRegs.SPIRXBUF;
    r1 = r1 & 0xFF;
    sum1 |= r1;
    }
    ADS_CS = 1;
    return sum1;
    }
    本来应该为STATUS: 0x04,    MUX: 0x08    ADCON: 0x00
    结果却是:  STATUS: 0x80,    MUX: 0x31    ADCON: 0x01

回帖(2)

王雪

2025-1-4 11:01:29
是不是先验证一下, SPI 的通信时序是否匹配了
举报

淡淡的爱

2025-1-6 11:13:08
根据您的描述,采集2V电压时每次读出来的数都不一样,相差很大,这可能是由以下几个原因导致的:

1. 硬件连接问题:请检查您的TMS28335和ADS1256之间的硬件连接是否正确,包括数据线、时钟线、片选线等。确保没有接触不良或短路的情况。

2. 电源稳定性:请检查您的电源是否稳定,不稳定的电源可能会导致采集到的数据波动较大。

3. 采样速率:请检查您的采样速率是否合适。如果采样速率过高,可能会导致采集到的数据不稳定。

4. 程序问题:请检查您的初始化程序和采集程序是否正确。根据您的代码,您已经执行了自校准操作,但是请确保其他寄存器的设置也是正确的。您可以查阅ADS1256的数据手册,确保所有需要设置的寄存器都已经正确配置。

5. 寄存器值不一致:您提到读出来的寄存器值和初始化的值不一样,这可能是因为在初始化过程中某些寄存器没有正确设置。请仔细检查您的初始化程序,确保所有寄存器都按照数据手册的要求进行设置。

6. 干扰:请检查您的电路是否存在电磁干扰,这可能会导致采集到的数据不稳定。

为了解决这个问题,您可以尝试以下步骤:

1. 检查硬件连接,确保所有连接都正确且稳定。
2. 检查电源稳定性,确保电源供应稳定。
3. 调整采样速率,确保采样速率合适。
4. 仔细检查初始化程序和采集程序,确保所有寄存器都按照数据手册的要求进行设置。
5. 检查电路是否存在电磁干扰,并采取相应的抗干扰措施。

希望以上建议能帮助您解决问题。如果问题仍然存在,请提供更多详细信息,以便我们为您提供更具体的帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分