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

表1.1土壤湿度传感器模块与M48Z-M3最小系统板STM32F103版连接关系
2,实验功能
2.1 土壤湿度传感器模块测试实验
2.1.1 功能说明
在本实验中,串口会实时打印AO的ADC数值,并且会根据土壤湿度显示湿度百分比。需要查看这部分实验信息的用户,可用杜邦线将最小系统板STM32F103的PA9引脚和GND连接至外部的USB转串口设备,这样就可以通过XCOM上位机查看串口打印的信息了。
开发板的LED0闪烁,提示程序运行。
2.1.2 源码解读
打开本实验的工程文件夹,能够在./Drivers/BSP目录下看到ATK_SOIL_HUMIDITY文件夹和ADC文件夹,其中ATK_SOIL_HUMIDITY文件夹中就包含了土壤湿度传感器模块的驱动文件,ADC文件夹中就包含了ADC的驱动文件如下图所示:

图2.1.2.1土壤湿度传感器模块驱动代码

图2.1.2.2 ADC驱动代码
2.1.2.1土壤湿度传感器模块驱动
下面简要介绍atk_soil_humidity.c中几个重要的API 函数。
1. 函数atk_soil_humidity_init ()
该函数用于初始化土壤湿度传感器模块,具体的代码,如下所示:
/**
* @brief 土壤湿度传感器模块初始化函数
* @param 无
* @retval 无
*/
void atk_soil_humidity_init(void)
{
adc_init(); /* 初始化ADC */
}
该函数调用adc_init() 函数初始化 ADC 采集通道,用于获取AO端电压转换值。
2. 函数atk_soil_humidity_get_val ()
该函数用于获取AO端电压转换值,具体代码,如下所示:
/**
* @brief 读取土壤湿度百分比
* @param 无
* @retval 0~100:0,湿度占比最小; 100,湿度占比最大
*/
uint8_t atk_soil_humidity_get_val(void)
{
uint32_t temp_val = 0;
temp_val = adc_get_result_average(ADC_ADCX_CHY, 10); /* 读取平均值 */
temp_val /= 40;
if (temp_val > 100)temp_val = 100;
return (uint8_t)(temp_val);
}
该函数通过adc_get_result_average()函数得到ADC通道的电压转换值,并做了采集10次ADC取平均值的操作,这样数据会更稳定可靠。得到电压转换值后,除以40转换为0~100的湿度值。
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_soil_humidity_init(); /* 初始化土壤湿度传感器 */
while (1)
{
/* 获取ADC通道的转换值,10次取平均 */
adcx = adc_get_result_average(ADC_ADCX_CHY, 10);
temp = (float)adcx * (3.3 / 4096); /* 获取计算后的带小数的实际电压值 */
/* 打印AO处电压值 */
printf("土壤湿度传感器 AO模拟量:%d, 电压值:%.2fV\r\n", adcx, temp);
/* 打印土壤湿度占比 */
printf("土壤湿度占比:%d%%\r\n", atk_soil_humidity_get_val());
printf("\r\n");
delay_ms(500);
LED0_TOGGLE();
}
}
从上面代码可以看出,整个测试代码的逻辑相对简单。首先,初始化土壤湿度传感器模块后,在while循环中调用相关函数获取AO端的值,转换为电压值,并通过串口打印。然后,调用atk_soil_humidity_get_val()函数得到土壤湿度占比,并通过串口打印。最后,LED0闪烁表示程序正常运行。
2.1.3 实验现象
将土壤湿度传感器模块按照第一节“硬件连接”中介绍的连接方式与开发板连接,并将实验代码编译烧录至开发板中。本实验使用串口输出调试信息,因此需将开发板的 PA9连接至 DAP 虚拟串口(或 USB 转 TTL 模块)的 RX引脚。完成连接后,可通过串口调试助手XCOM查看实验信息输出,如下图所示:

图2.1.3.1 串口调试助手显示内容
注:其它现象请看2.1.1功能说明。