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

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

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

3天內不再提示

STM32 ADC 的使用說明

科技綠洲 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2023-06-22 10:15 ? 次閱讀

前言

最近是有一個產品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代碼,本來以為簡簡單單,但是在調用 HAL ADC校準函數的時候遇到一個問題有點疑問,度娘一下也沒有找到解答,還是經過翻閱了一些資料才得到答案,特此來記錄一下。

我是矜辰所致,全網同名,盡量用心寫好每一系列文章,不浮夸,不將就,認真對待學知識的我們,矜辰所致,金石為開!

  • 前言
  • 一、ADC 配置說明
    • 1.1 ADC 采樣步驟
  • 二、ADC 校準
    • 2.1 什么是ADC校準?
    • 2.2 為什么 ADC 使用需要校準?
    • 2.2 什么時候使用 ADC 校準?
    • 2.3 ADC 采樣每次都需要校準嗎?
  • 三、HAL 庫校準函數
    • 3.1 單端校準和差分校準
    • 3.2 不同系列的校準函數
    • 3.3 更多的校準模式
  • 結語

一、ADC 配置說明

詳細的 STM32 ADC 的使用,本文不做過多說明,這個網上一搜一大把。

本文使用的是 HAL 庫,直接用 STM32CubeMX 生成的代碼,ADC 的配置步驟在我的另外一篇博文:

STM32L051測試 (一、使用CubeMX生成工程文件 — ST系列芯片通用) 中有過介紹:

圖片

對于其他不同型號,F1,F4 等,配置大同小異。

1.1 ADC 采樣步驟

使用 CubeMX 可以大大簡化工程師的使用步驟,這里直接說明一下對于使用 CubeMX 來說的 ADC 采樣步驟。

ADC 采樣使用步驟簡單來說如下幾步(以單次采樣為例說明):

  1. 配置 ADC 工作參數:包括基本配置,和通道相關參數;(STM32BubeMX 自動生成代碼 MX_ADC_Init()
  2. ADC_MSP 初始化:包括初始化 ADC 的時鐘、GPIO 引腳、 DMA 和 NVIC 相關的設置;(STM32BubeMX 自動生成代碼HAL_ADC_MspInit()
  3. 校準!使用前務必校準!;(大部分型號需要我們在程序中自己調用代碼,某些型號不需要校準,后面會說明HAL_ADCEx_Calibration_Start()
  4. 啟動 ADC 轉換;(我們在程序中自己寫代碼,調用庫函數HAL_ADC_Start()
  5. 等待轉換完成;(我們在程序中自己寫代碼,調用庫函數HAL_ADC_PollForConversion()
  6. 獲取結果;(我們在程序中自己寫代碼,調用庫函數HAL_ADC_GetValue()

二、ADC 校準

在上面的步驟中,我把校準用了紅色字體強調說明,因為在 ADC 的使用中必須進行校準 ,否者自己設計的電路得到的結果可能與實際的會有不同的偏差。

2.1 什么是ADC校準?

STM32 的 ADC 校準一般有 參考電壓校準 和 增益校準。

參考電壓校準:

先測量 ADC 參考電壓的實際值,然后將該值與預設的參考電壓進行比較,得到參考電壓的偏差,最終通過校準將其校正的方式叫做 參考電壓校準 ,其目的是為了準確測量 ADC 的輸入信號

叫做增益校準:

通過測量內部基準電壓和 ADC 輸入信號的幅值之間的比例關系,校準 ADC 增益的方式 叫做增益校準,其目的是確保 ADC 輸出的數值與輸入信號的幅值之間具有良好的線性關系,為了準確的轉換 ADC 輸入信號。

ADC 校準的目的是為了消除 ADC 的偏移誤差和增益誤差,從而提高測量精度。

2.2 為什么 ADC 使用需要校準?

這個為什么要用 ADC 校準,我這里也只能簡單的說明一下。

這個就像芯片生產過程制造中的差異化一樣,ADC部分也存在一些差異化(雖然很小),其參考電壓、偏置電壓、增益等參數可能存在一些不確定性和漂移,這些參數的變化會導致 ADC 的測量結果產生誤差。

就想上面介紹什么是 ADC 校準最后說的,為了提高測量精度,消除 ADC 的偏移誤差和增益誤差,所以在使用 ADC 采樣的時候都需要進行 ADC 校準。

2.2 什么時候使用 ADC 校準?

在我們使用 CubeMX 軟件的時候,ADC 的配置,初始化等大部分程序都是由軟件給我們生成的,我們都無需過多干預,但是校準是不會給我們自動加入程序的,這就需要我們 手動的添加。

在程序中,我們只需要保證在 ADC 開始使用前(ADC 轉換函數調用前),ADC 初始化后,進行校準即可。

2.3 ADC 采樣每次都需要校準嗎?

這個問題并不能直接回答,我們先來了解一下 調用了 HAL 校準函數以后,STM32 是怎么處理的。

調用 STM32 校準函數以后, 校準的結果會被保存在相應的寄存器中,以供后續的ADC測量使用。

由上面這句話可以知道,校準過后的結果會被保存起來,每次 ADC 使用的時候會從該寄存器中取校準數值,所以說一般來說,只要你上電校準過一次,就行了。

但是!注意,校準過后不用再校準是基于你的 ADC 設置沒有改變,產品的工作環境穩定的前提下!

如果采樣過程中你改變了 ADC 的環境,比如參考電壓,采樣時間等一些配置,或者一些低功耗產品,需要進行休眠,那么還是需要進行再次校準的。

還有一點,就是產品的工作環境,比如產品的環境比較惡劣,溫度啊,干擾啊之類的,那么還是有必要在 ADC 的使用過程中進行定期校準的。

當然,如果我們本著嚴謹的作風,在產品上直接使用定期校準那也是沒問題的。

三、HAL 庫校準函數

上面理論的東西介紹完了,那么我們就來簡單做個測試,其實我使用過程中的小疑問也是在使用過程中遇到的。

我們都知道 ADC 的校準函數為:HAL_ADCEx_Calibration_Start()

但是當我使用這個函數時候,居然出錯了,如下圖:

圖片

提示調用的參數太少了(確定出錯是我編譯過后發現的),提示函數調用參數太少了,這就奇怪了,于是我進入看看函數原型:

圖片

這里可以看到,怎么多了一個參數(上面確實有解釋說明,應該填寫什么),但是當時我第一反應是看一下這個參數在函數中是怎么用的,于是搜索了一下SingleDiff 這個參數,發現在HAL_ADCEx_Calibration_Start 這個函數中根本沒用到這個參數?

為了搞清楚,我還去度娘問了下,發現根本沒有關于這個參數的說明,所有的 STM32 ADC 有關的帖子文章,都是一樣的, ADC 是啥啥啥,什么模式,解釋一下,怎么用等等巴拉巴拉的……

3.1 單端校準和差分校準

其實上面的注釋說明就是,這個參數就是用來選擇使用哪種校準方式:單端校準ADC_SINGLE_ENDED 和 差分校準ADC_DIFFERENTIAL_ENDED

后來就去翻閱手冊資料,下面是查到的說明,這里給大家參考一下:

單端校準:

單端校準是指對 ADC 的單個輸入通道進行校準,主要校準項包括偏移誤差和增益誤差。

單端校準主要針對單端輸入的情況,通過比較參考電壓和輸入信號之間的誤差,校準ADC的增益和偏置電壓。在單端輸入的情況下,參考電壓和輸入信號之間存在可能的偏差,這會導致ADC采樣結果的偏移和誤差。為了解決這個問題,可以使用單端校準來校正 ADC 的增益和偏置電壓。單端校準的過程是使用一個已知的模擬信號來輸入 ADC,然后比較采樣結果與該模擬信號的期望值,得到增益和偏置電壓的偏差值,然后通過校準將其校正。

單端校準時,ADC將使用內部參考電壓作為參考電壓,對每個輸入通道進行測量,計算出偏移誤差和增益誤差,并將這些誤差保存在相應的寄存器中。

差分校準:

差分校準是指對 ADC 的差分輸入通道進行校準,主要校準項也包括偏移誤差和增益誤差。

差分校準主要針對差分輸入的情況,通過比較參考電壓和輸入信號之間的誤差,校準 ADC 的差分增益和偏置電壓。在差分輸入的情況下,差分增益和偏置電壓的偏差也會導致 ADC 采樣結果的偏移和誤差。為了解決這個問題,可以使用差分校準來校正 ADC 的差分增益和偏置電壓。差分校準的過程是使用一個已知的差分輸入信號來輸入 ADC,然后比較采樣結果與該差分輸入信號的期望值,得到差分增益和偏置電壓的偏差值,然后通過校準將其校正。

差分校準時,ADC 將使用內部參考電壓作為參考電壓,并將兩個輸入通道的差值作為輸入信號進行測量,計算出偏移誤差和增益誤差,并將這些誤差保存在相應的寄存器中。

3.2 不同系列的校準函數

所以在我們使用不同的系列的 HAL 庫的時候,雖然校準函數都是HAL_ADCEx_Calibration_Start ,但是也有著一些參數的區別。

對于我目前使用的 STM32L051 來說,HAL校準函數使用的示例如下:

HAL_ADCEx_Calibration_Start(&hadc1,ADC_SINGLE_ENDED);

大部分情況下直接選擇單端校準ADC_SINGLE_ENDED就行了,差分校準還需要外部電路的支持。

對于 STM32F 系列的來說,HAL校準函數使用的示例如下:

HAL_ADCEx_Calibration_Start(&hadc1);

......

3.3 更多的校準模式

對于更多的系列,因為自己目前沒有用到,我也沒有一個一個去找,但是通過資料了解到,對于有些型號,比如 STM32F4 系列的,ADC的校準由硬件自動執行,不需要額外的調用 ADC 校準函數。

雖然我沒有去試,但是這個硬件自動執行校準在 STM32CubeMX 中應該可以選擇,因為他需要使能,在程序中的體現為:

hadc1.Init.AutoCalibration = ENABLE;

而且在 STM32 系列中,還有支持額外校準模式(共模校準、差分共模校準)的MCU,具體哪個我也不知道,這樣的MCU,在使用校準函數HAL_ADCEx_Calibration_Start的時候又多一個參數。但是這里可以告訴大家在遇到的時候不要慌張,這里給出示例。

共模校準:

/* 
使能共模校準 
*/
HAL_ADCEx_Calibration_Start(&hadc, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED);

/* 等待共模校準完成 */
while (HAL_ADCEx_Calibration_GetState(&hadc) != HAL_ADC_CALIBRATION_STATE_COMPLETED);

差分共模校準:

/*
使能差分共模校準 
*/
HAL_ADCEx_Calibration_Start(&hadc, ADC_CALIB_OFFSET, ADC_DIFFERENTIAL_ENDED);

/* 
等待差分共模校準完成 
*/
while (HAL_ADCEx_Calibration_GetState(&hadc) != HAL_ADC_CALIBRATION_STATE_COMPLETED);

上面的 ADC_CALIB_OFFSET 是指定進行偏置校準。

結語

好了,本文是自己在使用過程中遇到的一個小問題,但確實直接度娘找不到我需要的答案,所以自己花費了些功夫查了一下,當然也記錄說明一下,希望對大家能夠有幫助!

插一句題外話,我已經停了幾個月沒寫博文了,我也 告訴過大家我最近狀態很差,現實事情太多了,到現在為止,我還是深受影響,但是我自己也知道不能繼續沉淪下去,人往高處走,總是要向前看的,這也是受打擊過后的第一篇博文,找找感覺,加油!

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

    關注

    98

    文章

    6495

    瀏覽量

    544461
  • STM32
    +關注

    關注

    2270

    文章

    10895

    瀏覽量

    355729
  • 代碼
    +關注

    關注

    30

    文章

    4779

    瀏覽量

    68521
收藏 人收藏

    評論

    相關推薦

    PCBNavigator的使用說明

    PCBNavigator的使用說明 
    發表于 05-11 20:46

    iccavr使用說明

    iccavr使用說明
    發表于 04-06 11:46

    PCBNavigator的使用說明

    PCBNavigator的使用說明
    發表于 08-20 16:02

    STM32控制MPU6050之使用說明

    STM32 控制MPU6050之使用說明 mpu6050是陀螺儀、加速計和一個可擴展的傳根器RM-MPU-3000A.pdf ATK-MPU6050六軸傳感器模塊使用說明(Mini V3)_AN1507.pdf
    發表于 07-02 08:05

    STM32控制MPU6050之使用說明

    STM32 控制MPU6050之使用說明 mpu6050是陀螺儀、加速計和一個可擴展的傳根器RM-MPU-3000A.pdf ATK-MPU6050六軸傳感器模塊使用說明(Mini V3)_AN1507.pdf
    發表于 07-06 02:25

    常用的API及使用說明

    為了方便用戶使用,這里列出了常用的API,并給出了相關的使用說明
    發表于 03-30 06:20

    PCA9685使用說明

    舵機驅動板,網上很多資源,但是基于STM32F103的能用代碼實在太少。具體使用說明我覺得這兩個鏈接寫的夠詳細了,附上鏈接1.PCA9685使用說明12.PCA9685使用說明2文字
    發表于 08-11 06:03

    VisualScope使用說明

    VisualScope使用說明(基于stm32)VisualScope可以通過串口顯示波形,方便調節pid參數。1.添加文件(Visual_Scope.h/.c)//.h#ifndef
    發表于 08-17 06:10

    德飛萊STM32F103V使用說明

    德飛萊 STM32F103V使用說明
    發表于 07-12 16:05 ?114次下載

    Obtain_Studio自帶兩個STM32_GUI實例使用說明

    Obtain_Studio自帶兩個STM32_GUI實例使用說明
    發表于 07-15 16:03 ?25次下載

    單片機STM32 F103RCT6使用說明書下載

    單片機STM32 F103RCT6使用說明書下載
    發表于 04-21 15:57 ?61次下載

    STM32ADC代碼例程

    STM32ADC代碼例程(普德新星電源技術有限公司怎么樣)-?STM32ADC代碼例程,有5個例子,分別說明了采用查詢、中斷、DMA等方
    發表于 09-23 09:53 ?85次下載
    <b class='flag-5'>STM32</b>的<b class='flag-5'>ADC</b>代碼例程

    STM32 之 標準外設版USB驅動庫詳解(架構+文件+函數+使用說明+示例程序)

    STM32 之 標準外設版USB驅動庫詳解(架構+文件+函數+使用說明+示例程序)
    發表于 12-08 20:36 ?0次下載
    <b class='flag-5'>STM32</b> 之 標準外設版USB驅動庫詳解(架構+文件+函數+<b class='flag-5'>使用說明</b>+示例程序)

    AN4968_STM32F72x、F73x的PCROP使用說明

    AN4968_STM32F72x、F73x的PCROP使用說明
    發表于 11-21 08:11 ?0次下載
    AN4968_<b class='flag-5'>STM32</b>F72x、F73x的PCROP<b class='flag-5'>使用說明</b>

    UM2380_STM32電機控制軟件庫SDK的軟件工具使用說明

    UM2380_STM32電機控制軟件庫SDK的軟件工具使用說明
    發表于 11-22 19:19 ?0次下載
    UM2380_<b class='flag-5'>STM32</b>電機控制軟件庫SDK的軟件工具<b class='flag-5'>使用說明</b>
    主站蜘蛛池模板: 六月婷婷国产精品综合| 最美女人体内射精一区二区| 饥渴的新婚女教师| 99国产亚洲精品无码成人| 武侠古典久久亚洲精品| 美女扒开尿口直播| 户外露出野战hd| 国产高清视频免费最新在线| 90后性爱视频| 一级毛片在线免费视频| 亚洲AV成人无码999WWW| 色聚网久久综合| 男女久久久国产一区二区三区| 国产真实强被迫伦姧女在线观看| 成人欧美一区二区三区白人| 永久免费精品影视网站| 亚洲精品乱码8久久久久久日本| 少妇连续高潮抽搐痉挛昏厥| 亲胸吻胸添奶头GIF动态图免费| 久久精品一区| 九色91精品国产网站| 國產麻豆AVMDXMDX| 狠狠啪在线香蕉| 男女久久久国产一区二区三区| 少妇内射视频播放舔大片| 亚洲免费三级电影| 99精品免费观看| 99九九精品国产高清自在线| 高清大胆欧美videossexo| 百性阁论坛首页| RUNAWAY韩国动漫免费网| 99精品中文字幕在线观看| 国产精品嫩草影院一区二区三区| 国产成人亚洲精品无广告| 国产精品亚洲二线在线播放| 国产精品久久久久影院色| 久久全国免费久久青青小草| 毛片999| 忘忧草在线影院www日本| 三级黄色在线| 在线欧美精品一区二区三区|