Part Number:CC1310
硬件电路如下,采用3.6V电池供电。问题是同样的温度下,电压在2.5~3.6V范围不同电压下测出的ADC值相差很大,导致显示的温度误差大。这个如何解决?
Kevin Qiu1:
ADC参考源选的是什么,尝试换为ADCCC26XX_FIXED_REFERENCE 然后测试看看
,
wei xin xin:
参考源
adcEnableSync(ADC_REF_FIXED, ADC_SAMPLE_TIME_2P7_US, ADC_TRIGGER_MANUAL);
,
Kevin Qiu1:
wei xin xin 说:adcEnableSync(ADC_REF_FIXED, ADC_SAMPLE_TIME_2P7_US, ADC_TRIGGER_MANUAL);
这是你自己封装的API,我在例程中没有看到这个函数
wei xin xin 说:电压在2.5~3.6V范围不同电压下测出的ADC值相差很大
差别大概是多少,是用ADC_convertToMicroVolts()获取ADC采样值的吗
,
wei xin xin:
evhCancelTrigger(0);
gpioClearOutput(AUXIO_O_SENSOR_GND);
// 使能ADC(内部 4.3VREF为参考)
adcEnableSync(ADC_REF_FIXED, ADC_SAMPLE_TIME_2P7_US, ADC_TRIGGER_MANUAL);
// 传感器采样
U16 adcValue;
adcGenManualTrigger(); // 单次触发
adcReadFifo(adcValue); // 读取ADC值
output.adcValue = adcValue;
// 失能ADC
adcDisable();
gpioSetOutput(AUXIO_O_SENSOR_GND);
// 55℃对应表数据为0x0405(cfg.AlrSet)
if (adcValue > cfg.AlrSet){
input.AlrDly+=1;
if(input.AlrDly>=ALR_DELAY){
input.AlrDly=ALR_DELAY;
if(input.AlrFlag==0){
input.AlrFlag=1;
fwGenAlertInterrupt();
}
}
}else {
input.AlrFlag=0;
}
evhSetupTimer1Trigger(0, cfg.TimeSet, 8);
,
wei xin xin:
这是SCS中ADC的
,
wei xin xin:
参考源改为ADC_REF_VDDS_REL解决!
,
Kevin Qiu1:
好的
使用 VDDS 作为参考源可根据电池电压调整 ADC 的上限,随着电池电压下降,ADC 的范围也随之下降,测与电池电压相关的信号时一般使用它作为参考源
如果VDDS有较明显的纹波,则一般使用fixed internal source作为参考源
,
wei xin xin:
还有个问题:现在参考源改为ADC_REF_VDDS_REL后,测温没有问题,但电池电压就检测不了啦。
,
Kevin Qiu1:
电池电压检测不了是什么意思,检测电池电压用的哪个ADC?
,
wei xin xin:
BatTemp=AONBatMonBatteryVoltageGet(); // 获取电压
程序中有用上面程序测试电池电压。之前用
// 使能ADC(内部 4.3VREF为参考)
adcEnableSync(ADC_REF_FIXED, ADC_SAMPLE_TIME_2P7_US, ADC_TRIGGER_MANUAL);
后面改成ADC_REF_VDDS_REL。我以为可能会出现测不准电源电压,因为参考源为VDDS,不论电压高低怎么测都是满量程。
刚刚在测试中发现没有出现这种情况,测量电压也是正常变化的。
我理解为ADC_REF_VDDS_REL或ADC_REF_FIXED应该是针对与SCS那个核才用用的。AONBatMonBatteryVoltageGet()在主核中,不受这个改变的影响。理解对吗?
,
wei xin xin:
查了下资料,AONBatMonBatteryVoltageGet(),BATMON是单独的模块,和ADC不是不同
,
Kevin Qiu1:
wei xin xin 说:AONBatMonBatteryVoltageGet(),BATMON是单独的模块,和ADC不是不同
是的,BATMON是单独的模块,可在技术参考手册中找到这部分详细说明