Automatically-adjust-PID-parameters offline -> simulate -> online

先本地分析,再接硬件

Automatically-adjust-PID-parameters 用来根据控制响应数据给出下一轮 PID 参数建议。第一次使用时,先跑本地分析,再跑仿真,最后再接在线模式。

你需要准备什么

Python 3.10+、`pip`,以及一枚可用的 DeepSeek API key。

不接硬件也能做什么

看帮助、分析 CSV、跑仿真、导出 C 参数。

什么时候需要硬件

只有在线模式需要 MCU 持续发送 `DATA:` 并接收 `PID:`。

项目特色

逐步使用路径

先本地分析,再仿真,再监看串口,最后在线调参。这样更容易判断问题到底出在数据、API key、串口还是设备本身。

硬件接入直接

串口联调、数据采集、离线分析和在线调参是连在一起的。STM32 参考代码已经把 UART 句柄、引脚和环名字提成了宏。

安全策略优先

参数上下限、单次变化率、历史记录、人工确认和 ACK 确认都放在前面,适合真实设备联调。

01 / 安装

  1. 克隆仓库。
  2. 进入项目目录。
  3. 安装依赖。
shell
git clone https://github.com/Zw-awa/Automatically-adjust-PID-parameters.git
cd Automatically-adjust-PID-parameters
python -m pip install --upgrade pip
pip install -r requirements.txt

建议直接用这里的安装方式,不要自己换一套命令。

02 / 配置

先复制示例配置,再改你自己的本地配置。

shell
copy config.example.json config.json
推荐把 API key 放进环境变量 DEEPSEEK_API_KEY。如果你写进 config.json 也可以。
示例配置里的串口默认是 COM3。如果你要接在线模式,记得改成自己电脑上的实际串口。

03 / 先跑本地分析

第一次使用时,最值得先跑的是本地分析,因为它不依赖串口和 MCU。

shell
python scripts/offline_analyze.py --file data/raw/example_speed_data.csv
  • 这一步能证明本地分析链路是通的。
  • 如果这一步就失败,先不要碰在线模式。

04 / 再跑仿真

仿真模式会先生成软件响应,再继续走调参流程。

shell
python main.py simulate --loop speed --iterations 1

如果 API key 还没配好,这一步可能会在最后的 LLM 调用时报 401。先看前面的分析输出是否正常。

05 / 在线模式

在线模式前,先确认 MCU 已经持续发送正确的串口数据。

shell
python main.py online --port COM3 --loop speed --interval 10
`COM3` 只是默认示例。运行前改成你电脑上的实际串口。
  1. 先监看串口。
  2. 再采一份数据。
  3. 先做一次离线分析。
  4. 最后再开始在线调参。

06 / STM32 接入

如果你要接 STM32,先按 docs/mcu_reference.c 把协议打通,再替换成你自己的控制逻辑。

protocol
MCU -> PC   DATA:speed:1.2345,100.0,95.3,-4.7,85.2
PC  -> MCU  PID:speed:0.800000,0.150000,0.030000
MCU -> PC   ACK:speed:0.800000,0.150000,0.030000
MCU -> PC   INFO:PID parameters updated successfully

参考文件里已经把 UART 句柄、TX/RX 引脚和环名字写成了宏,直接改顶部宏定义就能换到你的工程。

07 / 常见问题

401 报错

通常是 API key 无效、没配置,或者程序没有读到 key。

串口打不开

通常先检查端口号、波特率,以及是否被其他软件占用。

样本不足

通常先检查 MCU 是否持续发送 `DATA:`,再检查 `loop` 名称是否一致。