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.

CC2650采集电压的时候,发现比真实电压大了0.6V

Other Parts Discussed in Thread: CC2650

static const ADCCC26XX_HWAttrs s_adcCC26XXHWAttrs[BOARD_ADCCOUNT] =
{
{
.adcDIO = BATTERY_ADC_IO, // DIO_6
.adcCompBInput = ADC_COMPB_IN_AUXIO7,
.refSource = ADCCC26XX_FIXED_REFERENCE,
.samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
.inputScalingEnabled = true,
.triggerSource = ADCCC26XX_TRIGGER_MANUAL,
//.returnAdjustedVal = 0
},

ADCCC26XX_FIXED_REFERENCE  用的是内部参考电压1.44v

计算公式,4.3是采样倍率

VBAT = ADC_Read() / 4096.0*1.44 * 4.3;

,管脚也是对的啊,ADC_COMPB_IN_AUXIO7这个参数干嘛用的?

  • 用的4*4的芯片的IOD6 作为电压采集输入。

    这是我完整的驱动代码,调用的是adc_read

    /*********************************************************************
     * INCLUDES
     */
    #include "_hal_types.h"
    #include <ti/drivers/adc/ADCCC26XX.h>
    #include <ti/drivers/pin/PINCC26XX.h>
    #include <driverlib/aux_adc.h>
    #include <driverlib/aux_wuc.h>
    
    #include "drv_adc.h"
    
    /*********************************************************************
     * LOCAL VARIABLES
     */
    static ADCCC26XX_Object s_adcCC26XXObject[BOARD_ADCCOUNT];
    
    static const ADCCC26XX_HWAttrs s_adcCC26XXHWAttrs[BOARD_ADCCOUNT] =
    {
        {
             .adcDIO = BATTERY_ADC_IO,  // DIO_6
             .adcCompBInput = ADC_COMPB_IN_AUXIO7,
             .refSource = ADCCC26XX_FIXED_REFERENCE,
             .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
             .inputScalingEnabled = true,
             .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
             //.returnAdjustedVal = 0
        },
        {
             .adcDIO = PIN_UNASSIGNED,
             .adcCompBInput = ADC_COMPB_IN_DCOUPL,
             .refSource = ADCCC26XX_FIXED_REFERENCE,
             .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
             .inputScalingEnabled = true,
             .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
             //.returnAdjustedVal = 0
        },
        {
             .adcDIO = PIN_UNASSIGNED,
             .adcCompBInput = ADC_COMPB_IN_VSS,
             .refSource = ADCCC26XX_FIXED_REFERENCE,
             .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
             .inputScalingEnabled = true,
             .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
            //.returnAdjustedVal = 0
        },
        {
             .adcDIO = PIN_UNASSIGNED,
             .adcCompBInput = ADC_COMPB_IN_VDDS,
             .refSource = ADCCC26XX_FIXED_REFERENCE,
             .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
             .inputScalingEnabled = true,
             .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
            // .returnAdjustedVal = 0
        }
    };
    
    static const ADC_Config s_adcConfig[BOARD_ADCCOUNT] =
    {
        {
             &ADCCC26XX_fxnTable,
             &s_adcCC26XXObject[BOARD_ADCCHANNEL7],
             &s_adcCC26XXHWAttrs[BOARD_ADCCHANNEL7]
        },
        {
             &ADCCC26XX_fxnTable,
             &s_adcCC26XXObject[BOARD_ADCDCOUPL],
             &s_adcCC26XXHWAttrs[BOARD_ADCDCOUPL]
        },
        {
             &ADCCC26XX_fxnTable,
             &s_adcCC26XXObject[BOARD_ADCVSS],
             &s_adcCC26XXHWAttrs[BOARD_ADCVSS]
        },
        {
             &ADCCC26XX_fxnTable,
             &s_adcCC26XXObject[BOARD_ADCVDDS],
             &s_adcCC26XXHWAttrs[BOARD_ADCVDDS]
        },
    };
    
    // ADC句柄及参数
    static ADC_Handle s_adcHandle;
    static ADC_Params s_adcParams;
    
    /*********************************************************************
     * PUBLIC FUNCTIONS
     */
    /**
     @brief ADC的初始化函数
     @param 无
     @return 无
    */
    void ADC_Init(void)
    {
        ADC_Params_init(&s_adcParams);
        //s_adcParams.isProtected = TRUE;
        s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->closeFxn((ADC_Handle)&s_adcConfig[BOARD_ADCCHANNEL7]);
        s_adcHandle = s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->openFxn((ADC_Handle)&s_adcConfig[BOARD_ADCCHANNEL7],&s_adcParams);
    }
    
    /**
     @brief ADC读取
     @param 无
     @return 读取电压值
    */
    uint16 ADC_Read(void)
    {
        uint16 adcResult;
        s_adcConfig[BOARD_ADCCHANNEL7].fxnTablePtr->convertFxn(s_adcHandle, &adcResult);
        return adcResult;
    }
    
    /**
     @brief ADC短暂读取
     @param 无
     @return 读取电压值
    */
    uint32 Adc_OneShotRead(void)
    {
        AUXWUCClockEnable(AUX_WUC_MODCLKEN0_ANAIF_M | AUX_WUC_MODCLKEN0_AUX_ADI4_M);
        AUXADCSelectInput(ADC_COMPB_IN_AUXIO7);
        AUXADCEnableSync(AUXADC_REF_FIXED, AUXADC_SAMPLE_TIME_2P7_US, AUXADC_TRIGGER_MANUAL);
        AUXADCGenManualTrigger();
        uint32 adcValue = AUXADCReadFifo();
        AUXADCDisable();
        return adcValue;
    }
    
    /**
    @brief 关闭ADC
    @param 无
    @return 无
    */
    void ADC_Close()
    {
    	AUXADCDisable();
    }

  • 直接用ADC_convertRawToMicroVolts就好
  • ADC_COMPB是ADC比较器,具体请看这里17节:www.ti.com.cn/.../swcu117i.pdf
    你用的是哪个例程
  • 我接的是IO6 应该选哪个
  • 你腳位設置內容不大對,請你參考一下 CC2650_LAUNCHXL.c/CC2650_LAUNCHXL.h,接的是IO6的話可以把CC2650_LAUNCHXL.h的"#define Board_DIO23_ANALOG          IOID_23"改成"#define Board_DIO23_ANALOG          IOID_6"應該就可以

  • 1、我的做法:
    我用的是DIO_6和ADC_COMPB_IN_AUXIO7;
    {
    .adcDIO = BATTERY_ADC_IO, // DIO_6
    .adcCompBInput = ADC_COMPB_IN_AUXIO7,
    .refSource = ADCCC26XX_FIXED_REFERENCE,
    .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
    .inputScalingEnabled = true,
    .triggerSource = ADCCC26XX_TRIGGER_MANUAL,
    //.returnAdjustedVal = 0
    },

    2、lauchxl例程中的做法:
    const ADCCC26XX_HWAttrs adcCC26xxHWAttrs[CC2650_LAUNCHXL_ADCCOUNT] = {
    {
    .adcDIO = Board_DIO23_ANALOG,
    .adcCompBInput = ADC_COMPB_IN_AUXIO7,
    .refSource = ADCCC26XX_FIXED_REFERENCE,
    .samplingDuration = ADCCC26XX_SAMPLING_DURATION_2P7_US,
    .inputScalingEnabled = true,
    .triggerSource = ADCCC26XX_TRIGGER_MANUAL
    },

    按照你的意思,Board_DIO23_ANALOG改成DIO_6,ADC_COMPB_IN_AUXIO7不用变就行?

    总结:
    1中我的做法,和你说的2中的做法是一致的啊。
  • 是的、Board_DIO23_ANALOG改成DIO_6,ADC_COMPB_IN_AUXIO7不用变就行
  • 参考电压是1.44么,我的程序和例程配置一样的啊。

  • 参考电压是4.3V

  • 参考电压不是FIXED么,144v啊,数据表上写的啊。

    我的电压是3.2V,读取出的adc原始值是3100附近,而且两个电路板采样电阻都不一样,读出的原始值差不多
  • ADC driver預設的參考電壓是4.3V,你可以參考一下 的討論,所以 4.3x3100/4096=3.25439453125,基本上你讀值是對的

  • 但是ADC的采样点是从电池2分之一分压过来的啊,一计算电池电压6.4V
  • 你要不要先用power supply輸入不同電壓到ADC的采样点,先測試看看能不能正確讀取電壓
  • 嗯这个可以试一下

    那ADCCC26XX_FIXED_REFERENCE 这个参考电压到底是1.44V呢还是4.1V?
  • 手册里面一个1.44,一个4.3,怎么选的

  • TI driver裡面用的是4.3V