4、电路原理图设计:电源模块(电池/DC-DC)、MCU最小系统、驱动电路、传感器接口电路
好,咱们进入第四章。这一章是硬件的核心骨架——原理图设计。说白了,就是把脑子里的功能需求,变成实实在在的电路连接。
我个人习惯,画原理图之前,先拿张草纸把电源树画出来。你想想看,一个系统里,电池进来,3.3V给MCU,5V给电机驱动,可能还有个1.8V给传感器。哪个先上电?哪个后掉电?这些不搞清楚,画出来的图就是给自己挖坑。
4.1 电源模块设计
电源是系统的命脉。儿童锁这玩意儿,要是断电了打不开,家长得急疯。所以电源设计,第一要义是可靠,第二才是效率。
4.1.1 电池供电方案
我建议用4节AA电池串联,得到6V左右的原始电压。为什么不用锂电池?因为儿童产品要考虑安全性,锂电池过充过放有起火风险,AA电池相对温和得多。
电池输入端必须加一个防反接二极管。我在项目中遇到过,测试人员把电池装反了,啪一下,板子冒烟了。从那以后,所有电池供电的产品,我都强制加一个肖特基二极管,比如SS34,压降只有0.3V左右,损耗不大。
关键参数:
- 输入电压范围:4.5V ~ 6.5V(4节AA电池)
- 静态功耗:< 5μA(待机模式)
- 输出纹波:< 50mVpp
4.1.2 DC-DC降压电路
6V电池电压不能直接给MCU用,MCU需要3.3V。这里有两种选择:LDO线性稳压,或者DC-DC降压。
我选DC-DC。为什么?效率。LDO在6V转3.3V时,效率只有55%,一半的能量都变成热量散掉了。而DC-DC能做到90%以上。儿童锁是电池供电的,每一毫安时都得省着用。
常用的芯片是TPS62130或MP2359。我习惯用MP2359,便宜、外围简单、文档齐全。电路如下:
// MP2359 典型应用电路
// 输入:6V 输出:3.3V/1A
输入电容:10μF + 0.1μF (靠近芯片引脚)
输出电容:22μF + 0.1μF
电感:10μH (CD54封装)
反馈电阻:R1=49.9kΩ, R2=16.2kΩ (Vout=0.8*(1+R1/R2))
使能引脚:直接上拉到Vin
布局小技巧:DC-DC的输入电容和续流二极管要尽量靠近芯片引脚。走线越短,EMI越小。我见过有人把电容放得老远,结果纹波大得离谱,MCU频繁复位。
4.2 MCU最小系统
MCU选型我推荐STM32G030F6P6。为什么?便宜、好买、资源够用。儿童锁不需要跑Linux,不需要复杂的外设,一个Cortex-M0+核心,16KB Flash,2KB RAM,绰绰有余。
最小系统包括:
- 电源:3.3V供电,每个电源引脚配一个0.1μF去耦电容
- 晶振:8MHz主晶振 + 32.768kHz RTC晶振
- 复位:外部复位芯片(如MAX809),而不是简单的RC复位
- 调试接口:SWD接口(SWDIO、SWCLK、GND)
注意:千万不要省掉外部复位芯片。我曾经用RC复位电路,结果在电池电压缓慢下降时,MCU进入了奇怪的状态,门锁死机了。外部复位芯片能保证电压低于阈值时,MCU被强制复位。
晶振的匹配电容要算一下。8MHz晶振,负载电容18pF,PCB走线寄生电容约3pF,那么匹配电容选15pF。公式是:CL = (C1*C2)/(C1+C2) + Cstray。嗯,这里要注意,C1和C2通常取相同值。
4.3 驱动电路
儿童锁的核心是电机驱动。电机是直流有刷电机,工作电压5V,堵转电流约500mA。MCU的GPIO直接驱动?想都别想。GPIO只能输出几毫安,带不动电机。
我选的是DRV8837,这是一个H桥驱动芯片,专门驱动直流电机。它的好处是:
- 内置H桥,不需要外部MOS管
- 工作电压2.7V~10.8V,覆盖电池电压范围
- 输出电流1.5A,余量充足
- 内置过流保护和热关断
电路连接:
// DRV8837 引脚连接
// MCU GPIO -> DRV8837 IN1, IN2
// DRV8837 OUT1, OUT2 -> 电机两端
// DRV8837 nSLEEP -> MCU GPIO (高电平使能)
// DRV8837 VCC -> 5V (从电池经LDO得到)
// 电机两端并联一个0.1μF电容,吸收换向尖峰
避坑指南:电机启动瞬间电流很大,电源会被拉低。我建议在电机电源输入端加一个470μF的电解电容。我曾经没加这个电容,结果电机一启动,MCU就复位了。查了两天才找到原因。
4.4 传感器接口电路
儿童锁需要两个传感器:门状态检测(霍尔传感器)和锁舌位置检测(微动开关)。
4.4.1 霍尔传感器接口
霍尔传感器用来检测门是否关好。我选的是AH49E,线性霍尔,输出模拟电压。当门上的磁铁靠近时,输出电压变化。
电路设计:
// AH49E 接口电路
// VCC -> 3.3V
// GND -> GND
// OUT -> MCU ADC引脚
// OUT引脚对地接一个0.1μF电容(滤波)
// OUT引脚对VCC接一个10kΩ上拉电阻
为什么要加滤波电容?因为电机转动时会产生电磁干扰,霍尔传感器的输出线上会耦合噪声。不加滤波,ADC读数跳来跳去,没法判断门的状态。
4.4.2 微动开关接口
锁舌位置检测用微动开关。开关一端接地,另一端接MCU GPIO,并加上拉电阻到3.3V。
这里有个细节:开关在按下和释放的瞬间,会有机械抖动。抖动时间大约5~20ms。如果不做处理,MCU会读到多次跳变。
硬件去抖:在开关两端并联一个0.1μF电容。软件去抖:检测到电平变化后,延时10ms再读一次。我建议两者都用,双重保险。
我的经验:微动开关的寿命有限,大约10万次。如果儿童锁每天开关20次,能用13年。但实际使用中,开关触点会氧化,接触电阻变大。我建议在软件中做故障检测:如果连续5次检测到开关状态异常,就上报故障码。
4.5 整体电源树与注意事项
最后,把整个系统的电源树整理一下:
| 电压 | 来源 | 负载 | 最大电流 |
|---|---|---|---|
| 6V | 电池 | DC-DC输入、电机驱动 | 1.5A |
| 5V | LDO (从6V降压) | 电机驱动VCC | 500mA |
| 3.3V | DC-DC (从6V降压) | MCU、霍尔传感器 | 200mA |
嗯,这里要注意上电时序。MCU要先上电,然后才能控制电机驱动。如果电机驱动先上电,而MCU还没初始化,驱动芯片的输入引脚处于高阻态,可能会误动作。
解决办法:把DRV8837的nSLEEP引脚用MCU的GPIO控制。MCU启动后,先初始化GPIO,再把nSLEEP拉高,使能驱动芯片。这样就能保证上电顺序正确。
好了,原理图设计就讲到这里。下一章咱们聊PCB布局,那才是真正考验功力的时候。