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:CC2650中的 ADC

Guru**** 2394395 points
Other Parts Discussed in Thread: SYSBIOS, CC2650, LM35, CC2640R2F

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/876190/cc2650-adc-in-cc2650

器件型号:CC2650
Thread 中讨论的其他器件: SYSBIOSCC2640R2F

大家好、团队成员

非常感谢您的回复、很抱歉您的回复很晚、

我正在尝试使用 CC2650 和 DS600+实现 ADC 概念、但 对此我有一些疑问  

/*
*版权所有(c) 2016、德州仪器(TI)公司
*保留所有权利。
*
*以源代码和二进制形式重新分发和使用、有无
*如果满足以下条件、则允许进行修改
符合*:
*
**源代码的重新分发必须保留上述版权
*注意、此条件列表和以下免责声明。
*
**二进制形式的再发行必须复制上述版权
*请注意、中的此条件列表和以下免责声明
*随分发提供的文档和/或其他材料。
*
**德州仪器公司的名称和名称均不相同
*其贡献者可用于认可或推广衍生产品
*未经特定的事先书面许可。
*
*本软件由版权所有者和贡献者"按原样"提供
*以及任何明示或暗示的保证、包括但不限于:
*特定适销性和适用性的隐含保证
*不承认目的。 在任何情况下、版权所有者不得或
*派遣国应对任何直接、间接、偶然、特殊、
*典型或必然的损害(包括但不限于
*采购替代货物或服务;丧失使用、数据或利润;
*或业务中断)、无论原因是什么以及任何责任理论、
*无论是合同、严格责任还是侵权行为(包括疏忽或)
*否则)因使用本软件而以任何方式产生、
*即使被告知可能会发生此类损坏。
*

/*
*==== adcsinglechane.c ===
*
/* XDCtools 头文件*/

#include
#include

/* BIOS 头文件*/
#include <ti/sysbios/BIOS.h>
#include <ti/sysbios/knl/Task.h>

/*驱动程序头文件*/
#include
#IF 定义(CC2650DK_7ID)||定义(CC1310DK_7xD)
#include
#endif

/*示例/板头文件*/
#include "Board.h"

#define ADC_CONV_MIN_VAL 1200
#define ADC_CONV_MAX_VAL 4095
#define COLOW_TEMP_MIN 2500
#define COLOW_TEMP_MAX 3500
#define ADC_celcius_CONV_const 509

/* ADC 采样数*/
#define ADC_SAMPLE_COUNT (10)

/*特定于任务的定义*/
#define TASKSTACKSIZE (768)

Task_Structtask0Struct;
char task0stack[TASKSTACKSIZE];

/*引脚驱动器手柄*/
静态 PIN_Handle 按钮 PinHandle;
/* PIN_Config 表的全局存储器*/
静态 PIN_STATE 按钮 PinState;

//温度传感器相关变量声明
/* ADC 转换结果变量*/
uint16_t adcValue1[50]={0};
const float ADC_conv_volT_const = 0.293040;
const float ADC_cel_conv_const = 6.45;
无符号长整型电压= 0;
float cel = 0;
int g_Celsius [50]={0};
/*
*应用按钮引脚配置表:
*-按钮中断配置为在下降沿触发。
*
PIN_Config buttonPinTable[]={Board_DIO21 | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、PIN_TERMINATE};


/*
*==== taskFxn1 ===
*打开一个 ADC 句柄,然后获取一组采样结果
*调用多个转换。
*
void taskFxn0 (void)

/* ADC 引脚的电路板初始化*/
Board_initadc();
ADC_Handle ADC;
ADC_Params 参数;
int_fast16_t res;

char currVal = 0;
字符 I = 0;
//清除缓冲区
对于(i = 0;i<50;i++)

G_Celsius [i]= 0;
adcValue1[i]= 0;


PIN_setOutputValue (buttonPinHandle、Board_DIO21、currVal);//温度传感器处于活动状态
ADC_PARAMS_INIT (params);
ADC = ADC_open (Board_ADC0、params);


如果(ADC ==空)

System_abort ("初始化 ADC 通道1\n"\n 时出错);

其他

system_printf ("ADC 通道1已初始化\n"\});


ADC_Close (ADC);

/*
*==== main ====
*
int main (空)

Task_Params taskParams;

/*呼叫板初始化函数*/
Board_initGeneral();

buttonPinHandle = PIN_OPEN (buttonPinState、buttonPinTable);
if (!buttonPinHandle){
System_abort ("初始化按钮引脚时出错\n");

/*创建任务*/
Task_Params_init (&taskParams);
taskParams.STACKSIZE = TASKSTACKSIZE;
taskParams.stack =_task0Stack;
Task_construct(&task0Struct,(Task_FuncPtr) taskFxn0、&taskParams、NULL);

/* SysMin 仅在您调用 flush 或 exit 时才会打印到控制台*/
system_flush();

BIOS_start();

返回(0);

这是我在这里的代码、我在 RES = ADC_convert (ADC、&adcValue1[i])中没有得到准确的结果;但是我正在正确获得 adcValue1、您能给我提供帮助吗? 我非常热情地学习它

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

    您好 、santhosh prem、

      您认为 res 中的结果不准确、但 adcValue1中的结果正确意味着什么?

    您是否已获得传感器数据表的认可?

    https://www.mouser.com/datasheet/2/256/DS600-370326.pdf

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

    您还应检查返回值:

    int_fast16_t res;
    uint_fast16_t adcValue;
    
    res = adc_convert (adc、&adcValue);
    if (res = adc_status_Success){
    //使用 adcValue
    } 

    文件://C:/ti/tirtos_cc13xx_cc26xx_2_21_01_08/products/tidrivers_cc13xx_cc26xx_2_21_01_01/docs/doxygen/html/_a_d_c_8h.html #afcac5582b8be42a7740091d150aef05c

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

    您好、Erik、

    非常感谢您的回复、

    我已经尝试过、但其中没有返回值、在 ds600中、只有两个引脚在 cc2650中连接、一个是 Vout 和 SD。 我已将 SD 与 DIO21连接、另一个引脚与 DIO24连接。它是模拟引脚、但我得到了返回值? 我不知道您为什么能帮助我

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

    单独测试它们。

    使用已知值测试 ADC。 TI 驱动器和传感器控制器都有单独的 ADC 示例:

    C:\ti_tirtos_cc13xx_cc26xx_2_21_01_08\examples\TI\CC2650_LAUNCHXL\adcsinglechaChannel

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

    您还可以在网上找到 ADC 示例、网址 为 dev.ti.com/.../node

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

    大家好、

    非常感谢您的回复、现在 ADC 工作正常、但它在基准电压4.3下工作、但我需要1.44基准电压、但您能否考虑它是否正确

     

    /*
    *版权所有(c) 2016、德州仪器(TI)公司
    *保留所有权利。
    *
    *以源代码和二进制形式重新分发和使用、有无
    *如果满足以下条件、则允许进行修改
    符合*:
    *
    **源代码的重新分发必须保留上述版权
    *注意、此条件列表和以下免责声明。
    *
    **二进制形式的再发行必须复制上述版权
    *请注意、中的此条件列表和以下免责声明
    *随分发提供的文档和/或其他材料。
    *
    **德州仪器公司的名称和名称均不相同
    *其贡献者可用于认可或推广衍生产品
    *未经特定的事先书面许可。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *以及任何明示或暗示的保证、包括但不限于:
    *特定适销性和适用性的隐含保证
    *不承认目的。 在任何情况下、版权所有者不得或
    *派遣国应对任何直接、间接、偶然、特殊、
    *典型或必然的损害(包括但不限于
    *采购替代货物或服务;丧失使用、数据或利润;
    *或业务中断)、无论原因是什么以及任何责任理论、
    *无论是合同、严格责任还是侵权行为(包括疏忽或)
    *否则)因使用本软件而以任何方式产生、
    *即使被告知可能会发生此类损坏。
    *

    /*
    *==== display.c ======
    *
    /* XDCtools 头文件*/
    //#include "ti-lib.h"
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    #include
    /* BIOS 头文件*/
    #include
    #include
    #include
    /* TI-RTOS 头文件*/
    #include
    #include
    #include
    /*板头文件*/
    #include "Board.h"

    /* GrLib 图像示例*/
    #include "splash_image.h"

    #define TASKSTACKSIZE 768

    Task_Structtask0Struct;
    char task0stack[TASKSTACKSIZE];

    /*引脚驱动器手柄*/
    静态 PIN_Handle ledPinHandle;
    静态 PIN_STATE ledPinState;
    静态 PIN_STATE 按钮 PinState;
    静态 PIN_Handle 按钮 PinHandle;
    /*
    *应用 LED 引脚配置表:
    *-所有 LED 板 LED 均熄灭。
    *
    //PIN_Config buttonPinTable[]={Board_DIO24_ANALOG | PIN_GPIO_OUTP_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、PIN_TERMINATE};

    //PIN_Config buttonPinTable[]={Board_DIO24_ANALOG | PIN_INPUT_EN | PIN_GPIO_HIGH | PIN_PushPull | PIN_DRVSTR_MAX、PIN_TERMINATE};
    /*
    *==== taskFxn ====
    *切换 Board_LED0。 Task_sleep 由 arg0确定、而 arg0是由哪个值决定的
    *已针对心跳任务实例进行配置。
    *
    uint_fast16_t single_sample = 0;
    内部执行温度;
    #define ADC_CONV_MIN_VAL 4300/1440
    #define ADC_CONV_MAX_VAL 4095
    //温度传感器相关变量声明
    unsigned long volt = 0;
    float cel=0;
    int g_Celsius = 0;
    unsigned char g_TempHigh;
    unsigned char g_TempLow;
    const float ADC_conv_volT_const = 0.293040;
    const float ADC_cel_conv_const = 6.45;
    int Celsius =0;
    //ti_lib_io_io_port_pull_set (Board_IOID_DIO24、IOC_NO_IOPULL)
    /*
    *
    *==== main ====
    *
    int i;
    int main (空)

    AUXVCClockEnable (AUX_WuC_ADI_CLOCK | AUX_WuC_ANAIF_CLOCK | AUX_WuC_MODCLKEN0_AUX_ADI4_M);
    AUXADCselectInput (ADC_COMPB_IN_AUXIO7);

    AUXADCDisableInputScale();//I 也尝试了这种方法,但禁用了缩放功能,因此基准电压将被视为1.44v,但它不起作用  
    AUXADCEnableSync (AUXADC_REF_FIXED、AUXADC_SAMPLE_TIME_2P7_US、AUXADC_TRIGGER_MANUAL);
    power_setConstraint (PowerCC26XX_SB_disallow);
    AUXADCGenManualTrigger ();
    SINGLE_SAMPLE = AUXADCReadFifo ();
    VOLT = SINGLE_SAMPLE * ADC_CONV_MIN_VAL/ADC_CONV_MAX_VAL;
    CEL =((volte-509)/adc_cel_conv_const);
    CEL +=2;在实际测量中添加了//2 cel 以校准 LM35测量值
    CEL *= 100;//乘以100以在转换为整数时保持2个小数点
    G_Celsius =(int) cel;//向下转换为整数以通过 BLE 发送
    BIOS_start();
    返回(0);

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

    禁用 TI-RTOS 驱动程序缩放的正确方法是调整  位于板级配置文件(CC2640R2_LAUNCHXL.c)中的 adcCC26xxHWAttrs 中的 inputScaling Enabled 变量。  

    警告:  

    请注意、当禁用输入调节时、会应用不同的输入最大额定值、并且超出这些值可能会损坏器件。

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

    您好、Erik、  

    非常感谢您的回复、

    我对此有一些想法  

    .adcDIO = Board_DIO23_ANALOG、
    .adcCompBInput = ADC_COMPB_IN_AUXIO7、
    refSource = ADCCC26XX_VDDS_reference、
    .samplingDuration = ADCCC26XX_SAMPLING_DURAY_2P7_US、
    .inputScalingEnabled = false、//true、
    triggerSource = ADCCC26XX_TRIGGER_MANUAL

    我们需要使用这两个函数  

    AUXADCDisable ();
     AUXADCDisableInputScale();

    如果我们使用上述 false / true 来禁用输入缩放

    当我们使用1.44v 基准电压时、微控制器中给出的近似电压是多少。 可以建议我吗?

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

    1.使用 TI-RTOS 驱动程序时、不应使用 driverlib 调用。 驱动程序将使用 driverlib、应用程序应仅使用驱动程序。

    2.数据载于数据表和用户指南。 如果施加高于基准的输入电压、则可能会损坏 ADC 和/或芯片的部件。 通常、我们不建议任何人禁用输入调节、除非您对可能的输入电压电平具有绝对控制能力。

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

    您好、eirik、

    非常感谢您的回复、我有一些想法

    当我阅读用户指南时、我发现 ADC 中有三个基准电压

    1) 1)我为我的传感器(VDD)提供5V 电压我已设置固定电压4.3、它工作正常

    2) 2)我为我的传感器(VDD)提供了3.3、我已经设置  了 VDDS、它工作正常

    3) 3)我需要将1.44设置为基准电压、因此当我阅读用户指南时、他们说您需要禁用输入缩放、正如您说过的、我在输入缩放中禁用了 true/false

    您能不能说我们为什么使用输入缩放、您对此有什么想法?

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

    您好!

    输入缩放将保护输入免受损坏、因为当输入高于基准电压时、内部电路可能会损坏。 内部基准将保持不变、但由于输入被向下调节、由于比例因子、它看起来为4.3V。

    如果您的外部传感器/器件由3伏电压供电、这些器件的输出电压电平是否可能高于1.44V?

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

    您好、eirik、

    非常感谢您的患者回复、您能否提供1.44v 的参考电压的任何示例代码、因此它将更有用、请提供任何示例代码。

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

    CC2650的示例已经存在:

    C:\ti_tirtos_cc13xx_cc26xx_2_21_01_08\examples\TI\CC2650_LAUNCHXL\adcsinglechaChannel

    这里是 CC2640R2F:

    http://dev.ti.com/tirex/explore/node?node=AEci1l.IYgauB29UR6LoxQ__krol.2c__LATEST 

    和 Sensor Controller Studio for CC26xx 中。

    只需更改基准电压、然后在硬件中必须小心、以确保输入电压不会超过最大输入额定值。

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

    您好、Erik、

    非常感谢您的回复、如果我将基准电压设置为1.44v、那么应该提供什么输入电压? 最大额定输入电压是多少?

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

    如果您将基准电压设置为1.44v、则输入电压应介于1.48V 和0V 之间。

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

    您好、yikai、

    最后、我得到了这方面的答案、因此当您设置基准电压1.44时、您应该为 cc2650提供1.44v。 非常感谢您的回复

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

    我是说 ADC 引脚的输入电压应介于1.48V 和0V 之间。 要为 CC2650供电、我假设您仍需要使用3V 或3.3V。