本帖最后由 地瓜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用于控制电机转向。
图纸如下

在程序中需要先定义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);
}
以下为测试视频
视频在编辑页面能看到,发表后就没了
三、小结
从APM32F402R的数据手册来看,pwm资源非常丰富。非常适合用于PWM类调压输出,比如灯光控制,电机控制等。
推荐大家将该芯片用于项目
|