二、主控芯片核心需求分析:电动牙刷对MCU的五大核心需求
好,咱们进入正题。电动牙刷这东西,看着简单,不就是个会震动的刷子嘛。但你真把它拆开,把电路板拿出来一看,嗯,门道不少。
我这些年经手过好几个电动牙刷项目,从几十块钱的入门款到上千块的旗舰机,都摸过一遍。说白了,主控芯片选对了,项目就成功了一半。选错了?返工、改板、重新认证,那都是白花花的银子。
今天我就把电动牙刷对MCU的五大核心需求,掰开了揉碎了讲给你听。
2.1 PWM控制:电机的“油门”和“刹车”
电动牙刷的核心动作是什么?震动。震动靠什么?电机。电机靠什么控制?PWM。
PWM,脉宽调制,说白了就是给电机通电、断电、再通电、再断电。通的时间长,转速就高;通的时间短,转速就低。就这么简单。
但这里有个坑——PWM的频率不能太低。我见过有人用1kHz的PWM去驱动电机,结果电机嗡嗡响,噪音大得吓人,而且震动手感很差。为什么?因为人耳对1kHz左右的声音最敏感。
核心参数要求:
- PWM频率:建议20kHz以上,避开人耳可听范围
- PWM分辨率:至少8位(256级),高端产品建议10-12位
- 独立PWM通道:至少2路(一路主电机,一路可选辅助功能)
我个人习惯,选MCU时先看它的定时器资源。有没有高级定时器?能不能产生互补PWM?死区时间能不能调?这些在电动牙刷里不一定全用上,但有余量总比不够好。
举个例子,我之前做一个项目,客户要求“轻柔模式”和“强力模式”切换。其实就是两套PWM参数:轻柔模式占空比30%,强力模式占空比80%。MCU的PWM模块如果能支持硬件自动切换,那就省了CPU的功夫。
// 伪代码示例:PWM初始化
void pwm_init(void) {
// 设置PWM频率为25kHz
TIM->PSC = 72 - 1; // 72MHz主频,预分频72
TIM->ARR = 40 - 1; // 自动重装值40,得到25kHz
TIM->CCR1 = 20; // 占空比50%,初始值
TIM->CCER |= TIM_CCER_CC1E; // 使能输出
TIM->CR1 |= TIM_CR1_CEN; // 启动定时器
}
我的经验:选MCU时,别只看PWM通道数量,还要看这些通道能不能映射到不同的GPIO引脚上。有些MCU的PWM输出引脚是固定的,布局布线时很痛苦。我吃过这个亏,后来学乖了,先看引脚复用表。
2.2 低功耗:牙刷不能一天一充
电动牙刷是电池供电的设备。锂电池也好,镍氢电池也罢,容量就那么点。用户可不想天天充电。
低功耗设计,说白了就是两件事:工作时省电,待机时更省电。
工作时,电机在转,MCU在跑,功耗大头在电机。但MCU也不能拖后腿。我建议选工作电流在5mA以下的MCU,主频跑在16MHz左右就够了。别为了跑分选个几百兆的芯片,那是杀鸡用牛刀。
待机时呢?牙刷放在充电座上,或者用户出差忘了带充电器,一放就是一两周。这时候MCU的待机电流就很重要了。
| 工作模式 | 典型电流 | 说明 |
|---|---|---|
| 运行模式(16MHz) | 3-5mA | 电机转动时MCU全速运行 |
| 休眠模式 | 10-50μA | 等待按键唤醒,RTC运行 |
| 深度睡眠 | 1-5μA | 仅保留IO唤醒,RTC关闭 |
我记得有一次,客户要求待机电流必须小于5μA。我翻遍了选型手册,最后选了一款带独立RTC和低功耗定时器的MCU。这样在深度睡眠时,还能用定时器周期性唤醒,检查电池电量或者处理充电状态。
注意:低功耗不只是MCU的事。外围电路也要考虑。比如,电机驱动芯片的使能引脚,在待机时一定要拉低,否则它会偷偷耗电。我见过一个项目,MCU待机电流只有3μA,但驱动芯片漏了20μA,整机待机电流超标。查了两天才找到原因。
2.3 电机驱动:不只是“转起来”那么简单
电动牙刷的电机,最常见的是空心杯电机和无刷直流电机(BLDC)。
空心杯电机便宜,控制简单,一个PWM加一个MOS管就能驱动。但它的缺点是寿命短、噪音大。现在中高端产品都在往BLDC转。
BLDC电机需要六步换向或者FOC(磁场定向控制)。这就对MCU提出了更高的要求:
- 运算能力:FOC算法需要做SVPWM、Clark变换、Park变换,全是浮点运算。没有硬件浮点单元(FPU)的MCU,跑起来很吃力。
- ADC采样速度:需要实时采样相电流,采样率至少10ksps以上。
- 定时器同步:PWM触发ADC采样,ADC采样完触发中断,中断里算FOC。这一套流程要严丝合缝。
我建议,如果你要做BLDC驱动的电动牙刷,直接选带FPU的ARM Cortex-M4或M33内核的MCU。别省那几毛钱,省下来的钱不够你调算法的加班费。
电机驱动对MCU的核心要求:
- 硬件乘法器和除法器(必备)
- 浮点运算单元(强烈建议)
- 多通道ADC,支持定时器触发
- 高级定时器,支持互补PWM和死区插入
2.4 传感器接口:牙刷也要“感知”世界
现在的电动牙刷,已经不是傻震了。它要感知你在刷哪里、刷了多久、力度大不大。
常见的传感器有:
- 压力传感器:检测刷头对牙齿的压力,防止用力过猛损伤牙龈
- 加速度计:检测牙刷的姿态和运动轨迹,实现区域识别
- 霍尔传感器:检测电机转子位置,用于BLDC换向
- 触摸传感器:实现无按键开关,提升防水性能
这些传感器,大部分都是通过I2C或SPI接口和MCU通信的。所以MCU至少要有一个I2C和一个SPI接口。我建议选两个I2C和两个SPI的,因为压力传感器和加速度计可能共用I2C总线,但霍尔传感器通常用SPI,触摸传感器也可能独占一个I2C。
另外,ADC通道也不能少。压力传感器很多是模拟输出的,需要MCU的ADC去读。我建议至少留4个ADC通道:一个给压力传感器,一个给电池电压检测,一个给温度检测,一个备用。
我的习惯:选MCU时,我会把传感器接口的引脚都列出来,看看有没有引脚冲突。比如,I2C的SCL和SDA能不能映射到方便的引脚上?SPI的CS引脚够不够用?这些细节,画PCB时才知道有多重要。
2.5 安全保护:别让牙刷变成“手雷”
电动牙刷是入口的东西,安全是第一位的。MCU在安全保护方面,要承担几个角色:
- 过流保护:电机堵转时,电流会飙升。MCU要能检测到过流,然后迅速关断PWM输出。
- 过温保护:充电时电池温度过高,或者电机长时间工作发热,MCU要能检测并停止工作。
- 欠压保护:电池电压低于安全阈值时,MCU要停止电机,防止电池过放损坏。
- 看门狗:程序跑飞了怎么办?看门狗定时器(WDT)能在规定时间内没收到喂狗信号时,自动复位MCU。
这里我要重点说一下看门狗。我曾经在一个项目里,因为程序中的一个bug,导致电机在用户关掉牙刷后还在微弱的震动。用户早上起来发现牙刷没电了,投诉说产品质量有问题。后来查出来,是程序在某个异常分支里没有关PWM。从那以后,我每个项目都强制开启硬件看门狗,并且在主循环里喂狗。一旦程序卡死,看门狗复位,所有IO恢复默认状态,电机自然就停了。
血的教训:看门狗一定要用独立看门狗(IWDG),不要用窗口看门狗(WWDG)。独立看门狗有独立的时钟源,即使主时钟挂了,它还能工作。窗口看门狗依赖系统时钟,主时钟挂了它也跟着挂。你说哪个更可靠?
另外,MCU的GPIO默认状态也很重要。上电瞬间,所有GPIO应该是高阻输入或者弱上拉,不能是输出高电平。否则电机在上电瞬间会抖一下,用户体验极差。我选MCU时,一定会看数据手册里关于GPIO默认状态的描述。
// 安全保护伪代码:过流检测中断
void overcurrent_isr(void) {
// 关闭PWM输出
TIM->CR1 &= ~TIM_CR1_CEN;
// 设置错误标志
error_flag = ERROR_OVERCURRENT;
// 记录故障时间
fault_timestamp = get_systick();
// 进入安全模式
enter_safe_mode();
}
好了,五大核心需求讲完了。PWM控制、低功耗、电机驱动、传感器接口、安全保护,这五个点,你选MCU时一个一个对照着看,基本不会出大错。
下一章,我会带你看看市面上主流的MCU型号,咱们一个一个分析它们的优缺点。到时候你就知道,哪款芯片最适合你的电动牙刷项目。