Thread 中讨论的其他器件:CC1310
工具与软件:
RES = ADC_CONVERT (ADC、&adcValue0);
adcValue0MicroVolt = ADC_convertRawToMicroVolts (ADC、adcValue0);
能否使用 ADC 的增益和失调参数来校正误差?
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.
工具与软件:
RES = ADC_CONVERT (ADC、&adcValue0);
adcValue0MicroVolt = ADC_convertRawToMicroVolts (ADC、adcValue0);
能否使用 ADC 的增益和失调参数来校正误差?
当在 SDK 中使用 ADC 驱动器时、您已经在使用存储在 FCFG1中的增益/偏移补偿因子。
另请参阅以下文章、了解可能导致阅读错误的内容。
(+) CC1310:如何校准 ADC 基准电压-低于1GHz 论坛-低于1GHz - TI E2E 支持论坛
Siri
我想以4*4 1310的 DIO9引脚作为 ADC 输入来测量 VDDS 连接电池电压、该如何设置它? 以下是我的代码。
/*具有模拟功能的数字音箱*/
#define CC1310_LAUNCHXL_DIO23_ANALOG IOID_9// IOID_23
#define CC1310_LAUNCHXL_DIO24_ANALOG IOID_24
#define CC1310_LAUNCHXL_DIO25_ANALOG IOID_25
#define CC1310_LAUNCHXL_DIO26_ANALOG IOID_26
#define CC1310_LAUNCHXL_DIO27_ANALOG IOID_27
#define CC1310_LAUNCHXL_DIO28_ANALOG IOID_28
#define CC1310_LAUNCHXL_DIO29_ANALOG IOID_29
#define CC1310_LAUNCHXL_DIO30_ANALOG IOID_30
#include "ADC.h"
#include "GPIO.h"
/*
*================== ADCBuf============
*/
#include
#include
ADCBufCC26XX_Object adcBufCC26xxObjects[CC1310_LAUNCHXL_ADCBUFCOUNT];
/*
*此表将虚拟 ADC 信道转换为 DIO 和内部模拟
*输入信号。 该表是 adcBuf 的运行所必需的
*驱动程序。 注释掉未使用的条目以保存闪存。 DIO 和内部信号
*对是硬接线的。 请勿在表中重新映射它们。 您可以在整个系列中再次订购
*条目。 DIO 和内部信号的映射取决于封装。
*/
const ADCBufCC26XX_AdcChannelLutEntry ADCBufCC26XX_adcChannelLut[CC1310_LAUNCHXL_ADCBUF0CHANNELCOUNT]={
{CC1310_LAUNCHXL_DIO23_ANALOG、ADC_COMPB_IN_AUXIO3}、//ADC_COMPB_IN_AUXIO7
{CC1310_LAUNCHXL_DIO24_ANALOG、ADC_COMPB_IN_AUXIO6}、
{CC1310_LAUNCHXL_DIO25_ANALOG、ADC_COMPB_IN_AUXIO5}、
{CC1310_LAUNCHXL_DIO26_ANALOG、ADC_COMPB_IN_AUXIO4}、
{CC1310_LAUNCHXL_DIO27_ANALOG、ADC_COMPB_IN_AUXIO3}、
{CC1310_LAUNCHXL_DIO28_ANALOG、ADC_COMPB_IN_AUXIO2}、
{CC1310_LAUNCHXL_DIO29_ANALOG、ADC_COMPB_IN_AUXIO1}、
{CC1310_LAUNCHXL_DIO30_ANALOG、ADC_COMPB_IN_AUXIO0}、
{PIN_UNASSIGNED、ADC_COMPB_IN_VDDS}、
{PIN_UNASSIGNED、ADC_COMPB_IN_DCOUPL}、
{PIN_UNASSIGNED、ADC_COMPB_IN_VSS}、
};
CONST ADCBufCC26XX_HWAttrs adcBufCC26xxHWAttrs[CC1310_LAUNCHXL_ADCBUFCOUNT]={
{
.intPriority =~0、
.swiPriority = 0、
.adcChannelLut = ADCBufCC26XX_adcChannelLut、
}
};
CONST ADC Buf_Config ADCBuf_CONFIG[CC1310_LAUNCHXL_ADCBUFCOUNT]={
{
&ADCBufCC26XX_fxnTable、
&adcBufCC26xxObjects[CC1310_LAUNCHXL_ADCBUF0]、
&adcBufCC26xxHWAttrs[CC1310_LAUNCHXL_ADCBUF0]
}、
};
const uint_least8_t ADCBuf_count = CC1310_LAUNCHXL_ADCBUFCOUNT;
/*
*================== ADC =为您的客户提供支持
*/
#include
#include
ADCCC26XX_Object adcCC26xxObjects[CC1310_LAUNCHXL_ADCCOUNT];
CONST ADCCC26XX_HWAttrs adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADCCOUNT]={
{
.adcDIO = CC1310_LAUNCHXL_DIO23_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO3、//ADC_COMPB_IN_AUXIO7
.refSource = ADCCC26XX_VDDS_REFERENCE、//ADCCC26XX_FIXED_REFERENCE ADCC26XX_VDDS_REFERENCE
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = CC1310_LAUNCHXL_DIO24_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO6、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = CC1310_LAUNCHXL_DIO25_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO5、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = CC1310_LAUNCHXL_DIO26_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO4、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = CC1310_LAUNCHXL_DIO27_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO3、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = CC1310_LAUNCHXL_DIO28_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO2、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = CC1310_LAUNCHXL_DIO29_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO1、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = CC1310_LAUNCHXL_DIO30_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO0、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_10P9_MS、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = PIN_UNASSIGNED、
.adcCompBInput = ADC_COMPB_IN_DCOUPL、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = PIN_UNASSIGNED、
.adcCompBInput = ADC_COMPB_IN_VSS、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
{
.adcDIO = PIN_UNASSIGNED、
.adcCompBInput = ADC_COMPB_IN_VDDS、
.refSource = ADCCC26XX_FIXED_REFERENCE、
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}
};
CONST ADC_Config ADC_CONFIG[CC1310_LAUNCHXL_ADCCOUNT]={
{&ADCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADC0]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC0]}、
{&ADCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADC1]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC1]}、
{&ADCCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADC2]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC2]}、
{&ADCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADC3]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC3]}、
{&ADCCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADC4]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC4]}、
{&ADCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADC5]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC5]}、
{&ADCCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADC6]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC6]}、
{&ADCCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADC7]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC7]}、
{&ADCCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADCDCOUPL]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADCDCOUPL]}、
{&ADCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADCVSS]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADCVSS]}、
{&ADCC26XX_fxnTable、&adcCC26xxObjects[CC1310_LAUNCHXL_ADCVDDS]、&adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADCVDDS]}、
};
const uint_least8_t ADC_count = CC1310_LAUNCHXL_ADCCOUNT;
uint8_t ADC_GetVol (void)
{
#define USE_ADC
#ifdef USE_ADC
ADC_Handle ADC;
ADC_Params 参数;
uint8_t i=0;
int_fast16_t res;
uint32_t adcValue0MicroVolt;
uint16_t adcValue0=0;
uint32_t adcValue=0;
uint8_t bat_vol=0;
static uint8_t last_batvol=0;记录上次电量档位、防止电量档位跳变 μ s
悬空 Vbat=0.00;
浮点 Vbat1=0.00;
adc_init();
adc_params_init (¶ms);
ADC = ADC_open (0、¶ms);//DIO7
if (adc == NULL){
while (1);
}
/*阻塞模式转换*/
for (i=0;i<5;i++)
{
RES = ADC_CONVERT (ADC、&adcValue0);
vbat += 3.60*adcValue0/4096.0;
// Vbat1+=(ADC_convertRawToMicroVolts (ADC、adcValue0)/1000000.0);
}
// Vbat1 =(float) Vbat1/5.0;
VBAT=2.0*(float) Vbat/5.0;
如果(res == ADC_STATUS_SUCCESS){
// adcValue0MicroVolt = ADC_convertRawToMicroVolts (ADC、adcValue0);
// Vbat=2.0*(float) adcValue0MicroVolt/1000000.0;换算电池电压 μ s
ADC_Close (ADC);
for (i=0;i<5;i++)
{
如果(Vbat>= BAT_LEVEL[i])
{
bat_vol=5-i;
if (bat_vol>last_batvol)//防止电量临界值导致档位跳变
{
bat_vol=last_batvol;
}
last_batvol=bat_vol;
休息;
}
}
IF (Vbat<2.04) 0格电量 μ V
{
bat_vol=0;
last_batvol=bat_vol;
}
返回 bat_vol;
}
ADC_Close (ADC);
返回0;
}
在这篇文章中有很多事情要做,所以*我有点不确定你实际上需要什么帮助。
问题是您无法读取 DIO9上的电压、还是能够读取但读出的值不正确?
如果第二种情况是 DIO0、您输入的电压是多少、您正在测量的值是多少?
您不必执行任何操作、只需获得电压:
res = ADC_convert(adc, &adcValue0);
if (res == ADC_STATUS_SUCCESS)
{
adcValue0MicroVolt = ADC_convertRawToMicroVolts(adc, adcValue0);
}
关于参考:
/*!
* @brief Specifies whether the internal reference of the ADC is sourced from the battery voltage or a fixed internal source.
*
* - In practice, using the internal fixed voltage reference sets the upper range of the ADC to a fixed value. That value is 4.3V with
* input scaling enabled and ~1.4785V with input scaling disabled. In this mode, the output is a function of the input voltage multiplied
* by the resolution in alternatives (not bits) divided by the upper voltage range of the ADC. Output = Input (V) * 2^12 / (ADC range (V))
*
* - Using VDDS as a reference scales the upper range of the ADC with the battery voltage. As the battery depletes and its voltage drops, so does
* the range of the ADC. This is helpful when measuring signals that are generated relative to the battery voltage. In this mode, the output is
* a function of the input voltage multiplied by the resolution in alternatives (not bits) divided by VDDS multiplied by a scaling factor derived
* from the input scaling. Output = Input (V) * 2^12 / (VDDS (V) * Scaling factor), where the scaling factor is ~1.4785/4.3 for input scaling
* disabled and 1 for input scaling enabled.
*
* @note The actual reference values are slightly different for each device and are higher than the values specified above. This gain is saved in
* the FCFG. The function ::ADC_convertToMicroVolts() must be used to derive actual voltage values. Do not attempt to compare raw values
* between devices or derive a voltage from them yourself. The results of doing so will only be approximately correct.
*
* @warning Even though the upper voltage range of the ADC is 4.3 volts in fixed mode with input scaling enabled, the input should never exceed
* VDDS as per the data sheet.
*/
typedef enum ADCCC26XX_Reference_Source {
ADCCC26XX_FIXED_REFERENCE = AUXADC_REF_FIXED,
ADCCC26XX_VDDS_REFERENCE = AUXADC_REF_VDDS_REL
} ADCCC26XX_Reference_Source;
Siri
电路板的输入电压范围为0V 至3.6V、在电阻分压器之后 ADC 引脚采集电压的范围为0V 至1.8V、并且选择 VDDS 作为基准电压。
从引脚测得的电压为1.77V、ADC 值为2070、使用 API 计算2.22V、使用公式计算1.81V
adc_init();
adc_params_init (¶ms);
ADC = ADC_open (0、¶ms);//DIO7
if (adc == NULL){
while (1);
}
/*阻塞模式转换*/
for (i=0;i<5;i++)
{
RES = ADC_CONVERT (ADC、&adcValue0);
vbat += 3.6*adcValue0/4096.0;
Vbat1+=(ADC_convertRawToMicroVolts (ADC、adcValue0)/1000000.0);
}
Vbat1 =(float) Vbat1/5.0;
VBAT =(float) Vbat/5.0;
CONST ADCCC26XX_HWAttrs adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADCCOUNT]={
{
.adcDIO = CC1310_LAUNCHXL_DIO23_ANALOG、
.adcCompBInput = ADC_COMPB_IN_AUXIO3、//ADC_COMPB_IN_AUXIO7
.refSource = ADCCC26XX_VDDS_REFERENCE、//ADCCC26XX_FIXED_REFERENCE ADCC26XX_VDDS_REFERENCE
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US、
.inputScalingEnabled = true、
.triggerSource = ADCCC26XX_TRIGGER_MANUAL
.returnAdjustdVal = false
}、
即使要更改器件、也不必更改 API 中的任何内容。
您只应进行模拟引脚的重映射、不进行任何其他操作。
其余代码应保留为您已在 LP 上测试过的代码。
请查看下列关于应进行哪些更改的历史记录:
(+) LAUNCHXL-CC1310:将 ADC 从示例代码重新映射到新封装-低于1GHz 论坛-低于1GHz - TI E2E 支持论坛
完成更改后、按照与 yuo 测试 DIO23完全相同的方式测试其中一个模拟输入、以查看您可以重现结果。
由于我没有此封装的任何硬件、因此很遗憾我无法为您进行任何测试。
Siri