找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 420|回复: 2
打印 上一主题 下一主题
收起左侧

ADS1256轮询切换4组差分通道问题

[复制链接]
跳转到指定楼层
楼主
ID:840112 发表于 2025-5-16 10:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
你好,想请教一下,我现在轮询切换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;}
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:879809 发表于 2025-5-16 17:42 | 只看该作者
改变配置把采集到的第一个数据扔掉。
回复

使用道具 举报

板凳
ID:1091344 发表于 2025-5-19 14:31 | 只看该作者
64倍适合采很小的信号,100mv以内的,PGA只要选择使 2VREF/PGA最接近 于输入信号最大幅值的 PGA的值就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表