SPI(SerialPeripheral Interface)总线的信号线上有时候有RC滤波电路(如下图所示),有时候又可以不加,那到底应该怎么样去考虑这个加不加的问题呢?毕竟不加的时候可以节约成本,加的时候可以起到一定的干扰滤波作用。 SPI的设计初衷是用于短距离、板级器件之间的高速同步通信,其时钟频率可以从几MHz到几十MHz,甚至上百MHz。 信号完整性: 在如此高的频率下,信号边沿(上升/下降时间)必须非常陡峭,以确保数据在正确的时钟边沿被采样,任何额外的RC滤波都会引入延迟并减缓边沿,这会导致时序错乱、建立时间和保持时间的错误,最终造成通信失败。 容性负载: RC电路中的电容会增大信号的容性负载,这会让驱动器的上升/下降沿变得更缓,同样不利于信号完整性。 因此,在一个布局良好、走线短、干扰小的PCB上,SPI信号线应直接连接,不添加任何RC滤波,以保证最佳的信号质量。 那什么情况下需要考虑RC滤波? 尽管原则上不加,但在以下非理想的现实情况下,RC滤波就变得非常有用甚至必要: 情况一:存在长走线、过孔或连接器 当SPI信号需要穿过连接器(如排线)连接到另一块板卡,或者PCB走线很长时,信号可能会产生振铃(Ringing) 和过冲(Overshoot),这是由于阻抗不匹配导致的信号反射。 解决方案: 在驱动端(通常是主设备端)串联一个小电阻(例如10-100Ω)。这相当于一个串联端接电阻,它可以阻尼振荡,吸收反射,提高信号质量。 此时的“RC”电路: 这里的R是串联电阻,C是信号线本身的寄生电容和接收端的输入电容。它形成了一个低通滤波器,但其主要目的是阻抗匹配和阻尼,而不是滤波。电阻值需要根据经验和实测波形进行调整。 情况二:环境噪声干扰严重 如果SPI线路经过电机、继电器、开关电源等强噪声源附近,可能会耦合进高频噪声。 解决方案: 在靠近接收端的地方,为信号线添加一个RC低通滤波器。 参数选择: 这个滤波器的截止频率必须远高于SPI的时钟频率,以避免对正常信号造成影响。一个常用的经验法则是让截止频率 fc满足: fc>5×fSCKfc>5×fSCK 计算公式: fc=12πRCfc=2πRC1 举例: 如果SPI时钟是10 MHz,那么 fcfc 最好大于50 MHz。选择 R = 33Ω, C= 10pF,则 fc≈12π×33×10×10−12≈480MHzfc≈2π×33×10×101≈480MHz,这个值远高于10MHz,对信号边沿影响很小,但可以有效滤除数百MHz以上的高频噪声。 情况三:GPIO口驱动能力过强 有些MCU的GPIO口驱动能力非常强,边沿极其陡峭,这本身就会产生大量的高频谐波,容易引起EMI(电磁干扰)问题。 解决方案: 同样使用一个小串联电阻(如22-100Ω),可以柔化信号边沿,减少高频辐射,同时也能减少情况一中提到的振铃。这在通过FPC排线连接显示屏等场景中非常常见。 情况四:线与线之间的串扰 如果SPI的MISO/MOSI/SCK等线平行走线过长,会发生串扰。 解决方案: 良好的布局布线(如加大线间距,用地线隔离)是首要选择。在无法修改布局的情况下,适当减缓 aggressor 信号(通常是SCK)的边沿(通过串联小电阻),可以减轻对 victim 信号(如MISO/MOSI)的串扰。 如果确定需要滤波,那应该如何设计和选择器件的参数,可以遵循以下步骤: 确定SPI时钟频率(fSCKfSCK)。 计算所需的滤波器截止频率(fc): fc>5×fSCKfc>5×fSCK。 选择电容 C: 为了不过多增加容性负载,C值不宜过大,通常选择几pF到几十pF(例如10pF, 22pF, 33pF)。优先选择小电容。 计算电阻 R: R=12πfcCR=2πfC1 如果主要用于阻抗匹配和阻尼,R值通常在 10Ω到 100Ω 之间,需要通过示波器观察波形来微调。 布局注意: 电阻和电容必须尽量靠近接收端放置,否则长长的走线会引入新的寄生电感和电容,使滤波效果大打折扣甚至产生反效果。
|