如何安全的让小容量电容爆炸?
前几天在浏览 X (Twitter) 的时候刷到了一个很酷的慢动作视频,博主硬核地引爆了一颗电容,那种暴力美学瞬间击中了我的神经。平时调试电路我们最怕听到“嘭”的一声,但如果这种“故障”是我们精心策划的呢? 毕竟,男生对炸东西总是很感兴趣,今天就让我们用科学(作死)的方式,给这颗电容来一场体面的“葬礼”。
温馨提示
- 实验具有一定危险性,请确认已经做好防护(护目镜/防爆罩),并且对强电弱电有一定了解。
- 建议使用小容量、小耐压电容(如16V 47uF)进行测试。
- 感谢嘉立创对本篇文章的大力支持。
核心原理:为什么会炸?
在动手之前,我们需要知道“炸机”的物理机制。 电解电容内部有一层极薄的氧化铝作为绝缘层。当极性接反时,这层氧化膜会迅速发生电化学反应而剥离。瞬间,电容变成了“电阻”,电流导致电解液高温汽化产生大量氢气。当内部压力超过铝壳承受极限,它就会像高压锅一样——“嘭”!
实验准备与逻辑
- 材料:废旧板子上拆的 16V 47uF 电解电容、嘉立创白嫖的 LCKFB-GD32E230C8T6 主控、低电平吸合继电器、有源蜂鸣器、按键。
- 逻辑设计:我不希望它通电即炸,而是要有“仪式感”。
- 代码逻辑:按下按键 -> 触发15秒倒计时 -> 蜂鸣器与LED频率由慢变快(模拟定时炸弹) -> 时间到,继电器吸合 -> 起爆。
接线过程
接线分为控制逻辑和“处刑”电路两部分。
控制端(GD32):
PIN_8-> 蜂鸣器(制造紧张气氛)PIN_0-> 启动按键PIN_2-> 继电器控制端(负责点火)
处刑端(关键步骤): 这是最反直觉的一步,我们需要构建一个反接电路:
- 找一个直流电源(电压略高于电容耐压)。
- 电源正极 -> 继电器公共端 (COM) -> 继电器常开端 (NO) -> 电容负极(白条侧)。
- 电源负极 -> 电容正极。
安全预检(防误爆):
- 在最终连接电容之前,请务必先用万用表电压档测试输出端。
- 确保上电后输出端电压为 0V,只有倒计时结束后才有电压。这一步是为了防止继电器接错(如误接常闭端 NC)导致上电瞬间立即引爆,误伤自己。
- 电容一定要用长线引出10cm左右,以免对主控造成伤害。
炸机现场与反思
随着蜂鸣器急促的滴答声结束,继电器“咔哒”吸合,紧接着就是一声清脆的巨响。
电容的铝壳瞬间变形飞出,周围喷溅了不明液体和絮状物。虽然看着挺解压,但这也验证了电容爆炸的危害:
- 物理伤害:铝壳飞出的动能足以伤眼(再次强调护目镜的重要性)。
- 二次伤害:炸出来的电解液和铝箔碎屑都是导电的!在实际电路中,电容爆炸后往往会因为这些喷溅物导致周围芯片短路烧毁,这才是设备报废的真正原因。
炸机视频及图片

炸机代码
#include "gd32e23x.h"
#include "systick.h"
/* =================================================
* 解决 gd32e23x_it.c 中的 SysTick_Handler 链接问题
* ================================================= */
void led_spark(void) {}
/* ================= 引脚定义 ================= */
#define LED_PORT GPIOC
#define LED_PIN GPIO_PIN_13 // PC13:高亮,低灭
#define BEEP_PORT GPIOA
#define BEEP_PIN GPIO_PIN_8 // 有源蜂鸣器:高响
#define RELAY_PORT GPIOA
#define RELAY_PIN GPIO_PIN_2 // 继电器:低吸合
#define KEY_PORT GPIOA
#define KEY_PIN GPIO_PIN_0 // 按键:低有效
/* ================= LED 语义封装(防再翻车) ================= */
#define LED_ON() gpio_bit_set(LED_PORT, LED_PIN)
#define LED_OFF() gpio_bit_reset(LED_PORT, LED_PIN)
/* ================= 参数 ================= */
#define TOTAL_TIME_MS 15000 // 倒计时 30 秒
#define START_PERIOD 2000 // 初始节奏 2 秒
#define END_PERIOD 200 // 最快节奏 200ms
/* ================= 状态机 ================= */
typedef enum {
STATE_IDLE, // 等待
STATE_COUNTDOWN, // 倒计时
STATE_WORK // 最终状态
} state_t;
/* ================= GPIO 初始化 ================= */
static void gpio_init_all(void)
{
rcu_periph_clock_enable(RCU_GPIOA);
rcu_periph_clock_enable(RCU_GPIOC);
/* LED PC13 */
gpio_mode_set(LED_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED_PIN);
gpio_output_options_set(LED_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED_PIN);
LED_OFF(); // 上电灭(你现在看到的就是对的)
/* 蜂鸣器 PA8 */
gpio_mode_set(BEEP_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, BEEP_PIN);
gpio_output_options_set(BEEP_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, BEEP_PIN);
gpio_bit_reset(BEEP_PORT, BEEP_PIN); // 静音
/* 继电器 PA2 */
gpio_mode_set(RELAY_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, RELAY_PIN);
gpio_output_options_set(RELAY_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, RELAY_PIN);
gpio_bit_set(RELAY_PORT, RELAY_PIN); // 释放
/* 按键 PA0(上拉) */
gpio_mode_set(KEY_PORT, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY_PIN);
}
/* ================= 按键检测(阻塞 + 消抖) ================= */
static uint8_t key_pressed(void)
{
if (gpio_input_bit_get(KEY_PORT, KEY_PIN) == RESET)
{
delay_1ms(20);
if (gpio_input_bit_get(KEY_PORT, KEY_PIN) == RESET)
{
while (gpio_input_bit_get(KEY_PORT, KEY_PIN) == RESET);
return 1;
}
}
return 0;
}
/* ================= 主函数 ================= */
int main(void)
{
systick_config();
gpio_init_all();
state_t state = STATE_IDLE;
uint32_t elapsed = 0;
uint32_t period = START_PERIOD;
while (1)
{
switch (state)
{
/* ---------------- 等待状态 ---------------- */
case STATE_IDLE:
LED_OFF();
gpio_bit_reset(BEEP_PORT, BEEP_PIN); // 蜂鸣器静音
gpio_bit_set(RELAY_PORT, RELAY_PIN); // 继电器释放
if (key_pressed())
{
elapsed = 0;
state = STATE_COUNTDOWN;
}
break;
/* ---------------- 倒计时状态 ---------------- */
case STATE_COUNTDOWN:
if (elapsed >= TOTAL_TIME_MS)
{
state = STATE_WORK;
break;
}
/* 节奏线性加快 */
period = START_PERIOD -
(START_PERIOD - END_PERIOD) * elapsed / TOTAL_TIME_MS;
LED_ON();
gpio_bit_set(BEEP_PORT, BEEP_PIN);
delay_1ms(period / 2);
LED_OFF();
gpio_bit_reset(BEEP_PORT, BEEP_PIN);
delay_1ms(period / 2);
elapsed += period;
break;
/* ---------------- 最终状态 ---------------- */
case STATE_WORK:
LED_ON(); // LED 常亮
gpio_bit_set(BEEP_PORT, BEEP_PIN); // 蜂鸣器常响
gpio_bit_reset(RELAY_PORT, RELAY_PIN); // 继电器吸合
if (key_pressed())
{
state = STATE_IDLE;
}
break;
}
}
}
总结:保持敬畏,安全搞机。做实验一定要做好防护措施!
