[活动] [APM32F402R Micro-EVB评测] + 直流电机控制

[复制链接]
地瓜patch 发表于 2025-8-9 21:47 | 显示全部楼层 |阅读模式
本帖最后由 地瓜patch 于 2025-8-23 11:00 编辑
一、APM32F402R的pwm资源
APM32F402R内置 2 个 16 位高级定时器(TMR1/8)、4 个通用定时器(TMR2/3/4/5)、
1 个独立看门狗定时器、一个窗口看门狗定时器和 1 个系统滴答定时器。

4 个通用定时器(TMR2/3/4/5)可用于产生 PWM 输出。2 个 16 位高级定时器(TMR1/8)具有带死区插入的互补 PWM 输出。

二、控制实现
直流电机PWM(脉宽调制)调速是一种通过调节占空比来控制电机转速的常用方法。

PWM调速原理
  • 占空比(Duty Cycle):指一个周期内高电平时间与总周期的比值(如50%占空比表示高电平占一半时间)。
  • 等效电压:电机感知的电压为平均电压(Vavg=Vcc×占空比Vavg​=Vcc​×占空比,占空比越大,转速越高。
  • 频率选择:通常使用1kHz~20kHz(避免可闻噪声,同时减少开关损耗)。


在本次测试中直流电机驱动用L293D实现,其中APM32F402的PA1用于读取板载按键状态,PA2/3用于控制电机转向。

图纸如下
4846368a68c6f2e519.png

在程序中需要先定义TMR3,将PWM的输出定义到channel1上

void TMR_Config(uint16_t value)
{
    TMR_BaseConfig_T tmrBaseConfig;
    TMR_OCConfig_T tmrOCConfig;

    RCM_EnableAPB1PeriphClock(RCM_APB1_PERIPH_TMR3);

    /* TMR1 clock source frequency = 120MHz */
    tmrBaseConfig.countMode = TMR_COUNTER_MODE_UP;
    tmrBaseConfig.clockDivision = TMR_CLOCK_DIV_1;
    tmrBaseConfig.period = 100;
    tmrBaseConfig.division = 119;
    tmrBaseConfig.repetitionCounter = 0;
    TMR_ConfigTimeBase(TMR3, &tmrBaseConfig);

    /* 50% PWM */
    tmrOCConfig.mode = TMR_OC_MODE_PWM1;
    tmrOCConfig.outputState = TMR_OC_STATE_ENABLE;
    tmrOCConfig.outputNState = TMR_OC_NSTATE_DISABLE;
    tmrOCConfig.polarity = TMR_OC_POLARITY_HIGH;
    tmrOCConfig.nPolarity = TMR_OC_NPOLARITY_HIGH;
    tmrOCConfig.idleState = TMR_OC_IDLE_STATE_RESET;
    tmrOCConfig.nIdleState = TMR_OC_NIDLE_STATE_RESET;
               
                tmrOCConfig.pulse = value;
    TMR_ConfigOC1(TMR3, &tmrOCConfig);

    TMR_EnablePWMOutputs(TMR3);
    TMR_Enable(TMR3);
}


定义PA1为输入,用于读取板载key状态;PA2/3定义为输出,用于控制电机转动方向

程序如下


void TMR_GPIO_Config(void)
{
    GPIO_Config_T gpioConfig;

    RCM_EnableAPB2PeriphClock(RCM_APB2_PERIPH_GPIOA);

    gpioConfig.speed = GPIO_SPEED_50MHz;
    gpioConfig.mode = GPIO_MODE_AF_PP;
    gpioConfig.pin = GPIO_PIN_6;
    GPIO_Config(GPIOA, &gpioConfig);

    gpioConfig.speed = GPIO_SPEED_50MHz;
    gpioConfig.mode = GPIO_MODE_OUT_PP;
    gpioConfig.pin = GPIO_PIN_2|GPIO_PIN_3;
    GPIO_Config(GPIOA, &gpioConfig);        
        
    gpioConfig.speed = GPIO_SPEED_50MHz;
    gpioConfig.mode = GPIO_MODE_IN_FLOATING;
    gpioConfig.pin = GPIO_PIN_1;
    GPIO_Config(GPIOA, &gpioConfig);        
}


以下为测试视频
783768a92e88a6379.png 2947768a92eabb3503.png
7982268a92e47773ba.png 4100868a92e652cd39.png





视频在编辑页面能看到,发表后就没了


三、小结

从APM32F402R的数据手册来看,pwm资源非常丰富。非常适合用于PWM类调压输出,比如灯光控制,电机控制等。
推荐大家将该芯片用于项目





Gfan 发表于 2025-8-9 21:15 来自手机 | 显示全部楼层
对滴~402板子还是很适合用于各种项目
海洋凝视 发表于 2025-8-15 10:15 | 显示全部楼层
这颗小板还搭载了USB功能。也非常优秀
神秘低语 发表于 2025-8-25 19:08 | 显示全部楼层
PWM是控制了电流吗?
话说,楼主还给小电机配置了一个减速器吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

1813

主题

14867

帖子

29

粉丝
快速回复 在线客服 返回列表 返回顶部