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/TMS570LC4357:ADC 结果转换为摄氏度

Guru**** 1639260 points
Other Parts Discussed in Thread: LM35, HALCOGEN, TMS570LC4357, RM57L843, LMT86
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/831167/ccs-tms570lc4357-adc-result-convert-to-celsius-degree

器件型号:TMS570LC4357
主题中讨论的其他器件:LM35HALCOGENRM57L843LMT86

工具/软件:Code Composer Studio

如何将从 ADC 接收到的结果转换为摄氏度。 

ADC 输入配置为12位、具有内部参考。

我使用 LM35 DZ 温度传感器。

int main (空)

//uint32 volte_const;
//uint32温度;

unsigned int volte_const;
无符号 int 温度;
unsigned int NumberOfChars2;
unsigned int NumberOfChars3;
unsigned int NumberOfChars1;
unsigned int NumberOfChars4;
unsigned int value1;


canInit();
sciInit();
adcInit();

adcData_t adc_data;//adc 数据结构
adcData_t * adc_data_ptr =&adc_data;//adc 数据指针

while (1)

adcStartConversion (adcREG1、adcGROUP1);//开始 ADC 转换
while (!adcIsConversionComplete (adcREG1、adcGROUP1));//等待 ADC 转换
adcGetData (adcREG1、1U、adc_data_ptr);//将转换存储到 ADC 指针
Value1 =(unsigned int) adc_data_ptr ->值;
NumberOfChars1 = ltoa (value1、(char *) adcread);
volte_const =(value1*3.3)/4096*1000;
温度= VOLTGE_CONST/10;


NumberOfChars2=ltoa (volte_const、(char *)电压);
NumberOfChars3=ltoa (temperature、(char *) temp);
NumberOfChars4=getNumberOfDigit ((int) value1);

/*CAN*/
canTransmit (canREG1、canMESSAGE_BOX1、(const uint8 *)& temp);
canTransmit (canREG2、canMESSAGE_BOX2、(const uint8 *)& voltage);
canTransmit (canREG3、canMESSAGE_box3、(const uint8 *)& adcread);


//sciSend (sciREG1、NumberOfChars1、(uint8 *) adcread);
sciSend (sciREG1、NumberOfChars1、(uint8 *) adcread);
sciSend (sciREG1、1、"");
sciSend (sciREG1、12、"温度:");
printf ("");
sciSend (sciREG1、NumberOfChars3、(uint8 *) temp);
sciSend (sciREG1、3、"°C");
sciSend (sciREG1、1、"");
sciSend (sciREG1、8、"电压:");
sciSend (sciREG1、NumberOfChars2、(uint8 *)&voltage);
printf ("");
sciSend (sciREG1、4、"[mV]");
sciSend (sciREG1、2、"\n"r);
printf ("");
sciSend (sciREG1、1、"");
sciSend (sciREG1、NumberOfChars4、(uint8 *)&value1);
sciSend (sciREG1、7、"value1:");



从 ADC 接收到的值例如252、不知道哪一项是 等效的摄氏度。

我尝试以下公式:" volte_const =(value1*3.3)/4096*1000; ", 答案不正确。

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

    您好!

    12位模式下的 ADC 分辨率为 VREFHI/4096伏或(VREFHI*1000)/4096伏(mV)

    根据 LM35数据表、输出为线性10mV/°C

    那么 Temperature=ADC 读数*((VREFHI*1000)/4096.0)/10)

    例如:

    VREFHI 为3.3V、ADC 读数为300

    温度将为24.16摄氏度

    此致、
    米罗

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

    使用这些公式、传感器上的温度不会降低、但不会升高。 为什么?  

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

    您好!

    请检查 ADC 读数是否发生变化。 如果它们未更改、请验证 ADC 设置。 您可以参阅 HALCoGen ( HALCoGen->help->help topics->examples ->example_adcDisplay.c)中的示例。 在此示例中、ADC 是硬件触发的、在您的情况下、ADC 应该是软件触发的。 这可以在"ADC1组1"选项卡的 HALCoGen 中进行设置。

    此致、
    米罗

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

    这些是 HalCoGen 中的设置。

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

    您好!

    我看不到任何启用的通道。 您应将传感器连接到 ADC 引脚并在"ADC1组通道选择"中启用该引脚

    此致、
    米罗

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    选择了引脚29和30。 
    我仍然不明白为什么它不起作用。 

    "adcStartConversion (adcREG1、adcGROUP1);//开始 ADC 转换
    while (!adcIsConversionComplete (adcREG1、adcGROUP1));//等待 ADC 转换
    adcGetData (adcREG1、1、adc_data_ptr);//将转换存储到 ADC 指针
    Value1 =(unsigned int) adc_data_ptr ->值;
    NumberOfChars1 = ltoa (value1、(char *) adcread);
    VOLTGE_CONST =(Value1*3.3*1000)/4096.0;
    //温度= VOLTGE_CONST/10;
    温度=(((value1*3.3*1000)/4096.0)/10);"


    这是根据您的公式我的代码。

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

    为什么从端子中的电路中移除传感器时仍然显示值?  保留​​您生成的值!

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

    如果在 HalCoGen 中、我在"ADC1组通道选择"中选择了两个引脚、正如我从它们正在读取的内容中看到的那样、我应该在代码中写入什么?

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

    您好!

    如果您使用2个通道、则需要 adcData_t ADC_DATA[2];

    您将传感器连接到电路板的什么位置(哪个连接器和引脚)?

    此致、
    米罗

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

    我不知道是否必须在 ADC1端口中选择某个器件、是否必须在 GIO 端口 A SI 端口 B 中选择某个器件?

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

    您好!

    AD1EVT 可用作 ADC 1事件触发输入或 GIO (数据表中的表4-1)。 在您的情况下、您不必对其进行配置。 GIOA 和 GIOB 是 MCU GIO 模块的一部分。

    尝试仅启用一个通道、然后检查您的连接。

    此致、
    米罗

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

    此处应选择 RAM 奇偶校验使能? 我在 YouTube 上找不到如何为 Can.

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

    在这里、我必须选择"Enable channel id in conversion results"或"enable continuous conversion "? 还是什么都不做?

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

    您好!

    单次转换模式下的 FIFO 大小应等于转换的通道数。

    应用程序可以选择读取通道 ID 以及转换结果。 这由组模式控制寄存器的 Chid 域控制。 如果未选择读取通道 ID 的选项、则转换结果的通道 ID 字段将显示为零。

    如果任何转换组被配置为连续转换模式、那么它只需要被触发一次。 在该组中选择用于转换的所有通道都将重复转换。

    您可以将 RAM 奇偶校验保持未选中状态。

    器件 TRM 第22章- www.ti.com/.../spnu563a.pdf 中介绍了 ADC 模块的功能

    在 HALCoGen 中、您可以找到一个如何使用 ADC 模块的示例。 说明如何设置此示例的模块可在帮助-->帮助主题-->示例中找到。

    此致、
    米罗

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

    在这里、我有几个选项可供选择。 在"备用触发器"保持"事件"?

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

    您好!

    以下内容来自数据表:

    如 TRM 中所述:

    在 HALCoGen 中、您可以选择触发 ADC 转换的硬件事件。

    默认情况下、ADC 是软件触发的。 使用 SW 触发(图片中的红色标记)时、此设置不重要:

    我建议您从 HALCoGen 中的示例开始。 在本示例中、使用硬件触发(GIOB0触发转换)。

    此致、
    米罗

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

    我看不到图像!

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

    在本例中、我必须选择:GIOB0、上升沿和硬件?

    但是、为什么选择 GIOB0而不选择其他功能呢?

    谢谢!

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

    我是否选择其他东西而不是"事件"??

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

    你告诉我两件相互矛盾的信息!

    要了解什么?

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

    您好!

    您可以对组1和组2使用软件触发(上图中的红色标记)或硬件触发(事件组只能由硬件触发)。 当使用软件触发时、事件和边沿设置无效。 使用硬件触发时、必须选择事件和边沿(上升或下降)。 TRM ( www.ti.com/.../spnu563a.pdf )的第22.2.1.6节介绍了如何启动转换。

    在 HALCoGen 的示例中、使用了从 GIOB0触发的硬件。

    此致、
    米罗

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

    您好!

    对于示例、如果我配置"ADC1组1" 并且从"ADC1组1通道选择"引脚31中使用、我必须使用"事件和硬件"?  

    初始设置未从 ADC 引脚读取任何内容?

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

    在这里、我必须选择什么吗?

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

    我不知道这里是否针对 TX 项目、中断 TX INT 和 RX 项目、中断 RX 初始化?

    谢谢!

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

    您好!

    您是否成功使用 ADC 示例? 只需按照 HALCoGen 中的说明操作!

    以下是步骤(在 HALCoGen 帮助中、图片也可用)

    步骤1:

    创建新项目;

    步骤2:

    配置驱动程序代码生成:

    • 启用 GIO 驱动程序
    • 启用 SCI 驱动程序
    • 启用 ADC 驱动器
    • 禁用其他

    步骤3:

    导航:-> TMS570LCxx /RM5x -> ADC

    将 ADC 配置为通用

    步骤4:

    配置 ADC 组1:

    • 将 ADC 组1的"硬件触发"源配置为"上升沿"上的"GIOB0"
    • 启用 ADC1组1通道选择引脚0和引脚1

    步骤5:

    配置 SCI:

    • 将 SCI 波特率配置为9600

    导航:-> TMS570LCxx /RM5x -> ADC

    步骤6:

    从 hL_sys_main.c 中的指令底部复制源代码(示例文件也可以在示例文件夹中找到:./HALCoGen/examples)

    此致、
    米罗

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

        使用这些公式、它将显示:

     

    什么是错误????

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

    您好!

    您确定 ADC 采集了正确的信号吗?

    您的 ADC 值是多少?

    此致、
    米罗

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

    我认为 Value1是从 ADC 读取的值。

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

    您好!

    如果可能、请附加您的项目(HALCoGen 和 CCS)、以便我查看。

    此致、
    米罗

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

    e2e.ti.com/.../5430.PROIECT1.zip

    我使用.zip 存档了项目

    请尽快回答。

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

    那么、问题出在哪里呢?

    谢谢!

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

    那么、问题出在哪里呢?

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

    您好!

    我还没有通过代码。 在我查看项目后、我将提供反馈。 同时、您能否检查您的传感器连接。

    此致、
    米罗

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

    您好!  

    您是否已浏览过该项目??

    谢谢!

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

    e2e.ti.com/.../7774.PROIECT1.zip

    这是项目。

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

    如果我断开 ADC 引脚与电路板的连接、它仍会读取端子中的值。 这是不可能的、不应该是、或者我必须在代码中执行某项操作?

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

    您好!

    由于我没有 TMS570LC4357,所以我制作了一个使用 RM57L843的项目。 在该项目中、应用程序正在读取通道8。 我正在使用 HDK、在通道8处连接了热阻器。

    如果您使用的是 LaunchPad、请将 cnahel 6连接到修剪器、您可以使用此通道进行测试

    您可以参考此项目来配置 MCU: e2e.ti.com/.../0878.ADC_5F00_RM57L843.ZIP

    此致、
    米罗

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

    通道6表示 J9上的引脚6?

    我需要 ADC 的引脚、J9上的引脚为:29、30、31。 否?  

    而在 Halcogen 中、通道最多仅为31个。

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

    您好!

    LaunchPad 上 ADC1 (AD1IN_6)的通道6暴露在连接器 J9的引脚48上!

    此致、
    米罗

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

    那么、我应该为 J9上的 ADC 引脚选择哪个通道?

    我是从 ADC1组通道中选择的、J9上引脚31的通道31是错误的?

    通道的数量与 J9、ADC 上的数字不同?

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

    因此、我从 ADC 引脚读取的值是可以的、但温度有问题、它保持恒定、当我尝试加热传感器时不会增加。

    为什么?

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

    您好!

    请看一下您在上面展示的图片。

    AD1IN_31在 J9引脚37上外露。

    此致、
    米罗

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

    通道31是板载引脚37吗?

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

    因此、我从 ADC 引脚读取的值是可以的、但温度有问题、它保持恒定、当我尝试加热传感器时不会增加。

    为什么?  

    公式温度不好..如何计算其他参数?

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

    您好!

    您能回答我最后的问题吗?

    谢谢!

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

    您好!

    从悬空引脚读取会导致不可预知的值。

    如果 ADC 值随温度的变化而增加或减少、则检查公式中数据类型之间的转换、以将 ADC 值转换为温度。

    此致、
    米罗

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

    您好!

     我更改传感器 LMT86。

    温度的公式是什么?它是如何工作的???

    谢谢!

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

    您好!

     我更改传感器 LMT86。

    温度的公式是什么?它是如何工作的???

    谢谢!

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

    您好!

    传感器 LMT86处的温度和电压公式是什么?它是如何工作的???

    谢谢!

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

    您好!

    在第8.3节(LMT86数据表: www.ti.com/.../lmt86.pdf )中,您将找到详细的 LMT86传输表以及 抛物线方程,该方程可根据 Vtmp (mV)计算 T。

    方程式2解出 T 的抛物线方程式

    此致、
    米罗