驱动系统调试
本网站的其他内容均致力于正确设计控制律。本页则关注控制逻辑的开启顺序,这是一项独立的技能,它决定了故障是否能够被诊断出来。
其核心理念并非单纯出于谨慎,而是:任何新引入的故障都应有且仅有一个候选原因。 下面的每一步都旨在隔离单一变量,步骤的先后顺序也经过精心设计,以便一旦出现异常,你立刻就能确定是哪一处改动引起的。
在完成影子比对验证之前,绝不直接驱动三相桥
替换现有正常工作的控制栈时,人们的直觉往往是直接替换并观察效果。这样会导致生成一份从未运行过的固件,并使首次台架测试面临上百种可能的故障原因。
另一种方案几乎不需成本:
新代码在每个周期接收与现有代码完全相同的输入,但其输出并不接通硬件。两者的差异在 RAM 中累积,并在电机运转时通过调试探针读出。只有当两者完全吻合时,才翻转标志位——而且该标志位支持运行中实时切换,从而将在线接管变成一项常规测试,而非一场赌博。
在这些页面背后的实验平台上,确实发生了这样的情况:在 800 rpm 时,由供应商提供的电流环被新的电流环接管,随后又在不停机的情况下重新交还给原系统。
在试验台上 应以不同的方式比较纯函数与有状态函数,否则比较结果会在两个方向上都产生误导。
纯函数的输出必须吻合到数值噪声精度以内。 Clarke 变换、Park 变换及调制器均无内部状态(无记忆),因此在相同输入下,它们要么完全一致,要么其中一方有误。在试验台上,新调制器与厂商调制器的输出差异仅为 0.009%——这正是厂商 Q1.15 定点格式的量化噪底,而非人为设定的容差。
有状态函数则不能苛求逐点一致。 具有不同积分历史的两个调节器,即使算法完全正确,也不可能在每个采样点上逐位吻合,因此应当比较它们的包络。如果苛求一对 PI 调节器输出逐位一致,你就会耗费一整天去追查一个毫无物理意义的差异。
顺序
每一步恰好开启一项新功能,并以一次运行结束。
| 步骤 | 此处发生故障意味着什么 | |
|---|---|---|
| 1 | 时钟、引脚、PWM 输出——三相桥不通电 | 接线或引脚复用,仅此而已 |
| 2 | 示波器上的栅极信号:死区时间、互补对、对齐 | 调制器或 PWM 配置 |
| 3 | ADC 已触发并正常转换,电机断开连接 | 触发链或采样时刻 |
| 4 | 零偏已校准,电流已完成缩放且在零点附近读数合理 | 增益、偏置或分流电阻 |
| 5 | 三相桥接入低压母线电压,开环运行,电机不旋转 | 功率级 |
| 6 | 电流环闭合,转子锁定 | 调节器,与电机隔离 |
| 7 | 释放转子,由位置传感器提供角度 | 角度,且仅与角度有关 |
| 8 | 速度环,然后是外环 | 串级外环 |
第 6 步和第 7 步的拆分尤为关键。在转子堵转锁定状态下闭合电流环,能够一次性将反电动势、转子角度和机械系统从实验中全部剥离:剩下的仅仅是一个一阶电气被控对象和一个 PI 控制器,这是唯一能够毫无歧义地定位电流环问题的配置。同时,这也是用于测量电机参数的配置,因此这一步可谓一举两得。
低母线电压优先,以及为何这不仅仅是谨慎之举
桥式电路的每一种故障模式都与直流母线电压成正比。在12 V时发生直通故障只是让晶体管发热;而在400 V时,则会形成一个坑洞,且几乎不留痕迹。请以能产生可测量电流的最低电压逐步提升母线电压。
电流限制也是如此。将其设置为电机能够无限承受的值,而不是驱动器最终会使用的值——你希望前五十次故障都是可恢复的,因为故障次数会达到五十次。
在需要之前先构建观测手段
在这些页面背后的试验台上,最受用的一项工程决策其实是由于硬件缺陷被迫做出的:串口控制台的接收通道损坏,因此所有测量与控制都是趁电机运转时通过 SWD 直接读写目标内存完成的。
事实证明,这种方式比串口控制台更好用,完全值得从一开始就主动采用:
- 将驱动器的状态保存在少量的已知的全局变量中,以便探针可以通过符号找到它们。
- 将调参变量设为可实时修改的普通变量,而非编译时常量。
- 在快速环中累计计数器和误差之和;以异步方式对其进行采样。
此时,调试探针就相当于您控制律的示波器;而另一种方法——为了调整一个增益而重新构建代码——则过于耗时,以至于您会放弃尝试各种方案,而这才是真正的代价。
保留一个独立见证(Witness)
这一点在软件架构页面中已经提及,但在系统调试(Bring-up)阶段值得再次强调,因为正是在调试阶段它才能发挥最大价值:保留一项控制律完全不使用的独立测量值。
在试验台上,一次无感启动曾报告系统处于健康的 RUN 状态、电角速度达 435 rad/s,而电机轴实际上纹丝未动。观测器锁定到了一个虚假信号上。此时,停滞不动的编码器计数值——一个控制通路完全未使用的变量——是整块板子上唯一提出异议的证据。
要点回顾
- 合理安排调试步骤,使任何新引入的异常都只有唯一的候选原因。这就是全部原则,具体的调试顺序皆由此自然导出。
- 在驱动任何负载之前,先让新代码与现有代码并行运行,并将切换方式设置为运行时标志,而非编译时配置。
- 纯函数的输出必须吻合到数值噪声精度以内;有状态函数则不应苛求逐点一致——应当比较其包络。
- 首先在转子锁定状态下闭合电流环。这是唯一一种电流环故障能够明确判断的情形,同时也能用于参数辨识。
- 低母线电压,低电流限制。前五十次故障应当能够承受。
- 将状态保存到已知的全局变量中,并用探针读取。由于重新编译以修改增益的过程较为缓慢,你会因此减少实验次数。
- 保留一项控制律从不使用的独立测量值。