ATK-MB002模块使用说明
1,硬件连接
这里以正点原子M48Z-M3最小系统板STM32F103版为例,给大家介绍一下模块和板卡的连接方法。其它板卡与模块的硬件连接方法,请大家在“ATK-MB002热敏传感器模块\3,程序源码\相应板卡例程文件夹\readme.txt”路径下查看。
热敏传感器模块可通过杜邦线与正点原子M48Z-M3最小系统板STM32F103版进行连接,具体的连接关系,如下表所示:

2,实验功能
2.1 热敏传感器模块测试实验
2.1.1 功能说明
在本实验中,串口会打印热敏电阻传感器模块DO端输出、AO端电压转换值和温度值。需要查看这部分实验信息的用户,可用杜邦线将最小系统板STM32F103的PA9引脚和GND连接至外部的USB转串口设备,这样就可以通过XCOM上位机查看串口打印的信息了。
用户还可以通过调节电位器来控制温度阈值。当检测到的温度超过阈值时,DO输出低电平,模块指示灯STA点亮;当检测到的温度低于阈值时,DO输出高电平,模块指示灯STA熄灭。同时,通过开发板的ADC采集AO引脚的模拟信号,用于计算温度值。
开发板的LED0闪烁,提示程序运行。
2.1.2 源码解读
打开本实验的工程文件夹,能够在./Drivers/BSP目录下看到ATK_NTC文件夹,和ADC文件夹,其中ATK_NTC文件夹中就包含了热敏传感器模块的驱动文件,ADC文件夹中就包含了ADC的驱动文件如下图所示:

图2.1.2.1热敏传感器模块驱动代码

图2.1.2.2 ADC驱动代码
2.1.2.1 热敏传感器模块驱动
下面将简要介绍atk_ntc.c中几个重要的API 函数。
1. 函数atk_ntc_init()
该函数用于初始化热敏传感器模块,具体的代码,如下所示:
/**
* @brief 热敏传感器模块初始化函数
* @param 无
* @retval 无
*/
void atk_ntc_init(void)
{
GPIO_InitTypeDef gpio_init_struct;
ATK_NTC_DO_GPIO_CLK_ENABLE(); /* DO时钟使能 */
gpio_init_struct.Pin = ATK_NTC_DO_GPIO_PIN; /* DO引脚 */
gpio_init_struct.Mode = GPIO_MODE_INPUT; /* 输入 */
gpio_init_struct.Pull = GPIO_NOPULL; /* 无上下拉 */
HAL_GPIO_Init(ATK_NTC_DO_GPIO_PORT, &gpio_init_struct);
adc_init(); /* 初始化ADC */
}
从上述代码可以看出,atk_ntc_init() 函数负责初始化 热敏传感器模块的 DO 引脚,并将其配置为无上下拉输入;然后调用adc_init() 函数初始化 ADC 采集通道,用于获取AO端电压转换值。
2. 函数atk_ntc_get_temp()
该函数主要实现计算并获取热敏传感器的温度值。函数atk_ntc_get_temp ()的具体代码,如下所示:
/**
* @brief 计算温度值
* @param para: 温度采集对应ADC通道的值(已滤波)
* @note 计算温度分为两步:
1.根据ADC采集到的值计算当前对应的Rb
2.根据Rb计算对应的温度值
* @retval 温度值
*/
float atk_ntc_get_temp(uint16_t para)
{
float Rb;
float temp;
float v1, v2;
v1 = (para * 3.3f / 4096.0f); /* 热敏电阻的分压 */
v2 = 3.3f - v1; /* 得到上拉电阻10K的分压 */
Rb = v1 / (v2 / 10000.0f); /* 计算出热敏电阻的阻值 */
temp = Ra/Rb;
temp = log(temp); /* ln(Ra/Rb) */
temp /= Bx; /* ln(Ra/Rb)/B */
temp = (1.0f / Ta) - temp;
temp = 1.0f / temp;
temp -= Ka; /* 转成摄氏度 */
return temp;
}
atk_ntc_get_temp() 函数用于计算并获取热敏电阻的温度值。该函数通过读取热敏电阻的模拟电压值,结合NTC热敏电阻的特性,精确地计算出当前环境的温度。有关计算公式的详细信息,可参考热敏电阻的数据手册。
2.1.2.2 ADC驱动
在图2.1.2.2中,adc.c 和 adc.h 为 ADC 驱动文件,包含了 ADC通道的初始化,并实现了多次采样与滤波等功能。我们就是使用其中的adc_get_result_average()函数来获取AO端电压转换值的。关于ADC的驱动介绍,请查看正点原子各个开发板对应的开发指南中ADC章节。
2.1.2.3 实验测试代码
实验的测试代码为文件 demo.c,在工程目录下的 User 子目录中。测试代码的入口函数为 demo_run(),具体的代码,如下所示:
/**
* @brief 例程演示入口函数
* @param 无
* @retval 无
*/
void demo_run(void)
{
uint16_t adcx;
float temp;
atk_ntc_init(); /* 初始化热敏传感器 */
while (1)
{
/* 获取热敏电阻的模拟值 */
adcx = adc_get_result_average(ADC_ADCX_CHY, 10);
/* 获取计算后的带小数的实际电压值,比如3.1111 */
temp = (float)adcx * (3.3 / 4096);
/* 打印AO处电压值 */
printf("热敏电阻传感器 AO模拟量:%d, 电压值:%.2fV\r\n", adcx, temp);
/* 打印温度值 */
printf("NTC温度值:%.2f℃\r\n", atk_ntc_get_temp(adcx));
/* 温度超过预设阈值时的操作 */
if(ATK_NTC_DO == GPIO_PIN_RESET)
{
printf("温度超过阈值!\r\n");
}else
{
printf("温度未超过阈值!\r\n");
}
printf("\r\n");
delay_ms(500);
LED0_TOGGLE();
}
}
从上面代码可以看出,整个测试代码的逻辑相对简单。首先,初始化传感器后,在while循环中调用相关函数获取DO和AO端的值,并通过串口打印。然后,通过atk_ntc_get_temp函数获取热敏传感器的温度值, 并通过串口打印。最后,LED0的闪烁表示程序正常运行。
2.1.3 实验现象
将热敏传感器模块按照第一节“硬件连接”中介绍的连接方式与开发板连接,并将实验代码编译烧录至开发板中,本实验使用串口输出调试信息,因此需将开发板的 PA9连接至 DAP 虚拟串口(或 USB 转 TTL 模块)的 RX引脚。完成连接后,可通过串口调试助手查看实验信息输出,如下图所示:

图2.1.3.2 串口调试助手显示内容