您好!
我们带来了 ADS1256 ADC 模块 https://rarecomponents.com/store/1951 、并使用了该链接 https://github.com/adienakhmad/ADS1256中的库 以及使用 SPI 协议连接到 Arduino UNO 的电路板。
我在 单端模式下使用了 ADS1256_Basic_Switching_Channel.ino 代码并进行了一些修改、以从所有8个通道读取数据。 我在单端模式下以 ACOM 为基准测试了通道0。 第一个输入是电位计、该电位计由5V 电源供电、雨刮器端子连接到 Ch-0、串行监视器输出电压为0.00至4.84V、用于更换雨刮器。
其次、我施加了具有适当偏移电压的正弦波、以便在单端模式下测量、ADC 数据速率为7500sps、增益1。 串行绘图仪在正弦波随着频率的增加而失真后,可在1Hz 至5Hz 范围内正确打印该波形。
如果在 AIN0和 AIN1之间施加信号(无偏移电压的差分模式)、则会发生同样的情况、所使用的代码不同、串行绘图仪打印正弦波时会失真、但这次打印的频率为1Hz。 数据速率和增益保持不变。
问题是什么... 如何验证 ADS1256读取的信号频率? 对 ADS1256读取的信号执行 FFT 是否有任何选项? 此外、如何验证 ADS1256每秒读取的样本?
即时消息附加输出信号的代码和屏幕截图。
请帮助我解决这个问题。
//单端代码
//使用 ADS1256库的 Arudino 示例代码
//使用高效输入循环读取4个差动通道
//由 Adien Akhmad 编写,2015年8月
//由 Axel Sepulveda 编写的 Modfified 2019年1月,用于 ATmega328
#include
#include
浮点时钟 MHZ = 7.68;// ADS1256上使用的晶体频率
float Vref = 2.5;//电压基准
//初始化 ADS1256对象
ADS1256 ADC (clockMHZ、Vref、false); // RESETPIN 永久绑定到3.3V
//可变变量以存储传感器读数
sensor1 =连接到 AIN0 - AIN1
sensor2 =连接到 AIN2 - AIN3
sensor3 =连接到 AIN4 - AIN5
Sensor4 =连接到 AIN6 - AIN7
*/
float sensor1;
void setup ()
{
Serial.begin(9600);
serial.println ("正在启动 ADC");
//以15SPS 的数据速率启动 ADS1256
//其它数据速率:
// ADS1256_DRATE_30000SPS
// ADS1256_DRATE_15000SPS
// ADS1256_DRATE_7500SPS
// ADS1256_DRATE_3750SPS
// ADS1256_DRATE_2000SPS
// ADS1256_DRATE_1000SPS // ADS1256_DRATE_100SPS/
ADS1256_DREST_DR50SPS
// ADS1256_ADS1256SPS // ADS1256_DREST_DR50SPS // ADS1256_DR50SPS 数据:/ADS1256_DR50SPS/ ADS1256_DR50SPS/ ADS1256SPS // ADS1256_DR50SPS // ADS1256_DR50SPS/ ADS1256_DREST_DR50SPS // ADS1256_DR50SPS // ADS1256_DR50SPS // ADS1256_DR50SPS 下面列出的数据速率假定晶振频率为7.68Mhz
// 有关其他频率、请参阅数据表。
//poible gains
//ADS1256_gain_1
//ADS1256_gain_2
//ADS1256_gain_4
//ADS1256_gain_8
//ADS1256_gain_16
//ADS1256_gain_32
//ADS1256_gain_64
adc.begin(ADS1256_DRATE_7500SPS,ADS1256_GAIN_1,false);
Serial.println ("ADC started");
//将 MUX 寄存器设置为 Aino 和 AIN1,以便它开始执行 ADC 转换
}
void loop()
{
// for (int i=0;i < 8;++i)//
{
adc.waitDRDY ();
adc.setChannel(0);
sensor1 = adc.readCurrentChannel();
serial.println (sensor1);
//读取多路复用寄存器以查看当前活动通道
////
高效输入循环
//如需进一步了解,请阅读数据表第21页的图19:ADS1256输入多路复用
器的循环// adc.waitDRDY ();//在更改多路复用器寄存
器 adc.setChannel(2,3);之前等待 DRDY 变为低电平 //为 CH2和3
sensor1之间的差动设置多路复用器= adc.readCurrentChannel();//到达这里的 DOUT 来自多路复用器 AIN0和 AIN1
adc.waitDRDY ();
adc.setChannel(4,5);
sensor2 = adc.readCurrentChannel ();//到达这里的 DOUT 来自多路复用器 AIN2和 AIN3
(adc.setChannel(6,7););readCurrentChannel (adc); //到达此处的 DOUT 来自 MUX AIN4和 AIN5
ADC.waitDRDY ();
adc.setChannel(0,1);//切换回 MUX AIN0和 AIN1
Sensor4 = ADC.readCurrentChannel();//到达此处的 DOUT 来自 MUX AIN6和 AIN7
//打印结果。
serial.print (sensor1、10);
serial.print ("\t");
serial.print (sensor2、10);
serial.print ("\t");
serial.print (sensor3、10);
serial.print ("\t");
serial.println (sensor4、10);*/
delay (10);
}
//differential 模式代码
// Arudino 示例代码使用 ADS1256库
//使用 effiecient 输入循环读取4个差动通道
// Adien Akhmad 编写,2015年8月
// Modfified 2019年1月,由 Axisl 为#328
#include
浮点时钟 MHZ = 7.68;// ADS1256上使用的晶体频率
float Vref = 2.5;//电压基准
//初始化 ADS1256对象
ADS1256 ADC (clockMHZ、Vref、false); // RESETPIN 永久连接到3.3V
//可变存储传感器读数
sensor1 =连接到 AIN0 - AIN1
sensor2 =连接到 AIN2 - AIN3
sensor3 =连接到 AIN4 - AIN5
Sensor4 =连接到 AIN6 - AIN7
*/
float sensor1、sensor2、sensor3、sensor3、sensor4、sensor3、sensor4、sensor4、sensor4
void setup()
{
Serial.begin(9600);
serial.println ("正在启动 ADC");
//以15SPS 的数据速率启动 ADS1256
//其它数据速率:
// ADS1256_DRATE_30000SPS
// ADS1256_DRATE_15000SPS
// ADS1256_DRATE_7500SPS
// ADS1256_DRATE_3750SPS
// ADS1256_DRATE_2000SPS
// ADS1256_DRATE_1000SPS // ADS1256_DRATE_100SPS/
ADS1256_DREST_DR50SPS
// ADS1256_ADS1256SPS // ADS1256_DREST_DR50SPS // ADS1256_DR50SPS 数据:/ADS1256_DR50SPS/ ADS1256_DR50SPS/ ADS1256SPS // ADS1256_DR50SPS // ADS1256_DR50SPS/ ADS1256_DREST_DR50SPS // ADS1256_DR50SPS // ADS1256_DR50SPS // ADS1256_DR50SPS 下面列出的数据速率假定晶振频率为7.68Mhz
// 有关其他频率、请参阅数据表。
//poible gains
//ADS1256_gain_1
//ADS1256_gain_2
//ADS1256_gain_4
//ADS1256_gain_8
//ADS1256_gain_16
//ADS1256_gain_32
//ADS1256_gain_64
adc.begin(ADS1256_DRATE_7500SPS,ADS1256_GAIN_1,false);
Serial.println ("ADC started");
//将 MUX 寄存器设置为 Aino 和 AIN1,以便开始执行 ADC 转换
adc.setChannel(0,1);
void
loop()
{//
高效输入循环
//要进一步了解,请参阅数据表第21页的图19:ADS1256输入多路复用器的循环
adc.waitDRDY ();//在更改多路复用器寄存器
adc.setChannel(2,3);之前等待 DRDY 变为低电平//将多路复用器设置为 CH2和3
sensor1之间的差动= adc.readCurrentChannel();//到达这里的 DOUT 来自多路复用器 AIN0和 AIN1
adc.waitDRDY ();
adc.setChannel(4,5);
sensor2 = adc.readCurrentChannel (); ////到达此处的 DOUT 来自 MUX AIN2和 AIN3
ADC.waitDRDY ();
adc.setChannel(6,7);
sensor3 = ADC.readCurrentChannel();//到达此处的 DOUT 来自 MUX AIN4和 AIN5
ADC.waitDRDY ();
adc.setChannel(0,1);//切换回 MUX AIN0和 AIN1
;adc = readCurrentChannel (); //到达此处的 DOUT 来自 MUX AIN6和 AIN7
//打印结果。
serial.print (sensor1、10);
serial.print ("\t");
serial.print (sensor2、10);
serial.print ("\t");
serial.print (sensor3、10);
serial.print ("\t");
serial.println (sensor4、10);
}