如何安全的让小容量电容爆炸?
Minsp·隅
2026-01-03
1354 字
7 分钟

前几天在浏览 X (Twitter) 的时候刷到了一个很酷的慢动作视频,博主硬核地引爆了一颗电容,那种暴力美学瞬间击中了我的神经。平时调试电路我们最怕听到“嘭”的一声,但如果这种“故障”是我们精心策划的呢? 毕竟,男生对炸东西总是很感兴趣,今天就让我们用科学(作死)的方式,给这颗电容来一场体面的“葬礼”。

温馨提示
  • 实验具有一定危险性,请确认已经做好防护(护目镜/防爆罩),并且对强电弱电有一定了解。
  • 建议使用小容量、小耐压电容(如16V 47uF)进行测试。
  • 感谢嘉立创对本篇文章的大力支持。

核心原理:为什么会炸?#

在动手之前,我们需要知道“炸机”的物理机制。 电解电容内部有一层极薄的氧化铝作为绝缘层。当极性接反时,这层氧化膜会迅速发生电化学反应而剥离。瞬间,电容变成了“电阻”,电流导致电解液高温汽化产生大量氢气。当内部压力超过铝壳承受极限,它就会像高压锅一样——“嘭”!

实验准备与逻辑#

  1. 材料:废旧板子上拆的 16V 47uF 电解电容、嘉立创白嫖的 LCKFB-GD32E230C8T6 主控、低电平吸合继电器、有源蜂鸣器、按键。
  2. 逻辑设计:我不希望它通电即炸,而是要有“仪式感”。
    • 代码逻辑:按下按键 -> 触发15秒倒计时 -> 蜂鸣器与LED频率由慢变快(模拟定时炸弹) -> 时间到,继电器吸合 -> 起爆

接线过程#

接线分为控制逻辑和“处刑”电路两部分。

  1. 控制端(GD32)

    • PIN_8 -> 蜂鸣器(制造紧张气氛)
    • PIN_0 -> 启动按键
    • PIN_2 -> 继电器控制端(负责点火)
  2. 处刑端(关键步骤): 这是最反直觉的一步,我们需要构建一个反接电路

    • 找一个直流电源(电压略高于电容耐压)。
    • 电源正极 -> 继电器公共端 (COM) -> 继电器常开端 (NO) -> 电容负极(白条侧)
    • 电源负极 -> 电容正极
  3. 安全预检(防误爆)

    • 在最终连接电容之前,请务必先用万用表电压档测试输出端
    • 确保上电后输出端电压为 0V,只有倒计时结束后才有电压。这一步是为了防止继电器接错(如误接常闭端 NC)导致上电瞬间立即引爆,误伤自己。
    • 电容一定要用长线引出10cm左右,以免对主控造成伤害。

炸机现场与反思#

随着蜂鸣器急促的滴答声结束,继电器“咔哒”吸合,紧接着就是一声清脆的巨响。

电容的铝壳瞬间变形飞出,周围喷溅了不明液体和絮状物。虽然看着挺解压,但这也验证了电容爆炸的危害:

  1. 物理伤害:铝壳飞出的动能足以伤眼(再次强调护目镜的重要性)。
  2. 二次伤害:炸出来的电解液和铝箔碎屑都是导电的!在实际电路中,电容爆炸后往往会因为这些喷溅物导致周围芯片短路烧毁,这才是设备报废的真正原因。

炸机视频及图片#

炸机代码#

#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;
        }
    }
}

总结:保持敬畏,安全搞机。做实验一定要做好防护措施!