Dual-Laser Monitoring & Control System — STM32F103 · 24-bit ADC · PID 温控 · 自适应量程
本系统用于同时驱动和监控两个半导体激光器。每个激光器配备独立的 TEC(半导体制冷器) 和 NTC 热敏电阻,通过 24-bit ADC 采集电流与温度,16-bit DAC 输出控制信号, 并结合 PID 闭环控制算法实现恒流驱动与精密温控。
系统采用 480×320 TFT 触摸屏作为人机交互界面, 支持双列同步显示两个通道的实时数据与状态,可通过触摸或串口命令调节参数。 所有设定值自动写入 Flash,断电不丢失。
PGA 增益 1x~128x 自动切换
IDAC 激励 10μA~1500μA 自适应
兼顾小信号分辨率与大信号防饱和
每通道独立 PID 参数
独立 Flash 参数存储
独立错误检测与保护
480×320 双列布局
同步显示两通道数据
长按快速调节 / 触摸开关
RS232 指令集
#set ld0/ld1 电流设定
#set temp0/temp1 温度设定
实时数据上报
过流保护 (>1700mA)
温差保护 (±5°C / 3s)
ADC 故障检测
错误锁存与屏幕告警
设定值延时自动写入 Flash
Magic + Checksum 校验
掉电恢复上次工作参数
| 参数 | 指标 |
|---|---|
| 主控 | STM32F103 (Cortex-M3 @ 72MHz) |
| ADC | ADS1220 ×2 — 24-bit ΔΣ, 2.048V 基准, 最高 2000SPS |
| DAC | DAC8562 ×2 — 16-bit, 双通道, 2.5V 基准 |
| 电流测量 | 0.1Ω 采样电阻 + 10× 放大, PGA 1x~128x 自适应 |
| 温度测量 | NTC 10KΩ B=3950, IDAC 10μA~1500μA 自适应 |
| 电流控制范围 | 0 ~ 2000 mA |
| 温度控制范围 | -15 °C ~ +65 °C |
| TEC 控制 | PID 闭环 (P=0.1, I=0.08, D=0.16, 死区 ±0.001) |
| 电流稳定精度 | ±0.1 mA (稳态) |
| 温度稳定精度 | ±0.1 °C (稳态) |
| 显示屏 | ST7796S 3.5" IPS TFT — 480×320, 16-bit RGB565 |
| 触摸 | FT6336 电容触摸, I²C 接口 |
| 通讯接口 | UART1 @ 115200bps (RS232) |
| 参数存储 | 片上 Flash, 1024 字节/页, 双页独立存储 |
代码按职责分层组织,模块间低耦合:
每个激光器对应一个 LASER_CH_t 结构体,
包含该通道的全部状态:ADC/DAC 配置、测量值、设定值、PID 控制器、错误状态、Flash 存储标记。
全局 g_laser[2] 数组管理两个通道,
所有核心函数通过 LASER_CH_t *ch 指针区分操作目标。
| 指令 | 说明 |
|---|---|
#set ld0 500 | 设置通道0 电流 500mA |
#set ld1 800 | 设置通道1 电流 800mA |
#set temp0 25 | 设置通道0 目标温度 25°C |
#set temp1 30 | 设置通道1 目标温度 30°C |
#set tec0 on | 开启通道0 TEC 温控 |
#set tec1 off | 关闭通道1 TEC 温控 |
#set ld0 on | 开启通道0 激光器(需 TEC 就绪) |
#set ld1 off | 关闭通道1 激光器 |
数据上报帧格式: [0xAA 0xFF] [CMD] [LEN] [DATA×16] [SUM] [ADD] —
CMD 0xF0 上报设定值, CMD 0xF1 上报测量值