双通道激光器监控系统

Dual-Laser Monitoring & Control System — STM32F103 · 24-bit ADC · PID 温控 · 自适应量程

STM32F103 MCU ADS1220 ×2 DAC8562 ×2 PID TEC 温控 TFT 触控GUI

项目概述

本系统用于同时驱动和监控两个半导体激光器。每个激光器配备独立的 TEC(半导体制冷器) 和 NTC 热敏电阻,通过 24-bit ADC 采集电流与温度,16-bit DAC 输出控制信号, 并结合 PID 闭环控制算法实现恒流驱动与精密温控。

系统采用 480×320 TFT 触摸屏作为人机交互界面, 支持双列同步显示两个通道的实时数据与状态,可通过触摸或串口命令调节参数。 所有设定值自动写入 Flash,断电不丢失。

激光器通道 0

ADC0 — ADS1220 @ PB12
DAC0 — DAC8562 @ PA3
DRV591 @ PA2
电流采样 · NTC 测温 · TEC PID 温控 · 过流/温差保护

激光器通道 1

ADC1 — ADS1220 @ PB10
DAC1 — DAC8562 @ PA4
DRV591 @ PA1
独立传感器 · 独立 PID 参数 · 独立保护阈值 · 独立 Flash 存储

核心特性

📏

自适应量程

PGA 增益 1x~128x 自动切换
IDAC 激励 10μA~1500μA 自适应
兼顾小信号分辨率与大信号防饱和

⚙️

双通道独立控制

每通道独立 PID 参数
独立 Flash 参数存储
独立错误检测与保护

📊

TFT 触控界面

480×320 双列布局
同步显示两通道数据
长按快速调节 / 触摸开关

🔌

串口命令控制

RS232 指令集
#set ld0/ld1 电流设定
#set temp0/temp1 温度设定
实时数据上报

多层安全保护

过流保护 (>1700mA)
温差保护 (±5°C / 3s)
ADC 故障检测
错误锁存与屏幕告警

💾

参数持久化

设定值延时自动写入 Flash
Magic + Checksum 校验
掉电恢复上次工作参数

技术规格

参数指标
主控STM32F103 (Cortex-M3 @ 72MHz)
ADCADS1220 ×2 — 24-bit ΔΣ, 2.048V 基准, 最高 2000SPS
DACDAC8562 ×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 字节/页, 双页独立存储

软件架构

代码按职责分层组织,模块间低耦合:

app/ 应用层

main.c laser_monitor.c laser_control.c laser_error.c laser_params.c serial_cmd.c laser_channel.h app_config.h

gui/ 界面层

gui.c gui_main.c gui_main_display.c gui_main_buttons.c gui_error.c gui_init.c button.c / text.c

hal/ 硬件抽象层

adc1220.c dac8562.c lcd.c / spi_hw_dma.c ft6336.c / ctpiic.c flash.c / pid.c timer.c

system/ 系统层

sys.c / sys.h delay.c usart.c stm32f10x.h

双通道架构

每个激光器对应一个 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 上报测量值