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.

[参考译文] CC1310:ADC 多路复用器问题 CC1310

Guru**** 2487425 points
Other Parts Discussed in Thread: CC1310

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1168432/cc1310-adc-mux-problem-cc1310

器件型号:CC1310

您好!

定制电路板上的多路复用 ADC 输入存在很大问题。

我们使用 CC1310F64RHB。

我们有3个模拟输入:

DIO_7引脚20 (工作)

DIO_10 PIN23 (不工作)

DIO_12 PIN25 (不工作)

引脚25上只有一个22k 到 GND 的电压、我可以测量0.34V 的电压。

因此、我认为有一个上拉电阻器处于活动状态。

#define ADC0 IOID_7
#define ADC1 IOID_10
#define ADC2 IOID_12

const PIN_Config GpioInitTable[]={

                                   ADC0 | PIN_INPUT_DIS | PIN_NOPULL、
                                   ADC1 | PIN_INPUT_DIS | PIN_NOPULL、
                                   ADC2 | PIN_INPUT_DIS | PIN_NOPULL、

不更改此值

软件:

uint32_t AdcReadRaw (uint8_t 通道)


   int_fast16_t res;
   uint16_t adcValue;
   uint32_t RetVal;

   ADC_PARAMS_INIT (params);
   IF (通道== CHANGE_BAT)
   {
       ADC = ADC_open (CC1310_LAUNCHXL_ADC0、NULL);
   }

   IF (通道= CHANNEL = NTC)
   {
       ADC = ADC_open (CC1310_LAUNCHXL_ADC3、空);
   }

   如果(通道=通道=通道_充电)
   {
       ADC = ADC_open (CC1310_LAUNCHXL_ADC5、空);
   }

   如果(ADC ==空)
   {
       ADC_Close (ADC);
       返回0;

   }

   RES = ADC_convert (ADC、&adcValue);

   if (res == ADC_STATUS_SUCCESS)
   {
       RetVal = ADC_convertRawToMicroVolts (ADC、adcValue);
   }
   其他
   {
   }

   ADC_Close (ADC);

   返回(RetVal);

/*
 *  =============================== ADCBuf ===============================
 */
#include <ti/drivers/ADCBuf.h>
#include <ti/drivers/adcbuf/ADCBufCC26XX.h>

ADCBufCC26XX_Object adcBufCC26xxObjects[CC1310_LAUNCHXL_ADCBUFCOUNT];

/*
 *  This table converts a virtual adc channel into a dio and internal analogue
 *  input signal. This table is necessary for the functioning of the adcBuf
 *  driver. Comment out unused entries to save flash. Dio and internal signal
 *  pairs are hardwired. Do not remap them in the table. You may reorder entire
 *  entries. The mapping of dio and internal signals is package dependent.
 */
const ADCBufCC26XX_AdcChannelLutEntry ADCBufCC26XX_adcChannelLut[CC1310_LAUNCHXL_ADCBUF0CHANNELCOUNT] = {
    {CC1310_LAUNCHXL_DIO07_ANALOG, ADC_COMPB_IN_AUXIO7},
    {CC1310_LAUNCHXL_DIO08_ANALOG, ADC_COMPB_IN_AUXIO6},
    {CC1310_LAUNCHXL_DIO09_ANALOG, ADC_COMPB_IN_AUXIO5},
    {CC1310_LAUNCHXL_DIO10_ANALOG, ADC_COMPB_IN_AUXIO4},
    {CC1310_LAUNCHXL_DIO11_ANALOG, ADC_COMPB_IN_AUXIO3},
    {CC1310_LAUNCHXL_DIO12_ANALOG, ADC_COMPB_IN_AUXIO2},
    {CC1310_LAUNCHXL_DIO13_ANALOG, ADC_COMPB_IN_AUXIO1},
    {CC1310_LAUNCHXL_DIO14_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,
       // .gpTimerUnit       = CC1310_LAUNCHXL_GPTIMER0A,
       // .gptDMAChannelMask = 1 << UDMA_CHAN_TIMER0_A,
    }
};

const ADCBuf_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 <ti/drivers/ADC.h>
#include <ti/drivers/adc/ADCCC26XX.h>

ADCCC26XX_Object adcCC26xxObjects[CC1310_LAUNCHXL_ADCCOUNT];


const ADCCC26XX_HWAttrs adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADCCOUNT] = {
    {
        .adcDIO              = CC1310_LAUNCHXL_DIO07_ANALOG,
        .adcCompBInput       = ADC_COMPB_IN_AUXIO7,
        .refSource           = ADCCC26XX_FIXED_REFERENCE,
        .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_2P7_US,
        .inputScalingEnabled = true,
        .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
        .returnAdjustedVal   = false
    },
    {
        .adcDIO              = CC1310_LAUNCHXL_DIO08_ANALOG,
        .adcCompBInput       = ADC_COMPB_IN_AUXIO6,
        .refSource           = ADCCC26XX_FIXED_REFERENCE,
        .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_2P7_US,
        .inputScalingEnabled = true,
        .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
        .returnAdjustedVal   = false
    },
    {
        .adcDIO              = CC1310_LAUNCHXL_DIO09_ANALOG,
        .adcCompBInput       = ADC_COMPB_IN_AUXIO5,
        .refSource           = ADCCC26XX_FIXED_REFERENCE,
        .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_2P7_US,
        .inputScalingEnabled = true,
        .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
        .returnAdjustedVal   = false
    },
    {
        .adcDIO              = CC1310_LAUNCHXL_DIO10_ANALOG,
        .adcCompBInput       = ADC_COMPB_IN_AUXIO4,
        .refSource           = ADCCC26XX_FIXED_REFERENCE,
        .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_2P7_US,
        .inputScalingEnabled = true,
        .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
        .returnAdjustedVal   = false
    },
    {
        .adcDIO              = CC1310_LAUNCHXL_DIO11_ANALOG,
        .adcCompBInput       = ADC_COMPB_IN_AUXIO3,
        .refSource           = ADCCC26XX_FIXED_REFERENCE,
        .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_2P7_US,
        .inputScalingEnabled = true,
        .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
        .returnAdjustedVal   = false
    },
    {
        .adcDIO              = CC1310_LAUNCHXL_DIO12_ANALOG,
        .adcCompBInput       = ADC_COMPB_IN_AUXIO2,
        .refSource           = ADCCC26XX_FIXED_REFERENCE,
        .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_2P7_US,
        .inputScalingEnabled = true,
        .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
        .returnAdjustedVal   = false
    },
    {
        .adcDIO              = CC1310_LAUNCHXL_DIO13_ANALOG,
        .adcCompBInput       = ADC_COMPB_IN_AUXIO1,
        .refSource           = ADCCC26XX_FIXED_REFERENCE,
        .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_2P7_US,
        .inputScalingEnabled = true,
        .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
        .returnAdjustedVal   = false
    },
    {
        .adcDIO              = CC1310_LAUNCHXL_DIO14_ANALOG,
        .adcCompBInput       = ADC_COMPB_IN_AUXIO0,
        .refSource           = ADCCC26XX_FIXED_REFERENCE,
        .samplingDuration    = ADCCC26XX_SAMPLING_DURATION_10P9_MS,
        .inputScalingEnabled = true,
        .triggerSource       = ADCCC26XX_TRIGGER_MANUAL,
        .returnAdjustedVal   = 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,
        .returnAdjustedVal   = 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,
        .returnAdjustedVal   = 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,
        .returnAdjustedVal   = false
    }
};

const ADC_Config ADC_config[CC1310_LAUNCHXL_ADCCOUNT] = {
    {&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC1310_LAUNCHXL_ADC0], &adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC0]},
    {&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC1310_LAUNCHXL_ADC1], &adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC1]},
    {&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC1310_LAUNCHXL_ADC2], &adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC2]},
    {&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC1310_LAUNCHXL_ADC3], &adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC3]},
    {&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC1310_LAUNCHXL_ADC4], &adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADC4]},
    {&ADCCC26XX_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]},
    {&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC1310_LAUNCHXL_ADCVSS], &adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADCVSS]},
    {&ADCCC26XX_fxnTable, &adcCC26xxObjects[CC1310_LAUNCHXL_ADCVDDS], &adcCC26xxHWAttrs[CC1310_LAUNCHXL_ADCVDDS]},
};

const uint_least8_t ADC_count = CC1310_LAUNCHXL_ADCCOUNT;

Andreas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您能否从最新的 SDK 中获取 adcSingleChannel 示例并修改它以在您的硬件上运行。 使用 DIO7和 DIODIO10、而不是 DIO23和 DIO24。

    将您修改过的示例中的所有文件发送给我、以便我可以将其与我们的示例进行比较、看看我是否可以看到它不起作用的原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们使用 NoRtos、

    所以我认为只有 tirtos 的例子…

    用于不同的封装。

    我已使用我的创建了最新的 SDK 文件

    ADC_open 到底是什么???

    它是否会在正确的条件下设置输入引脚?

    Andreas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    手册中的内容为:

    17.4.8.12.2配置 ADC 寄存器
    按照以下步骤配置 ADC 寄存器:
    1.将正确的多路复用器连接到 ADC 并将 I/O 设置为模拟模式(禁用输入和输出)
    缓冲器)。

    我该怎么做??

    我认为注册是:

    17.7.1.2 MUX1寄存器(偏移= 1h)[复位= 0h]
    17-4中显示了 MUX1、表17-23中对此进行了介绍。
    返回汇总表。
    内部。 只能通过 TI 提供的 API 使用。

    但是,此 API 的入口是什么??

    Andreas

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您不应直接访问寄存器、而应使用 ADC 驱动程序。

    驱动程序记录如下:

      SDK 中提供了 ADC.h 文件参考(TI.com)和所有源代码。

    您可以在此处获取 adcbufcontinous 的 nortos 版本:

    Adcbufcontinuous

    并按如下所示进行修改:

    #include <stdint.h>
    #include <stdio.h>
    
    /* Driver Header files */
    #include <ti/drivers/ADC.h>
    
    /* Example/Board Header files */
    #include "Board.h"
    
    
    uint16_t adcValue;
    uint32_t adcValueMicroVolt;
    
    /*
     *  ======== mainThread ========
     */
    void *mainThread(void *arg0)
    {
        ADC_Handle   adc;
        ADC_Params   params;
        int_fast16_t res;
    
        ADC_Params_init(&params);
        ADC_init();
        adc = ADC_open(CC1310_LAUNCHXL_ADC7, &params); // DIO30
    
        if (adc == NULL)
        {
            while (1);
        }
    
        res = ADC_convert(adc, &adcValue);
    
        if (res == ADC_STATUS_SUCCESS)
        {
            adcValueMicroVolt = ADC_convertRawToMicroVolts(adc, adcValue);
        }
    
        ADC_close(adc);
    }

    只需修改 5x5数据包的 CC1310_LAUNCHXL.c 文件和 Board.h 文件。

    您能否举个例子、一次测试一个 ADC 输入、同时将其接地和连接到3.3V、并查看结果是什么?

    Siri

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我发现自己的问题...

    问题在于 数字输入引脚上的输入电压(超过10k 电阻)略高于 VDD + 0.3V

    Andreas