树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

时间:2024-03-26 18:26:45

作者:张国平

一、介绍

  逻辑分析仪是专门针对数字信号的调试工具,可长时间采集,无波形死区,支持复杂触发定位以及全面的协议内容解析。

  逻辑分析仪的作用是利用便于观察的形式显示出数字系统的运行情况,对数字系统进行分析和故障判断。

  相对于示波器适合观察周期信号的电压变化及噪声,逻辑分析仪只采集高低电平,更擅长于分析数字通讯过程和复杂的协议解析。

  本实验中学习树莓派中使用逻辑分析仪,对树莓派的PWM信号和UART信号进行分析。我们后面将会学到的航模无线电遥控系统中的接收机,在输出端也是输出PWM信号,控制舵机,每路通道一路PWM信号。而还有一种更节省物理接口数量的输出模式就是SBUS信号,它也是一种串口通信协议,是接收机的串行总线输出,通过这根总线,可以获得遥控器上所有通道的数据。

二、组件

★Raspberry Pi 3 B+主板*1

★树莓派电源*1

★USB TO TTL模块*1

★国产梦源DSLogic Plus逻辑分析仪*1

★面包板*1(可选)

★40P软排线*1

★跳线若干

三、实验原理

(一)逻辑分析仪

逻辑分析仪的工作过程就是数据采集、存储、触发、显示的过程,由于它采用数字存储技术,可将数据采集工作和显示工作分开进行(buffer模式),也可同时进行(stream模式),必要时,对存储的数据可以反复进行显示,以利于对问题的分析和研究。

逻辑分析仪是分析数字系统逻辑关系的仪器。逻辑分析仪是属于数据域测试仪器中的一种总线分析仪,即以总线(多线)概念为基础,同时对多条数据线上的数据流进行观察和测试的仪器,这种仪器对复杂的数字系统的测试和分析十分有效。逻辑分析仪是利用时钟从测试设备上采集和显示数字信号的仪器,最主要作用在于时序判定。由于逻辑分析仪不像示波器那样有许多电压等级,通常只显示两个电压(逻辑1和0),因此设定了参考电压后,逻辑分析仪将被测信号通过比较器进行判定,高于参考电压者为High,低于参考电压者为Low,在High与 Low之间形成数字波形

例如:一个待测信号使用200Hz采样率的逻辑分析仪,当参考电压设定为1.5V时,在测量时逻辑分析仪就会平均每5ms采取一个点,超过1.5V者为High(逻辑1),低于1.5V者为Low(逻辑0),而后的逻辑1和0可连接成一个简单波形,工程师便可在此连续波形中找出异常错误(bug)之处。整体而言,逻辑分析仪测量被测信号时,并不会显示出电压值,只是High跟Low的差别;如果要测量电压就一定需要使用示波器。除了电压值的显示不同外,逻辑分析仪与示波器的另一个差别在于通道数量。一般的示波器只有2个通道或4个通道,而逻辑分析仪可以拥有从16个通道、32个通道、64个通道和上百个通道数不等,因此逻辑分析仪具备同时进行多通道测试的优势。

大多数开发人员通过逻辑分析仪等测试工具的协议分析功能可以很轻松的发现错误、调试硬件、加快开发进度,为高速度、高质量完成工程提供保障。

协议解码是协议分析的基础,只有解码正确的协议分析才能够被别人接受,只有正确的解码才能提供更多的错误信息。

协议触发能够充分利用有限的触发深度和存储空间,同时提供更多更可靠的触发,为快速发现和定位错误提供了一种高效的工具。

错误识别是逻辑分析仪的主要作用,它建立在协议解码和协议触发之上的,只有协议触发功能强大才能采集到错误,只有协议解码正确才能发现错误。

信息提示能够充分利用颜色与视图等资源,有效表达协议解码的结果,使得用户能够快速找到需要的信息。当然信息提示也能够合理调节处理资源,节省用户时间。

国产DSLogic Plus的官网可以查阅:
https://dreamsourcelab.cn/product/dslogic-series/

国产DSLogic Plus:
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

(二)PWM信号

PWM(Pulse width modulation),脉冲宽度调制,是一种模拟控制方式,这种方式能使电源的输出电压在工作条件变化时保持恒定,是利用微处理器的数字信号对模拟电路进行控制的一种非常有效的技术。脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

在前面的实验中多次用到,最简单的树莓派基础实验1:双色LED灯实验,控制LED灯的亮度;复杂点的树莓派基础实验34:L298N模块驱动直流电机实验,控制电动机的转速。

PWM的一个优点是从处理器到被控系统信号都是数字形式的,无需进行数模转换。让信号保持为数字形式可将噪声影响降到最小。噪声只有在强到足以将逻辑1改变为逻辑0或将逻辑0改变为逻辑1时,也才能对数字信号产生影响。

对噪声抵抗能力的增强是PWM相对于模拟控制的另外一个优点,而且这也是在某些时候将PWM用于通信的主要原因。从模拟信号转向PWM可以极大地延长通信距离。在接收端,通过适当的RC或LC网络可以滤除调制高频方波并将信号还原为模拟形式。

而树莓派的PWM信号是不怎么标准和稳定的,下面的实验中我们将实际分析一下。

(三)UART信号

在前面的课程中有详细学习,这里不再介绍:

  树莓派基础实验35:USB TO TTL模块实验中学习了通过串口对树莓派进行控制台控制,让串口作为控制终端调试口即 serial console。

  在树莓派基础实验36:通用串口通信实验中学习了设置树莓派的串口为通用串口与PC电脑的串口调试工具进行通信。

  在树莓派基础实验37:pyserial模块通信实验中学习了Python的pyserial模块,通过串口与PC电脑的串口调试工具进行通信。

四、实验步骤

(一) 分析树莓派PWM信号

1) 通过USB 数据线,将逻辑分析仪连接至PC 的USB 端口,并确认硬件指示灯被点亮。

2) 打开DSView 软件(windows 系统首次使用时系统需要搜索驱动程序,请耐心等待),确认硬件指示灯变为绿色,同时DSView 正确识别设备,并在设备列表框显示正确的设备名称。
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

3) 连接排线至逻辑分析仪的采样端口,下图显示了排线和通道的对应关系。对于增强版设备,每个通道为屏蔽线,末端分为信号和地两个端口;对于基础版设备,每4 个通道配一个地线(黑色),彩色线顺序对应0-15 这16 个通道。除此之外,排线还有CK,TI 和TO 信号,一般情况都不需要连接。其中CK 通道为状态采样的时钟输入,可以把外部时钟作为采样时钟,TI 为外部触发信号的输入,TO 为触发信号的输出,会在采样过程中触发条件满足时输出脉冲。

树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!
4) 根据测量需求,连接通道至被测信号。对于低频信号(<5MHz),可以仅连接被测信号和一个公共地信号,本实验仅将通道0的地线与树莓派的GND相连。对于高频信号,建议每个通道单独接地,以获得最佳的信号完整性。

树莓派(name) T型转接板(BCM) DSlogic逻辑分析仪
GPIO1 G18 Channel 0(SIG)
GPIO24 G19 Channel 1(SIG)
GPIO28 G20 Channel 2(SIG)
GPIO29 G21 Channel 3(SIG)
GPIO3 G22 Channel 4(SIG)
GPIO4 G23 Channel 5(SIG)
GND GND Channel 0(GND)

下图中的左端的Type-C接口连接到笔记本电脑USB上哈,为方便拍照就没拍电脑。连线很简单,电路图就没画了。
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

5) 编写树莓派的PWM信号输出程序。每个通道的PWM信号频率依次增大,查看实际的信号质量如何。

 
  1. #!/usr/bin/env python
  2. import RPi.GPIO as GPIO
  3. import time
  4.  
  5. GPIO.setmode(GPIO.BCM)
  6. GPIO.setup(18, GPIO.OUT)
  7. GPIO.setup(19, GPIO.OUT)
  8. GPIO.setup(20, GPIO.OUT)
  9. GPIO.setup(21, GPIO.OUT)
  10. GPIO.setup(22, GPIO.OUT)
  11. GPIO.setup(23, GPIO.OUT)
  12.  
  13. p_0 = GPIO.PWM(18, 50) # 0通道,50HZ,占空比30%
  14. p_0.start(30)
  15.  
  16. p_1 = GPIO.PWM(19, 100)
  17. p_1.start(30)
  18.  
  19. p_2 = GPIO.PWM(20, 200)
  20. p_2.start(30)
  21.  
  22. p_3 = GPIO.PWM(21, 500)
  23. p_3.start(30)
  24.  
  25. p_4 = GPIO.PWM(22, 1000)
  26. p_4.start(30)
  27.  
  28. p_5 = GPIO.PWM(23, 10000)
  29. p_5.start(30)
  30.  
  31. def loop():
  32. while True:
  33. pass
  34.  
  35. def destroy():
  36. p_0.stop()
  37. p_1.stop()
  38. p_2.stop()
  39. p_3.stop()
  40. p_4.stop()
  41. p_5.stop()
  42. GPIO.cleanup()
  43.  
  44. if __name__ == "__main__":
  45. try:
  46.  
  47. loop()
  48. except KeyboardInterrupt:
  49. destroy()

6) 树莓派上运行Python程序,设置好逻辑分析仪的参数。在选项里主要设置Stream模式,阈值电压由于我们的信号高电平是3.3V,这里设置为1V即可。
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

采集时间为1s,采集频率为50MHZ(通常情况下,采样频率需要设置为被测信号最高的4x -10x倍),点击开始按钮:
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

得到所有通道的模型图,从中可以简单看出,越靠下的高频率通道,波形越不稳定,0通道的50HZ频率是最标准和稳定的。
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

7) 分析得到的具体PWM信号。
0通道,50HZ:
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

1通道,100HZ:
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

2通道,200HZ:
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

3通道,500HZ:
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

4通道,1000HZ:
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

5通道,10000HZ:
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

要求的PWM信号频率 测量到的频率 要求的占空比 测量到的占空比
50HZ 49.7HZ 30 30.1
100HZ 99.2HZ 30 30.3
200HZ 197.4HZ 30 30.2
500HZ 484.1HZ 30 29.6
1000HZ 893.2HZ 30 31.9
10000HZ 4580HZ 30 40.9

综上,随着频率的上升,其稳定性会逐渐降低,这就意味着这个树莓派PWM功能无法适用于音频,但是对于控制LED亮度或电机转速来说已经足够了。

(二) 分析树莓派UART信号

1) 连接电路。与树莓派基础实验36:通用串口通信实验一样设置树莓派的串口为通用串口,通过 USB TO TTL模块与PC上的串口调试工具通信。

T型转接板(BCM) USB TO TTL模块 DSlogic逻辑分析仪
RXI TXD Channel 0(SIG)
TXO RXD Channel 1(SIG)
GND GND Channel 0(GND)

树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

2) 我们要检测到特定信号,就需要设定触发条件。如果被测信号的波形不满足设定条件,采样过程会一直等待,直到满足设定条件后,才可完成当前采样。触发可以帮助我们捕获想要观察的特定时刻信号, 是逻辑分析仪最重要的特性之一。我们这里设置任意边沿为触发条件。

3) 树莓派上运行向串口发送简单数据的程序。PC串口调试工具上将收到字符串“Hello”。

 
  1. import serial
  2.  
  3. ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.5)
  4. ser.write('Hello'.encode("gbk"))

4) 为信号添加解码器,这里使用的是UART协议,波特率为9600,数据位8,Data format为ascii。
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

5) PC串口调试工具接收到信号“Hello”的同时,逻辑分析仪也接收到了信号。
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

6) 运行下面的Python代码,PC串口调试工具向树莓派发送数字“0123456789”,树莓派然后又发回PC串口调试工具。

 
  1. #!/usr/bin/python
  2. import serial
  3. from time import sleep
  4.  
  5. ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.5)
  6.  
  7. print ser.port
  8. print ser.baudrate
  9.  
  10. def recv(serial):
  11. while True:
  12. data =serial.read(20) #手动设置读取字符的数量为20
  13. if data == '':
  14. continue
  15. else:
  16. break
  17. sleep(0.02)
  18. return data
  19.  
  20. while True:
  21. data =recv(ser)
  22. if data != '':
  23. print data
  24. ser.write(data)

0号通道先接收到信号,然后1号通道接收到同样的数字“0123456789”信号。
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

从中可以看出每1位数据,高电平为1,低电平为0,且时长为104.18us,每8位数据的开始信号(S)为1位低电平,结束信号(T)为1位高电平。
树莓派遇见逻辑分析仪,看看树莓派PWM信号和UART信号!

有了逻辑分析仪,分析信号时序就太方便了,将虚无的信号想象,变成看得见的图像,非常利于学习,而且国货越来越强大了!