FOC 参考手册 06 工程实现

驱动系统调试

本网站的其他内容均致力于正确设计控制律。本页则关注控制逻辑的开启顺序,这是一项独立的技能,它决定了故障是否能够被诊断出来。

其核心理念并非单纯出于谨慎,而是:任何新引入的故障都应有且仅有一个候选原因。 下面的每一步都旨在隔离单一变量,步骤的先后顺序也经过精心设计,以便一旦出现异常,你立刻就能确定是哪一处改动引起的。

在完成影子比对验证之前,绝不直接驱动三相桥

替换现有正常工作的控制栈时,人们的直觉往往是直接替换并观察效果。这样会导致生成一份从未运行过的固件,并使首次台架测试面临上百种可能的故障原因。

另一种方案几乎不需成本:

影子比对:现有代码与新代码在每个周期基于相同的采样输入并行运行,累积两者的输出差异,并由一个标志位决定哪一路真正输出至三相桥。 两套同时运行,仅一套实际驱动 择一输出 采样测量值 同一份采样,供两套算法使用 原版基准代码 已知可靠,继续实际驱动 新移植代码 每周期同步运行,但不驱动 任何硬件 输出差值对比 在 RAM 中累加统计 切换标志位 支持运行中途无缝切换 三相逆变桥 唯一寄存器写入者
两套实现同时运行,但只有一套实际驱动三相桥。正是比较器使这成为一种工程方法,而非心存侥幸——差异在电机运转过程中累积于 RAM 并实时读出,从而使最终的控制权切换只是一道例行手续,而非真正的冒险试验。通往选择器的两条路径分别从比较器上方和下方绕过,因为比较器本身并不介入控制通路。

新代码在每个周期接收与现有代码完全相同的输入,但其输出并不接通硬件。两者的差异在 RAM 中累积,并在电机运转时通过调试探针读出。只有当两者完全吻合时,才翻转标志位——而且该标志位支持运行中实时切换,从而将在线接管变成一项常规测试,而非一场赌博。

在这些页面背后的实验平台上,确实发生了这样的情况:在 800 rpm 时,由供应商提供的电流环被新的电流环接管,随后又在不停机的情况下重新交还给原系统。

在试验台上 应以不同的方式比较纯函数与有状态函数,否则比较结果会在两个方向上都产生误导。

纯函数的输出必须吻合到数值噪声精度以内。 Clarke 变换、Park 变换及调制器均无内部状态(无记忆),因此在相同输入下,它们要么完全一致,要么其中一方有误。在试验台上,新调制器与厂商调制器的输出差异仅为 0.009%——这正是厂商 Q1.15 定点格式的量化噪底,而非人为设定的容差。

有状态函数则不能苛求逐点一致。 具有不同积分历史的两个调节器,即使算法完全正确,也不可能在每个采样点上逐位吻合,因此应当比较它们的包络。如果苛求一对 PI 调节器输出逐位一致,你就会耗费一整天去追查一个毫无物理意义的差异。

顺序

每一步恰好开启一项新功能,并以一次运行结束。

步骤此处发生故障意味着什么
1时钟、引脚、PWM 输出——三相桥不通电接线或引脚复用,仅此而已
2示波器上的栅极信号:死区时间、互补对、对齐调制器或 PWM 配置
3ADC 已触发并正常转换,电机断开连接触发链或采样时刻
4零偏已校准,电流已完成缩放且在零点附近读数合理增益、偏置或分流电阻
5三相桥接入低压母线电压,开环运行,电机不旋转功率级
6电流环闭合,转子锁定调节器,与电机隔离
7释放转子,由位置传感器提供角度角度,且仅与角度有关
8速度环,然后是外环串级外环

第 6 步和第 7 步的拆分尤为关键。在转子堵转锁定状态下闭合电流环,能够一次性将反电动势、转子角度和机械系统从实验中全部剥离:剩下的仅仅是一个一阶电气被控对象和一个 PI 控制器,这是唯一能够毫无歧义地定位电流环问题的配置。同时,这也是用于测量电机参数的配置,因此这一步可谓一举两得。

低母线电压优先,以及为何这不仅仅是谨慎之举

桥式电路的每一种故障模式都与直流母线电压成正比。在12 V时发生直通故障只是让晶体管发热;而在400 V时,则会形成一个坑洞,且几乎不留痕迹。请以能产生可测量电流的最低电压逐步提升母线电压。

电流限制也是如此。将其设置为电机能够无限承受的值,而不是驱动器最终会使用的值——你希望前五十次故障都是可恢复的,因为故障次数会达到五十次。

在需要之前先构建观测手段

在这些页面背后的试验台上,最受用的一项工程决策其实是由于硬件缺陷被迫做出的:串口控制台的接收通道损坏,因此所有测量与控制都是趁电机运转时通过 SWD 直接读写目标内存完成的。

事实证明,这种方式比串口控制台更好用,完全值得从一开始就主动采用:

  • 将驱动器的状态保存在少量的已知的全局变量中,以便探针可以通过符号找到它们。
  • 将调参变量设为可实时修改的普通变量,而非编译时常量。
  • 在快速环中累计计数器和误差之和;以异步方式对其进行采样。

此时,调试探针就相当于您控制律的示波器;而另一种方法——为了调整一个增益而重新构建代码——则过于耗时,以至于您会放弃尝试各种方案,而这才是真正的代价。

保留一个独立见证(Witness)

这一点在软件架构页面中已经提及,但在系统调试(Bring-up)阶段值得再次强调,因为正是在调试阶段它才能发挥最大价值:保留一项控制律完全不使用的独立测量值。

在试验台上,一次无感启动曾报告系统处于健康的 RUN 状态、电角速度达 435 rad/s,而电机轴实际上纹丝未动。观测器锁定到了一个虚假信号上。此时,停滞不动的编码器计数值——一个控制通路完全未使用的变量——是整块板子上唯一提出异议的证据。

要点回顾

  • 合理安排调试步骤,使任何新引入的异常都只有唯一的候选原因。这就是全部原则,具体的调试顺序皆由此自然导出。
  • 在驱动任何负载之前,先让新代码与现有代码并行运行,并将切换方式设置为运行时标志,而非编译时配置。
  • 纯函数的输出必须吻合到数值噪声精度以内;有状态函数则不应苛求逐点一致——应当比较其包络。
  • 首先在转子锁定状态下闭合电流环。这是唯一一种电流环故障能够明确判断的情形,同时也能用于参数辨识。
  • 低母线电压,低电流限制。前五十次故障应当能够承受。
  • 将状态保存到已知的全局变量中,并用探针读取。由于重新编译以修改增益的过程较为缓慢,你会因此减少实验次数。
  • 保留一项控制律从不使用的独立测量值。