3. 硬件选型与平台搭建:主控芯片选型(STM32/ESP32)、LoRa模块选型(SX1278/SX1262)、传感器选型(地磁/超声波)、电源管理方案
好,咱们进入实战环节的第一道坎——硬件选型。说实话,很多初学者一上来就纠结“哪个芯片最好”,其实这是个误区。没有最好的芯片,只有最合适的方案。我做了这么多年嵌入式,踩过的坑比走过的路还多,今天就跟你聊聊我的真实体会。
3.1 主控芯片选型:STM32 vs ESP32
先说说主控。停车位检测系统对主控的要求其实不高:能跑协议栈、功耗低、IO口够用就行。目前主流就两个方向——STM32和ESP32。
核心结论:如果你做的是电池供电的独立车位检测器,选STM32L系列;如果车位检测器需要联网或OTA升级,选ESP32。
| 对比项 | STM32(以L073为例) | ESP32 |
|---|---|---|
| 功耗(休眠) | 0.4μA | 5μA(深度睡眠) |
| 主频 | 32MHz | 240MHz |
| WiFi/BT | 无 | 双模 |
| 价格(批量) | 8-12元 | 10-15元 |
| 开发难度 | 中等(HAL库) | 较低(Arduino/ESP-IDF) |
我个人习惯是:如果项目要求电池撑两年以上,我肯定选STM32L系列。它的休眠功耗能做到0.4μA,配合地磁传感器,一节CR2032电池用一年半没问题。但如果你需要远程调试、数据上云,那ESP32的WiFi功能就太香了。
我的经验:有一次做地下车库项目,客户要求每个车位检测器都要能远程升级固件。我一开始选了STM32,结果发现要加WiFi模块,成本直接翻倍。后来换成ESP32,一个芯片全搞定。所以,选型时一定要想清楚“未来会不会需要联网”。
3.2 LoRa模块选型:SX1278 vs SX1262
LoRa模块是系统的通信核心。说白了,它就是让数据能传得远、穿得透。市面上最常见的就两个型号——SX1278和SX1262。
为什么会这样?因为Semtech公司就这两代产品最成熟。SX1278是老将,SX1262是新秀。我建议你直接看需求:
- SX1278:便宜、稳定、资料多。最大发射功率+20dBm,接收灵敏度-148dBm。适合大多数停车场场景。
- SX1262:功耗更低、灵敏度更高(-148dBm @ SF12),支持FSK/OOK模式。适合需要超低功耗或超远距离的场景。
注意:SX1262虽然性能更好,但它的寄存器配置和SX1278完全不同。如果你从SX1278迁移到SX1262,底层驱动几乎要重写。我曾经在这个坑里爬了三天...
我个人建议:新手先用SX1278。为什么?因为它的生态太成熟了,网上随便一搜就是现成的驱动库。你想想看,一个停车位检测系统,通信距离有个500米就足够了,SX1278完全能胜任。
3.3 传感器选型:地磁 vs 超声波
传感器是检测车位状态的“眼睛”。目前主流方案就两种:地磁传感器和超声波传感器。
| 对比项 | 地磁传感器(如RM3100) | 超声波传感器(如HC-SR04) |
|---|---|---|
| 检测原理 | 检测地球磁场变化 | 发射声波测距 |
| 功耗 | 极低(μA级) | 较高(mA级) |
| 安装方式 | 埋地安装 | 吊顶安装 |
| 抗干扰能力 | 受铁磁物质影响 | 受温度、湿度影响 |
| 成本 | 15-25元 | 5-10元 |
嗯,这里要注意。地磁传感器虽然功耗低,但它有个致命弱点——容易被附近的大型金属物体干扰。我记得有一次在钢结构车库里测试,地磁数据完全乱跳,后来不得不换成超声波方案。
反过来,超声波传感器虽然便宜,但它的功耗是个大问题。一个HC-SR04测一次就要20mA,如果每秒测一次,电池根本撑不住。所以我的做法是:用超声波做触发唤醒,平时让主控休眠,有车经过时再唤醒测距。
我的推荐:电池供电的独立车位检测器,用地磁传感器(RM3100或MMC5983MA)。有市电供电的集中式检测系统,用超声波传感器(JSN-SR04T防水型)。
3.4 电源管理方案
电源管理是整个系统的命脉。尤其是电池供电的设备,电源设计的好坏直接决定了产品能用多久。
我总结了一套“三步走”的电源管理策略:
- 选对电池:CR2032适合低功耗场景(地磁+LoRa),18650锂电池适合高功耗场景(超声波+WiFi)。
- 用对DCDC:不要用LDO!不要用LDO!不要用LDO!重要的事情说三遍。LDO的效率在电池电压下降时会急剧恶化。我习惯用TPS63020或SY8303这类升降压DCDC,效率能到90%以上。
- 做好休眠:主控休眠时,一定要把外设的电源也切断。我通常用一个MOS管做负载开关,休眠时彻底断开传感器和LoRa模块的供电。
避坑指南:我曾经设计过一个产品,休眠电流测出来只有2μA,但实际用起来电池只能撑三个月。后来发现是LoRa模块的DIO引脚在休眠时漏电。解决办法很简单——在DIO引脚上串一个10kΩ电阻到地,把电平拉死。
最后,给你一个具体的电源方案参考:
/* 电源管理伪代码 */
void system_sleep() {
// 1. 关闭传感器电源
GPIO_ResetBits(SENSOR_POWER_PORT, SENSOR_POWER_PIN);
// 2. 关闭LoRa模块电源
GPIO_ResetBits(LORA_POWER_PORT, LORA_POWER_PIN);
// 3. 进入STOP模式
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
}
void system_wakeup() {
// 1. 恢复时钟
SystemClock_Config();
// 2. 开启传感器电源
GPIO_SetBits(SENSOR_POWER_PORT, SENSOR_POWER_PIN);
// 3. 开启LoRa模块电源
GPIO_SetBits(LORA_POWER_PORT, LORA_POWER_PIN);
// 4. 等待模块稳定
HAL_Delay(10);
}
好了,硬件选型这块就聊到这儿。记住一句话:选型不是选最好的,而是选最合适的。下一章咱们开始搭建开发环境,把代码跑起来。