【2026MPS机器人模块大赛】家用车管家+整体方案

一、整体架构:主控 NUCLEO-F303RE 做主控,MP6540H 驱动直流有刷电机,采用PWM 调压调速 + 闭环转速控制、软件适配 STM32F3 标准库 / STM32CubeHAL,支持开环调速、PI 闭环转速控制、正反转、刹车、限流保护。电源为7.5V 18650电池。

主控层:STM32F303RET6(NUCLEO-F303RE) 资源:128KB RAM、512KB Flash、硬件高级定时器(TIM1/TIM8)、正交编码器接口 TIM2/TIM3、高速 ADC、硬件 DMA。
驱动层:MP6540H H 桥直流电机驱动
执行层:直流有刷电机

辅助外设:电源模块、电流采样、保护电路、按键、指示灯调速方式:IN1/IN2 其中一路输入 PWM 波,另一路固定电平,依靠占空比调压调速。

IN1 & IN2 电机驱动器A的输入引脚,控制电机A转动及旋转角度

IN1输入高电平HIGH,IN2输入低电平LOW,对应电机A正转

IN1输入低电平LOW,IN2输入高电平HIGH,对应电机A反转

IN1、IN2同时输入高电平HIGH或低电平LOW,对应电机A停止转动

调速就是改变IN1、IN2高电平的占空比。

二、软件设计

  1. STM32 CUBEMX配置MCU接口

外部晶振 8MHz,系统主频配置72MHz;

定时器配置
1.TIM1(高级定时器)
CH1 PA8:PWM 输出,模式 PWM1,预分频 PSC=71,ARR=999,PWM 频率 = 72M/(72*1000)=10kHz;
占空比范围:0~1000(对应 0~100%)。

外设
ADC1:电流采集;
USART1:115200 波特率,串口通信;
GPIO:按键输入、FAULT 故障检测、方向控制 IO;
开启中断:定时器更新中断、FAULT 外部中断。

  1. STM32程序编写

驱动层:gpio.c、tim_pwm.c、tim_encoder.c、adc.c、usart.c

控制层:motor.c(电机基础驱动)、speed_calc.c(测速)、pid.c(PI控制器)

逻辑层:main.c 主循环

以MOTOR CONTROL为例,借用STM32 自动生成的MOTOR 控制程序。

extern TIM_HandleTypeDef htim1;

void MOTOR_SetMode(Motor_Mode_t mode, uint16_t duty){

if(duty > PWM_MAX) duty = PWM_MAX;

if(duty < PWM_MIN) duty = PWM_MIN;

 switch(mode)

{

    case MOTOR_FORWARD:

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);

        \__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty);

        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

        break;

    case MOTOR_BACKWARD:

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);

        \__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty);

        HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);

        break;

    case MOTOR_STOP_BRAKE:

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);

        \__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 0);

        HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);

        break;

    case MOTOR_STOP_COAST:

        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_SET);

        \__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, PWM_MAX);

        HAL_TIM_PWM_Stop(&htim1, TIM_CHANNEL_1);

        break;

    default: MOTOR_Brake(); break;

}}

void MOTOR_Brake(void){

MOTOR_SetMode(MOTOR_STOP_BRAKE, 0);}

void MOTOR_Coast(void){

MOTOR_SetMode(MOTOR_STOP_COAST, 0);}
  1. STM32 调试

本次为7.5V直流电机调速,通过直接修改 PWM 占空比,无转速反馈,结构简单,负载变化转速波动大。

期待成品!!

PI 闭环转速控制、正反转、刹车、限流保护,创意不错,期待成品