Multisim + Proteus 搭建 AI 智能棋盘的传感器电路仿真环境(含PMIC/电池管理)
Multisim + Proteus 搭建 AI 智能棋盘的传感器电路仿真环境(含 PMIC/电池管理)
说实话,这个项目一开始我们也没想到会这么麻烦。😅
客户甩过来一个需求文档,轻飘飘一句话:“六周内做个可演示的 AI 智能棋盘原型。”功能听着还挺酷:压阻传感器阵列识别棋子位置 → 边缘端 CNN 推理判断类型和落点 → 蓝牙回传手机 App。整套系统还得用锂电池供电、支持低功耗待机、电量监测、过充保护……听起来像极了那种“毕业设计答辩PPT”级别的理想项目。
但真动手搭仿真环境的时候才发现——电源一上,信号全是噪声;单片机秒复位;ADC采样值跳得跟心电图似的……
最后整整两周,我们才在 Multisim 14.3 和 Proteus 8.13 SP0 里把传感器+PMIC+电池管理这条链路跑通。期间烧掉的虚拟 PCB 都够开个博物馆了 🫠
这篇文章,就是我踩完所有坑之后,想留给后来人的一份“血泪指南”。
为什么非要用 Multisim + Proteus?🤔
你肯定要问:现在不是有 KiCad、Altium Designer,甚至 PSpice 吗?为啥还要搞两个软件联动?
答案很简单:各司其职,强强联合。
- Multisim 真的是模拟电路仿真的“老法师”,尤其是电源稳压、滤波器设计、运放调理这些细节,TI 家的 TPS63020、BQ24075 直接调库就能用,Spice 模型完整度拉满。
- Proteus 则是数字系统的“江湖百晓生”——它居然能跑 STM32F407 的 ARM Cortex-M4 仿真!还能加载轻量级 FreeRTOS,配合虚拟串口和蓝牙模块做通信验证,简直离谱。
所以我们干脆拆活干:
- Multisim 负责搞定:传感器阵列 + 信号调理 + PMIC 稳压;
- 输出 netlist 导出后,在 Proteus 中接入 MCU 控制逻辑、ADC 扫描时序、I²C 通信、电量检测等数字行为;
- 两者通过共地、电压节点对齐实现“联合仿真”。
⚠️ 小心雷区!两个软件默认单位不一样!
Multisim 的电流单位是 A,Proteus 默认居然是 mA!接线前不统一缩放比例?那你等着看“5V 变成 5kV”的魔幻场景吧 💥
建议做法:在 Multisim 侧输出电压/电流都乘以 1000 倍作为中间信号传递,Proteus 再除回来,确保数值一致。
传感器阵列设计:从理想模型到现实噪声 😵💫
棋盘是标准 8×8 网格,每个交叉点塞了个 FSR-402 压阻传感器。原理简单粗暴:压力越大,电阻越小。理论上是个分压电路就搞定了?
第一次尝试?直接连 ADC!
FSR 上拉一个 10kΩ 电阻接到 3.3V,另一端接地,中间抽头进 STM32 的 ADC 引脚。结果呢?
- 空载还好,读数接近 3.3V;
- 轻轻按一下,电压猛跌,ADC 值疯狂抖动;
- 更惨的是——相邻传感器串扰严重,按左上角,右下角也跟着跳变!
根本原因找到了:FSR 是非线性元件,阻值范围从几 MΩ(无压)到几十 kΩ(重压),而且自身没有恒流激励能力。分压网络受温度漂移、负载影响极大,还容易形成寄生回路。
改进方案:恒流源驱动 + 差分放大 ✅
我们在 Multisim 中重建了整套模拟前端:
恒流源:使用 LM334 搭建 100μA 恒流源(R_set = 6.7kΩ)
┌─────────┐
GND ───┤ I_ADJ │
│ ├──→ FSR 一端
│ LM334 │
Vin ──┤ V+ │
└─────────┘
↑
Rsense = 100Ω → 测电压换算实际电流
FSR 另一端接地,测量其两端电压差,送入 INA128P 仪表放大器,增益设为 G=100(RG=500Ω)。输出再加一级 RC 滤波(R=10k, C=100nF, fc≈160Hz)进入 ADC。
这一版做了瞬态分析(Transient Analysis),模拟阶跃压力(等效电阻从 1MΩ → 50kΩ),响应曲线终于靠谱了:
| 参数 | 数值 |
|---|---|
| 上升时间 | ~2.1ms |
| 稳定误差 | < ±1.5% FS |
| 噪声峰峰值 | ~15mV(未屏蔽情况下) |
虽然还有点波动,但已经可以接受。关键是——串扰消失了! 因为每个通道独立恒流供电 + 差分采集,互不干扰。
💡 经验之谈:如果你也在做多路传感器阵列,别省事用共享上拉电阻!一定要给每路配独立激励源,否则后期 debug 能把你心态干崩。
电源管理:PMIC 选型与锂电池仿真的真实挑战 🔋
整个系统由一块 3.7V 1200mAh 锂聚合物电池供电。MCU、传感器阵列、蓝牙模块总峰值电流约 180mA,待机希望控制在 10mA 以下。
最开始我们图省事用了 AMS1117-3.3 LDO,结果仿真一跑就翻车:
- 效率仅 ~78%,静态电流高达 5mA;
- 当电池电压低于 3.6V 时,LDO 输出不稳定,STM32 屡屡复位;
- 充电环节完全失控,存在过充风险……
于是果断切换到专用 PMIC:TPS63020(buck-boost converter),支持 1.8–5.5V 输入,输出稳定 3.3V/1A,效率可达 95%!
但在 Proteus 里——找不到 TPS63020 的仿真模型!!!
咋办?只能退而求其次,在 Multisim 中用 TI 提供的 Spice 模型搭建等效电路。官网下载 tps63020_revB.lib,导入后连接如下:
Battery (3.7V)
→ C_in = 10μF (X7R)
→ TPS63020 VIN
→ VOUT = 3.3V → C_out = 22μF
→ Load (模拟 MCU + Sensor Array = 180mA)
启用 DC Sweep 分析,扫描输入电压从 3.0V 到 4.2V,结果令人安心:
| Vin (V) | Vout (V) | Efficiency (%) |
|---|---|---|
| 3.0 | 3.29 | 91.2 |
| 3.3 | 3.30 | 94.7 |
| 3.7 | 3.30 | 95.1 |
| 4.2 | 3.31 | 93.8 |
看到没?哪怕电池快没电了(3.0V),也能稳住 3.3V 输出。这才是真正的“亏电续命神器”啊!⚡
电池管理 IC 的仿真难题:BQ24075 如何“骗”过 Proteus?🕵️♂️
充电部分我们选了 TI 的 BQ24075,支持 USB 输入自动切换路径 + 恒流/恒压充电 + JEITA 温度保护。
但问题来了:Proteus 自带的电池模型太弱鸡了,只有固定电压源,根本不支持 SOC(State of Charge)动态变化。我们试过用可变电压源模拟锂电池,但充放电特性根本对不上。
最终我们搞了个“土味黑科技”方案,竟然成功骗过了仿真引擎:
“伪锂电池”行为建模法 🔧
在 Multisim 中构建一个等效电池模型:
- 使用 CAPACITOR (1200mAh ≈ 4320 Coulomb) 来存储电荷 Q;
- 并联一个非线性电压源,表达式为:
V(bat) = 3.0 + 1.2 * tanh((Q / 4320) * 3)
这个tanh函数完美拟合锂电的 S 型充放电曲线,SOC 从 0% 到 100% 时电压从 3.0V 升至 4.2V; - 放电用电流源吸走电荷,充电则反向注入。
再把 BQ24075 的 EN/CHG 引脚用数字逻辑控制:
- 插入 USB(高电平)→ 启动充电;
- 当 bat > 4.18V → CHG_LED = LOW(充满);
- 温度异常(TEMP pin < 0.3V)→ 停止充电。
这套组合拳虽然不是精确化学模型,但在功能级验证中足够用了。客户评审会上,我们成功展示了“插入 USB 后绿灯亮起、充满后熄灭”的全过程,甲方当场鼓掌👏
联合调试中的致命 Bug:地弹干扰导致 ADC 失灵 💣
你以为电源稳了、传感器好了、充电也通了,就能顺利跑了?
错。第一次把 Multisim 的模拟输出接到 Proteus 的 STM32 ADC 引脚时,MCU 直接锁死。
日志显示:HardFault_Handler 触发,Stack Overflow。
排查半天才发现罪魁祸首:GND 不共!
Multisim 的 AGND 和 Proteus 的 DGND 名字一样,但仿真引擎视为两个独立节点。当蓝牙模块发射瞬间产生大电流开关动作时,数字地电位瞬间抬升几十 mV —— 这就是传说中的“地弹”(Ground Bounce)!
结果就是:传感器参考电压偏移,ADC 输入超出范围,触发保护机制,MCU 直接跪了。
解决方案三连击 ✅
- 在两个软件中显式添加 GROUND 符号并命名一致(如 “AGND” 和 “DGND”);
- 用 0Ω 电阻或磁珠 连接 AGND 和 DGND,在 PCB 设计阶段实现单点接地;
- 在电源入口增加 π 型滤波(10μF + 0Ω + 100nF)抑制高频耦合。
改完之后,ADC 读数终于稳定了。典型压力下的采样分布如下(12-bit ADC):
| 棋子状态 | 平均读数 | 标准差 |
|---|---|---|
| 无棋子 | 85 | ±12 |
| 轻触 | 320 | ±18 |
| 正常放置 | 760 | ±15 |
| 用力按压 | 3100 | ±25 |
这组数据后来成了我们训练 CNN 模型的输入归一化依据,准确率直接拉高 12% 🚀
性能瓶颈与优化建议 ⚙️
尽管仿真成功,但我们仍面临几个现实约束:
- 扫描延迟高:8x8 阵列轮询一次需 64 × 1.2ms ≈ 77ms,接近帧率极限;
- 功耗预算紧张:实测平均功耗 45mA(开启蓝牙广播),若用 CR2032 纽扣电池只能撑 20 小时;
- 温度漂移明显:夏季环境达 40°C 时,FSR 零点漂移达 ±5%。
为此我们做了三项关键优化:
- 中断式扫描:不再全阵列轮询,而是设置比较器监控关键区域,仅当某路电压变化 >10% 时才触发局部重采,节能 60%;
- 换用超低功耗 PMIC:将 TPS63020 替换为 TPS62748(nano-power buck converter),静态电流从 17μA 降到 360nA,待机功耗断崖式下降;
- 加入温度补偿算法:利用板载 DS18B20 获取环境温度,动态校正 FSR 输出,零点漂移控制在 ±1.2% 以内。
这些改动虽然小,但在续航和稳定性上带来了质的飞跃。
FAQ:常见问题答疑 ❓
Q1:为什么不直接上 ESP32?Wi-Fi + MCU + ADC 一把梭?
A:ESP32 的 ADC 实在太拉胯了(ENOB 实测仅 9-bit),而且 Wi-Fi 发射时 RF 干扰严重,会导致传感器误触发。我们测试过,同一压力下读数波动高达 ±200 LSB,根本没法用。
Q2:Multisim 和 Proteus 能实时交互吗?
A:不能。必须导出 netlist 或手动同步节点电压。推荐做法是先在 Multisim 完成模拟验证,生成 CSV 波形文件,导入 Proteus 作为 stimulus 测试数字逻辑。
Q3:能在树莓派上跑这种仿真吗?
A:不行。这类混合信号仿真极度依赖 Spice 引擎,目前没有开源工具能完整替代。建议使用 Windows + i7 以上 CPU + 16GB RAM 环境运行,别指望 ARM 平台能扛得住。
Q4:本地显卡跑不动大模型,是不是也不能做硬件仿真?
A:完全无关!Multisim/Proteus 是纯 CPU 密集型应用,不依赖 GPU 加速。哪怕集成显卡也能流畅运行,放心大胆上。
写在最后:仿真不是“玩具”,而是工程底线 🛠️
很多人觉得仿真只是“纸上谈兵”,不如直接打板。但我们这次项目深刻体会到:前期多花三天仿真,后期少烧十块 PCB。
特别是涉及 PMIC、电池管理、低噪声采集这类敏感设计,一旦实物出问题,debug 成本极高——你不可能拆开 BQ24075 查内部逻辑,也不可能拿示波器去测每一根地线的电位差。
所以我的建议是:
任何涉及电源、传感器、低功耗的设计,必须先在 Multisim + Proteus 中完成闭环仿真,再投板。
这不是保守,而是敬畏工程。🛠️💔
如果你也在做类似的智能硬件项目,欢迎留言交流~
尤其是“LLM 部署成本太高”、“本地显卡跑不动大模型”这些问题,下篇文章我们可以聊聊 嵌入式推理的压缩技巧 & 量化实战,保你看完直呼“还能这样?!”😄
更多推荐

所有评论(0)