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.

[参考译文] CCS/CC2640R2F:带 CC2640R2的 Lm335温度传感器

Guru**** 2519580 points
Other Parts Discussed in Thread: LM335

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/774251/ccs-cc2640r2f-lm335-temperature-sensor-with-cc2640r2

器件型号:CC2640R2F
主题中讨论的其他器件:LM335

工具/软件:Code Composer Studio

你好

我正在做一个小项目、在该项目中、我使用 CC2640R2和 LM335来测量环境温度。  

tempy =((((adcValue0 * 3.3 * 100)/4096));
Temp_final = tempy >> 10; 

但我的输出不正确。 我将 lm335连接到5V、我的测量值为  ADC 原始值:2775和 Vout= 2.98V。

我错过了什么吗?  

此致

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是否意味着您可以在 CC2640R2的输入端获得高于 VDDS 的电压、因为您是使用5V 为 LM335供电? 如果是这种情况、请修改设计。

    您是否使用 dev.ti.com/.../README.html 中用于计算电压值的相同函数? 根据您发布的代码、这有点难看到。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我将使用 adcsinglechChannel 示例。 我使用的是3.3V、但在阅读 lm335数据表后、我更改为5V。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否相应地将 R 更改为大约2000欧姆?

    您认为2.98不正确的原因是什么? 以 K 为单位的室温约为293K、这使2.98的温度高出约5摄氏度。

    LM335输出10mV/K、因此在293K 时、读数应为2.93V
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的 R 为1K。 我用较轻的重量进行了测试、但值保持不变
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您的 DVM 有什么作用?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请发布所有 ADC 相关代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    *==== adcsinglechane.c ===
    */
    #include 
    #include 
    
    /* POSIX 头文件*/
    #include 
    #include "sys/types.h"
    /*驱动程序头文件*/
    #include 
    #include 
    #include 
    
    /*示例/板头文件*/
    #include "Board.h"
    
    /* ADC 采样计数*/
    #define ADC_SAMPLE_COUNT (10)
    
    #define THREADSTACSIZE (768)
    
    /* ADC 转换结果变量*/
    uint16_t Estado;
    uint16_t adcValue0;
    uint32_t adcValue0Microuint1uint_aduint32_aduintuintuintuintuintuintuintuint16_uint1uintuintuintuintuintuintuintuintuintuintuintu_v1uintuintuintuintuintuintuint1
    
    
    
    静态 Display_Handle 显示;
    
    *==== threadFxn0 ====
    *打开 ADC 实例并从单次转换中获取采样结果。
    //
    
    void *线程 Fxn0 (void * arg0)
    {
    ADC_Handle ADC;
    ADC_Params 参数;
    int_fast16_t res;
    
    int_fast16_t tempy;
    浮质温度;
    
    
    
    ADC_PARAMS_INIT (params);
    
    while (1)
    {
    ADC = ADC_open (Board_ADC0、&params);// inicia conversão 参数通道 DIO23
    
    
    if (ADC == NULL){
    Display_printf (display、0、0、"初始化 ADC 通道0\n"时出错);
    while (1);
    }
    
    //阻塞模式转换//用户必须等待当前采样完成后再开始另一个采样。
    RES = ADC_convert (ADC、&adcValue0);
    
    
    if (res == ADC_STATUS_SUCCESS){
    
    adcValue0MicroVolt = adc_convertRawToMicroVolts (adc、adcValue0);// utiliza funcs pre definea do adc
    
    
    tempy =((((adcValue0 * 3.3 * 100)/4096));
    Temp_final = tempy >> 10;
    
    display_printf (display、0、0、"ADC channel 0原始结果:%d\n"、adcValue0);
    display_printf (display、0、0、"adc:%d\n"、resultado);
    
    display_printf (display、0、0、"Temperatura:%d\n"temperatura);
    display_printf (display、0、0、"ADC channel 0 convert result:%d uV\n"、
    adcValue0MicroVolt);
    // Estado = GPIO_Read (Board_GPIO_BUTTON0);
    
    }
    否则{
    display_printf (display、0、0、"ADC channel 0 convert failed\n");
    }
    
    adc_close (adc);//不稳定性对话
    
    
    睡眠(3);//funciona como 延迟
    }
    }
    返回(NULL);
    }
    *==== mainThread ====
    //
    void * mainThread (void * arg0)
    {
    pthread_t thread0、thread1;
    pthread_attr_t attrs;
    struct sched_param primParam;
    内部 REC;
    内部 detachState;
    
    
    /*调用驱动程序初始化函数*/
    adc_init();
    GPIO_init();
    display_init();
    
    /*打开输出的显示屏*/
    Display = Display_open (Display_Type_UART、NULL);
    if (显示== NULL)
    {
    /*无法打开显示驱动程序*/
    while (1);
    }
    
    display_printf (display、0、0、"exemplo:\n");
    //******** 秘书长的报告 inicar 领导了电子僵尸
    /*创建应用程序线程*/
    pthread_attr_init (atttrs);
    
    detachState = pthread_create_detached;
    /*设置优先级和堆栈大小属性*/
    retc = pthread_attr_setdetachstate (&attrs、detachState);
    如果(retc!= 0){
    /* pthread_attr_setdetachstate()失败*/
    while (1);
    }
    
    retc |= pthread_attr_setstacksize (&attrs、THREADSTACKSIZE);
    如果(retc!= 0){
    /* pthread_attr_setstacksize()失败*/
    while (1);
    }
    
    /*创建 threadFxn0线程*/
    priParam.sched_priority = 1;
    pthread_attr_setschedparam (&attrs、&priParam);
    
    retc = pthread_create (&thread0、&attrs、threadFxn0、NULL);
    如果(retc!= 0){
    /* pthread_create()失败*/
    while (1);
    }
    
    /*创建 threadFxn1线程*/
    // retc = pthread_create (&thread1、&attrs、threadFxn1、(void*) 0);
    // if (retc!= 0){
    /* pthread_create()失败*/
    // while (1);
    //}
    
    返回(NULL);
    } 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很抱歉,我的无知,但什么意思是 DVM?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查看您的代码:

    adcValue0MicroVolt = adc_convertRawToMicroVolts (adc、adcValue0);// utiliza funcs pre definea do adc

    tempy =(((adcValue0 * 3.3 * 100)/4096));
    temp_final = tempy >> 10;

    adcValue0MicroVolt 包含使用校准数据的 UV 值。 但是、对于计算、您使用的是未校准的 adcValue0、因此得到的结果不准确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    DVM =数字电压表。

    LM335是否自行工作?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    像这样混合浮子和 INT 也是很愚蠢的。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此,我必须使用 adcValue0来计算温度值,对吧?
    计算该值的算法必须是该值吗?


    tempy =(((adcValue0 * 3.3 * 100)/4096));
    tempfinal =(tempy-273.15)>> 10;
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我只使用浮点值来获得十进制值
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、我认为。 如果使用万用表供电、则输出为2.95/2.98V。室温约为19/20 C
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如前所述、adcValue0是未经校准的值、如果使用它、则会得到不准确的值。

    如果您提高温度(与 VDDS 相比)或只想测量室温、输入将达到多高。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这是您在 LaunchPad 上测量的值。 您是否尝试过打火机测试?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我更改了 LM335、因为我的工作不正常。 要将十进制部分添加到值中、我是否应该使用浮点变量?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我得到的最大值为3.2V 我的目标是测量5到20º C 之间的温度
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您需要浮点数或使用定点。

    您为什么要按10班制? 我想您需要在这里除以。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    因此、我需要使用:

    resultado =(adcValue0 * 3.3 * 100);
    temperatura =(resultado / 4096);
    resultado2=(temperatura -273.15);

    然后将结果分为两部分,并忘记位移?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    迪奥戈:请你向我解释你为什么这么做

    resultado =(adcValue0 * 3.3 * 100);
    temperatura =(resultado / 4096);

    当 ADC_convertRawToMicroVolts 返回以 UV 表示的值时、您可以直接使用该值吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你是对的。 使用微伏更容易。
    感谢所有帮助