基于STM32单片机直流电机控制加减速正反转系统设计
本文设计了一个基于STM32单片机的直流电机控制系统,可实现电机的正反转、8档调速及停止功能。系统采用STM32F103C8T6作为主控,配合L298N电机驱动模块,通过PWM信号调节转速。硬件设计包括最小系统、驱动电路、按键输入和电源模块;软件部分采用模块化编程,包含按键检测、PWM输出和电机控制等功能。系统具有功能全面、扩展性强等特点,适用于教学实验和自动化控制场景,为复杂电机控制开发奠定了基
1 系统功能介绍
本设计的题目是 基于 STM32 单片机直流电机控制加减速正反转系统设计。直流电机作为工业控制、机器人、汽车电子及智能设备中应用广泛的执行部件,其转速、转向与启停的精确控制是现代电子控制系统的重要组成部分。
本系统由 STM32F103C8T6 单片机核心板 + L298N 电机驱动模块 + 按键控制电路 + 电源电路 组成。通过按键实现对电机的正转、反转、加速、减速以及停止控制。为了满足不同速度需求,系统设计了 8 个挡位,用户可通过按键在挡位间切换,实现电机的平滑加速与减速,同时具备可靠的正反转控制逻辑。
系统的主要功能总结如下:
- 正转控制:用户按下正转按键,电机朝顺时针方向转动。
- 反转控制:用户按下反转按键,电机朝逆时针方向转动。
- 加速功能:通过加速按键逐步提高电机转速,共设置 8 个速度挡位。
- 减速功能:通过减速按键逐步降低转速,最低为停止状态。
- 停止功能:通过停止按键,立即停止电机运行。
该系统在嵌入式控制课程设计、智能小车、实验教学以及自动化设备控制中都有较高的应用价值。
2 系统电路设计
电路设计采用模块化思路,主要由 STM32 最小系统、L298N 电机驱动电路、按键输入电路以及电源模块组成。
2.1 STM32 最小系统电路
STM32F103C8T6 单片机作为系统的核心,负责按键扫描、速度逻辑运算、PWM 占空比输出及驱动信号控制。
- 主频:最高可达 72MHz,保证运算和控制的实时性;
- 时钟电路:8MHz 外部晶振,内部 PLL 倍频;
- 复位电路:电容、电阻复位电路,保证上电初始化正确;
- PWM 输出:STM32 的定时器模块可输出高精度 PWM 信号,用于电机转速控制。
2.2 L298N 电机驱动电路
L298N 是一种双 H 桥电机驱动芯片,能够驱动直流电机的正转和反转。
- 输入控制:通过 IN1、IN2 控制电机的方向(正转/反转);
- PWM 输入:通过 ENA 引脚输入 PWM 信号调节电机转速;
- 输出电流能力:可达 2A,适合小功率直流电机。
- 保护功能:自带二极管保护电路,防止电机反电动势损坏驱动芯片。
在本设计中,STM32 的 PWM 信号接至 L298N 的 ENA,引脚 IN1、IN2 分别接 GPIO 口,用于正反转逻辑控制。
2.3 按键电路
系统设有五个功能按键:
- 正转键:控制电机顺时针旋转;
- 反转键:控制电机逆时针旋转;
- 加速键:每次按下速度提高一个挡位;
- 减速键:每次按下速度降低一个挡位;
- 停止键:立即停止电机转动。
按键采用下拉电阻设计,避免悬空误触发,并在软件中进行消抖处理。
2.4 电源电路
电源模块为整个系统提供稳定的电压:
- 单片机供电:3.3V 稳压电源,采用 AMS1117 稳压芯片;
- 电机驱动供电:5V~12V,根据电机额定电压选择;
- 滤波电容:在电源输入端添加电解电容与陶瓷电容,保证电源稳定,减少电机干扰。
3 程序设计
系统软件分为以下几个部分:主程序、按键检测程序、PWM 控制程序、电机方向控制程序以及速度逻辑管理程序。
3.1 主程序框架
#include "stm32f10x.h"
#include "motor.h"
#include "key.h"
int main(void)
{
Motor_Init();
Key_Init();
Motor_Stop(); // 上电默认停止
while(1)
{
Key_Scan(); // 检测按键
Motor_Update(); // 根据状态更新电机
}
}
3.2 电机初始化与控制程序
int speedLevel = 0; // 挡位,范围0~8
int direction = 0; // 0:停止, 1:正转, -1:反转
void Motor_Init(void)
{
// GPIO 配置 IN1, IN2
// PWM 配置 ENA
}
void Motor_SetSpeed(int level)
{
if(level < 0) level = 0;
if(level > 8) level = 8;
int duty = level * 12; // 每档增加12%占空比
TIM_SetCompare1(TIM2, duty);
speedLevel = level;
}
void Motor_SetDirection(int dir)
{
if(dir == 1)
{
GPIO_SetBits(GPIOA, GPIO_Pin_0);
GPIO_ResetBits(GPIOA, GPIO_Pin_1);
}
else if(dir == -1)
{
GPIO_ResetBits(GPIOA, GPIO_Pin_0);
GPIO_SetBits(GPIOA, GPIO_Pin_1);
}
else
{
GPIO_ResetBits(GPIOA, GPIO_Pin_0 | GPIO_Pin_1);
}
direction = dir;
}
void Motor_Stop(void)
{
Motor_SetSpeed(0);
direction = 0;
}
3.3 按键检测程序
void Key_Scan(void)
{
if(Key_Pressed(KEY_FORWARD)) // 正转
{
Motor_SetDirection(1);
}
else if(Key_Pressed(KEY_BACKWARD)) // 反转
{
Motor_SetDirection(-1);
}
else if(Key_Pressed(KEY_ACCEL)) // 加速
{
Motor_SetSpeed(speedLevel + 1);
}
else if(Key_Pressed(KEY_DECEL)) // 减速
{
Motor_SetSpeed(speedLevel - 1);
}
else if(Key_Pressed(KEY_STOP)) // 停止
{
Motor_Stop();
}
}
3.4 PWM 输出程序
void PWM_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseStructure.TIM_Period = 100 - 1;
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_Cmd(TIM2, ENABLE);
}
3.5 电机状态更新程序
void Motor_Update(void)
{
if(direction == 0)
{
Motor_Stop();
}
else
{
Motor_SetSpeed(speedLevel);
Motor_SetDirection(direction);
}
}
4 总结
本文介绍了一个 基于 STM32 单片机的直流电机控制加减速正反转系统。系统通过 STM32F103C8T6 单片机作为核心,结合 L298N 电机驱动模块与按键输入,实现了电机 正转、反转、加速、减速和停止 控制,且设置了 8 个速度挡位,满足多种应用需求。
电路设计方面:采用模块化结构,STM32 提供逻辑与 PWM 控制,L298N 负责功率驱动,按键作为人机交互,电源模块保证系统稳定。
软件设计方面:程序模块划分清晰,包括主程序、按键扫描、PWM 输出、电机控制与速度逻辑管理。通过 PWM 占空比的逐档增加与减少,实现了电机的平滑加减速。
本系统具有以下特点:
- 功能全面:涵盖直流电机的全部基本控制逻辑;
- 扩展性强:可扩展为红外遥控、蓝牙控制或自动控制;
- 教学价值高:适合作为嵌入式系统课程设计与电机控制实验项目;
- 实用性好:能应用于小车驱动、风扇调速、机械臂关节等场景。
通过本设计,充分展示了 STM32 在电机控制中的优势与灵活性,同时为更复杂的电机调速与运动控制系统的开发奠定了基础。
更多推荐



所有评论(0)