ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《正点原子BEE BLOCK模块资料》ATK-MB023模块使用说明

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

原创 嵌入式/内核开发 作者:正点原子 时间:2025-04-22 09:39:57 0 删除 编辑

ATK-MB023模块使用说明


        1, 硬件连接

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

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


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


        2,实验功能


       2.1 小风扇模块测试实验


       2.1.1 功能说明

       在本实验中,串口会打印实验提示信息。需要查看这部分实验信息的用户,可用杜邦线将最小系统板STM32F103的PA9引脚和GND连接至外部的USB转串口设备,这样就可以通过XCOM上位机查看串口打印的信息了。

       小风扇控制方法:当按下KEY0反转加速,按下WKUP正转加速。

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


       2.1.2 源码解读

       打开本实验的工程文件夹,能够在./Drivers/BSP目录下看到ATK_FAN文件夹和TIM文件夹,其中ATK_FAN文件夹中就包含了小风扇模块的驱动文件,TIM文件夹中就包含了定时器的驱动文件如下图所示:


图2.1.2.1小风扇模块驱动代码


图2.1.2.2 定时器驱动代码


       2.1.2.1小风扇模块驱动

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


       1. 函数atk_fan_init ()

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

/**
 * @brief       风扇模块初始化函数
 * @param       无
 * @retval      无
 */
void atk_fan_init(void)
{
    atim_timx_cplm_pwm_init(50 - 1, 72 - 1); /* 1Mhz的计数频率,20Khz的PWM */ 
    atk_fan_stop();
}

       该函数调用atim_timx_cplm_pwm_init () 函数初始化定时器相关通道,用于输出互补的PWM。


       2. 函数atk_fan_stop ()

       该函数用于停止电机转动,具体代码,如下所示:

/**
 * @brief       电机停止
 * @param       无
 * @retval      无
 */
void atk_fan_stop(void)
{
/* 关闭主通道输出 */
HAL_TIM_PWM_Stop(&g_timx_cplm_pwm_handle, TIM_CHANNEL_1);  
/* 关闭互补通道输出 */
    HAL_TIMEx_PWMN_Stop(&g_timx_cplm_pwm_handle, TIM_CHANNEL_1);   
}

       该函数通过HAL_TIM_PWM_Stop ()和HAL_TIMEx_PWMN_Stop()函数停止主通道和互补通道的输出。


       3. 函数atk_fan_dir ()

       该函数用于控制电机旋转方向,具体代码,如下所示:

/**
 * @brief       电机旋转方向设置
 * @param       para:方向 0正转,1反转
 * @note        以电机正面,顺时针方向旋转为正转
 * @retval      无
 */
void atk_fan_dir(uint8_t para)
{
    /* 关闭主通道输出 */
HAL_TIM_PWM_Stop(&g_timx_cplm_pwm_handle, TIM_CHANNEL_1);      
/* 关闭互补通道输出 */
    HAL_TIMEx_PWMN_Stop(&g_timx_cplm_pwm_handle, TIM_CHANNEL_1);   
 
    if (para == 0)       /* 正转 */
{
  /* 开启主通道输出 */
        HAL_TIM_PWM_Start(&g_timx_cplm_pwm_handle, TIM_CHANNEL_1);   
    } 
    else if (para == 1)  /* 反转 */
{
/* 开启互补通道输出 */
        HAL_TIMEx_PWMN_Start(&g_timx_cplm_pwm_handle, TIM_CHANNEL_1);  
    }
}

       该函数可控制电机正转或者反转。


       4. 函数atk_fan_set_speed ()

       该函数用于控制电机转动速度,具体代码,如下所示:

/**
 * @brief       电机速度设置
 * @param       para:比较寄存器值
 * @retval      无
 */
void atk_fan_set_speed(uint16_t para)
{
    if (para < (__HAL_TIM_GetAutoreload(&g_timx_cplm_pwm_handle)))  /* 限速 */
    {  
        __HAL_TIM_SetCompare(&g_timx_cplm_pwm_handle, TIM_CHANNEL_1, para);
    }
}

       该函数通过控制PWM的占空比实现控制电机转动速度。


       5. 函数atk_fan_pwm_set ()

       该函数用于控制电机转动,具体代码,如下所示:

/**
 * @brief       电机控制
 * @param       para: pwm比较值 ,正数电机为正转,负数为反转
 * @note        根据传入的参数控制电机的转向和速度
 * @retval      无
 */
void atk_fan_pwm_set(float para)
{
    int val = (int)para;
 
    if (val >= 0) 
    {
        atk_fan_dir(0);           /* 正转 */
        atk_fan_set_speed(val);
    } 
    else 
    {
        atk_fan_dir(1);           /* 反转 */
        atk_fan_set_speed(-val);
    }
}

       该函数可控制电机正反转,以及转动速度。


       2.1.2.2 定时器驱动

       在图2.1.2.2中,atim.c 和 atim.h 为 定时器驱动文件,包含了定时器通道的初始化,并初始化定时器互补输出功能。关于定时器互补通道输出的驱动介绍,请查看正点原子各个开发板对应的开发指南中高级定时器章节。


       2.1.2.3 实验测试代码

       实验的测试代码在demo.c文件中,该文件在工程根目录下的 User文件夹。测试代码的入口函数为 demo_run(),具体的代码,如下所示:

#define MAX_SPEED   50          /* 限制比较值 即最大速度 */
 
/**
 * @brief       例程演示入口函数
 * @param       无
 * @retval      无
 */
void demo_run(void)
{
    uint8_t key, t;
    int32_t pwm_val = 0;
    
    key_init();                  /* 初始化按键 */
    atk_fan_init();             /* 初始化风扇模块 */
    
    while (1)
    {
        key = key_scan(1);      /* 支持连按,效果更顺滑 */
        if(key == KEY0_PRES)    /* 减速 */
        {
            pwm_val -= 1;
            if(pwm_val <= -MAX_SPEED)
            {
                pwm_val = -MAX_SPEED;
            }
            atk_fan_pwm_set(pwm_val);
        }
        else if(key == WKUP_PRES)               /* 加速 */
        {
            pwm_val += 1;
            if(pwm_val >= MAX_SPEED)
            {
                pwm_val = MAX_SPEED;
            }
            atk_fan_pwm_set(pwm_val);
        }
        
        delay_ms(10);
        t++;
        if(t % 50 == 0)
        {
            t = 0;
            LED0_TOGGLE();
        }
    }
}

       从上面代码可以看出,整个测试代码的逻辑相对简单。首先,初始化小风扇模块后,在while循环中调用按键扫描函数,通过键值控制电机正反转和转速。最后,LED0闪烁表示程序正常运行。


       2.1.3 实验现象

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


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


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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3081985/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    765833