第38章 第一次系统联调

接下来是加载程序。将编译好的 .pof 文件分别下载到三片FPGA芯片中。过程还算顺利。

真正的挑战在于让这三个节点“对话”。他们编写了简单的测试脚本:传感器节点每隔100毫秒发送一次模拟的姿态数据;主控节点接收到数据后,进行简单的比例运算,生成舵机控制指令,发送给执行器节点;执行器节点解析指令,驱动舵机转动相应角度。

启动系统。

示波器接在总线差分线上,屏幕上应该出现规律的数据帧波形。然而,波形杂乱无章,充满了毛刺和畸变。舵机纹丝不动。

“总线通信失败。”小李盯着示波器,沮丧地说。

问题排查开始了。这比单纯的代码调试更加困难,因为它涉及到硬件(信号完整性、阻抗匹配、电磁干扰)和软件(协议实现、时序同步)的交叉影响。

他们首先怀疑是信号完整性问题。总线布线过长,杜邦线引入的寄生电感和电容可能导致信号边沿退化。他们缩短了走线,在总线两端加上了终端匹配电阻,情况稍有改善,但通信依然不稳定。

接着检查代码时序。FPGA内部的时钟是由外部晶振提供的,是否存在时钟偏移?他们调整了代码中的建立时间和保持时间约束,重新综合布局布线。

再次测试,示波器上的波形清晰了一些,但偶尔还是会出现帧错误。舵机偶尔会抽搐一下,但远未达到预期的平滑运动。

“是不是仲裁出了问题?多个节点同时发送?”小张提出疑问。

他们修改了测试脚本,让传感器节点和执行器节点错开发送时间。这次,通信成功率提高了,但实时性又无法保证。

问题似乎陷入了僵局。连续几天,他们都卡在这个环节。实验室里的气氛再次变得压抑。

陈北玄没有急躁,他让大家停下来,把所有可能的问题点都列在白板上,一个一个排除。他意识到,可能不仅仅是某一个单一问题,而是多个微小缺陷叠加起来的效果。