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.
工具/软件: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 中进行设置。
此致、
米罗
选择了引脚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];
您将传感器连接到电路板的什么位置(哪个连接器和引脚)?
此致、
米罗
您好!
AD1EVT 可用作 ADC 1事件触发输入或 GIO (数据表中的表4-1)。 在您的情况下、您不必对其进行配置。 GIOA 和 GIOB 是 MCU GIO 模块的一部分。
尝试仅启用一个通道、然后检查您的连接。
此致、
米罗
您好!
单次转换模式下的 FIFO 大小应等于转换的通道数。
应用程序可以选择读取通道 ID 以及转换结果。 这由组模式控制寄存器的 Chid 域控制。 如果未选择读取通道 ID 的选项、则转换结果的通道 ID 字段将显示为零。
如果任何转换组被配置为连续转换模式、那么它只需要被触发一次。 在该组中选择用于转换的所有通道都将重复转换。
您可以将 RAM 奇偶校验保持未选中状态。
器件 TRM 第22章- www.ti.com/.../spnu563a.pdf 中介绍了 ADC 模块的功能
在 HALCoGen 中、您可以找到一个如何使用 ADC 模块的示例。 说明如何设置此示例的模块可在帮助-->帮助主题-->示例中找到。
此致、
米罗
在本例中、我必须选择:GIOB0、上升沿和硬件?
但是、为什么选择 GIOB0而不选择其他功能呢?
谢谢!
您好!
您可以对组1和组2使用软件触发(上图中的红色标记)或硬件触发(事件组只能由硬件触发)。 当使用软件触发时、事件和边沿设置无效。 使用硬件触发时、必须选择事件和边沿(上升或下降)。 TRM ( www.ti.com/.../spnu563a.pdf )的第22.2.1.6节介绍了如何启动转换。
在 HALCoGen 的示例中、使用了从 GIOB0触发的硬件。
此致、
米罗
您好!
对于示例、如果我配置"ADC1组1" 并且从"ADC1组1通道选择"引脚31中使用、我必须使用"事件和硬件"?
初始设置未从 ADC 引脚读取任何内容?
您好!
您是否成功使用 ADC 示例? 只需按照 HALCoGen 中的说明操作!
以下是步骤(在 HALCoGen 帮助中、图片也可用)
步骤1:
创建新项目;
步骤2:
配置驱动程序代码生成:
步骤3:
导航:-> TMS570LCxx /RM5x -> ADC
将 ADC 配置为通用
步骤4:
配置 ADC 组1:
步骤5:
配置 SCI:
导航:-> TMS570LCxx /RM5x -> ADC
步骤6:
从 hL_sys_main.c 中的指令底部复制源代码(示例文件也可以在示例文件夹中找到:./HALCoGen/examples)
此致、
米罗
e2e.ti.com/.../5430.PROIECT1.zip
我使用.zip 存档了项目
请尽快回答。
那么、问题出在哪里呢?
谢谢!
您好!
我还没有通过代码。 在我查看项目后、我将提供反馈。 同时、您能否检查您的传感器连接。
此致、
米罗
您好!
您是否已浏览过该项目??
谢谢!
如果我断开 ADC 引脚与电路板的连接、它仍会读取端子中的值。 这是不可能的、不应该是、或者我必须在代码中执行某项操作?
您好!
由于我没有 TMS570LC4357,所以我制作了一个使用 RM57L843的项目。 在该项目中、应用程序正在读取通道8。 我正在使用 HDK、在通道8处连接了热阻器。
如果您使用的是 LaunchPad、请将 cnahel 6连接到修剪器、您可以使用此通道进行测试
您可以参考此项目来配置 MCU: e2e.ti.com/.../0878.ADC_5F00_RM57L843.ZIP
此致、
米罗
您好!
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 的抛物线方程式
此致、
米罗