《正点原子BEE BLOCK模块资料》ATK-MB004模块使用说明

ATK-MB004模块使用说明


        1, 硬件连接

       这里以正点原子M48Z-M3最小系统板STM32F103版为例,给大家介绍一下模块和板卡的连接方法。其它板卡与模块的硬件连接方法,请大家在“ATK-MB004 寻迹模块\3,程序源码\相应板卡例程文件夹\readme.txt”路径下查看。

       循迹模块可通过杜邦线与正点原子M48Z-M3最小系统板STM32F103版进行连接,具体的连接关系,如下表所示:


表1.1循迹模块与M48Z-M3最小系统板STM32F103版连接关系


        2,实验功能


       2.1 循迹模块测试实验


       2.1.1 功能说明

       在本实验中,串口会打印循迹模块DO端输出、AO端电压转换值和检测到物体或者黑白线情况。需要查看这部分实验信息的用户,可用杜邦线将最小系统板STM32F103的PA9引脚和GND连接至外部的USB转串口设备,这样就可以通过XCOM上位机查看串口打印的信息了。

       用户还可以通过调节电位器来控制检测物体或者黑白线的阈值,检测到物体或者白线时,循迹模块上的STA灯亮;没有检测到物体或者检测到黑线时,循迹模块上的STA灯熄灭。

       开发板的LED0闪烁,提示程序运行。


       2.1.2 源码解读

       打开本实验的工程文件夹,能够在./Drivers/BSP目录下看到ATK_TRACK文件夹和ADC文件夹,其中ATK_TRACK文件夹中就包含了循迹模块的驱动文件,ADC文件夹中就包含了ADC的驱动文件如下图所示:


图2.1.2.1循迹模块驱动代码


图2.1.2.2 ADC驱动代码


       2.1.2.1循迹模块驱动

       下面简要介绍atk_track.c中几个重要的API 函数。


       1. 函数atk_track_init ()

       该函数用于初始化循迹模块,具体的代码,如下所示:

/**
 * @brief       循迹模块初始化函数
 * @param       无
 * @retval      无
 */
void atk_track_init(void)
{
    GPIO_InitTypeDef gpio_init_struct = {0};
    ATK_TRACK_DO_INPUT_GPIO_CLK_ENABLE();               /* DO时钟使能 */
 
    gpio_init_struct.Pin = ATK_TRACK_DO_INPUT_GPIO_PIN;   /* DO引脚 */
    gpio_init_struct.Mode = GPIO_MODE_INPUT;                 /* 输入 */
    gpio_init_struct.Pull = GPIO_NOPULL;                       /* 无上下拉 */
    HAL_GPIO_Init(ATK_TRACK_DO_INPUT_GPIO_PORT, &gpio_init_struct);
    adc_init();                                                  /* 初始化ADC */
}

       atk_track_init () 函数负责初始化循迹模块的DO引脚,并将其配置为无上下拉输入模式;然后调用adc_init() 函数初始化 ADC 采集通道,用于获取AO端电压转换值。


       2. 函数atk_track_adc_converted_value ()

       该函数用于获取AO端电压转换值,具体代码,如下所示:

/**
 * @brief       读取AO端电压转换值
 * @param       无
 * @retval      AO端电压转换值
 */
uint32_t atk_track_adc_converted_value(void)
{
    return adc_get_result_average(ADC_ADCX_CHY, 10);
}

       该函数通过adc_get_result_average()函数得到ADC通道的电压转换值,并做了采集10次ADC取平均值的操作,这样数据会更稳定可靠。用户可自行做拟合函数,通过测试和计算,从而得到物体与传感器的距离信息。温馨提示:传感器具有非常强的专用性,循迹模块主要用途并不是测距的,所以测距的精度会比较差。在精度要求不高的场景可以使用,大概测距范围8cm,且并非线性的。


       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)
{
    atk_track_init();                       /* 初始化寻迹模块 */
    
       while (1)
    {
        printf("循迹模块 DO端输出为:%d\r\n", ATK_TRACK_DO); 
        printf("循迹模块 AO端电压转换值为:%d\r\n", 
atk_track_adc_converted_value());
        
        if(ATK_TRACK_DO == 0)
        {
            printf("检测到物体\r\n");
        }
        else
        {
            printf("检测到黑线或者没有检测到物体\r\n");
        }
        
        printf("\r\n\r\n");
        
        LED0_TOGGLE(); /* 闪烁LED,提示系统正在运行. */
        
        delay_ms(500);
    }
}

       从上面代码可以看出,整个测试代码的逻辑相对简单。首先,初始化循迹模块后,在while循环中调用相关函数获取DO和AO端的值,并通过串口打印。然后,读取DO值来判断是否检测到物体或者黑白线,并通过串口打印。最后,LED0闪烁表示程序正常运行。


       2.1.3 实验现象

       将循迹模块按照第一节“硬件连接”中介绍的连接方式与开发板连接,并将实验代码编译烧录至开发板中。本实验使用串口输出调试信息,因此需将开发板的 PA9连接至 DAP 虚拟串口(或 USB 转 TTL 模块)的 RX引脚。完成连接后,可通过串口调试助手XCOM查看实验信息输出,如下图所示:


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


       注:其它现象请看2.1.1功能说明。


请使用浏览器的分享功能分享到微信等