1、扫地机项目概述:项目背景、硬件架构、软件分层架构

大家好,我是这次课程的主讲人。咱们直接进入正题——扫地机这个项目,到底是个什么东西?

说实话,我最早接触扫地机项目是在2018年。那时候市面上主流的方案还比较粗糙,经常撞墙、卡线、回不了充。嗯,这几年进步确实很大。但不管产品怎么变,底层的测试逻辑其实没怎么动。今天我就带大家把这块地基打牢。

1.1 项目背景:为什么选扫地机?

你可能觉得,一个扫地机而已,能有多复杂?

我跟你讲,它其实是个典型的嵌入式系统——有传感器、有电机、有控制逻辑、还有通信。说白了,它就是一个会跑的小机器人。你想想看,它要自己规划路径、避开障碍、识别地毯、判断脏污程度……这些功能背后,全是嵌入式软件在支撑。

我个人习惯把扫地机项目当作嵌入式测试的“样板间”。为什么?因为它的模块足够多,测试场景足够丰富。你在一个扫地机上练熟了,换到其他嵌入式产品,基本就是换个壳。

核心要点:扫地机项目覆盖了嵌入式测试的绝大多数典型场景——传感器采集、电机控制、状态机切换、异常处理、低功耗管理。学透它,你就掌握了嵌入式测试的通用方法论。

1.2 硬件架构:MCU、传感器、电机

先看硬件。扫地机的硬件架构,说白了就是三大部分:大脑、眼睛、手脚。

1.2.1 MCU——大脑

MCU是整台机器的控制核心。我在项目中遇到过用STM32F4系列的,也有用国产GD32的。选型主要看几个指标:主频、Flash大小、RAM大小、外设接口数量。

举个例子,一个中端扫地机,MCU的主频一般在200MHz左右,Flash至少512KB,RAM至少128KB。为什么?因为要跑路径规划算法,还要存地图数据,内存小了根本不够用。

MCU型号 主频 Flash RAM 典型应用
STM32F407 168MHz 1MB 192KB 中高端扫地机
GD32F450 200MHz 512KB 256KB 性价比方案
ESP32 240MHz 4MB 520KB WiFi联网机型

测试小贴士:MCU选型阶段就要考虑测试覆盖率。比如Flash和RAM的边界值测试,我建议在项目初期就定好用例,不然后期改硬件成本很高。

1.2.2 传感器——眼睛

扫地机上的传感器种类很多。我列几个常见的:

  • 激光雷达(LDS):测距用,精度一般在±1cm。测试时要关注盲区和多径反射。
  • 红外传感器:检测悬崖、碰撞。注意环境光干扰。
  • 超声波传感器:检测透明物体(比如玻璃门)。我曾经踩过这个坑——激光雷达扫不到玻璃,全靠超声波补位。
  • 陀螺仪/加速度计:用于姿态检测和航迹推算。测试时重点关注零漂和温漂。
  • 地检传感器:识别地毯和地板材质。这个在测试时容易忽略,但用户反馈中经常出现“扫地机在地毯上不增压”的问题。

你想想看,这么多传感器,每个都有不同的输出协议(I2C、SPI、UART),每个都有不同的精度和响应时间。测试的时候,光传感器这块就能写出一百多个用例。

1.2.3 电机——手脚

扫地机一般有3-4个电机:

  1. 驱动轮电机(左右各一个):控制行走。测试重点:速度控制精度、堵转保护、差速转弯。
  2. 边刷电机:把墙角的垃圾扫到中间。测试重点:转速稳定性、堵转恢复。
  3. 滚刷电机:主刷,负责把垃圾卷进尘盒。测试重点:负载变化时的转速保持。
  4. 风机电机:产生吸力。测试重点:PWM控制精度、噪音与吸力的平衡。

我记得有一次,驱动轮电机的堵转保护阈值设得太高,结果机器卡在电线上一动不动,用户以为死机了。后来我们把阈值调低,并增加了“自动后退+旋转”的脱困逻辑,问题才解决。

注意:电机测试一定要做长时间老化测试。我见过一个项目,电机在连续工作4小时后,因为散热不良导致PWM控制失效,机器直接原地打转。这种问题,短时间测试根本发现不了。

1.3 软件分层架构

软件架构这块,我习惯把它分成三层:驱动层、中间件层、应用层。每一层的测试重点都不一样。

1.3.1 驱动层(BSP)

驱动层直接跟硬件打交道。包括MCU的外设驱动(GPIO、Timer、ADC、PWM)、传感器驱动、电机驱动等。

测试重点:

  • 寄存器配置是否正确
  • 中断响应时间是否达标
  • DMA传输是否稳定
  • 低功耗模式切换是否正常

说白了,驱动层测试就是“裸机测试”。我建议用单元测试框架(比如Unity、CMock)来做,把每个驱动模块单独拎出来测。

1.3.2 中间件层

中间件层是连接驱动和应用的关键。包括:

  • RTOS(实时操作系统):任务调度、信号量、消息队列。测试重点:任务优先级是否合理、是否有死锁、是否有优先级反转。
  • 通信协议栈:比如WiFi模块的AT指令解析、蓝牙的GATT服务。测试重点:协议一致性、异常包处理。
  • 算法库:比如SLAM建图、路径规划。测试重点:算法精度、内存占用、执行时间。

中间件层的测试,我个人习惯用“黑盒+白盒”结合的方式。黑盒测功能,白盒测代码覆盖率。

1.3.3 应用层

应用层是用户直接感知的部分。包括:

  • 状态机:待机、清扫、回充、暂停、错误等状态的切换。测试重点:状态转换是否合法、异常状态是否能恢复。
  • 业务逻辑:比如“检测到地毯→增大吸力”、“电量低于20%→自动回充”。测试重点:逻辑分支是否覆盖全。
  • 用户交互:按键响应、APP指令解析、语音播报。测试重点:响应时间、指令容错。

我的经验:应用层的bug往往是最多的,但也是最容易修复的。真正难搞的是驱动层和中间件层的bug——它们往往需要反复复现、抓波形、看日志。所以,我建议测试资源分配上,驱动层和中间件层要占大头。

1.4 小结

这一章我们聊了扫地机项目的背景、硬件架构和软件分层。你可能会觉得内容有点多,但没关系,后面每一章都会围绕这些内容展开。

记住一句话:测试不是最后才做的事,而是从项目第一天就要开始的事。下一章,我会带大家看看扫地机项目的测试策略和测试计划怎么制定。

嗯,今天就到这里。有什么问题,咱们评论区见。