FPGA 温度采集与 Qt 曲线绘制系统——功能全景解析
一、项目定位
'温度看得见'是整套系统的唯一目标。FPGA 端负责'采得准、传得快';PC 端负责'画得顺、存得久'。双端通过极简串口帧完成解耦,既能在实验室做验证,也可直接搬到工业现场长期运行。
二、系统架构
系统架构图如下:
┌──────────────┐ UART(TTL) ┌──────────────┐
│ Cyclone-IV │←─────────→│ Qt Host │
│ MAX6675×3 │ 115200-8-N-1│ Real-time │
│ 50 MHz │ │ Curve & Log │
└──────────────┘ └──────────────┘
- 硬件层
- 热电偶:K 型,0–1024 ℃,冷端补偿 MAX6675 内部完成。
- FPGA:EP4CE10F17C8,6 位共阴数码管,3 片 MAX6675 分时挂同一组 SPI 总线。
- 隔离:UART 经过 USB-TTL 转换器直连上位机,可选 5 kV 数字隔离器。
- 固件层
- 时钟域:50 MHz → 1 MHz 驱动 SPI;1 MHz → 0.5 s 触发一次'三通道采样序列'。
- 采样引擎:纯计数器生成片选与 SCK,无状态机,代码行数 < 200,综合后资源 < 1 %。
- 数据帧:20 bit 温度包(16 bit 原始 + 4 bit 通道 ID 隐式),放大 100 倍后以 ASCII 送出,例:
0256\r\n表示 25.6 ℃。
- 上位机层
- 绘图线程:独立 QThread,双缓冲 QImage,800 × 600 画布,60 s 滚动窗口。
- 实时曲线:红折线 + 蓝散点,抗锯齿开启,固定 1 网格/s、10 ℃/格,Y 范围 0–100 ℃。
- 数据持久化:按行追加
xag.txt,时间戳到秒,支持一键清空并弹窗确认。 - 串口热插拔:扫描
QSerialPortInfo,运行时切换波特率需先关闭端口。
三、关键时序与算法
- 0.5 s 采样节拍
计数器
T_counter0→500 000 循环,每 1 µs 步进。通道 1 占用 2–34 µs,通道 2 占用 42–74 µs,通道 3 占用 82–114 µs,间隔 8 µs 防止总线冲突。 - 温度计算
MAX6675 输出 12 bit 原始码,LSB=0.25 ℃。固件直接
raw×25得到'百倍温度',避免浮点。上位机再除 100 还原,保证两端全程整数运算。 - 滑动窗口绘制
线程内维护 121 点循环数组
array0[0…120]。新点到达时整体左移,尾部更新,触发一次updateImage()。画面刷新周期 500 ms,视觉无卡顿。 - 文件写优化
采用
QIODevice::Append | QIODevice::WriteOnly,每条记录 < 50 B,0.5 s 一次写,SSD 寿命可忽略。清空时resize(0)立即释放空间。
四、扩展接口
| 方向 | 现支持 | 预留字段 | 升级建议 |
|---|---|---|---|
| 通道 | 3 路 |


