第二章 主控芯片选型与硬件平台
做窗帘电机,第一步就是选主控芯片。说白了,这就是整个系统的“大脑”。选对了,后面顺风顺水;选错了,可能整个项目都要推倒重来。我见过不少团队,前期随便选了个芯片,结果开发到一半发现外设不够用,或者成本压不下来,最后只能硬着头皮改方案——那滋味,真不好受。
2.1 常见MCU对比:STM32、GD32、ESP32
目前市面上,做窗帘电机用得最多的就是这三款:STM32、GD32、ESP32。咱们一个一个来看。
| 对比项 | STM32F103 | GD32F103 | ESP32 |
|---|---|---|---|
| 内核 | Cortex-M3 | Cortex-M3(国产) | Xtensa LX6双核 |
| 主频 | 72MHz | 108MHz | 240MHz |
| Flash | 64KB~512KB | 64KB~512KB | 4MB(外置) |
| SRAM | 20KB~64KB | 8KB~96KB | 520KB |
| WiFi/BLE | 无 | 无 | 内置 |
| 单价(批量) | 8~15元 | 3~8元 | 10~18元 |
| 生态 | 极好 | 较好(兼容STM32) | 好(Arduino/ESP-IDF) |
先说说STM32。这玩意儿是行业标杆,文档齐全,例程多,遇到问题随便一搜就有答案。我个人习惯,做原型验证时首选STM32。但它的缺点也很明显——贵。批量采购时,一颗STM32F103的价格能买两颗GD32。如果你做的是高端窗帘电机,成本不敏感,那STM32没问题。但如果是走量的产品,嗯,你得掂量掂量。
GD32呢?说白了就是STM32的国产替代。引脚兼容,代码基本可以直接移植。我在项目中遇到过一件事:客户要求把成本压到30块以内,用STM32根本做不到,换成GD32后,成本直接降了40%。但要注意,GD32的ADC精度和稳定性略逊于STM32,如果你需要高精度电流采样,得留个心眼。
ESP32就更有意思了。它自带WiFi和蓝牙,做智能窗帘简直是天选之子。你想想看,如果用STM32,你还得外挂一个ESP8266或者蓝牙模块,不仅增加成本,还多了通信调试的麻烦。ESP32一颗芯片全搞定。不过它的功耗偏高,深度睡眠时还有10μA左右,而STM32能做到2μA以下。如果是电池供电的窗帘电机,这点很关键。
我的建议:
- 原型验证:用STM32,开发快,少踩坑
- 成本敏感型产品:用GD32,性价比高
- 智能联网型产品:用ESP32,省掉通信模块
2.2 选型依据:成本、功耗、外设
选芯片不是拍脑袋,得看三个核心指标:成本、功耗、外设。我按重要程度排个序。
2.2.1 成本
做产品不是做实验。一颗芯片差5块钱,一年出货10万台,那就是50万的利润差距。我见过一个团队,选了个20块的芯片做窗帘电机,结果竞争对手用8块的芯片,功能一模一样,价格直接砍半。你说怎么打?
所以,我的习惯是:先定目标BOM成本,再倒推芯片预算。比如整机成本要控制在50块以内,那主控芯片就不能超过10块。这时候GD32就是很好的选择。
2.2.2 功耗
窗帘电机有两种供电方式:插电和电池。插电的,功耗无所谓。但如果是电池供电,那功耗就是命门。
我记得有一次做一款锂电池供电的窗帘电机,客户要求待机半年。算了一下,待机电流必须低于5μA。STM32L0系列能做到1μA左右,而ESP32的深度睡眠是10μA,根本满足不了。最后只能选STM32L0,外加一颗MOS管做电源管理,彻底关断WiFi模块的供电。
避坑指南: 我曾经以为所有MCU的深度睡眠电流都差不多,结果被ESP32坑了一把。后来学乖了,选型前一定先看数据手册里的“Power Consumption”章节,别只看宣传页上的数字。
2.2.3 外设
窗帘电机需要哪些外设?我列一下:
- 定时器:至少2个,一个做PWM驱动电机,一个做编码器计数
- ADC:至少2通道,采样电流和电压
- UART:至少1个,用于调试或通信
- I2C/SPI:至少1个,接传感器或存储芯片
- GPIO:至少6个,控制限位开关、按键、LED等
拿STM32F103C8T6来说,它有3个定时器、2个ADC、2个UART、2个I2C、2个SPI,完全够用。GD32F103的配置基本一样。ESP32的外设更丰富,但它的GPIO有些是复用的,用的时候得仔细看引脚功能表。
注意: 别只看外设数量,还要看外设的质量。比如STM32的定时器支持互补PWM和死区插入,做电机控制非常方便。而有些国产芯片的定时器功能阉割了,做不了精准的电机驱动。
2.3 最小系统板设计要点
选好芯片后,就要画最小系统板了。所谓最小系统板,就是让芯片能跑起来的最简电路。我总结几个要点。
2.3.1 电源电路
MCU一般需要3.3V供电,而窗帘电机通常是12V或24V供电。所以第一步就是降压。
我常用的方案是:12V -> 5V(用7805或DC-DC) -> 3.3V(用AMS1117)。注意,如果电机启动电流很大,电源会瞬间跌落,这时候MCU容易复位。我的做法是:在3.3V输出端加一个100μF的电解电容,再加一个0.1μF的瓷片电容,双保险。
// 电源电路设计示例
// 12V输入 -> 7805 -> 5V -> AMS1117 -> 3.3V
// 关键电容:
// C1: 100μF/25V (输入端)
// C2: 100μF/16V (5V输出端)
// C3: 100μF/10V (3.3V输出端)
// C4: 0.1μF (靠近MCU电源引脚)
2.3.2 晶振电路
STM32和GD32通常用8MHz晶振,ESP32用40MHz晶振。晶振旁边要加两个20pF左右的负载电容,具体值看数据手册。
这里有个坑:晶振的布局要尽量靠近MCU,走线要短,不要穿过大电流区域。我曾经因为晶振走线太长,导致系统偶尔死机,查了两天才找到原因。
2.3.3 复位电路
复位电路很简单:一个10kΩ上拉电阻到3.3V,再加一个0.1μF电容到地。有些芯片内部有上拉电阻,可以省掉外部电阻,但我建议还是加上,更可靠。
2.3.4 调试接口
STM32和GD32用SWD接口,只需要SWDIO和SWCLK两根线,再加一个GND。ESP32用UART下载,需要TX、RX和EN(使能)引脚。
我个人习惯,不管用哪种接口,都会把调试引脚引出到排针,方便后期调试。别省这个,否则出了问题只能干瞪眼。
最小系统板检查清单:
- ✅ 电源:3.3V输出稳定,纹波小于50mV
- ✅ 晶振:起振正常,频率误差小于1%
- ✅ 复位:按下复位键,MCU能正常重启
- ✅ 调试:能正常连接下载器,烧录程序
- ✅ GPIO:所有引脚都能正常输出高低电平
2.4 小结
主控芯片选型这事儿,说白了就是平衡的艺术。成本、功耗、外设,三个维度都得照顾到。我个人建议,如果你刚开始做窗帘电机,先用STM32开发板把功能调通,再根据量产需求换成GD32或ESP32。这样既保证了开发效率,又控制了成本。
下一章,咱们聊聊电机驱动方案。嗯,那又是一个大坑,到时候我好好给你讲讲。