ZHCACA8 February 2023 MSPM0G1105 , MSPM0G1106 , MSPM0G1107 , MSPM0G1505 , MSPM0G1506 , MSPM0G1507 , MSPM0G3105 , MSPM0G3106 , MSPM0G3107 , MSPM0G3505 , MSPM0G3506 , MSPM0G3507 , MSPM0L1105 , MSPM0L1106 , MSPM0L1303 , MSPM0L1304 , MSPM0L1305 , MSPM0L1306 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346
该子系统使用与正温度系数 (PTC) 热敏电阻 (TMP61) 串联的电阻器构成分压器,从而产生随温度呈线性变化的输出电压。通过在缓冲器配置中设置 MSPM0 内部运算放大器并使用 ADC 进行采样来读取该外部电路。如果测量到温度升高,RGB LED 将变为红色;如果温度降低,LED 将变为蓝色;如果温度没有显著变化,LED 将保持绿色。本文档不详细介绍如何根据 ADC 读数计算温度值,因为此类计算取决于所选的热敏电阻。在此处下载代码示例。
图 1 显示了该子系统的功能图。
该应用需要集成的 OPA、ADC、计时器和 I/O 引脚。
子块功能 | 使用的外设 | 说明 |
---|---|---|
缓冲放大器 |
(1 个)OPA |
在代码中称为 Thermistor_OPA_INST |
模拟信号捕获 | (1 个)ADC12 | 在代码中称为 ADC_INST |
ADC 采样计时器 | (1 个)TIMERx | 在代码中称为 Thermistor_TIMER_ADC |
RGB LED 控制 | (3 个)I/O 引脚 | 在代码中称为 RGB_RED_PIN、RGB_BLUE_PIN 和 RGB_GREEN_PIN |
根据表 1 中的要求,该示例与表 2 中的器件兼容。相应的 EVM 可用于原型设计。
兼容器件 | EVM |
---|---|
MSPM0L13xx | LP-MSPM0L1306 |
MSPM0G35xx、MSPM0G15xx | LP-MSPM0G3507 |
该应用利用 TI 系统配置工具 (SysConfig) 图形界面来生成器件外设的配置代码。使用图形界面配置器件外设可简化应用原型设计过程。
可以在 Thermistor_Example.c 文件的 main() 的开头找到图 2 中所述内容的代码。
该应用不直接计算温度,而是寻找温度变化。以下代码片段包含一个值 CHANGEFACTOR,该值用于在识别温度变化之前确定 ADC 值的最小变化量。
#include"ti_msp_dl_config.h"
#include<math.h>
#define CHANGEFACTOR 10
volatileuint16_tgThermistorADCResult = 0;
volatileboolgCheckThermistor = false;
以下代码片段显示了在何处添加热敏电阻的温度计算方法以计算实际温度值。当前代码采用启动时的初始读数 (gInitial_reading),并将当前读数 (gCelcius_reading) 与 CHANGEFACTOR 调整进行比较,以查看温度是升高、降低还是无明显变化。然后,RGB LED 根据比较结果分别变为红色(升高)、蓝色(降低)或绿色(无变化)。
while (1) {
while (gCheckThermistor == false) {
__WFE();
}
//Insert Thermistor Algorithm
gCelcius_reading = gThermistorADCResult;
if (first_reading) {
gInitial_reading = gCelcius_reading;
first_reading = false;
}
/*
* Change in LEDs is based on current sample compared to previous sample
*
* If the new sample is warmer than CHANGEFACTOR from initial temp, turn LED red
* If the new sample is colder than CHANGEFACTOR from initial temp, turn LED blue
* Else, keep LED green
* Variable gAlivecheck is utilized for debug window to confirm code is executing.
* It is not needed in final applications.
*
*/
gAlivecheck++;
if(gAlivecheck >= 0xFFF0){gAlivecheck =0;}
if (gCelcius_reading - CHANGEFACTOR > gInitial_reading) {
DL_GPIO_clearPins(
RGB_PORT, (RGB_GREEN_PIN | RGB_BLUE_PIN));
DL_GPIO_setPins(RGB_PORT, RGB_RED_PIN);
} else if (gCelcius_reading < gInitial_reading - CHANGEFACTOR) {
DL_GPIO_clearPins(
RGB_PORT, (RGB_RED_PIN | RGB_BLUE_PIN));
DL_GPIO_setPins(RGB_PORT, RGB_BLUE_PIN);
} else {
DL_GPIO_clearPins(
RGB_PORT, (RGB_RED_PIN | RGB_BLUE_PIN));
DL_GPIO_setPins(RGB_PORT, RGB_GREEN_PIN);
}
gCheckThermistor = false;
__WFI();
}