标题: ADS1256芯片驱动多通道切换问题 [打印本页]

作者: fhsgjsgjsfgjsfj    时间: 2021-10-9 13:05
标题: ADS1256芯片驱动多通道切换问题
STM32F407通过SPI接口驱动ADS1256 AD芯片,经调试单通道获取AD没有问题。
从一个通道切换到另一个通道交替获取时出现问题,通道数值乱串,不知道大家是否遇到同类问题,或者有调试通过的驱动。
本人辅助调试设备有限,无法精确调试,感谢留言
作者: mayouzhen2008    时间: 2021-10-9 17:16
1.在ADS1256片外要将模拟地AGND和数字地DGND连接在一起。否则,AGND和DGND之间存在电压,会使ADS1256无法正常工作。

2。在印刷电路板布线时,应将外部晶振尽可能地靠近ADS1256,否则将影响输入幅值的大小,而当幅值太小时,可以通过减小晶振两端的电容来增大其幅值,电容范围应在0~20μF,晶振为7.68MHz时,接入电容的典型值为18pF。

3。为了得到最佳的转换结果,每次改变初始寄存器值时(例如改变输入通道),最好自校准一次。而且应在改变输入通道命令后发同步命令SYNC,然后经过一段延时时再读取上次转换的结果。该延时应随着ADS1256的采样频率和滤波方式变化而变化。

4。在使用ADS1256处理微小信号时,最好采用比例测量,并应在DRDY由高变低时读取数据。
作者: Hephaestus    时间: 2021-10-10 19:51
用过类似的ADS1xxx,通道转换先扔掉两个数据就行了。
作者: fhsgjsgjsfgjsfj    时间: 2022-3-8 11:12
Hephaestus 发表于 2021-10-10 19:51
用过类似的ADS1xxx,通道转换先扔掉两个数据就行了。

这样确实可以,还是要吐槽下这个ADC芯片,要想精度高那是慢啊
作者: 小珂爱    时间: 2022-9-14 11:26
二、Sigma-Delta模数转换器的特点及其对驱动程序的影响
本质上说Sigma-Delta模数转换器是一个数字器件,其执行的是一个有限长冲击响应滤波器(FIR),包含一系列复杂的乘加运算,需要较长的计算时间。这一本质造成的影响包括:

1、Sigma-Delta转换器处理时间较慢,采样率较低;且存在一次转换的输出的“潜伏期”,数据手册提供的时序图如下。
2、进行通道轮换时的采样率
很多小伙伴想当然的认为在数据率寄存器(DRATE,03h)里配置的数据率就是所有情况下的采样率。其实当你知道Sigma-Delta器件内部的FIR滤波器本质时你就会知道,当你进行通道切换并重新对器件进行同步(synchronize)和唤醒(wakeup)后,转换速度会变慢。具体来讲,实际采样率和你配置的通过率之间的对应关系如数据手册中的下表所示
https://www.cnblogs.com/helesheng/p/15583047.html
作者: liruilirui    时间: 2023-1-5 18:57
Hephaestus 发表于 2021-10-10 19:51
用过类似的ADS1xxx,通道转换先扔掉两个数据就行了。

扔掉两个数据啥意思?

作者: Hephaestus    时间: 2023-1-5 19:28
liruilirui 发表于 2023-1-5 18:57
扔掉两个数据啥意思?

等待数据稳定。
作者: liruilirui    时间: 2023-1-5 22:51
Hephaestus 发表于 2023-1-5 19:28
等待数据稳定。

                for(ch = 0;ch <2;ch++)
                {       
                        Adc1 =  ADS1256ReadData( ch<<4|ADS1256_MUXN_AINCOM);
                        Volts1 = Adc1*.00000059453; // 0.00000059453
                        delay_ms(1000);
                        if(ch==0)
                        {                               
                        OLED_ShowNum(6,6,Volts1,4);
                        }
                        if(ch==1)
                        {                       
                        OLED_ShowNum(56,6,Volts1,4);
                        }
                }
我测2路数据,我如何扔掉数据,该咋写?
作者: abbey_tom    时间: 2023-3-14 14:33
liruilirui 发表于 2023-1-5 22:51
for(ch = 0;ch

               for(ch = 0;ch <2;ch++)
                 {        
                         Adc1 =  ADS1256ReadData( ch<<4|ADS1256_MUXN_AINCOM);
                         Adc1 =  ADS1256ReadData( ch<<4|ADS1256_MUXN_AINCOM);
                         Adc1 =  ADS1256ReadData( ch<<4|ADS1256_MUXN_AINCOM);
                         Volts1 = Adc1*.00000059453; // 0.00000059453
                         delay_ms(1000);
                         if(ch==0)
                         {                                
                         OLED_ShowNum(6,6,Volts1,4);
                         }
                         if(ch==1)
                         {                        
                         OLED_ShowNum(56,6,Volts1,4);
                         }
                 }





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