ADS1248采集电压的问题
1我的ads1248用的是REF0参考, REFN0接地,REFP0接+5V电压,采集直流的负电压的时候可以显示负值,但为什么采集正弦波的时候负值就不能显示出来呢?
2还有我刚开始用的是采集高十六位丢弃低八位,采集的数值是对的,但是我用采集24位的时候,读出的数据就不对了?
3我设置好了PGA增益的时候直接用下图给的公式计算的时候总是不对:PGA增益不是直接设置好之后就在转换电压的时候代入图中给的公式就行了吗?
你的ADS1248采集速率多大?正弦波的频率多少?
采集24位的时候,你的读取时序是否有问题的呢?
这个图是没问题的,能否将你的计算公式发上来,我们一起看看?
3. 使用PGA时需要注意共模电压的大小,防止内部PGA的运放出现饱和。参考附件资料
3733.ADS1248 - PGA Common-mode requirement.pdf
、、、、、我没看懂、、、、 我给他一个0.5v的正弦波,PGA设置为4,在电压转换的时候 (就是我第一次发的那张图里边把PGA设置为4,)电压就缩小了四倍 说明我写到寄存器中的指令没成功,还是PGA放大没成功,
Martin
你的ADS1248采集速率多大?正弦波的频率多少?
采集24位的时候,你的读取时序是否有问题的呢?
这个图是没问题的,能否将你的计算公式发上来,我们一起看看?
采集速率是160SPS
这是写命令程序
unsigned char WriteAds1248(const unsigned char Data)
{
unsigned char Cnt = 0,Data1=0;
unsigned char SendData = Data;
for(Cnt = 0;Cnt < 8;Cnt++)
{
Set_adclk(); //上升沿写数据,先拉高,在拉低
if(SendData & 0x80) //先发送高位
{
Set_addin();
}
else
{
Clr_addin();
}
SendData <<= 1;
Data1<<= 1;
if(Read_adrdout())
{
Data1 |= 0x01;
}
Delay_us(5);
Clr_adclk();
Delay_us(5);
}
return Data1;
}
这是读数据程序,
int ReadADData(void)
{
int AdValue = 0;
Clr_adcs(); //拉低CS
// WriteAds1248(ADS1248_CMD_RDATA); //单次转换
// AdValue = ReadAds1248(); //读取高16位数据,丢失低8位
AdValue |=WriteAds1248(0xff);
AdValue <<= 8;
AdValue |=WriteAds1248(0xff);
/AdValue <<= 8;
AdValue |=WriteAds1248(ADS1248_CMD_RDATA);
Set_adcs(); //拉高CS
return(AdValue);
}
转换电压加显示
void Display1(int ad)
{
uchar i;
int ad1;
unsigned char buf1[7];
float fVoltage1;
buf1[0]='+';
if(ad&0x8000)
{
buf1[0]='-';
ad1=~ad;
ad1&=0xefff;
ad=ad1;
}
fVoltage1=(float)ad/0x7fff*5;//转换电压
buf1[1]=(uchar)fVoltage1;
buf1[1]=buf1[1]+0x30;
buf1[2]='.' ;
buf1[3]=(uchar)(fVoltage1*10)%10;
buf1[3]=buf1[3]+0x30;
buf1[4]=(uchar)(fVoltage1*100-buf1[0]*100)%10;
buf1[4]=buf1[4]+0x30;
buf1[5]=(uchar)((fVoltage1*1000)-buf1[0]*1000-buf1[1]*100)%10;
buf1[5]=buf1[5]+0x30;
buf1[6]='V' ;
Write_Cmd(0x80);
for(i=0;i<7;i++)
{
Delay_1ms();
Write_Data(buf1[i]);
}
}
