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

大家好,我是老张。做嵌入式这行十几年了,从最早的电动牙刷到现在的智能剃须刀,也算见证了消费电子固件的发展历程。今天咱们聊聊剃须刀嵌入式系统的整体架构。说实话,很多人一上来就写代码,结果硬件不匹配、功耗压不下去,最后返工。我建议先花点时间把系统架构理清楚。

1.1 硬件架构

剃须刀的硬件,说白了就是几个核心模块拼在一起。我拆过不下50款剃须刀,发现无论高端低端,基本都离不开这四部分。

主控MCU

这是大脑。选型时我一般看三点:主频、Flash大小、外设资源。剃须刀不像手机,不需要多核处理器。一颗Cortex-M0或M3就够用。我个人习惯用STM32或国产的GD32,性价比高。记得有一次项目,客户非要上M4,结果成本压不下来,最后换回M3,性能完全够。

电机驱动

电机是剃须刀的心脏。常见的有直流有刷电机和无刷电机。驱动方式上,我建议用PWM控制。为什么?因为可以精确调速。你想想看,胡子浓密的地方需要大扭矩,稀疏的地方可以降速省电。我曾在项目中遇到过电机启动瞬间电流过大,导致电池保护板触发的问题。后来加了软启动,问题解决。

电池管理

锂电池是主流。一节18650或软包电池,容量在600mAh到1500mAh之间。充电管理芯片我常用TP4056或BQ系列。这里有个坑:很多人忽略电池内阻检测。我曾经因为没做内阻检测,导致电池老化后剃须刀突然关机,用户体验极差。后来加了电压分段检测,提前预警。

传感器

现在的剃须刀越来越智能。霍尔传感器用来检测刀头是否安装到位,压力传感器可以感知贴合力度,还有温度传感器防止过热。我做过一个项目,加了红外传感器检测是否贴近皮肤,结果功耗超标。后来改成间歇采样,每100ms检测一次,功耗降了80%。

硬件选型口诀:MCU够用就好,电机驱动要稳,电池管理要准,传感器贵精不贵多。

1.2 软件分层架构

软件架构这块,我踩过不少坑。早期做项目,所有代码写在一个文件里,结果后期维护想死的心都有。后来学了分层架构,真香。

驱动层

最底层,直接操作寄存器。包括GPIO初始化、定时器配置、ADC采样、PWM输出等。这一层我要求团队必须写注释,因为换芯片时只需要改驱动层。举个例子,电机PWM驱动:

// 电机PWM初始化
void motor_pwm_init(void) {
    // 使能定时器时钟
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    // 配置GPIO为复用功能
    GPIOA->AFR[0] |= 0x00000001;  // PA0复用为TIM2_CH1
    // 设置PWM频率20kHz
    TIM2->ARR = 1000 - 1;
    TIM2->PSC = 72 - 1;
    // 使能输出
    TIM2->CCER |= TIM_CCER_CC1E;
    TIM2->CR1 |= TIM_CR1_CEN;
}

嗯,这里要注意:PWM频率不能太低,否则电机噪音大。我一般设在15kHz到25kHz之间。

中间件层

这一层是桥梁。比如电池电量算法、电机PID控制、按键消抖处理。我习惯把算法封装成独立模块,方便复用。举个例子,电池电量检测我用的是开路电压法加积分法。单纯用电压法不准,因为电机启动时电压会掉。我做过一个方案:电机停止时用电压法,运行时用积分法,误差控制在3%以内。

应用层

最上层,处理业务逻辑。比如开关机逻辑、档位切换、充电状态显示。这一层代码量最大,但也是最容易出bug的地方。我建议用状态机来管理。剃须刀的状态无非就是:待机、运行、充电、故障。每个状态对应一个处理函数,清晰明了。

我的经验:分层架构最大的好处是便于调试。驱动层出问题,查硬件;中间件层出问题,查算法;应用层出问题,查逻辑。各层之间通过接口通信,耦合度低。

1.3 开发环境搭建

工欲善其事,必先利其器。开发环境选对了,能省一半时间。

IDE选择

我个人推荐Keil MDK或STM32CubeIDE。Keil老牌,稳定,但收费。CubeIDE免费,功能也够用。如果你用国产芯片,像GD32、AT32,它们有自己的IDE,但底层还是基于Eclipse或Keil。我建议新手从Keil开始,资料多,遇到问题好查。

编译器配置

编译器我一般用ARMCC或GCC。ARMCC优化好,但GCC免费。优化等级我习惯用-O2,兼顾性能和代码大小。曾经有个项目,用了-O3优化,结果代码跑飞了。后来发现是编译器优化掉了某些变量,加了volatile关键字解决。

调试器

J-Link是我的首选。速度快,稳定。ST-Link也行,便宜。调试时我习惯用硬件断点加串口打印。为什么?因为有些bug在断点处不出现,一跑就出现。这时候串口打印就很有用。我一般会在关键函数入口和出口加打印,定位问题很快。

工具 推荐型号 适用场景
IDE Keil MDK v5.38 STM32、GD32开发
编译器 ARMCC v6.16 代码优化要求高
调试器 J-Link EDU Mini 日常调试、烧录
逻辑分析仪 Saleae Logic 8 时序分析、协议抓取

避坑指南:我曾经因为调试器驱动版本不对,导致无法连接芯片。折腾了两天,最后发现是J-Link固件太旧。所以建议定期更新调试器固件和IDE版本。

好了,第一章就聊这么多。剃须刀嵌入式系统看似简单,但要做好,硬件、软件、工具都得兼顾。下一章咱们深入讲讲电机控制的细节,包括PID参数怎么调、怎么避免电机抖动。到时候见。