标题: ADS1256轮询切换4组差分通道问题 [打印本页]

作者: 黑色小枫叶    时间: 2025-5-16 10:04
标题: ADS1256轮询切换4组差分通道问题
你好,想请教一下,我现在轮询切换4组差分输入,然后想把第3、4这2组差分输入需要改变PGA,然后读出来的数据时错乱的;单纯切换4组差分输入,不增加修改PGA又可以正常读取数据,一旦增加修改PGA这个寄存器命令后,第3,4组差分通道读取到的额数据时0,这个是什么原因呢?

void ADS1256_SetDiffChannal(uint8_t _ch,uint8_t SPIx)
{
        if (_ch == 0)
        {
                ADS1256_WriteReg(REG_MUX, (0 << 4) | 1,0x04,SPIx);        /* 差分输入 AIN0, AIN1 ,PGA=16倍 */
        }
        else if (_ch == 1)
        {
                ADS1256_WriteReg(REG_MUX, (2 << 4) | 3,0x04,SPIx);        /* 差分输入 AIN2, AIN3 ,PGA=16倍 */
        }
        else if (_ch == 2)
        {
                ADS1256_WriteReg(REG_MUX, (4 << 4) | 5,0x06,SPIx);        /* 差分输入 AIN4, AIN5 ,PGA=64倍 */
        }
        else if (_ch == 3)
        {
                ADS1256_WriteReg(REG_MUX, (6 << 4) | 7,0x06,SPIx);        /* 差分输入 AIN6, AIN7 ,PGA=64倍*/
        }
}
void ADS1256_WriteReg(uint8_t _RegID, uint8_t _RegValue,uint8_t _RegValue1,uint8_t SPIx)
{
        ADS1256_Send8Bit(CMD_WREG | _RegID,SPIx);        /* 第1个命令:写寄存器的命令, 并发送寄存器地址 */
        ADS1256_Send8Bit(0x01,SPIx);                /* 第2个命令:寄存器个数 - 1, 此处写1个寄存器 */
        ADS1256_Send8Bit(_RegValue,SPIx);        /* 第3个命令:发送寄存器值 */
    ADS1256_Send8Bit(_RegValue1,SPIx);        /* 第4个命令:发送寄存器值 */
}
void ADS1256_ReadData(int32_t *p,u8 ADCx )
{
        int32_t read = 0;
    select_ads1256(10);//拉低片选,选通MISO,主入从出
        Ddl_Delay1us(1);  
        ADS1256_WaitDRDY_1(10);
      
    ADS1256_SetDiffChannal(ADCx,10);//差分4通道
        Ddl_Delay1us(5);
        ADS1256_Send8Bit(CMD_SYNC,10);
        Ddl_Delay1us(5);
        ADS1256_Send8Bit(CMD_WAKEUP,10);      
        Ddl_Delay1us(25);

        ADS1256_Send8Bit(CMD_RDATA,10);        /* 读数据的命令 */
        Ddl_Delay1us(10);

        /* 读采样结果,3个字节,高字节在前 */
        read += ADS1256_Recive8Bit(10) << 16;
        read += ADS1256_Recive8Bit(10) << 8;
        read += ADS1256_Recive8Bit(10) << 0;
    unselect_ads1256(10);//读完数据拉高片选
        //CS_1();        /* SPI片选 = 1 */
      
        /* 负数进行扩展。24位有符号数扩展为32位有符号数 */
        if (read & 0x800000)
        {
                read += 0xFF000000;
        }

    if(ADCx==0){p[3] =  read/32;}
        else{
            p[ADCx-1] =  read/32;}
}


作者: rundstedt    时间: 2025-5-16 17:42
改变配置把采集到的第一个数据扔掉。
作者: 会飞的鱼KKK    时间: 2025-5-19 14:31
64倍适合采很小的信号,100mv以内的,PGA只要选择使 2VREF/PGA最接近 于输入信号最大幅值的 PGA的值就可以了




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1