色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于裸機系統上進行的模擬調試

要長高 ? 來源:planetanalog ? 作者:Phoenix Bonicatto ? 2022-04-30 16:04 ? 次閱讀

標題“模擬調試”似乎有點神秘。閱讀后,嵌入式固件開發人員可能會出現認知失調;但相信我,以后會說得通的。標題暗示的是處理在微控制器中處理的信號的任務。許多涉及小型 MCU 的任務都與處理來自傳感器(如麥克風、水聽器和壓力傳感器)的原始信號有關。其中一些信號需要清理然后處理。

這種處理可以使用多種數字信號處理 (DSP) 固件技術,例如 FIR 和 IIR 濾波器、混頻器和 FFT。隨著信號通過微傳輸,我們希望通過調試驗證的數據可能很廣泛。例如,信號通過濾波器后是什么樣子,或者當信號通過時相關器的輸出是什么。這就是模擬調試的用武之地。它允許您實時觀察信號。

較小的微控制器可能缺少較大處理器所具有的一些強大的調試工具,例如 BDM、J-Tag 和 SWD。較小的 MCU 也可以作為基礎金屬運行,而不使用操作系統,這意味著操作系統中可用的任何調試工具都將丟失。這種工具的缺乏和實時信號處理的復雜性會使調試代碼出現問題。但是,調試需要深入了解微處理器內部的數據發生了什么,并且在處理流模擬信號時,您可能希望查看這些在模擬域中的實際情況。

通常,在調試固件時,工程師會使用微控制器上的串行端口(如果存在)打印出正在執行的代碼的變量值或指示符。這里有很多問題。首先,在小型 MCU 中,可能沒有足夠的空間用于打印例程,因為內存可能是稀缺的。其次,速度可能是一個問題。在 DSP 類型的處理中,我們通常一個接一個地對輸入信號進行實時處理,我們不能停下來處理相當長的打印調用。第三,打印例程通常會使用中斷,這可能會導致實時系統出現問題。最后,將數據轉儲到串行端口不會為您提供正在處理的數據的直接模擬視圖。

例如,假設您使用模數轉換器 (ADC) 從傳感器接收信號。您可以將示波器掛在傳感器的輸出上,并在模擬視圖中查看信號和噪聲。但是,如果您通過串口查看相同的信號,當 ADC 被 MCU 讀取并發送到該串口后,您會看到一堆數字。現在,您可以將這些數字放入電子表格并繪制圖表,或者設置另一臺帶有數字和模擬轉換器和顯示器的設備以再次查看數據。但這似乎有點慢和乏味,而且肯定不是實時的。

現在,如果串行端口不可用或不適合調試,工程師可以使用連接到 MCU 的 LED,該 LED 可以根據被調試程序中的各種條件打開或關閉。示波器可以連接到 LED 或可用的 I/O 線,以查看狀態或通過切換固件中的 LED 或 I/O 線來測量狀態變化之間的時間。它工作得很好,但不符合獲得信號模擬視圖的想法,因為它正在由濾波器、相關器、切片器和混頻器的各個階段進行處理。

使用 DAC 進行模擬調試

最好是一個連接示波器探頭的地方,我們可以在固件中快速轉儲處理過的樣本。那么,我們可以使用什么?第一個想法是將數模轉換器 (DAC) 連接到 MCU,或者更好的是使用可用作 MCU 上的外圍設備的轉換器。

為了嘗試這種技術,我將 Analog Devices 的AD7801(一個 8 位 DAC)連接到我正在研究的Arduino Nano設計中。Nano 的核心是 Microchip ATmega328,它沒有板載 DAC。AD7801 使用 8 條數據線的并行輸入,這些數據線由另一條線同步輸入,寫入速度非常快。需要注意的是,我們可以使用此設置查看 8 位數據,但 10 位、12 位或其他大小可以與其他 DAC 一起使用,或者可以縮放以適應 8 位 DAC。我將 8 條數據線連接到 Arduino 上的端口 DAC,并將 WR 線連接到 Arduino 的 D13,如圖 1 所示

圖 1 DAC 通過 8 條數據線連接到 Arduino。

現在,要將數據發送到 DAC,只需要 3 行 Arduino IDE C 代碼:

PORTD = 數據;// 將數據字節放在 D0 到 D7

PORTB = PORTB & B11011111; // 將 D13 拉低以將數據鎖存到 AD7801

端口 B = 端口 B | B00100000; // 拉高 D13

在 16-MHz Arduino 上,此代碼需要大約 5 個周期或大約 312 ns,DAC 的建立時間為 1.2 us。所以,你可以看到這種數據顯示的方法可以比較快的完成,不需要中斷,也不需要太多的代碼。可以將此代碼插入固件的適當位置以查看感興趣的數據。將 3 行代碼放入宏或函數中可能會更簡潔。如果為此創建一個函數,則應使用“always_inline”編譯指示對其進行編譯,以確保其快速運行。

現在連接了 DAC,讓我們看幾個調試示例。看看圖 2

圖 2示波器快照顯示了模擬調試在啟用 DAC 的設置中是如何工作的。

這是傳入傳感器信號的示波器快照——為清楚起見,刪除了標線。底部跡線(粉紅色/紫色)是原始信號,因為它正在進入 ATmega328 上的 ADC 引腳。您可以在這條線上看到明顯的噪音。上面的跡線(黃色)是在 MCU 固件中進行一些濾波和其他處理后的相同信號。

此流程中插入了 DAC 寫入調試代碼,因此 DAC 中的采樣時序與 ADC 相同。如果需要,您還可以對 MCU 中的信號進行抽取。暫時忽略信號中的“尖峰”,我們看到處理過程已經消除了大部分噪聲。我們現在有一個可以評估的干凈信號。應該注意的是,DAC 輸出是一個連續的信號流,而不僅僅是一些短暫的內存緩沖捕獲。

但什么是“尖峰”?這些是我有意放入代碼中的一些調試功能,以查看處理過程是如何進行的。您看到的信號實際上是被信號介質破壞的專有數字信號。該代碼的任務是通過以下方式讀取數字數據包:

  • 發現前導碼“包開始”符號序列
  • 跟蹤采樣時間,以便我們可以在適當的時間對樣本進行切片
  • 繼續采集樣本直到數據包結束

現在,讓我們看一下圖 3

圖 3顯示處理后的信號并添加注釋。

這是添加了注釋的已處理信號的視圖。我在代碼中所做的是將信號從最小值 50 縮放到最大值 200。這允許在 256 個可用值中留出一些空間來在信號上方和下方添加“尖峰”。我們首先看到的是標有“檢測到前導碼”的“尖峰”。它是在代碼驗證已找到前導碼 (B00000011) 時創建的,并且可以使用以下 Arduino IDE 代碼輕松生成:

端口 = 255;// 將 255 放在 D0 到 D7

PORTB = PORTB & B11011111; // 將 D13 拉低以將數據鎖存到 AD7801

端口 B = 端口 B | B00100000; // 拉高 D13

它在示波器軌跡上創建一個 312ns 寬的標記,其幅度等于 DAC 的最大電壓。

信號跡線內上下的“尖峰”是指示代碼確定符號邊界的位置的標記。在正確的時間對符號進行切片非常重要,當出現長時間的 0 或 1 時,這一點變得至關重要。這是因為沒有發現從 0 到 1 或 1 到 0 的轉換。在示波器上查看這些“尖峰”非常有用,因為它可以讓我們驗證實際時序并確認沒有遺漏。這些符號邊界“尖峰”是通過使用以下 Arduino IDE 代碼向 DAC 發送 127 來創建的,該代碼插入到符號時序代碼的適當位置:

端口 = 127;// 將 127 放在 D0 到 D7 上

PORTB = PORTB & B11011111; // 將 D13 拉低以將數據鎖存到 AD7801

端口 B = 端口 B | B00100000; // 拉高 D13

符號轉換通過使用以下代碼向 DAC 發送 0 來標記為“尖峰”,該代碼插入到觀察符號從 0 到 1 或 1 到 0 的轉換的代碼中:

端口 = 0;// 將 0 放在 D0 到 D7 上

PORTB = PORTB & B11011111; // 將 D13 拉低以將數據鎖存到 AD7801

端口 B = 端口 B | B00100000; // 拉高 D13

您可以看到,使用 DAC 查看覆蓋在實際處理跟蹤上的調試信息可以極大地幫助調試代碼的各個部分。它比使用 LED、I/O 線和示波器強大許多倍。它也比串行端口發送數據作為定時信息更有用。

眼尖的人可能已經注意到,在圖 3 的右邊緣,探頭衰減不是 x1 或 x10,而是 x53.5。這是可以在許多較新的示波器上完成的技巧,有時稱為自定義衰減設置。將其設置為 53.5 的原因是它允許使用示波器的光標直接讀取 DAC 的 8 位輸入值。也就是說,如果我將光標向上滑動到前導碼檢測“spike”的頂部,則示波器光標讀數為 255,如果我將光標移動到符號邊界“spike”的末尾,則為 127。

使用 8 位 DAC 時,此設置的公式為 255/MaxVolts,即 DAC 在輸入最大二進制輸入時的輸出電壓,在本例中為 255。因此,對于 5 V 電源軌,自定義設置為 51.0——我的電源軌只有 4.77 V,所以我的數字是 53.5。使用 10:1 探頭時,您可能需要將此數字乘以 10,然后再將其輸入示波器。

它非常方便,因為您可以直接讀取 DAC 設置的數字;換句話說,內部變量在調用 DAC 時所具有的值。這點考慮一下吧。本質上,您可以以這種方式“實時”讀取變量,幾乎與打印語句一樣好,但速度更快且非侵入性。請注意,示波器垂直刻度的噪聲和分辨率會降低精度,因此您可能只能得到實際值的 ±1 或 2 個計數,仍然相當不錯。

除了流式傳輸信號,使用這種技術,8 位 DAC 還可以同時表示 8 個二進制標志的狀態,或程序中 8 位變量的當前值。換句話說,使用 8 位 DAC 提供的信息是監控單個 I/O 線所提供的信息的 8 倍。

使用 PWM 進行模擬調試

現在,如果您沒有可使用的 DAC 怎么辦?您可以使用微控制器上的脈寬調制器 (PWM) 外圍設備執行類似操作。許多小型 MCU 都有 PWM,當它們有 PWM 時,它們通常有多個 — 通常是 6 個。PWM 和 DAC 之間的區別之一是 PWM 輸出需要使用低通濾波器進行濾波以轉換輸出到一個電壓電平。因此,當您將信號樣本發送到 PWM 時,電壓電平會重新創建可以在示波器上顯示的信號,就像使用 DAC 所做的那樣。可以使用簡單的 RC 濾波器進行濾波。

不過這里有一些警告;低通濾波器意味著只能顯示低頻成分的信號,響應速度較慢。因此,您應該將 PWM 的頻率初始化為可用的最高頻率。在 16 MHz ATmega328 上,PWM 可以設置為大約 31 kHz 的最大頻率,因此可以為大約 3-4 kHz 的頻率內容設計低通信號。

使用 PWM 的 Arduino IDE 代碼在初始化后甚至比 DAC 代碼更簡單。將 8 位值寫入 PWM 的代碼很簡單:

模擬寫入(引腳編號,數據)

這里的“data”是一個 8 位采樣值,“PinNumber”是 PWM 輸出的引腳號。

盡管 PWM 可能不那么準確或無法顯示更高頻率的信號,但它有一個有趣的功能。一些 MCU 有多達 6 個 PWM,這意味著多達 6 個輸出可以提供實時數據。您可以有一個 4 跡線示波器同時顯示 4 個變量,留下 2 個備用 PWM 輸出。此外,通過 2 個輸出(PWM 或 DAC),您可以提供 I & Q 數據,這些數據通常用于 DSP 信號處理,從而允許您探索負頻率。需要注意的是,就像 DAC 代碼一樣,PWM 代碼不需要中斷。

其他調試工具

另一個可用于 DAC 或 PWM 傳遞的信號的強大工具是頻譜。圖 4中的示波器屏幕截圖顯示了一個示例。上面的跡線顯示了在微控制器中生成的波形。該信號實際上是兩個頻率(f1 = 165 Hz 和 f2 = 135 Hz)被逐個采樣混合或相乘,然后在生成時發送到 DAC。在頻率混合中,結果是頻率之和和頻率差的頻率。混合操作抑制了原始生成頻率,如示波器跡線下半部分的 FFT 所示。大多數示波器,甚至是愛好者級別的示波器,都提供 FFT 作為數學運算之一。

圖 4示波器屏幕截圖顯示了頻譜如何混合或倍增頻率。

如果您的系統沒有 DAC 或 PWM,您仍然可以使用一些東西來獲取有關正在運行的固件中的信號的一些信息。例如,您可以編寫代碼來對 PWM 信號進行 bit-bang。盡管它很可能對低頻信號或緩慢變化的變量有用。

希望模擬調試的概念現在更加清晰。從固件流式傳輸數據并將其顯示在示波器上的主要概念是一個強大的工具,可以加快您的信號處理固件調試。如果可行,選擇帶有 DAC 外設的 MCU 或在您的第一個原型 PCB 中加入 DAC 可能會很有用。它總是可以在以后刪除或在物料清單 (BOM) 中制作為 NO-POP。

Damian Bonicatto是一名咨詢工程師,在嵌入式硬件、固件和系統設計方面擁有數十年的經驗。他擁有30項專利。

文章轉載自planetanalog ,Phoenix Bonicatto是一名自由作家。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 示波器
    +關注

    關注

    113

    文章

    6264

    瀏覽量

    185293
  • PWM
    PWM
    +關注

    關注

    114

    文章

    5192

    瀏覽量

    214198
  • dac
    dac
    +關注

    關注

    43

    文章

    2298

    瀏覽量

    191198
收藏 人收藏

    評論

    相關推薦

    使用CH32V103創建工程,用QEMU模擬調試時選擇什么模擬器?

    使用CH32V103芯片創建工程,用QEMU模擬調試時,不知選擇什么模擬器,希望高手賜教。
    發表于 04-18 09:30

    如何使用J-Link在A55內核上進行i.MX93 EVK裸機調試

    我正在研究在 i.MX93 EVK 的 A-55 內核上運行裸機代碼(例如帶有 Zephyr RTOS 的程序)。是否有很多關于如何使用 SEGGER J-Link 調試以這種方式運行的應用程序
    發表于 06-05 07:00

    基于卷積定理和希爾伯特變換的模擬調制分析

    本文基于信號處理概念中的卷積定理和希爾伯特變換統一地描述各種模擬調制方式(包括DSB,SSB,AM,FM)的原理,旨在簡化“通信基礎”課程中關于模擬調制理論的分析。
    發表于 08-05 16:37 ?0次下載

    模擬調節器開環校驗

    模擬調節器開環校驗
    發表于 12-11 23:15 ?0次下載

    什么是虛擬調試?虛擬調試的好處

    產品設計過程很難預測到生產和使用過程會不會出現問題,而虛擬調試帶來許多好處之一就是驗證產品的可行性。虛擬調試允許設計者在產品生產之前進行任何修改和優化,而不會造成硬件資源的浪費。而且這樣可以節省時間,因為用戶在測試過程中可以修復
    的頭像 發表于 06-27 08:59 ?1.7w次閱讀

    如何不需要使用就能進行模擬調試的方法資料說明

    本文檔的主要內容詳細介紹的是如何不需要使用就能進行模擬調試的方法資料說明win7安裝Keil μVision4和Proteus7.8sp2并設置聯結調試
    發表于 05-29 17:56 ?0次下載

    STC15系列單片機與迪文DGUS屏應用(五):模擬調試

    STC15系列單片機與迪文DGUS屏應用:模擬調試
    的頭像 發表于 12-24 17:35 ?2298次閱讀

    PLC編程中模擬調試和在線調試

    plc應用程序的調試可分為模擬調試和在線調試兩個步驟。 1.模擬調試 模擬調試是指在沒有輸出設備的情況下,根據開關I/O單元上各位對應LED
    發表于 01-06 11:28 ?5797次閱讀

    使用MCP3008在Raspberry Pi上進行模擬輸入

    電子發燒友網站提供《使用MCP3008在Raspberry Pi上進行模擬輸入.zip》資料免費下載
    發表于 12-07 15:11 ?1次下載
    使用MCP3008在Raspberry Pi<b class='flag-5'>上進行</b><b class='flag-5'>模擬</b>輸入

    一路走來 | 上纜藤倉4m成纜機改造之模擬調試

    今天我們繼續昨天的話題,上纜藤倉成纜機改造的模擬調試的過程。工廠內部模擬調試1天時間,如果放到現場來辦至少要3天;萬一有線路修改,則更加麻煩。因此,工廠再麻煩也要基本同現場一樣接好線路,模擬調試
    的頭像 發表于 04-27 10:35 ?464次閱讀
    一路走來 | 上纜藤倉4m成纜機改造之<b class='flag-5'>模擬調試</b>

    裸機系統模擬調試的關鍵選項

    較小的微控制器可能缺乏較大處理器所擁有的一些強大的調試工具,例如 BDM、J-Tag 和 SWD。較小的 MCU 也可以作為基礎金屬運行,而不使用操作系統,這意味著操作系統中可用的任何調試
    發表于 10-04 17:33 ?203次閱讀
    <b class='flag-5'>裸機</b><b class='flag-5'>系統</b>上<b class='flag-5'>模擬調試</b>的關鍵選項

    西門子標準化編程和虛擬調試應用

    西門子標準化編程和虛擬調試應用,西門子標準化編程、仿真與虛擬調試應用培訓PPT。
    發表于 11-16 14:58 ?569次閱讀
    西門子標準化編程和虛<b class='flag-5'>擬調試</b>應用

    西門子PLC與第三方軟件聯合仿真與虛擬調試

    我們知道如果使用西門子TIA Portal 可以通過PLCSIM和PDPS,NX MCD,Plant Simulation等進行擬調試,以為上述的都是西門子的產品,所以進行擬調試
    的頭像 發表于 01-24 09:24 ?2525次閱讀
    西門子PLC與第三方軟件聯合仿真與虛<b class='flag-5'>擬調試</b>

    使用TPS61181進行模擬調

    電子發燒友網站提供《使用TPS61181進行模擬調光.pdf》資料免費下載
    發表于 10-10 10:56 ?0次下載
    使用TPS61181<b class='flag-5'>進行</b><b class='flag-5'>模擬調</b>光

    TPS61500使用模擬輸入信號進行模擬調

    電子發燒友網站提供《TPS61500使用模擬輸入信號進行模擬調光.pdf》資料免費下載
    發表于 10-12 14:32 ?0次下載
    TPS61500使用<b class='flag-5'>模擬</b>輸入信號<b class='flag-5'>進行</b><b class='flag-5'>模擬調</b>光
    主站蜘蛛池模板: 久久一er精这里有精品| 双性精跪趴灌满h室友4p| 国产亚洲视频在线播放香蕉| 色综合久久久久久| 国产欧美在线亚洲一区刘亦菲| 超大BBWWW| 四虎国产精品永久一区高清| 国产在线观看www| 又亲又揉摸下面视频免费看| 久久不卡免费视频| Chinesetube国产中文| 久久欧洲视频| ai换脸在线全集观看| 天堂在线亚洲精品专区| 花蝴蝶在线观看中字| 18 japanese宾馆直播| 色综合五月激情综合色一区| 极品少妇粉嫩小泬啪啪AV| AV多人爱爱XXx| 亚洲成年人影院| 暖暖视频大全免费观看| 51国产午夜精品免费视频| 少妇的肉体AA片免费| 久爱在线中文在观看| 野花日本免费完整版高清版动漫| 永久精品免费影院在线观看网站| 国产成人在线免费观看| 日本精品久久无码影院| 国产香蕉尹人视频在线| 亚洲精品一卡二卡三卡四卡2021| 俄罗斯12一15处交| 亚洲成A人片在线观看中文不卡| 国产免费人成在线视频视频| 最近的2019中文字幕国语HD| 忘忧草日本在线WWW日本| 久久这里只有精品视频9| 国产99精品在线观看| 2020年国产精品午夜福利在线观看 | 为什么丈夫插我我却喜欢被打着插 | 歪歪漫画羞羞漫画国产| 久久三级视频|