MCU內部ADC模塊誤差如何校準

本文章是筆者整理的備忘筆記。希望在幫助自己溫習避免遺忘的同時,也能幫助其他需要參考的朋友。如有謬誤,歡迎大家進行指正。

一、ADC誤差校準引言

MCU 片內 ADC 模塊的誤差總包括了 5 個靜態參數 (靜態失調,增益誤差,微分非線性誤差 (DNL),積分非線性誤差(INL),絕對精度誤差) 和 5 個動態參數 (信噪比,信噪失真比,無雜 散動態范圍,有效位,總諧波失真) 。其中, 靜態失調和增益誤差是可以利用微控制器 MCU 進行修正, 可以通過軟件算法, 也可以通過硬件固化的方式進行補償。本文提供一種兩點法 ADC 模塊誤差校正并結合硬件計算的方式來完成 ADC 的誤差補償。 ADC 靜態失調被定義為第一次理想編碼跳變與第一次實際編碼跳變之間的偏差。第一次理想編碼跳變發生在 0.5 LSB 處。如果輸入電壓小于 0.5 LSB 時輸出代碼大于零,則 ADC 產生正失調誤差。如果輸入電壓大于 0.5 LSB 時發生第一次輸出編碼跳變,則 ADC 產生負失調誤差,參考如下

圖1?ADC靜態失調圖

ADC增益誤差被定義為補償失調誤差后理想 ADC 傳輸的最后一步中點與實際 ADC 的最后一步中點的偏差,參考如下圖 2所示。

圖2?ADC增益誤差圖

為理解ADC靜態失調和ADC增益誤差(文中將以Offset error和Gain error指代),通過下圖3來進行說明。

圖3?ADC模塊Offset error(左圖)和Gain error(右圖)

如圖3(左)所示,在理想的ADC轉換中,數字輸出為000時理想的模擬電壓輸入范圍應為0~0.5LSB,而實際模擬輸入在0~2LSB時數字輸出均為000,那么此時的Offset error即為1.5LSB。如圖3(右)可知,當輸入模擬信號為8LSB時實際數字輸出比理想輸出小1LSB,即Gain error為1LSB并且是負向error。MCU的Datasheet中可以查找到如下圖4 ADC誤差電氣參數特性,可以看到在使用內部電壓參考時Gain error為±45LSB,這在精密應用場景可能會帶來不小的影響。同時除了被重點關注的Gain error和offset error,ADC可能還會存在INL error(積分非線性誤差)、DNL error(微分非線性誤差)共同決定了實際采樣轉換的非線性度。

圖4 ADC誤差電氣參數(摘自F2800137數據手冊)

二、ADC模塊誤差校準方案

1.?傳統單點法校準失調和增益誤差的方案

單點ADC校準方案通常是外部提供一個固定的電壓參考點(在全域輸入電壓范圍內選取),使用一個采樣通道定時對該參考點進行采樣,計算出該點誤差后直接同步校準到整個電壓輸入域。

該方案的劣勢在于單點的誤差無法完全反應全域的誤差,單純使用單點的誤差狀態推廣到全域進行校準,會存在無法達到預期校準精度的可能,如下圖5所示。

圖 5. 單點ADC誤差校準

2.?使用兩點法校準失調和增益誤差的方案

實際上ADC在全域輸入模擬電壓范圍內每一個點的Offset error和Gain error是不盡相同的,并且是非線性的,但出于性價比考慮這邊提出一種實現成本最優的ADC兩點動態校準法,如下圖6所示:

圖6. 雙點ADC誤差校準

如上圖 6?所示,兩點校準法需要在全域模擬輸入內選取兩個點 AinA(Vref1)和 AinB(Vref2)進行曲線 擬合、校準。

具體實施過程:

1. 本案例在當 ADC 輸入模擬電壓大于 0.4432V 左右時執行誤差校準程序(Note:在低電壓 0~0.4432V 范圍 ADC 轉換誤差較小);

2. 計算 Gain error 比(實質就是斜率之比)

3. 計算各點的 Offset error:

a) 計算 A 點的 Offset error: CalOffsetA = AoutA_idea ? (AoutA_actual ? CalGain)

b) 計算 B 點的 Offset error: CalOffsetB = AoutB_idea ? (AoutB_actual ? CalGain)

c) 計算兩點的平均 Offset error: CalOffsetAve = (CalOffsetL + CalOffsetH)/ 2

4. 設定一個非線性的誤差補償比:

a) 計算當前點之于非線性起始點的偏移量:CalNonP = ADCOUT_actual / AoutA_idea (其中ADCOUT_actual 為當前采樣輸出的 AD 值,AoutA_idea為非線性補償段的起始點,此處以 A 點代指,此值不固定、應以實際調試為準);

b) 計算補償值:CalOffsetNonL=(CalNonP * CalOffsetAve)/x (其中 x 為常量, 手動調節的補償放大比例);

由于 ADC 誤差實際表現的非線性,為得到更為精確的補償,本案例將校準分為兩段式補償:低區 誤差補償(AinS ~ AinA 段,如上圖 6 所示)、高區誤差補償(AinA ~ AinB 段)。 將計算所得參數帶入輸出誤差校準公式:

低區誤差補償公式:CaliAout = ADCOUT_actual ? CalGain + CaiOffsetA

高區誤差補償公式:CaliAout = ADCOUT_actual ? CalGain + CaiOffsetAve + CalOffsetNonL 注:實際應用中為提高動態特性,需在特定時間內調用一次誤差補償程序以實時更新補償量。

圖7. 兩點校準實施實例

三、校準中常見的問題

如圖 8?所示,C2000 產品 ADC 模塊有不同靜態誤差特性,利用上述誤差補償的算法來實現 ADC 誤差校準。針對單點方案, 無論是參考電壓源或高精度電阻, 對參考器件特性要求很高。 針對兩點方案, ADC 校準效果取決于參考點選擇, 以及校準算法,要求實時性。然而, F28P65x 新一代 Type-4 ADC 模塊硬件計算模塊可以保證校準實時性, 同時減小 CPU 的帶寬。

圖8. 不同 C2000 產品系列 ADC 誤差特性(左圖-校準前;右圖-校準后)

四、總結

本案例通過實驗驗證 ADC 兩點校準的有效性,同時在 C2000 系列芯片中導入應用(包含但不限 于 F280013x/F28002x/F28003x/F28004x/F28P6x/F28P5x)。若進一步優化算法, ADC 高精度可 進一步提升,實際應用中可根據使用場景進行適配。但需注意的是確保兩個輸入參考點的穩定、 準確。此外,最新一代 C2000 F28P65 ADC 模塊的全新特性(求和、平均、求最大/小值)在 ADC 誤差校準過程中可以提供更高效的處理過程,使得 ADC 動態校準具備了實際可行的可能性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67715.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

嵌入式硬件篇---CPUGPUTPU

文章目錄 第一部分:處理器CPU(中央處理器)1.通用性2.核心數3.緩存4.指令集5.功耗和發熱 GPU(圖形處理器)1.并行處理2.核心數量3.內存帶寬4.專門的應用 TPU(張量處理單元)1.為深度學習定制2.低精…

03-機器學習-數據獲取

一、流行機器學習數據集 主流機器學習數據集匯總 數據集名稱描述來源MNIST手寫數字圖像數據集,由美國人口普查局員工書寫。MNIST官網ImageNet包含數百萬張圖像,用于圖像分類和目標檢測。ImageNet官網AudioSet包含YouTube音頻片段,用于聲音分…

doris:STRUCT

STRUCT<field_name:field_type [COMMENT comment_string], ... > 表示由多個 Field 組成的結構體&#xff0c;也可被理解為多個列的集合。 不能作為 Key 使用&#xff0c;目前 STRUCT 僅支持在 Duplicate 模型的表中使用。一個 Struct 中的 Field 的名字和數量固定&…

一次端口監聽正常,tcpdump無法監聽到指定端口報文問題分析

tcpdump命令&#xff1a; sudo tcpdump -i ens2f0 port 6471 -XXnnvvv 下面是各個部分的詳細解釋&#xff1a; 1.tcpdump: 這是用于捕獲和分析網絡數據包的命令行工具。 2.-i ens2f0: 指定監聽的網絡接口。ens2f0 表示本地網卡&#xff09;&#xff0c;即計算機該指定網絡接口捕…

“新月智能武器系統”CIWS,開啟智能武器的新紀元

新月人物傳記&#xff1a;人物傳記之新月篇-CSDN博客 相關文章鏈接&#xff1a;星際戰爭模擬系統&#xff1a;新月的編程之道-CSDN博客 新月智能護甲系統CMIA--未來戰場的守護者-CSDN博客 “新月之智”智能戰術頭盔系統&#xff08;CITHS&#xff09;-CSDN博客 目錄 智能武…

實驗六 項目二 簡易信號發生器的設計與實現 (HEU)

聲明&#xff1a;代碼部分使用了AI工具 實驗六 綜合考核 Quartus 18.0 FPGA 5CSXFC6D6F31C6N 1. 實驗項目 要求利用硬件描述語言Verilog&#xff08;或VHDL&#xff09;、圖形描述方式、IP核&#xff0c;結合數字系統設計方法&#xff0c;在Quartus開發環境下&#xff…

SCRM系統如何提升客戶管理及業務協同的效率與價值

內容概要 在當今商業環境中&#xff0c;SCRM系統&#xff08;社交客戶關系管理系統&#xff09;正逐漸受到越來越多企業的關注和重視。隨著科技的發展&#xff0c;傳統的客戶管理方式已經無法滿足快速變化的市場需求&#xff0c;SCRM系統通過整合客戶數據和社交網絡信息&#…

[免費]微信小程序智能商城系統(uniapp+Springboot后端+vue管理端)【論文+源碼+SQL腳本】

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;看到一個不錯的微信小程序智能商城系統(uniappSpringboot后端vue管理端)&#xff0c;分享下哈。 項目視頻演示 【免費】微信小程序智能商城系統(uniappSpringboot后端vue管理端) Java畢業設計_嗶哩嗶哩_bilibili 項目介紹…

PID算法的數學實現和參數確定方法

目錄 概述 1 算法描述 1.1 PID算法模型 1.2 PID離散化的圖形描述 1.3 PID算法的特點 2 離散化的PID算法 2.1 位置式PID算法 2.2 增量式PID算法 2.3 位置式PID與增量式PID比較 3 控制器參數整定 3.1 PID參數確定方法 3.1.1 湊試法 3.1.2 臨界比例法 3.1.3 經驗法…

《DeepSeek R1:大模型最簡安裝秘籍》

DeepSeek R1&#xff1a;AI 大模型界的新起之秀 在人工智能的璀璨星空中&#xff0c;大模型如繁星般閃耀&#xff0c;而 DeepSeek R1 無疑是其中一顆冉冉升起的新星&#xff0c;自問世以來便吸引了全球的目光&#xff0c;在人工智能領域占據了重要的一席之地。 從性能表現上看…

【論文閱讀】RAG-Reward: Optimizing RAG with Reward Modeling and RLHF

研究背景 研究問題&#xff1a;這篇文章要解決的問題是如何優化檢索增強生成&#xff08;RAG&#xff09;系統&#xff0c;特別是通過獎勵建模和人類反饋強化學習&#xff08;RLHF&#xff09;來提高大型語言模型&#xff08;LLMs&#xff09;在RAG任務中的效果。研究難點&…

【數據結構】(3)包裝類和泛型

一、包裝類 1、什么是包裝類 將基礎類型包裝成的類就是包裝類。由于基礎類型不是繼承 Object 類的類&#xff0c;所以在泛型不能直接支持基礎類型&#xff0c;為了解決這個問題&#xff0c;就需要把基礎類型轉換為對應的包裝類。 基礎類型對應的包裝類 基礎類型包裝類byteByte…

DBUtils中QueryRunner(空參,傳數據源)構造方法的區別及應用場景

關于學習Spring框架時重構DAO層時&#xff0c;遇到的QueryRunner構造方法的問題&#xff0c;回憶MySQL中DBUtils部分 1. 空參構造方法 new QueryRunner() 特點&#xff1a; 不綁定數據源&#xff1a;QueryRunner 實例內部沒有 DataSource&#xff0c;因此無法自動獲取連接。 …

C++11線程

C11提供了線程庫&#xff0c;下面我們來看一下如何使用。 線程的創建 頭文件 要創建一個線程需要包一個線程頭文件:#include <thread> 我們先來看看thread支持的構造方式。 支持默認構造&#xff0c;直接使用thread創建一個空的線程對象。 也支持帶參的構造&#x…

梯度提升用于高效的分類與回歸

人工智能例子匯總:AI常見的算法和例子-CSDN博客 使用 決策樹(Decision Tree) 實現 梯度提升(Gradient Boosting) 主要是模擬 GBDT(Gradient Boosting Decision Trees) 的原理,即: 第一棵樹擬合原始數據計算殘差(負梯度方向)用新的樹去擬合殘差累加所有樹的預測值重…

Golang 并發機制-3:通道(channels)機制詳解

并發編程是一種創建性能優化且響應迅速的軟件的強大方法。Golang&#xff08;也稱為 Go&#xff09;通過通道&#xff08;channels&#xff09;這一特性&#xff0c;能夠可靠且優雅地實現并發通信。本文將揭示通道的概念&#xff0c;解釋其在并發編程中的作用&#xff0c;并提供…

Unity開發游戲使用XLua的基礎

Unity使用Xlua的常用編碼方式&#xff0c;做一下記錄 1、C#調用lua 1、Lua解析器 private LuaEnv env new LuaEnv();//保持它的唯一性void Start(){env.DoString("print(你好lua)");//env.DoString("require(Main)"); 默認在resources文件夾下面//幫助…

筆記:使用ST-LINK燒錄STM32程序怎么樣最方便?

一般板子在插件上&#xff0c; 8腳 3.3V;9腳 CLK;10腳 DIO;4腳GND ST_Link 19腳 3.3V;9腳 CLK;7腳 DIO;20腳 GND 燒錄軟件&#xff1a;ST-LINK Utility&#xff0c;Keil_5; ST_Link 接口針腳定義&#xff1a; 按定義連接ST_Link與電路板&#xff1b; 打開STM32 ST-LINK Uti…

網絡測試工具

工具介紹&#xff1a; 這是一個功能完整的網絡測速工具&#xff0c;可以測試網絡的下載速度、上傳速度和延遲。 功能特點&#xff1a; 1. 速度測試 - 下載速度測試 - 上傳速度測試 - Ping延遲測試 - 自動選擇最佳服務器 2. 實時顯示 - 進度條顯示測試進度 - 實時顯示測試狀…

java每日精進1.31(SpringSecurity)

在所有的開發的系統中&#xff0c;都必須做認證(authentication)和授權(authorization)&#xff0c;以保證系統的安全性。 一、基礎使用 1.依賴 <dependencies><!-- 實現對 Spring MVC 的自動化配置 --><dependency><groupId>org.springframework.bo…