您好!
我在我们的一个项目中使用 ADS1248将模拟4-20mA 信号转换为数字值、我面临的问题是无法接收到与引脚电压正确的 ADC 值。 我认为它不起作用、我得到的是与施加的电压/电流无关的任何东西的垃圾值。 我不知道 ADS1248配置问题还是硬件相关问题、但我需要支持来了解和解决问题。
注意:原理图中有一个错误,我们之前没有在 Vrefcom 和 vrefout 添加 capaictor,但现在已经添加了,但结果仍然相同
在此、我附加了 ADS1248驱动程序文件、原理图部分和示例代码。
AIN%接地(原理图中未显示)
//读取 ADC 函数
int32_t ADS1248_sample_raw ()
{
int32_t res = 0;
unsigned int Temp = 0;
//测试 SPI
Temp = ADS1248GetIntRef ();
Temp = ADS1248_DRDY_OFF;
ADS1248WriteRegister (ADS1248_10_IDAC0、0x01、&Temp);
// ref v CHANNELS
Temp =(ADS1248_INT_VREF_ON)|(ADS1248_INT_REF0)|(ADS1248_MEAS_NORM);
//ADS1248SetVoltageReference (Temp);
ADS1248WriteRegister (ADS1248_2_MUX1、0x01、&Temp);
//设置增益和采样率
ADS1248SetGain (ADS1248_GAIN_2);
ADS1248SetDataRate (ADS1248_DR_80);
//温度= ADS1248_DR_320|ADS1248_GAIN_1;//ADS1248WriteRegister
(ADS1248_3_SYS0、0x01、 &Temp);
Temp = ADS1248GetDataRate();
//读取 CH 3 wrt CH5
//选择通道
ADS1248SetChannel (0、(ADS1248_AINN3));
ADS1248SetChannel (1、(ADS1248_AINP5);
ADS1248_startSingle();
delayMS (500);
res = ADS1248ReadData ();
float tempV = res;
tempV *= 2.048;//内部参考2.048
tempV /= 8388608;// 2^23
tempV *= 1000;//以 mV
为单位的值返回 res;
}
// FreeRTOS 任务读取 ADC
静态 void vLEaskV /=(datol)参数1 (
*空
);ditt (*空)//初始化 SPI 端口引脚以及控件
initconfig();
ADS1248SetStart(0);
tmp_adc = ADS1248GetID();
tmp_adc = ADS1248GetChannel(0);
while (1){
ledState =(bool )!ledState;
//大约100ms 开/关切换速率*/ v48GetTemp_TRY(0)
;ADS1248task_RATE =(ADS12_100_RATE)
}
//为会话
空 ADS1248_startSingle()切换起始引脚{
int relVal = 1;
ADS1248SetStart (1);
delayMS (100);
ADS1248SetStart (0);
}
