diff --git a/.Doc/合理地进行PID参数整定.md b/.Doc/合理地进行PID参数整定.md index db4be0d..019c099 100644 --- a/.Doc/合理地进行PID参数整定.md +++ b/.Doc/合理地进行PID参数整定.md @@ -4,7 +4,7 @@ Ozone的实时变量可视化监测(示波器)功能可以很好地帮助我们 ## 调试顺序 -先内环,后外环。若有已知的外部扰动如阻力、重力等可以在**保持kp不变**的情况下添加积分环节,并查看达到稳态时积分的输出,该输出值可以作为**前馈**作用通过feedforward_ptr一同送入下一个串级控制器。 +先内环,后外环。若有已知的外部扰动如阻力、重力等可以在**保持kp不变**的情况下添加积分环节,并查看达到稳态时积分的输出,该输出值可以作为**前馈**作用通过feedforward_ptr一同送入下一个串级控制器。在没有模型的时候,计算前馈一般通过**数据驱动**的方法,如稳态误差-参考值关系拟合。 经典的经验式整定方法有简单的Ziegler-Nicols法和Cohen-Coon法,还有需要一定的系统辨识的Chien-Hrones-Reswick、Tyreus-Luyben和Skogestad法。这些方法在网络上或提出方法的论文中都有详尽的说明,这里不再赘述。 @@ -15,5 +15,18 @@ Ozone的实时变量可视化监测(示波器)功能可以很好地帮助我们 1. 首先整定P参数,使用二分法确定大致范围。将电机参考速度和实际速度在Ozone示波器同一窗口中打开以观察时域表现。把pid的ref值添加到变量观测,方便修改(只要修改ref值,每次就可以触发阶跃信号输入)。当P达到欠阻尼且波动只有一个周期(只有超调一个峰)时,开始添加D参数。 2. 添加微分参数。务必打开微分滤波器,并根据你的闭环带宽(速度环要跟随的频率)设置滤波系数。目前使用的是一阶低通滤波,后续考虑增加高阶滤波器和特殊的带宽滤波器(切比雪夫、巴特沃斯等)。调节D参数至P进入临界阻尼或过阻尼的状态(没有超调)。 3. 交替增大比例系数和微分系数,直到出现不可控的微分抖动,然后减小两者的值直到出现一个合适的平衡(调个大概即可,没有模型的情况下很难达到均衡) -4. +4. **固定PD参数**,查看不同目标值的**静差**。如果没有对云台进行建模,则拟合目标值与静差的关系(线性、多项式、指数、对数),并将该值作为前馈加入系统,以补偿PD无法影响的扰动项。 +5. 增加额外的积分控制以消除前馈模型不准确带来的影响。务必使用积分分离和变速积分。参数不要求精细,一般来说大致即可。 + +## model-based控制 + +无模型的控制显然存在其劣势和效果上限,为了提高性能,我们需要对云台进行建模。 + +建模的方式包括动力学方程推导和数据驱动的系统辨识。 + +动力学方程的推导即分析系统的输入(电机的扭矩)和输出(速度/角度)的关系,得到系统动态的微分方程,然后使输入等于微分方程中除输出外的项,从而让输出的动态变为简单的一阶线性常微分方程,以最快的方式到达期望位置。此时再额外增加PID控制器,用于补偿建模得到的系统和实际不匹配造成的误差。建模考虑的因素越全面,建模的效果可能会越好。 + +系统辨识的经典方法是伯德图法即频域分析。通过给定一系列的正弦输入,观察系统的输出表现得到系统的相频曲线和幅频特性曲线,并选择一个特定结构的系统对曲线进行拟合(最小二乘或极大似然估计),对得到的系统应用超前-滞后补偿控制器以确定合适的PID参数,在裕度和带宽之间权衡,使得系统的频率响应满足设计要求。 + +Ozone可以非常方便的获取系统的频率响应数据。 diff --git a/.Doc/架构介绍与开发指南.md b/.Doc/架构介绍与开发指南.md index 190adcb..25620eb 100644 --- a/.Doc/架构介绍与开发指南.md +++ b/.Doc/架构介绍与开发指南.md @@ -110,6 +110,23 @@ } CANInstance; ``` + + + +## 其他IDE支持 + +你还可以尝试VSC的EIDE插件+ozone的方式开发ac5/6工具链的程序。ac5/6工具链由于为arm出品的商业闭源软件,对mcu硬件架构的针对性优化更多,编译出来的程序优化效果往往更好、体积更小,执行速度快过arm-gnu工具链。 + +另外的可能是Visual Studio + VisualGDB,根据VisualGDB的官网进行配置即可,可以利用VS提供的各种测试调试性能分析功能。对于熟悉VS丰富的功能支持的开发者,可以选择此方式。 + +还可以尝试VSC的插件KEIL assistant,通过此法你需要在根目录打开cubeide配置文件,在project manager标签页选择将工具链改为MDK,**我们非常不推荐这种方式**。若要使用CubeIDE,也在相同的地方修改工具链。 + +***不过开发本框架的最佳实践仍然是VSCode+Ozone。*** + +> 只要你学习了[VSCode+Ozone使用方法](./VSCode+Ozone使用方法.md)文档内的*预备知识* ,掌握了工具链的用途和原理之后,不论换用什么IDE什么编译器,你都可以切换自如。 + + + ## BSP层(Board Sopport Package) - 主要功能:实现对STM HAL的封装功能,进一步抽象硬件。 @@ -190,6 +207,8 @@ ROOT:. │ debug_ozone.jdebug # ozone debug调试配置和缓存文件 │ LICENSE # 开源协议文件 │ Makefile # 编译管理文件,为make(mingw32-make)命令的目标 +| Makefile.upgrade # 编译管理文件的升级版, 资深用户使用 +| CMakeLists.txt # cmake构建规则, 资深用户使用 │ openocd_dap.cfg # 用于OpenOCD调试使用的配置文件,dap用 │ openocd_jlink.cfg # 用于OpenOCD调试使用的配置文件,jlink用 │ README.md # 本说明文档 @@ -199,10 +218,6 @@ ROOT:. │ STM32F407IGHx_FLASH.ld # F407IGH(C板MCU)目标FLASH地址和链接规则,用于编译(作为链接阶段的链接器) │ task.ps1 # powershell脚本,一键编译并进入ozone调试/reset开发板用 │ TODO.md # 项目待完成的任务 -│ VSCode+Ozone使用方法.md # 开发环境配置和前置知识介绍 -│ 修改HAL配置时文件目录的更改.md # 重新配置CubeMX时的步骤和注意事项 -│ 必须做&禁止做.md # 开发必看,规范和要求 -│ 如何定位bug.md # 开发必看,快速定位bug并进行修复.还提供了一些debug典例 │ ├─.vscode │ launch.json # 调试的配置文件 @@ -210,14 +225,17 @@ ROOT:. │ tasks.json # 任务配置文件,包括一键编译下载调试等 │ ├─.assets # 说明文档的图片 +├─.Doc # 本框架的各类说明文档 +├─.github # github action CI支持文件 +│ ├─application # 应用层 ├─bsp # 板级支持包 ├─modules # 模块层 │ -├─Src #hal生成的外设初始化源文件 -├─Inc #hal生成的外设初始化头文件 -├─Drivers #hal driver和cmsis drivers -└─Middlewares # STusb ext , rtos , segger rtt等 +├─Src # hal生成的外设初始化源文件 +├─Inc # hal生成的外设初始化头文件 +├─Drivers # hal driver和cmsis drivers +└─Middlewares # STusb ext, rtos, segger rtt等 ``` ## BSP/Module/Application介绍 diff --git a/README.md b/README.md index ab8c978..9032354 100644 --- a/README.md +++ b/README.md @@ -254,7 +254,9 @@ app、module和bsp都有相应的rtos任务。其中bsp为创建任务提供了 想要调试,在左侧tab页选择合适的调试选项,按F5或图形界面的绿色小三角形按钮,开始调试。当然,调试器的设置也请参考配置文档,主要是将可执行文件路劲加入环境变量的PATH。 -**更详细的开发流程,请参照`.Doc/VSCode+Ozone使用方法.md`** +**更详细的开发流程和本仓库工作流的最佳实践,请参照`.Doc/VSCode+Ozone使用方法.md`**,里面介绍了开发所需的前置知识、环境配置,以及工具链原理、使用方法等。 + +要对本仓库进行开发,务必先阅读`.Doc/架构介绍与开发指南.md`,内含本仓库组织结构的**文件树**。若你希望使用其他工具链或IDE,里面也有相关说明。 ### 基本文档