尊敬的先生:
我想通过 refp0和 refn0提供5V 的外部基准电压来使用 ads1220我参考了中的 ads1220数据表、要使用外部基准、前面提到过要设置位6、7选择的寄存器设置、但我不理解如何为外部基准设置寄存器设置 进行编程。
请帮助我解决我刚开始编程时遇到的问题
谢谢
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好、先生、
我在外部参考引用期间遇到问题我添加了写寄存器配置、您在上一篇文章中告诉我、当我为类似输入(Ain0)提供大于3V 的电压时、我将获得5V 的输出电压。 我不知道我在哪里犯错、我将 AVDD=5V、refp0=5V 和 refn0作为接地。
这是我上传至 Arduino nano 电路板的代码
#include "Protocentral_ADS1220.h"
#include
#define PGA 1 //可编程增益= 1.
//#define VREF 2.048 // 2.048V 内部基准
#define ADS1220_VREF_EX_DED 0x40
#define ADS1220_VREF_EX_DED 5.000
#define VFSR ADS1220_VREF_EX_DED/PGA
//#define VFSR VREF/PGA
#define full_scale (((long int) 1<<23)-1)
uint8_t _address;
#define ADS1220_CS_PIN 7
#define ADS1220_DRDY_PIN 6.
//#define WREG 0x50
#define CONFIG_REG2_ADDRESS 0x10
Protocentr_ADS1220 PC_ads1220;
int32_t ADC_data;
void writeRegister (uint8_t address、uint8_t value){
延迟(10);
digitalWrite (ADS1220_CS_PIN、LOW);
延迟(10);
SPI.transfer (WREG|address);//发送第一个命令字节、寄存器的地址
SPI.transfer (0x48);//发送第二个命令字节、只写一个寄存器
SPI.transfer (0x40);//为寄存器写入数据(1字节)
延迟(10);
digitalWrite (ADS1220_CS_PIN、高电平);
}
void setup()
{
Serial.begin(9600);
pc_ads1220.begin(ADS1220_CS_PIN,ADS1220_DRDY_PIN);
writeRegister (CONFIG_REG2_ADDRESS、0x48);
pc_ads1220.set_data_rate(DR_330SPS);
pc_ads1220.set_pga_gain(PGA_GAIN_1);
pc_ads1220.set_conv_mode_single_shot();//设置单次触发模式
}
void loop()
{
ADC_DATA=PC_ads1220.Read_SingleShot_SingleEnded_WaitForData (MUX_SE_CH0);
serial.print ("\n\nCh1 (mV):");
serial.print (convertToMilliV (adc_data));
延迟(100);
ADC_DATA=PC_ads1220.Read_SingleShot_SingleEnded_WaitForData (MUX_SE_CH1);
serial.print ("\nCh2 (mV):");
serial.print (convertToMilliV (adc_data));
延迟(100);
ADC_DATA=PC_ads1220.Read_SingleShot_SingleEnded_WaitForData (MUX_SE_CH2);
serial.print ("\nCh3 (mV):");
serial.print (convertToMilliV (adc_data));
延迟(100);
ADC_DATA=PC_ads1220.Read_SingleShot_SingleEnded_WaitForData (MUX_SE_CH3);
serial.print ("\nCh4 (mV):");
serial.print (convertToMilliV (adc_data));
延迟(100);
}
浮点转换 ToMilliV (int32_t i32data)
{
return (float)((i32data*VFSR*1000)/full_scale);
}
这是我在 AVDD=5V 时获得的串行监视器输出
配置寄存器:
0
0
0
0
CH1 (MV):5000.00
CH2 (MV):5000.00
CH3 (MV):5000.00
CH4 (MV):5000.00
CH1 (MV):5000.00
CH2 (MV):5000.00
CH3 (MV):5000.00
CH4 (MV):5000.00
串行监视器以同样的方式输出我在 DVDD=5V 时获得的值、如所示
配置寄存器:
0
4.
10.
0
CH1 (MV):5000.00
CH2(MV):-353.00
CH3(MV):5000.00
Ch4 (MV):-353.00
CH1 (MV):5000.00
CH2(MV):-353.00
CH3(MV):5000.00
Ch4 (MV):-353.00
谢谢主席先生
您好、Anitha、
我想我对正在发生的情况有更好的理解。 TI 不制造 ProtoCentral 板或支持 ProtoCentral Arduino 代码。 您似乎正在尝试使用我与 ProtoCentral (PC)代码一起讨论的方法与器件通信。 您可能应该坚持使用一种方法或另一种方法。 由于您的大多数应用程序似乎都在使用 PC 代码、因此让我们从那里开始。
让我们从代码顶部一直到最后进行工作
我认为您的其余命令/函数都可以、您应该通过上述建议的更改获得正确的结果。
此致、
Bob B
您好、先生、
谢谢您的建议 、我对代码进行了更改、因为您在上一篇文章中建议 您可以获得大于2.048V 基准的输出、但存在问题、我不知道为什么当输入电压变化 AIN0、1、2、3等时、 从1到5V、并不断将 vrefp0保持为5V、在串行监控器中获取输出如所示
对于 AIN = 1V (AIN0&2=1V 且 AIN1&3接地)、串行监控器输出如下:
CH1 (MV):614
CH2 (MV):-369
CH3 (MV):609
Ch4 (MV):-366
对于 AIN = 1.5V (AIN0&2 = 1.5V 且 AIN1&3接地)、串行监控器输出如下:
CH1 (MV):1156
CH2 (MV):-369
CH3 (MV):1152
Ch4 (MV):-366
对于 AIN = 2V (AIN0&2 = 2V 且 AIN1&3接地)、串行监控器中的输出为:
CH1 (MV):1697
CH2 (MV):-376
CH3 (MV):1667
Ch4 (MV):-373
对于 AIN = 2.5V (AIN0&2 = 2.5V 且 AIN1&3接地)、串行监控器输出如下:
CH1 (MV):2215
CH2 (MV):-376
CH3 (MV):2211
Ch4 (MV):-373
对于 AIN = 4V (AIN0&2=4V 且 AIN1&3接地)、串行监控器输出如下:
CH1 (MV):3850
CH2 (MV):-375
CH3 (MV):3849
Ch4 (MV):-372
我不知道为什么会出现这种下降、变化也不是恒定的、请帮助我解决这一问题。
谢谢主席先生
您好、Anitha、
我很高兴听到您正在取得一些进展。 至于您在电压测量方面看到的情况、请注意接地的通道(AIN1和 AIN3)为负。 相对于接地(ADS1220的 AVSS 应接地)测量的单端测量应仅具有正代码。 我们看到的是一个测量结果、该测量结果似乎将 ESD 二极管导通至接地以下并产生负电压。 这意味着您使用的电压源的输出未连接到与 ADS1220接地相同的接地端。
通过获取 AIN0和 AIN1的差值也可以验证这一点、您将看到更接近您所期望的电压的电压。 确保您用于模拟输入的电压源与 ADS1220的模拟接地(AVSS)之间的导线(-)连接良好。
此致、
Bob B
您好、先生、
感谢您的响应。 SIR、我已将所有通道(AIN0、AIN1、AIN2、AIN3)连接到正电压、因为我想将其从1-5V 变化、其中 vrefp0为5V、vrefn0为接地、而 DVDD = 5V、并在 Arduino nano 中稳定至接地。 我没有使用 AVDD、
串行监视器中的输出显示为:
如果 AIN0=AIN1=AIN2=AIN3=1V
CH1(MV): 625
CH2(MV): 625
CH3MV: 624
CH4 (MV): 623
如果 AIN0=AIN1=AIN1=AIN2=AIN3=1.5V
CH1(MV): 1171.
CH2(MV): 1171.
CH3MV:1170
Ch4 (MV): 1168.
如果 AIN0=AIN1=AIN2=AIN3=2V
CH1MV: 1719
CH2(MV): 1719
CH3MV:1719
CH4 (MV): 1716
如果 AIN0=AIN1=AIN1=AIN2=AIN3=3V
CH1(MV): 2827.
CH2(MV): 2827.
CH3MV: 2827
CH4 (MV): 2826
如果 AIN0=AIN1=AIN2=AIN3=4V
CH1(MV): 3913.
CH2(MV): 3913.
CH3(MV): 3912.
CH4 (MV): 3912
如果 AIN0=AIN1=AIN1=AIN2=AIN3=5V
CH1(MV): 4837
CH2(MV): 4837
CH3MV: 4837
CH4 (MV): 4836
当我将 AGND 与 Arduino nano Ground 以及 DGND 一起包含在上述连接中时
串行监视器输出显示为、
如果 AIN0=AIN1=AIN2=AIN3=1V
CH1(MV): 1095
CH2(MV): 1094
CH3MV: 1095
Ch4 (MV): 1094
如果 AIN0=AIN1=AIN1=AIN2=AIN3=1.5V
CH1(MV): 1631
CH2(MV): 1630
CH3MV:1631
Ch4 (MV): 1631
如果 AIN0=AIN1=AIN2=AIN3=2V
CH1(MV): 2168.
CH2(MV): 2167
CH3MV:2168.
CH4 (MV): 2168
如果 AIN0=AIN1=AIN1=AIN2=AIN3=3V
CH1(MV): 3253.
CH2(MV):3253.
CH3(MV): 3252.
CH4 (MV): 3252
如果 AIN0=AIN1=AIN2=AIN3=4V
CH1(MV): 4322
CH2(MV): 4322
CH3MV: 4321
CH4 (MV): 4321
如果 AIN0=AIN1=AIN1=AIN2=AIN3=5V
CH1(MV):5000
CH2(MV): 5000
CH3(MV): 5000
CH4 (MV): 5000
当 im 使用2.048的内部基准电压时、输出显示为
如果 AIN0=AIN1=AIN2=AIN3=1V
CH1(MV):1009.
CH2(MV): 1009.
CH3(MV): 1009.
Ch4 (MV): 1009.
如果 AIN0=AIN1=AIN1=AIN2=AIN3=1.5V
CH1(MV):1506.
CH2(MV):1506.
CH3(MV): 1506.
Ch4 (MV): 1506.
如果 AIN0=AIN1=AIN2=AIN3=2V
CH1(MV):2001
CH2(MV): 2002
CH3(MV): 2002
Ch4 (MV): 2001年
为什么在使用外部基准引脚 ref0和 refn0时会发生这种变化?
外部基准以及内部基准中获得的结果是否可能与我希望根据给定输入提供的输出电压相同、请建议我这样做。
谢谢先生、
您好、Anitha、
仍然不清楚如何连接 ADS1220。 AVDD 必须连接至5V、AVSS 必须连接至接地。 此外、您的模拟输入电压源还必须连接 AINx 引脚和 AVSS (应接地)之间。 您是否有任何设置图片? 您能告诉我 ADS1220的每个引脚连接了什么?
很明显、由于接地未正确连接、因此一开始未正确连接 ADS1220。 您可能已损坏 ADS1220。 因此、很难说您是否仍然存在连接问题或设备是否损坏。
此致、
Bob B
您好、先生、
这些是我从 Arduino 微型板到 ADS1220的连接
|ADS1220引脚标签|引脚功能|Arduino 连接|
| DRDY |数据就绪输出引脚| D6 |
| MISO |从器件输出| D12 |
| MOSI |从器件输入| D11 |
| SCLK |串行时钟| D13 |
| CS |芯片选择| D7 |
| DVDD |数字 VDD |+5V |
| DGND |数字 GND | GND |
| AVDD |模拟 VDD |-|
| AGND |模拟 GND |-
AN0-AN3 |模拟输入 | 模拟输入
我离开 AN0-AN3时未连接到 Arduino nano、我看到串行监视器输出沿着 ch0、1、2、3为2.048V、用于内部基准
对于外部基准、我将 refp0保持为5V 恒定、将 DVDD 保持为5V、并且我希望将输入电压从1-5V 更改为 ADs1220的模拟引脚、即 AIN0、1通过电源提供的变化电压(1-5V)、并保持 AIN2、3接地、然后串行监视器显示为 CH0、1、000、当 AIN0=AIN1时为614mv 对于 AIN0=AIN1=2V、ch0、1为1648mv、其中 AIN2和 AIN3为接地、然后输出 ch2、3为-20mV。 由于我想连续读取所有4个通道、我为 AIN (模拟输入)提供了不同的电压。 在以前的帖子中、我附加了我正在使用的代码。 当我将 ads1220的 AGND 指定为 Arduino GND 并进行上述连接以进行单端测量时、我观察到、对于 AIN0=AIN1=AIN1=AIN2=AIN3=1V、对于 AIN0=AIN1=AIN1=AIN2=AIN3=2V,CH0.1,2100mv、串行监视器显示为 ch0.1mv。 我想验证我在串行监视器上读取的通道电压是否正确,请告诉我如何验证。
谢谢先生、
您好、先生、
我更改了 IC、并给出了从 Arduino nano 到 ads1220 IC 的连接、如所示
|ADS1220 引脚标签|引脚功能|Arduino 连接|
| DRDY |数据就绪输出引脚| D6 |
| MISO |从器件输出| D12 |
| MOSI |从器件输入| D11 |
| SCLK |串行时钟| D13 |
| CS |芯片选择| D7 |
| DVDD |数字 VDD |+5V |
| DGND |数字 GND | GND |
|AVDD|模拟 VDD|+5V|
|AGN|Analog GND|GND
我保持 ref0和 AVDD、DVDD=5V 恒定、因为我想将使用电源的电压从0-5V 变为 AN0、1、2、3连接到正极端子、并且接地时、观察串行监控器输出、正如我在前面的文章中提到的那样、用于外部参考。 在内部基准期间、输出正常、但对于外部基准、问题发生在哪里。 为什么会出现变化? 是否存在任何连接问题、请向我解释。