樹莓派基礎實驗38:邏輯分析儀分析PWM、UART信號

一、介紹

??邏輯分析儀是專門針對數(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/

國產(chǎn)DSLogic Plus

(二)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信號

  1. 通過USB 數(shù)據(jù)線,將邏輯分析儀連接至PC 的USB 端口,并確認硬件指示燈被點亮。

  2. 打開DSView 軟件(windows 系統(tǒng)首次使用時系統(tǒng)需要搜索驅(qū)動程序,請耐心等待),確認硬件指示燈變?yōu)榫G色,同時DSView 正確識別設備,并在設備列表框顯示正確的設備名稱。


  3. 連接排線至邏輯分析儀的采樣端口,下圖顯示了排線和通道的對應關系。對于增強版設備,每個通道為屏蔽線,末端分為信號和地兩個端口;對于基礎版設備,每4 個通道配一個地線(黑色),彩色線順序?qū)?-15 這16 個通道。除此之外,排線還有CK,TI 和TO 信號,一般情況都不需要連接。其中CK 通道為狀態(tài)采樣的時鐘輸入,可以把外部時鐘作為采樣時鐘,TI 為外部觸發(fā)信號的輸入,TO 為觸發(fā)信號的輸出,會在采樣過程中觸發(fā)條件滿足時輸出脈沖。


    DSlogic邏輯分析儀排線和通道的對應關系
  4. 根據(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上哈,為方便拍照就沒拍電腦。連線很簡單,電路圖就沒畫了。

邏輯分析儀接線圖
  1. 編寫樹莓派的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()
  1. 樹莓派上運行Python程序,設置好邏輯分析儀的參數(shù)。在選項里主要設置Stream模式,閾值電壓由于我們的信號高電平是3.3V,這里設置為1V即可。

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

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


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


    pwm50HZ

1通道,100HZ:


pwm100HZ

2通道,200HZ:


pwm200HZ

3通道,500HZ:


pwm500HZ

4通道,1000HZ:


pwm1000HZ

5通道,10000HZ:


pwm10000HZ
要求的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信號

  1. 連接電路。與樹莓派基礎實驗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)
分析樹莓派UART信號接線圖
  1. 我們要檢測到特定信號,就需要設定觸發(fā)條件。如果被測信號的波形不滿足設定條件,采樣過程會一直等待,直到滿足設定條件后,才可完成當前采樣。觸發(fā)可以幫助我們捕獲想要觀察的特定時刻信號, 是邏輯分析儀最重要的特性之一。我們這里設置任意邊沿為觸發(fā)條件。

  2. 樹莓派上運行向串口發(fā)送簡單數(shù)據(jù)的程序。PC串口調(diào)試工具上將收到字符串“Hello”。

import serial

ser = serial.Serial('/dev/ttyAMA0', 9600, timeout=0.5)
ser.write('Hello'.encode("gbk"))
  1. 為信號添加解碼器,這里使用的是UART協(xié)議,波特率為9600,數(shù)據(jù)位8,Data format為ascii。


    解碼器設置
  2. PC串口調(diào)試工具接收到信號“Hello”的同時,邏輯分析儀也接收到了信號。


    hello信號
  3. 運行下面的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”信號。


0號通道信號
1號通道信號

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


每1位的情況

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容