第一章:剃须刀嵌入式系统概述

各位工程师朋友,咱们今天聊聊剃须刀里的嵌入式系统。你可能觉得剃须刀就是个电机加刀片,没什么技术含量。其实不然,现在的智能剃须刀,里面的嵌入式系统复杂程度不亚于一个小型机器人。

我入行那会儿,第一次拆开一款高端剃须刀,看到里面的PCB板,说实话挺惊讶的。一个巴掌大的板子上,集成了MCU、电机驱动、电池管理、甚至还有蓝牙模块。嗯,从那时起我就意识到,这玩意儿值得好好研究。

1.1 剃须刀硬件架构

先说说硬件。剃须刀的硬件架构,说白了就是几个核心模块拼在一起。我习惯把它分成四大块:

  • 主控单元:通常是ARM Cortex-M系列MCU,比如STM32或国产的GD32。负责所有逻辑控制、传感器数据处理、通信协议栈运行。
  • 电机驱动模块:包括MOSFET桥电路、PWM控制接口。驱动直流无刷电机或普通直流电机。
  • 电源管理模块:锂电池充电管理芯片(比如TP4056)、升压/降压转换器、电量检测电路。
  • 人机交互模块:按键、LED指示灯、震动马达、甚至OLED显示屏(高端款)。

核心要点:剃须刀的硬件设计,最讲究的是功耗和体积。你想想看,一个手持设备,电池就那么点空间,还要保证足够的扭矩和续航。我见过不少方案,因为电源管理没做好,导致电机启动瞬间MCU复位——这种坑,踩过一次就记住了。

1.2 嵌入式软件栈

软件层面,剃须刀的嵌入式软件栈其实挺清晰的。我一般把它分成三层:

层级内容说明
应用层剃须模式控制、电量显示、蓝牙通信协议直接面向用户功能
中间层电机控制算法、ADC采样滤波、电池管理状态机核心业务逻辑
底层驱动GPIO、定时器、PWM、ADC、I2C/SPI驱动直接操作寄存器

我个人习惯,在底层驱动和中间层之间加一个硬件抽象层(HAL)。为什么?因为换MCU的时候,你只需要改HAL层,上层代码基本不用动。我曾经在一个项目里,因为没做HAL,换芯片时几乎重写了整个软件栈——那滋味,别提了。

代码示例,一个典型的PWM电机控制初始化:

// 电机PWM初始化(基于STM32 HAL库)
void Motor_PWM_Init(void)
{
    TIM_HandleTypeDef htim1;
    TIM_OC_InitTypeDef sConfigOC = {0};

    __HAL_RCC_TIM1_CLK_ENABLE();

    htim1.Instance = TIM1;
    htim1.Init.Prescaler = 71;      // 72MHz / 72 = 1MHz
    htim1.Init.Period = 999;        // PWM频率 = 1MHz / 1000 = 1kHz
    htim1.Init.CounterMode = TIM_COUNTERMODE_UP;
    HAL_TIM_PWM_Init(&htim1);

    sConfigOC.OCMode = TIM_OCMODE_PWM1;
    sConfigOC.Pulse = 0;            // 初始占空比0%
    sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
    HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_1);

    HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
}

小提示:PWM频率选1kHz左右比较合适。频率太低,电机会有噪音;频率太高,MOSFET开关损耗大。我试过10kHz,电池续航直接掉了15%。

1.3 常见故障分类

做剃须刀嵌入式开发,故障诊断是家常便饭。我根据经验,把常见故障分成三类:

1.3.1 电源类故障

  • 电池电量检测不准:ADC采样没做滤波,或者分压电阻精度不够。我曾经遇到过,电量从50%直接跳到10%,用户以为电池坏了,其实是软件滤波没做好。
  • 充电异常:充电管理芯片的I2C通信失败,或者充电状态机卡死。嗯,这里要注意,充电状态机一定要加超时复位。
  • 低电压复位:电机启动瞬间拉低电池电压,MCU复位。解决办法是加软启动,或者增大输入电容。

1.3.2 电机控制类故障

  • 电机不转:先检查PWM有没有输出,再看MOSFET驱动电压够不够。我习惯用示波器抓一下栅极波形,一眼就能看出问题。
  • 转速不稳定:通常是PID参数没调好,或者霍尔传感器信号有毛刺。加个简单的低通滤波就能解决。
  • 堵转保护误触发:电流检测阈值设得太低。你想想看,胡子浓密的时候,电机电流本来就大,阈值设成500mA,稍微一堵就保护了。我一般设到1.2A左右。

1.3.3 通信与交互类故障

  • 蓝牙连接不稳定:天线匹配没做好,或者射频干扰。我建议蓝牙模块远离电机驱动部分,至少保持5mm间距。
  • 按键响应迟钝:按键扫描周期太长,或者没做去抖。去抖时间一般设20ms就够。
  • LED显示异常:PWM调光频率太低,人眼能感觉到闪烁。频率至少设到100Hz以上。

避坑指南:我曾经在一个量产项目中,发现部分剃须刀在低温环境下(0℃以下)电机启动困难。查了两天才发现,是电池内阻增大导致电压跌落,MCU的BOD(欠压检测)触发了复位。后来加了软启动和电压迟滞处理,问题才解决。所以,环境适应性测试一定要做全。

好了,第一章的内容就这些。剃须刀嵌入式系统,说复杂也复杂,说简单也简单。关键是你要理解硬件和软件是怎么配合的。下一章,咱们会深入讲电机控制算法,到时候我会分享一些调PID参数的小技巧。

记住一句话:嵌入式开发,七分硬件,三分软件。但往往那三分软件,决定了产品好不好用。