关于 power-budget-calculator
面向嵌入式项目的功耗与电池续航估算技能,可按组件、工作模式和占空比计算平均电流与运行时间。附带组件电流数据库、电池参考和低功耗设计建议。
主要功能
- 01按组件及工作模式估算电流
- 02支持占空比计算
- 03估算电池运行时间
- 04提供组件电流数据库
- 05列出硬件与软件低功耗建议
适用场景
- 01估算电池供电设备的续航
- 02比较传感器或通信模块的功耗
- 03规划睡眠与唤醒周期
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ wedsamuel1230/ embedded-engineering-skills --skill power-budget-calculator安装后在 Claude Code 中输入/power-budget-calculator确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/example-project.jsonreferences/component-database.mdscripts/calculate_power.py详细介绍
功耗预算计算器
估算嵌入式项目的功耗和电池寿命。
资源
- scripts/calculate_power.py - 带元件数据库、占空比支持、电池寿命估算的 Python 计算器
- references/component-database.md - 来自数据手册的全面电流消耗参考
- assets/example-project.json - 示例项目配置
快速开始
以交互方式运行计算器:
uv run --no-project scripts/calculate_power.py --interactive
或计算单个元件的功耗:
uv run --no-project scripts/calculate_power.py --component ESP32 --mode deep_sleep --duty 95
加载项目配置:
uv run --no-project scripts/calculate_power.py --json assets/example-project.json --output report.md
列出数据库中的所有元件:
uv run --no-project scripts/calculate_power.py --list
适用场景
- "我的电池能用多久?"
- "我需要多大容量的电池?"
- "我的项目消耗多少电流?"
- 规划电池供电项目
- 针对低功耗进行优化
工作流
第 1 步:收集元件清单
向用户询问:
- 微控制器(型号和工作模式)
- 所有传感器和模块
- 显示器
- 执行器(电机、LED、继电器)
- 通信(WiFi、蓝牙、LoRa)
- 运行配置(常开还是占空比)
第 2 步:计算功耗预算
运行 scripts/calculate_power.py --interactive 进行引导式计算,或使用此模板:
# Power Budget: [Project Name]
## Operating Conditions
- Supply Voltage: [V]
- Operating Modes: [Active/Sleep cycles]
- Duty Cycle: [X% active, Y% sleep]
## Component Current Draw
### Always-On Components
| Component | Voltage | Current | Power | Notes |
|-----------|---------|---------|-------|-------|
| [name] | [V] | [mA] | [mW] | [conditions] |
| ... | ... | ... | ... | ... |
| **Subtotal** | - | **[mA]** | **[mW]** | - |
### Active Mode Only
| Component | Voltage | Current | Power | Duty % |
|-----------|---------|---------|-------|--------|
| [name] | [V] | [mA] | [mW] | [%] |
| ... | ... | ... | ... | ... |
| **Subtotal** | - | **[mA]** | **[mW]** | - |
### Peak Current Events
| Event | Current | Duration | Frequency |
|-------|---------|----------|-----------|
| [WiFi TX] | [mA] | [ms] | [per hour] |
| ... | ... | ... | ... |
## Power Calculations
### Average Current
I_avg = (I_active × t_active + I_sleep × t_sleep) / t_total I_avg = ([X]mA × [Y]s + [Z]mA × [W]s) / [T]s I_avg = [result] mA
### Battery Life Estimate
Capacity: [X] mAh Efficiency factor: 0.8 (80% usable) Effective capacity: [X × 0.8] mAh
Runtime = Effective capacity / I_avg Runtime = [X] mAh / [Y] mA Runtime = [Z] hours ([days] days)
## Recommendations
- [Power optimization suggestions]
- [Battery type recommendation]
- [Sleep mode configuration]
电流消耗数据库
微控制器
Arduino(ATmega328P @ 5V)
| 模式 | 电流 | 备注 |
|---|---|---|
| 活动(16MHz) | 15-20mA | 无外设 |
| 空闲 | 6mA | CPU 停止,外设开启 |
| 掉电 | 0.1µA | 仅 WDT/外部中断 |
| 带 USB-Serial | +50mA | CH340/FTDI 芯片常开 |
ESP32(WROOM-32)
| 模式 | 电流 | 备注 |
|---|---|---|
| 活动(WiFi TX) | 160-260mA | 传输期间的峰值 |
| 活动(WiFi RX) | 95-100mA | 监听 |
| 活动(无 WiFi) | 20-68mA | 仅 CPU |
| Modem-sleep | 20mA | WiFi 关闭,CPU 开启 |
| Light-sleep | 0.8mA | CPU 暂停 |
| Deep-sleep | 10µA | 仅 RTC |
| 休眠 | 5µA | RTC 关闭 |
ESP32-C3
| 模式 | 电流 | 备注 |
|---|---|---|
| 活动(WiFi TX) | 320mA 峰值 | 短暂尖峰 |
| 活动(BLE) | 50-100mA | 广播期间 |
| 活动(无射频) | 25-35mA | CPU 以 160MHz 运行 |
| Light-sleep | 130µA | 自动唤醒 |
| Deep-sleep | 5µA | RTC 开启 |
RP2040(Pico)
| 模式 | 电流 | 备注 |
|---|---|---|
| 活动(双核) | 25-50mA | 取决于时钟 |
| 单核 | 15-25mA | 一个核心休眠 |
| 休眠 | 0.18mA | GPIO/RTC 唤醒 |
| 睡眠 | 1.3mA |
RP2040(Pico W)
| 模式 | 电流 | 备注 |
|---|---|---|
| WiFi 活动 | 50-150mA | 传输期间 |
| WiFi 空闲 | 30-40mA | 已连接,监听 |
| WiFi 关闭 | 25-50mA | 射频已禁用 |
传感器
| 传感器 | 活动 | 睡眠 | 备注 |
|---|---|---|---|
| DHT22 | 1.5mA | 50µA | 读取期间 |
| BME280 | 0.35mA | 0.1µA | 强制模式 |
| BMP280 | 0.27mA | 0.1µA | |
| MPU6050 | 3.8mA | 5µA | 所有轴 |
| DS18B20 | 1.5mA | 1µA | 转换期间 |
| HC-SR04 | 15mA | 2mA | 无真正睡眠 |
| VL53L0X | 19mA | 5µA | 测距期间 |
| MAX30102 | 600µA | 0.7µA | 低功耗模式 |
| BH1750 | 120µA | 1µA | 掉电模式 |
| GPS(NEO-6M) | 45mA | 11mA | 备份模式 |
显示器
| 显示器 | 活动 | 关闭/睡眠 | 备注 |
|---|---|---|---|
| 16x2 LCD(背光) | 80-120mA | 1mA | 背光占主导 |
| 16x2 LCD(无背光) | 1-2mA | 1mA | |
| SSD1306 OLED 128x64 | 8-20mA | 10µA | 取决于内容 |
| SSD1306 OLED 128x32 | 5-15mA | 10µA | |
| ST7735 TFT | 20-40mA | 20mA | 背光常开 |
| ILI9341 TFT | 50-80mA | 50mA | |
| E-Paper 2.9" | 8mA | 0µA | 仅在刷新期间 |
通信模块
| 模块 | 发送峰值 | 接收/空闲 | 睡眠 | 备注 |
|---|---|---|---|---|
| ESP8266 (模块) | 170mA | 70mA | 20µA | 深度睡眠 |
| NRF24L01 | 11.3mA | 13.5mA | 0.9µA | |
| HC-05 蓝牙 | 40mA | 8mA | 2mA | |
| RFM95 LoRa | 120mA | 10mA | 0.2µA | |
| SIM800L GSM | 2A 峰值 | 15mA | 1mA | 需要大电容! |
执行器
| 元件 | 电流 | 备注 |
|---|---|---|
| LED (典型) | 10-20mA | 通过电阻 |
| RGB LED (每种颜色) | 20mA | 每通道 |
| WS2812B NeoPixel | 60mA 最大 | 全白 |
| SG90 舵机 (空闲) | 10mA | 无负载 |
| SG90 舵机 (运动) | 200-500mA | 带负载 |
| MG996R 舵机 | 500-900mA | 带负载 |
| 小型直流电机 | 100-500mA | 随负载变化 |
| 5V 继电器模块 | 70-100mA | 线圈通电 |
| 蜂鸣器 (无源) | 30mA |
睡眠模式配置
ESP32 深度睡眠模板
#include <esp_sleep.h>
#define uS_TO_S_FACTOR 1000000ULL
#define TIME_TO_SLEEP 60 // seconds
void setup() {
// Do measurements here
// Configure wake-up source
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
// Enter deep sleep
esp_deep_sleep_start();
}
void loop() {
// Never reached
}
Arduino 掉电模板
#include <avr/sleep.h>
#include <avr/wdt.h>
void enterSleep() {
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
sleep_mode(); // Sleep here
sleep_disable();
}
// Wake on watchdog or external interrupt
ISR(WDT_vect) {
// Wake up
}
功耗优化清单
硬件
- 移除电源 LED (节省 5-10mA)
- 电池供电时移除 USB-Serial 芯片
- 使用低静态电流的 LDO (<10µA)
- 添加 MOSFET 为大电流外设供电门控
- 在未使用的引脚上使用下拉电阻
- 不读取时禁用 ADC
软件
- 在读取之间使用睡眠模式
- 尽可能降低时钟速度
- 批量处理数据并减少传输频率
- 不需要时关闭 WiFi/BLE
- 在深度睡眠中禁用欠压检测器
- 使用中断代替轮询
设计模式
电源门控:
VCC
│
[P-MOSFET] ← GPIO (LOW = ON)
│
[Sensor/Module]
│
GND
占空比循环公式:
I_average = (I_active × T_active + I_sleep × T_sleep) / T_total
Example: Sensor reads every 5 minutes
- Active: 50mA for 2 seconds
- Sleep: 10µA for 298 seconds
I_avg = (50mA × 2s + 0.01mA × 298s) / 300s
I_avg = (100 + 2.98) / 300
I_avg = 0.34mA
With 2000mAh battery:
Runtime = 2000mAh × 0.8 / 0.34mA = 4706 hours = 196 days
电池参考
常见电池类型
| 类型 | 电压 | 典型容量 | 备注 |
|---|---|---|---|
| CR2032 | 3V | 220mAh | 仅适用于极低电流 |
| 2x AA 碱性 | 3V | 2500mAh | 适合低功耗 |
| 3x AA 碱性 | 4.5V | 2500mAh | 直接用于 5V 系统 |
| 4x AA 碱性 | 6V | 2500mAh | 配合 LDO 降至 5V |
| 18650 锂离子 | 3.7V | 2000-3500mAh | 可充电,常用 |
| LiPo 1S | 3.7V | 多种 | 扁平,轻便 |
| 9V 碱性 | 9V | 500mAh | 能量密度差 |
放电电压曲线
18650/LiPo 放电曲线:
Capacity% Voltage
─────────────────────
100% 4.2V
80% 3.9V
50% 3.7V
20% 3.5V
0% 3.0V (cut-off!)
Never discharge below 3.0V - damages cell!
碱性 AA 放电:
Capacity% Voltage (per cell)
─────────────────────────────
100% 1.5V
50% 1.2V
0% 0.9V
Many devices stop working below 1.1V/cell
快速计算器
Enter your values:
Always-on current: ______ mA
Active current: ______ mA
Active time: ______ seconds
Sleep current: ______ mA
Sleep time: ______ seconds
Battery capacity: ______ mAh
Average current = (Active_mA × Active_s + Sleep_mA × Sleep_s) / Total_s
= (_____ × _____ + _____ × _____) / _____
= _____ mA
Runtime = Capacity × 0.8 / Average_current
= _____ × 0.8 / _____
= _____ hours
= _____ days
共享输出契约
使用 共享 Arduino 技能契约: 陈述假设、所需工具和版本、实现步骤、 按证明阶段分类的测试/证据、已知限制以及恢复/安全说明。
评论
支持 Markdown