EIS电池阻抗测量芯片验证系统(三):上位机PyQt架构与CSV流程

1. 上位机整体架构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
┌──────────────────────────────────────────────────────────────────┐
│ PyComSender (PyQt5) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ 串口设置 │ │ CSV文件加载 │ │ 命令执行 + 日志 │ │
│ │ 波特率选择 │ │ 浏览/加载 │ │ 开始/停止 real-time log│ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
└────────────────────────────┬─────────────────────────────────────┘
│ UART (115200)

┌──────────────────────────────────────────────────────────────────┐
│ STM32F407 I2C Bridge │
│ 串口 → I2C 协议转换 │
└────────────────────────────┬─────────────────────────────────────┘
│ I2C (100kHz, 0x58)

┌──────────────────────────────────────────────────────────────────┐
│ EIS FPGA/ASIC 验证板 │
└──────────────────────────────────────────────────────────────────┘

2. 项目结构

组件 路径 职责
PyComSender COM2IIC/PyComSender/ PyQt 上位机,加载CSV并发送命令
PyEisAdcCreator COM2IIC/PyEisAdcCreator/ 根据 config.yml 生成 EIS 验证用 CSV
STM32F407IICBridge STM32F407IICBridge/ 串口转 I2C 桥接固件

3. PyComSender 主要功能

3.1 串口管理

  • 自动扫描可用串口
  • 波特率可选:9600 ~ 115200(默认 115200)
  • 打开/关闭串口

3.2 CSV 加载

1
2
3
4
5
6
# main_window.py - load_commands()
with open(file_path, 'r', newline='') as file:
reader = csv.reader(file)
for row in reader:
if row and not row[0].startswith('#'):
self.command_list.append(I2CCommand.from_csv_row(row))
  • 解析 CSV 每一行
  • 跳过 # 注释行
  • 调用 I2CCommand.from_csv_row(row) 转换为命令对象

3.3 命令执行

  • 顺序执行:按 CSV 行序依次执行
  • 控制流:支持 DELAYLOOP BEGIN/ENDREPEAT
  • 异步调度:使用 QTimer.singleShot(0, ...) 避免递归栈溢出,支持任意深度嵌套

3.4 日志

  • 实时显示在 GUI
  • 同时写入 logs/test_YYYYMMDD_HHMMSS.log
  • 颜色区分:命令(蓝)、成功(绿)、错误(红)

4. CSV 文件来源

4.1 手动编写

适用于简单 I2C 读写、寄存器配置调试。

4.2 PyEisAdcCreator 自动生成

针对 EIS 芯片验证:

1
config.yml  →  PyEisAdcCreator  →  output_pycomsender.csv
  • 支持 FREQ_INDEX: 0~0xF范围参数,自动生成多组配置
  • 每组配置包含:寄存器写、DELAY、ADC 范围比较/读命令
  • 输出格式符合 PyComSender 的 CSV 规范

5. 典型 EIS 验证 CSV 结构

1
2
3
4
5
6
7
8
9
10
11
#=== 配置组 1/16 - FREQ_INDEX = 0 ===
,1,0x58,0x42,1,0x43,#bit[6]=1+FREQ_INDEX...
,1,0x58,0x3F,1,0x18,#OSR_SEL
...
,1,0x58,0x41,1,0x80,#ADC_GO
DELAY:10,#wait ADC_GO
,4,0x58,0x0b,6,"0xa5,0xaf,0x05,0xde,0x48,0x06"
,2,0x58,0x14,4,,"#ADC expect: 0x07d30e"
...
#=== 配置组 2/16 - FREQ_INDEX = 1 ===
...
  • 每个配置组:写寄存器 → DELAY:10 → 17 个 ADC 点验证
  • 16 个配置组 = 16 个频率点,完整 EIS 扫频验证

6. 数据流总结

  1. PyEisAdcCreator:算法 + 配置 → 生成 CSV
  2. PyComSender:加载 CSV → 解析为 I2CCommand 列表
  3. 执行引擎:顺序 + 控制流 → 通过串口发往 STM32
  4. STM32:串口协议 → I2C 时序 → 操作 FPGA 寄存器
  5. FPGA:寄存器配置 → 执行 EIS 测量 → 结果存于 EIS Cell 寄存器
  6. 验证:读回/范围比较 → 判断 Pass/Fail

下一篇文章将详细说明 STM32 的串口命令协议与 I2C 转发逻辑。


系列目录
01. EIS原理与电池阻抗谱
02. FPGA ADC激励与电池阻抗扫描原理
03. 上位机架构:PyQt与CSV流程(本文)
04. STM32命令转发与串口-I2C桥接
05. CSV脚本解释器实现精髓