一、介紹
??邏輯分析儀是專門針對數(shù)字信號的調(diào)試工具,可長時間采集,無波形死區(qū),支持復雜觸發(fā)定位以及全面的協(xié)議內(nèi)容解析。
??邏輯分析儀的作用是利用便于觀察的形式顯示出數(shù)字系統(tǒng)的運行情況,對數(shù)字系統(tǒng)進行分析和故障判斷。
??相對于示波器適合觀察周期信號的電壓變化及噪聲,邏輯分析儀只采集高低電平,更擅長于分析數(shù)字通訊過程和復雜的協(xié)議解析。
??在樹莓派基礎實驗35:USB TO TTL模塊實驗中學習了通過串口對樹莓派進行控制臺控制,讓串口作為控制終端調(diào)試口即 serial console。
??在樹莓派基礎實驗36:通用串口通信實驗中學習了設置樹莓派的串口為通用串口與PC電腦的串口調(diào)試工具進行通信。
??在樹莓派基礎實驗37:pyserial模塊通信實驗中學習了Python的pyserial模塊,通過串口與PC電腦的串口調(diào)試工具進行通信。
??本實驗中學習樹莓派中使用邏輯分析儀,對樹莓派的PWM信號和UART信號進行分析。我們后面將會學到的航模無線電遙控系統(tǒng)中的接收機,在輸出端也是輸出PWM信號,控制舵機,每路通道一路PWM信號。而還有一種更節(jié)省物理接口數(shù)量的輸出模式就是SBUS信號,它也是一種串口通信協(xié)議,是接收機的串行總線輸出,通過這根總線,可以獲得遙控器上所有通道的數(shù)據(jù)。
二、組件
★Raspberry Pi 3 B+主板*1
★樹莓派電源*1
★USB TO TTL模塊*1
★國產(chǎn)夢源DSLogic Plus邏輯分析儀*1
★面包板*1(可選)
★40P軟排線*1
★跳線若干
三、實驗原理
(一)邏輯分析儀
邏輯分析儀的工作過程就是數(shù)據(jù)采集、存儲、觸發(fā)、顯示的過程,由于它采用數(shù)字存儲技術(shù),可將數(shù)據(jù)采集工作和顯示工作分開進行(buffer模式),也可同時進行(stream模式),必要時,對存儲的數(shù)據(jù)可以反復進行顯示,以利于對問題的分析和研究。
邏輯分析儀是分析數(shù)字系統(tǒng)邏輯關系的儀器。邏輯分析儀是屬于數(shù)據(jù)域測試儀器中的一種總線分析儀,即以總線(多線)概念為基礎,同時對多條數(shù)據(jù)線上的數(shù)據(jù)流進行觀察和測試的儀器,這種儀器對復雜的數(shù)字系統(tǒng)的測試和分析十分有效。邏輯分析儀是利用時鐘從測試設備上采集和顯示數(shù)字信號的儀器,最主要作用在于時序判定。由于邏輯分析儀不像示波器那樣有許多電壓等級,通常只顯示兩個電壓(邏輯1和0),因此設定了參考電壓后,邏輯分析儀將被測信號通過比較器進行判定,高于參考電壓者為High,低于參考電壓者為Low,在High與 Low之間形成數(shù)字波形。
例如:一個待測信號使用200Hz采樣率的邏輯分析儀,當參考電壓設定為1.5V時,在測量時邏輯分析儀就會平均每5ms采取一個點,超過1.5V者為High(邏輯1),低于1.5V者為Low(邏輯0),而后的邏輯1和0可連接成一個簡單波形,工程師便可在此連續(xù)波形中找出異常錯誤(bug)之處。整體而言,邏輯分析儀測量被測信號時,并不會顯示出電壓值,只是High跟Low的差別;如果要測量電壓就一定需要使用示波器。除了電壓值的顯示不同外,邏輯分析儀與示波器的另一個差別在于通道數(shù)量。一般的示波器只有2個通道或4個通道,而邏輯分析儀可以擁有從16個通道、32個通道、64個通道和上百個通道數(shù)不等,因此邏輯分析儀具備同時進行多通道測試的優(yōu)勢。
大多數(shù)開發(fā)人員通過邏輯分析儀等測試工具的協(xié)議分析功能可以很輕松的發(fā)現(xiàn)錯誤、調(diào)試硬件、加快開發(fā)進度,為高速度、高質(zhì)量完成工程提供保障。
協(xié)議解碼是協(xié)議分析的基礎,只有解碼正確的協(xié)議分析才能夠被別人接受,只有正確的解碼才能提供更多的錯誤信息。
協(xié)議觸發(fā)能夠充分利用有限的觸發(fā)深度和存儲空間,同時提供更多更可靠的觸發(fā),為快速發(fā)現(xiàn)和定位錯誤提供了一種高效的工具。
錯誤識別是邏輯分析儀的主要作用,它建立在協(xié)議解碼和協(xié)議觸發(fā)之上的,只有協(xié)議觸發(fā)功能強大才能采集到錯誤,只有協(xié)議解碼正確才能發(fā)現(xiàn)錯誤。
信息提示能夠充分利用顏色與視圖等資源,有效表達協(xié)議解碼的結(jié)果,使得用戶能夠快速找到需要的信息。當然信息提示也能夠合理調(diào)節(jié)處理資源,節(jié)省用戶時間。
國產(chǎn)DSLogic Plus的官網(wǎng)可以查閱:
https://dreamsourcelab.cn/product/dslogic-series/

(二)PWM信號
PWM(Pulse width modulation),脈沖寬度調(diào)制,是一種模擬控制方式,這種方式能使電源的輸出電壓在工作條件變化時保持恒定,是利用微處理器的數(shù)字信號對模擬電路進行控制的一種非常有效的技術(shù)。脈沖寬度調(diào)制是利用微處理器的數(shù)字輸出來對模擬電路進行控制的一種非常有效的技術(shù),廣泛應用在從測量、通信到功率控制與變換的許多領域中。
在前面的實驗中多次用到,最簡單的樹莓派基礎實驗1:雙色LED燈實驗,控制LED燈的亮度;復雜點的樹莓派基礎實驗34:L298N模塊驅(qū)動直流電機實驗,控制電動機的轉(zhuǎn)速。
PWM的一個優(yōu)點是從處理器到被控系統(tǒng)信號都是數(shù)字形式的,無需進行數(shù)模轉(zhuǎn)換。讓信號保持為數(shù)字形式可將噪聲影響降到最小。噪聲只有在強到足以將邏輯1改變?yōu)檫壿?或?qū)⑦壿?改變?yōu)檫壿?時,也才能對數(shù)字信號產(chǎn)生影響。
對噪聲抵抗能力的增強是PWM相對于模擬控制的另外一個優(yōu)點,而且這也是在某些時候?qū)WM用于通信的主要原因。從模擬信號轉(zhuǎn)向PWM可以極大地延長通信距離。在接收端,通過適當?shù)腞C或LC網(wǎng)絡可以濾除調(diào)制高頻方波并將信號還原為模擬形式。
而樹莓派的PWM信號是不怎么標準和穩(wěn)定的,下面的實驗中我們將實際分析一下。
(三)UART信號
在前面的課程中有詳細學習,這里不再介紹:
??樹莓派基礎實驗35:USB TO TTL模塊實驗中學習了通過串口對樹莓派進行控制臺控制,讓串口作為控制終端調(diào)試口即 serial console。
??在樹莓派基礎實驗36:通用串口通信實驗中學習了設置樹莓派的串口為通用串口與PC電腦的串口調(diào)試工具進行通信。
??在樹莓派基礎實驗37:pyserial模塊通信實驗中學習了Python的pyserial模塊,通過串口與PC電腦的串口調(diào)試工具進行通信。
四、實驗步驟
(一) 分析樹莓派PWM信號
通過USB 數(shù)據(jù)線,將邏輯分析儀連接至PC 的USB 端口,并確認硬件指示燈被點亮。
-
打開DSView 軟件(windows 系統(tǒng)首次使用時系統(tǒng)需要搜索驅(qū)動程序,請耐心等待),確認硬件指示燈變?yōu)榫G色,同時DSView 正確識別設備,并在設備列表框顯示正確的設備名稱。
-
連接排線至邏輯分析儀的采樣端口,下圖顯示了排線和通道的對應關系。對于增強版設備,每個通道為屏蔽線,末端分為信號和地兩個端口;對于基礎版設備,每4 個通道配一個地線(黑色),彩色線順序?qū)?-15 這16 個通道。除此之外,排線還有CK,TI 和TO 信號,一般情況都不需要連接。其中CK 通道為狀態(tài)采樣的時鐘輸入,可以把外部時鐘作為采樣時鐘,TI 為外部觸發(fā)信號的輸入,TO 為觸發(fā)信號的輸出,會在采樣過程中觸發(fā)條件滿足時輸出脈沖。
DSlogic邏輯分析儀排線和通道的對應關系 根據(jù)測量需求,連接通道至被測信號。對于低頻信號(<5MHz),可以僅連接被測信號和一個公共地信號,本實驗僅將通道0的地線與樹莓派的GND相連。對于高頻信號,建議每個通道單獨接地,以獲得最佳的信號完整性。
| 樹莓派(name) | T型轉(zhuǎn)接板(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信號輸出程序。每個通道的PWM信號頻率依次增大,查看實際的信號質(zhì)量如何。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.setup(19, GPIO.OUT)
GPIO.setup(20, GPIO.OUT)
GPIO.setup(21, GPIO.OUT)
GPIO.setup(22, GPIO.OUT)
GPIO.setup(23, GPIO.OUT)
p_0 = GPIO.PWM(18, 50) # 0通道,50HZ,占空比30%
p_0.start(30)
p_1 = GPIO.PWM(19, 100)
p_1.start(30)
p_2 = GPIO.PWM(20, 200)
p_2.start(30)
p_3 = GPIO.PWM(21, 500)
p_3.start(30)
p_4 = GPIO.PWM(22, 1000)
p_4.start(30)
p_5 = GPIO.PWM(23, 10000)
p_5.start(30)
def loop():
while True:
pass
def destroy():
p_0.stop()
p_1.stop()
p_2.stop()
p_3.stop()
p_4.stop()
p_5.stop()
GPIO.cleanup()
if __name__ == "__main__":
try:
loop()
except KeyboardInterrupt:
destroy()
- 樹莓派上運行Python程序,設置好邏輯分析儀的參數(shù)。在選項里主要設置Stream模式,閾值電壓由于我們的信號高電平是3.3V,這里設置為1V即可。

采集時間為1s,采集頻率為50MHZ(通常情況下,采樣頻率需要設置為被測信號最高的4x -10x倍),點擊開始按鈕:

得到所有通道的模型圖,從中可以簡單看出,越靠下的高頻率通道,波形越不穩(wěn)定,0通道的50HZ頻率是最標準和穩(wěn)定的。

-
分析得到的具體PWM信號。
0通道,50HZ:
pwm50HZ
1通道,100HZ:

2通道,200HZ:

3通道,500HZ:

4通道,1000HZ:

5通道,10000HZ:

| 要求的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 |
綜上,隨著頻率的上升,其穩(wěn)定性會逐漸降低,這就意味著這個樹莓派PWM功能無法適用于音頻,但是對于控制LED亮度或電機轉(zhuǎn)速來說已經(jīng)足夠了。
(二) 分析樹莓派UART信號
- 連接電路。與樹莓派基礎實驗36:通用串口通信實驗一樣設置樹莓派的串口為通用串口,通過 USB TO TTL模塊與PC上的串口調(diào)試工具通信。
| T型轉(zhuǎn)接板(BCM) | USB TO TTL模塊 | DSlogic邏輯分析儀 |
|---|---|---|
| RXI | TXD | Channel 0(SIG) |
| TXO | RXD | Channel 1(SIG) |
| GND | GND | Channel 0(GND) |

我們要檢測到特定信號,就需要設定觸發(fā)條件。如果被測信號的波形不滿足設定條件,采樣過程會一直等待,直到滿足設定條件后,才可完成當前采樣。觸發(fā)可以幫助我們捕獲想要觀察的特定時刻信號, 是邏輯分析儀最重要的特性之一。我們這里設置任意邊沿為觸發(fā)條件。
樹莓派上運行向串口發(fā)送簡單數(shù)據(jù)的程序。PC串口調(diào)試工具上將收到字符串“Hello”。
import serial
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.5)
ser.write('Hello'.encode("gbk"))
-
為信號添加解碼器,這里使用的是UART協(xié)議,波特率為9600,數(shù)據(jù)位8,Data format為ascii。
解碼器設置 -
PC串口調(diào)試工具接收到信號“Hello”的同時,邏輯分析儀也接收到了信號。
hello信號 運行下面的Python代碼,PC串口調(diào)試工具向樹莓派發(fā)送數(shù)字“0123456789”,樹莓派然后又發(fā)回PC串口調(diào)試工具。
#!/usr/bin/python
import serial
from time import sleep
ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.5)
print ser.port
print ser.baudrate
def recv(serial):
while True:
data =serial.read(20) #手動設置讀取字符的數(shù)量為20
if data == '':
continue
else:
break
sleep(0.02)
return data
while True:
data =recv(ser)
if data != '':
print data
ser.write(data)
0號通道先接收到信號,然后1號通道接收到同樣的數(shù)字“0123456789”信號。


從中可以看出每1位數(shù)據(jù),高電平為1,低電平為0,且時長為104.18us,每8位數(shù)據(jù)的開始信號(S)為1位低電平,結(jié)束信號(T)為1位高電平。

有了邏輯分析儀,分析信號時序就太方便了,將虛無的信號想象,變成看得見的圖像,非常利于學習,而且國貨越來越強大了!





