Arduino Nano 磁悬浮装置:原理、接线与 PID 调参全记录
核心原理
利用 线性霍尔传感器 (SS49E/49E) 实时检测电磁铁产生的磁场强度,Arduino 根据磁场反馈调节电磁铁电流,使永久磁铁悬浮在平衡点。属于典型的单自由度磁悬浮,不稳定平衡需闭环控制。
物料清单
| 组件 | 规格/型号 | 关键参数 |
|---|---|---|
| Arduino Nano R3 | 任意兼容板 | 5V 逻辑,D5 PWM 输出 |
| 电磁铁 | 12V/25 mm 直径 | 功耗约 1-2W,需外部 12V/1A 电源 |
| 线性霍尔传感器 | SS49E / A1302 / A1324 | 必须线性输出,禁用开关型霍尔 |
| 达林顿管 | TIP120 (NPN) | 驱动电磁铁,集电极耐压 60V/5A |
| 续流二极管 | 1N4007 | 反向并联电磁铁两端,吸收反电动势 |
| 基极电阻 | 1 kΩ | 限制 Arduino D5 基极电流 |
| 微调按键 | 2× 轻触开关 | D7/D8 上拉输入,调节平衡点 |
| 12V/1A 直流电源 | 外部适配器 | 共地与 Arduino |
电路接线(面包板/专用 Shield)
12V ──────────┬──── 电磁铁 ──────┬──── TIP120 C
│ │
1N4007 │
(阴极)◄─────┘ │
TIP120 B ── 1kΩ ── D5 (PWM)
TIP120 E ── GND
霍尔传感器 VCC ── 5V
霍尔传感器 GND ── GND
霍尔传感器 OUT ── A1 (模拟输入)
按键+ D7, 按键- D8 (内部上拉)
两套固件对比
简易版(阈值比较)
- 读取霍尔 ADC 值
anaVal - 按键微调目标值
levVal anaVal < levVal→ 电磁铁全开 (LOW);否则全关 (HIGH)- 固定 250 μs 延时,适合入门理解磁悬浮概念
PID 版(连续调节)
- 引入标准 PID:
output = -Kp*error - Ki*∫error - Kd*d(error)/dt analogWrite(digPin, digVal)输出 0-255 PWM 线性驱动- 参数起调:
Kp=1.0, Ki=0.1, Kd=0.01, dt=0.1ms - 按键微调
setpoint,串口 57600 波特率输出调试波形 - 悬浮高度稳定性显著优于阈值版,抗干扰能力强
关键调试技巧
- 霍尔安装位置:必须置于电磁铁芯顶端下方 5 mm 处,测量磁场最线性区域
- 永久磁铁:仅限钕铁硼强磁 (N35/N52),普通铁氧体磁铁磁通量不足
- 重物更稳:悬浮物体越重(如螺母堆叠),惯性越大,越不易振荡脱轨
- 串口观测:开启
value_log()实时看anaVal / digVal / levVal,手动微调至anaVal ≈ levVal时电磁铁刚好通断交替 - PID 调参口诀:先增 Kp 至微震 → 加 Kd 抑制震荡 → 微调 Ki 消除静差
3D 打印外壳与 PCB
- Thingiverse: 悬浮座本体 (免螺丝胶水组装)
- Thingiverse: Nano 扩展板 / OSH Park 共享订板
常见失败模式
| 现象 | 可能原因 | 排查 |
|---|---|---|
| 磁铁直接吸住电磁铁芯 | 霍尔装反/距离太近/阈值过大 | 翻转霍尔、垫高 5mm、降低 levVal |
| 磁铁落地不吸 | 电磁铁极性反/驱动管烧毁/供电不足 | 对调电磁铁线圈极性、测 TIP120、查 12V 纹波 |
| 剧烈上下抖动 | PID 参数不当/霍尔噪声大/延时过长 | 加 0.1μF 滤波电容、减小 dlyVal、重调 PID |
制造工艺
- 复古 Numitron 管时钟:Arduino Nano 驱动,低温可靠省电
- K30 CO₂ 传感器:室内空气质量实时监测
- 基于 1Sheeld 与 Arduino 的盲聋人士沟通辅助系统
- 智能存钱罐:Arduino Nano 控制硬币识别器实现余额显示
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- DFRobot 电容指纹传感器 (ID809) 接入 Arduino/ESP8266 完整教程
- 基于 Arduino Mega 与 Nextion 显示屏的交互式气象站
- Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
- Arduino 简易排斥式磁悬浮:电路与 DIY 指南
- Arduino UNO + 以太网盾板实现低成本太阳辐射测量仪(热电堆原理)
- 紧凑型Arduino雷达系统:HC-SR04超声波传感器配1.8英寸显示屏
- Arduino 合成乐音:从零实现 88 键钢琴全音域