上一篇文章示波器的功能介绍示波器的基本功能,本文将结合以下在工程中常见的例子,使用示波器分析其波形:
- 测试电源
- 测试晶振
- LVDS差分信号观察
- 串行通信协议解码
- UART
- I2C
注意在使用示波器探头测量时,需要先接探头鳄鱼夹端到地线,再将探头放置到测试点。以下实验默认在使用示波器时,探头已经做好了补偿。
实验一:测试电源
测试FII-PRA006 FPGA开发板上的电源VCC3V3,因为RT8068是一个电压转换器,所以,在1 MHz的开关频率下,会产生电源纹波(ripple)。纹波可以看作是直流电压中的交流部分。注意在使用示波器观察纹波的时候需要将示波器的带宽调至20 MHz,避免有高频率的噪音出现,影响示波器结果。

图1 电源原理图
观察VCC3V3的波形时,注意将示波器的耦合模式调整为DC耦合(既显示直流成分,也显示交流成分),波形如下图所示。可以看出加上示波器自动测量的电压平均值为3.3V左右。虽然截图上电压看起来是稳定输出。但实际上,示波器测量峰-峰值仍然有80 mV左右。

图2 电源测量图
通过选择示波器AC耦合模式,将VCC3V3电压的直流成分去除。可以看出电源电压其实并不是稳定的直流,还是存在一定的波纹。

图3 电源中的交流成分
实验二:测量晶振
FII-PRA006上50 MHz晶振原理图如下图所示:

图4 晶振原理图
FII-PRA006上晶振测量,注意这里测量晶振时,添加了Trigger,使用的是边沿触发,注意将触发线移到晶振波形的边沿上。示波器的自动测量中,频率栏显示的是50 MHz,测量结果说明晶振的运行正常,如下图所示:

图5 晶振测量图
改变示波器横坐标的比例,放大晶振的波形,如下图所示:

图6 晶振测量图细节
实验三:LVDS差分信号
在之前的串行高速通讯系列文章高速通信分层设计—PRX100-D开发板实验(Xilinx)中,观察过LVDS信号,如下图所示。注意如果是观察LVDS差分信号需要两根表笔分别接在信号的p端和n端。

图7 差分信号测量
加上Edge Trigger后,可以清晰的观察到LVDS差分对信号

图8 Trigger条件设置后的LVDS信号
可以看出,对于高速的信号(尤其在示波器带宽不高的情况下),使用无源探头,效果不是很好(有过冲和振铃)。但是这里可以作两个channel之间的减法运算,进行观察。

图9 减法运算LVDS信号
实验四:串行通信协议
1.UART波形分析
在准备分析UART波形的时候,需要知道UART的波特率,是否有奇偶校验位,有1个或是2个停止位等等。下图所示为UART的波形,想要捕捉到UART波形,需要先设置Trigger,因为UART的协议中有明确的规定start位和stop位分别是下降沿/上升沿,所以这里设置Trigger类型为Edge,即边沿触发,如下图所示,边沿触发包括上升沿,下降沿,或者任意边沿。这里因为UART既有上升沿,也有下降沿,这三种trigger设置后都是能抓到波形的。

图10 Trigger条件设置后的UART信号
示波器捕捉到的UART波形如下图所示:

图11-1 解读UART数据

图11-2 解读UART数据
放大图像,已知UART的波特率115200,可以使用(1/115200) X 10 = 86.8 us(start + 8位数据 + stop,共10位数所占的时间长度)的横轴测量光标来读UART数据。如上图所示,将光标之间的delta(x)调整约为86.8 us,可以读出是0_11_00000_11。注意UART协议中是低位在前,所以去掉start位和stop位后,UART发出的第一个数是8’b1000_0011,即0x83。(如果碰到连续的长1或是长0不确定怎样读数,可以将光标调成更小的间隔,确认是多长的时间,再根据波特率进行读数,比如连续长0的时间持续了44us,那么对于波特率为115200的数据,大搞使用了5个8.6us的间隔,即大致有5个0)使用相同的方法,也可以继续读出之后的数据。
如果示波器有自带的串行解码的trigger,也可以善于利用,下图所示是示波器直接接收到UART信号后,根据设置的Trigger捕捉并解码的波形。

图12 Serial decode UART数据
2.I2C波形分析
在观察I2C波形的时候,需要同时使用两支表笔,channel 1和channel 2。Channel 1(黄色波形)连接的是SDA,channel 2(红色波形)连接的是SCL。参考SCL,可以将SDA上的数据自行解码。

图13 I2C SDA和SCL
将得到的I2C波形图稍放大一些,找到起始位,并根据SCL读出数据,根据I2C协议,可以读出当前I2C操作是要对地址为7’b1010_000的设备作写操作,并且请求发出后,已经有了ACK回应,如下图所示:

图14 解读I2C信号
后续的波形可以按照I2C协议继续分析,这里不多做介绍。
有些示波器支持Serial decode,下图是I2C decode的示意图,可以看到红色波形是SCL,黄色波形是SDA。同样这里关于Serial decode的设置不过多介绍,因为不同的示波器支持的功能也不相同,包括设置也不大相同。

图15 Serial decode I2C
实验五:示波器补充说明
1. 自动测量
大部分示波器都支持自动测量,支持的测量项目如下图所示,比较常用的自动测量有峰峰值,极大值,极小值,峰值,均值,标准差,均方根,周期,频率,上升时间,下降时间,带宽等。可以通过切换channel选择需要自动测量的通道。注意Measure处显示的正是自动测量的选项。黄色的测量是针对channel 1,红色的测量值是channel 2的。这里最多一次性只能显示4项自动测量的值。

图16 示波器自动测量
2. 光标测量
示波器支持横坐标的光标测量和纵坐标的光标测量(测量的虚线可以通过示波器控制移动和固定位置)。可以选择不同的channel进行测量。如图17所示,同时使用横,纵光标测量,测量得到的值在图18中有显示,可以看到有X1,X2,Y1,Y2,以及X1 – X2 (ΔX),1/ΔX,ΔY。

图17 光标测量

图18 光标测量结果
3. Trigger设置
示波器中的Trigger设置很重要,因为有些特定波形是突然产生的,即使使用示波器的RUN/STOP,保留显示最新采样的波形也不一定能捕捉到完整的波形,所以这个时候需要设置好Trigger,等待信号满足Trigger条件后,示波器自动帮助保留波形。示波器可以选择的Trigger条件如下所示:

图19 可以设置的Trigger条件
以最常用的Edge Trigger为例,选择了Trigger类型是Edge,Trigger的channel是channel 2之后,还需要调整Trigger Level,使其刚好可以穿过想要观察信号的边沿(上升沿或是下降沿)。

图20 设置Trigger Level
图21所示为示波器控制按钮调整Trigger Level(以下图示波器举例说明,实际控制按钮根据示波器的不同可能略有区别)。

图21 控制旋钮调整Trigger Level
图22所示为在控制旋钮时,示波器屏幕上显示的Trigger Level,以及Trigger Level所在的电平(3.00 V),一般来说,如果示波器通过触发条件得到的波形不是很稳定,可以通过略微调整Trigger Level,来得到更清晰的波形。

图22 设置Trigger Level
Trigger 类型除了Edge之外,还有其它的选择,关于其具体的使用,可以参考相关的示波器说明书,这里不多做介绍。
总结
本文结合工程中常见的例子,对之前学习的示波器的基础功能使用进行了练习,当前,由于只选择了部分有代表性的实验,示波器的功能和使用场景远远不止于此。希望大家能从这篇文章中学习基础的示波器使用,并结合之后的工程经验,不断累积学习,也欢迎大家将示波器使用的小技巧,分享到评论区。
学习本篇文章后对示波器的具体应用有了更多的了解了,尤其是I2C部分对于SDA信号的读取讲解的特别棒,通过截图中的汉字标注很容易就看懂了每个波形表达的数据是多少,谢谢老师的文章!
对于文中的uart部分的数据波形没有看懂,希望老师能够像I2C的波形截图那样在相应位置备注一下,标注清楚波形中每个位置表达的数据含义,谢谢老师!
已经添加了一张注释过的UART波形图,UART没有时钟所以当长1和0出现时,需要结合出现的时间和波特率经过测量后估算。注意UART发送时是低位在前,所以读出的数据需要调整顺序。