【2026MPS机器人模块大赛】家用巡逻车管家+方案分享

一、作品简介

1. 作品功能介绍

本项目设计一款小型自主智能巡逻车,整体系统以NuCLEO,STM32F303RE单片机为核心控制单元,采用7.5V 18650锂电

池组作为整机唯一供电电源。车辆行走运动由L298N直流电机驱动板实现,完成前进、转向、调速等巡逻移动功能;设备搭载监控摄像头与辅助照明LED灯,通过步进电机搭配MPS6540步进驱动板组成云台机构,实现摄像头拍摄角度、LED照明角度的电动可调,满足全天候、多角度环境巡检需求。

整套系统架构分为供电模块、主控模块、行走驱动模块、云台执行模块、感知照明模块,硬件搭配成熟稳定、逻辑分层清晰,可实现自主巡航、环境可视化采集、夜间补光扫描等核心巡逻功能,适用于室内巡检、小型场地自动巡逻等场景。

2. 物料清单及简介

表 2 智能巡逻车管家物料清单

第 1 列 第 2 列 第 3 列 第 4 列 E
编号 名称/零件编号 制造商 描述 数量
1 驱动板MP6540 自制 电机驱动板 1
2 Motor Drive Board L298 成品 电机驱动板 1
3 Nucleo stm32f472 成品 控制板 1
4 电池 3.7V 2
5 直流电机 普通直流电机 4
6 步进电机 普通步进电机 1
7 轮胎 4
8 连接线 若干

二、系统框图

图 1 系统硬件连接框图

1. 主控单元:NECLEO STM32F303

本系统采用STM32F303RE作为主控芯片方案,该芯片为主流高性能工业级单片机,主频最高72MHz,资源充足、运算速度快、抗干扰能力强,完美适配小车多外设协同控制场景。

核心适配优势:内置多路高级定时器可输出高精度PWM信号,满足MPS6540无级调速需求;通用GPIO口资源丰富,可同时兼容步进驱动信号、LED开关控制;芯片外设稳定性高,可满足移动设备长期连续巡逻工作,调试便捷、通用性极强。

2. 供电单元:7.5V 18650锂电池组

整机采用7.5V 18650可充电锂电池统一供电,为L298N驱动板、MPS6540驱动板、步进电机、摄像头、LED灯提供工作电压。同时板载稳压电路,将7.5V电压稳压至3.3V,为STM32F303RE主控供电,保障主控稳定运行。

L298N驱动板工作电压覆盖6~12V,7.5V供电处于其最优工作区间,可保证直流行走电机稳定启停、调速、正反转;

MPS6540步进驱动板、步进电机、摄像头及LED灯均支持宽压低压输入,7.5V供电可满足其正常工作需求;

为保障系统稳定,电源回路预留防反接、过流、过压保护,避免电机启停瞬间电压波动损坏主控及精密外设。

3. 行走驱动模块:L298N电机驱动板

巡逻车的移动行走功能由L298N双H桥直流电机驱动板实现,负责驱动车身左右行走直流电机。STM32F303RE通过GPIO输出方向控制信号,通过定时器PWM端口输出调速信号,传输至L298N驱动板。

L298N对主控微弱控制信号进行功率放大,驱动电机实现正转、反转、启停、无级调速,进而完成小车前进、后退、左右差速转向、定点停止等所有巡逻行走动作。该驱动方案成熟稳定、带载能力强,可有效抵御电机启停电压波动,保障小车匀速稳定巡逻。

4. 云台执行单元:MPS6540驱动板+步进电机

巡逻车摄像头取景角度、LED灯照明角度的动态调节,由步进电机搭配MPS6540步进驱动板组成云台执行机构实现,区别于固定视角设备,可实现多角度精准巡检。

工作原理:STM32L472主控输出步进脉冲信号(CLK)和方向信号(DIR)至MPS6540驱动板,MPS6540对弱控制信号进行功率放大,精准驱动步进电机按设定步数、设定角度转动。步进电机可实现360°小角度精准定位、启停无抖动,能够带动搭载的摄像头与LED灯同步俯仰、旋转调节,实现无死角环境采集与补光。

MPS6540驱动板体积小巧、接线简单、细分精度高,可有效提升云台调节的平稳性,避免画面抖动、灯光偏移,保障巡逻采集画面质量。

5. 感知与照明单元:摄像头+LED补光灯

摄像头为巡逻车核心感知设备,负责采集巡逻路径环境视频画面,实现现场可视化监测、异常情况记录;LED灯为辅助照明设备,用于夜间、昏暗环境补光,保障低光场景下摄像头正常成像。

二者统一固定在步进电机云台结构上,与步进电机联动工作,跟随云台角度调整同步改变拍摄视角和照明范围,实现“拍到哪里、照亮哪里”的协同工作效果,大幅提升全天候巡逻能力。设备供电由7.5V锂电池统一供给,主控可单独控制LED灯的开关、亮度,适配不同环境光线需求。

三、各部分功能说明

系统采用单主控集中控制、模块化独立执行的分层架构,各模块分工明确、互不干扰,整体稳定性强:

供电层:7.5V 18650锂电池为所有驱动模块、执行设备供电,经稳压模块输出3.3V为STM32F303RE主控供电,实现整机统一供电;

控制层:STM32F303RE单片机为核心,统一下发行走控制、云台转动、灯光开关等所有指令,统筹整机工作逻辑;

执行层:L298N驱动模块执行小车巡逻行走动作,MPS6540步进模块执行云台角度调节动作;

感知层:摄像头实时采集环境画面,配合LED补光完成全天候巡检感知。

1. 运动控制

Motor Drive Board电机驱动板为HW-095,主控芯片为ST,L298N,用于H桥双路驱动。

由于L298N逻辑控制最高电压为7V,因此板载一个稳压器,型号为78M05。

控制引脚

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

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

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

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

调速就是改变IN1、IN2高电平的占空比(需拔掉ENA处跳帽)

IN3 & IN4 电机驱动器B的输入引脚,控制电机B转动及旋转角度

IN3输入高电平HIGH,IN4输入低电平LOW,对应电机B正转

IN3输入低电平LOW,IN4输入高电平HIGH,对应电机B反转

IN3、IN4同时输入高电平HIGH或低电平LOW,对应电机B停止转动

调速就是改变IN3、IN4高电平的占空比(需拔掉ENB处跳帽)

输出引脚

OUT1 & OUT2 电机驱动器A的输出引脚,接直流电机A或步进电机的A+和A-

OUT3 & OUT3 电机驱动器B的输出引脚,接直流电机B或步进电机的B+和B-

第 1 列 第 2 列 第 3 列 第 4 列 E F G H I J
编号 方向 IN1 IN2 OUT1
OUT2 IN3 IN4 OUT3
OUT4 ENA ENB
1 前进 H L 正转 H L 正转 H H
2 后退 L H 反转 L H 反转 H H
3 左转 H L 正转 L H 反转 H H
4 右转 L H 反转 H L 正转 H H
5 停止 L L 停机 L L 停机 H H
6 停止 H H 停机 H H 停机 H H

PWM 调速,电压或电流是以一种通(ON)或断(OFF)的重复脉冲序列被加到模拟负载上去的。

整机电池为7.5V 18650锂电池,与单相5V电机额定电压不匹配,采用L278 驱动板DC-DC降压稳压方案,为云台系统独立供电:

  1. 7.5V锂电池总电源 → DC-DC降压模块输入端;

  2. 降压模块稳定输出5V/1A → 接入MPS6540功率供电端(VM);

  3. MPS6540逻辑供电端(VCC-LOGIC)接STM32 3.3V,保证控制信号稳定;

  4. 全系统共地:锂电池GND、降压模块GND、MPS6540 GND、STM32 GND必须连通,杜绝脉冲错乱、电机抖动。

PSM:驱动板逻辑电源 3.3V 5V(接 STM32 侧)

VIN:电机功率电源,给步进电机绕组供电

SA,SB:接单相 5V 步进电机线圈

CubeMX基础配置

  • 系统时钟:72MHz;

  • PA5、PA6、PA7配置为推挽输出、低速模式;

  • 开启GPIO外设时钟,默认输出低电平;

  • 无需定时器中断,采用精准延时脉冲输出,适配单相电机低速平稳特性。

核心宏定义(main.h)

#ifndef __MAIN_H
#define __MAIN_H

#include "stm32f3xx_hal.h"

// MPS6540单相步进电机控制引脚
#define MPS_PUL_Pin        GPIO_PIN_5
#define MPS_PUL_GPIO_Port  GPIOA
#define MPS_DIR_Pin        GPIO_PIN_6
#define MPS_DIR_GPIO_Port  GPIOA

// 云台LED补光灯引脚
#define YUNTAI_LED_Pin     GPIO_PIN_7
#define YUNTAI_LED_GPIO_Port GPIOA

#endif

驱动函数(main.c)

/* USER CODE BEGIN PV */
#define STEP_DELAY_TIME 6    // 单相5V电机专用延时,平稳无抖动
/* USER CODE END PV */

/**
 * @brief  MPS6540驱动单相5V步进电机转动
 * @param  steps: 脉冲数(正=正转,负=反转)
 * @retval 无
 */
void SingleStep_Rotate(int16_t steps)
{
    int16_t i;
    // 设置转动方向
    if(steps > 0)
    {
        HAL_GPIO_WritePin(MPS_DIR_GPIO_Port, MPS_DIR_Pin, GPIO_PIN_SET);
    }
    else
    {
        HAL_GPIO_WritePin(MPS_DIR_GPIO_Port, MPS_DIR_Pin, GPIO_PIN_RESET);
        steps = -steps;
    }

    // 输出脉冲驱动电机转动
    for(i = 0; i < steps; i++)
    {
        HAL_GPIO_WritePin(MPS_PUL_GPIO_Port, MPS_PUL_Pin, GPIO_PIN_SET);
        HAL_Delay(STEP_DELAY_TIME);
        HAL_GPIO_WritePin(MPS_PUL_GPIO_Port, MPS_PUL_Pin, GPIO_PIN_RESET);
        HAL_Delay(STEP_DELAY_TIME);
    }
}

/**
 * @brief  云台LED补光控制
 */
void YunTai_LED_On(void)
{
    HAL_GPIO_WritePin(YUNTAI_LED_GPIO_Port, YUNTAI_LED_Pin, GPIO_PIN_SET);
}

void YunTai_LED_Off(void)
{
    HAL_GPIO_WritePin(YUNTAI_LED_GPIO_Port, YUNTAI_LED_Pin, GPIO_PIN_RESET);
}