0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread記錄(十四、I/O 設(shè)備模型之ADC設(shè)備)

矜辰所致 ? 來源:矜辰所致 ? 作者:矜辰所致 ? 2022-07-04 12:28 ? 次閱讀
RT-Thread ADC 設(shè)備學(xué)習(xí)使用

目錄

前言

一、ADC 采樣基礎(chǔ)

  • 1.1 ADC 通道
  • 1.2 ADC 分辨率
  • 1.3 ADC 采樣計(jì)算

二、ADC 設(shè)備操作函數(shù)

  • 2.1 查找 ADC 設(shè)備
  • 2.2 使能/關(guān)閉 ADC 通道
  • 2.3 讀取采樣值

三、ADC 設(shè)備示例

  • 3.1 ADC 設(shè)備使用步驟
  • 3.2 測(cè)試

結(jié)語

前言

我曾經(jīng)考慮過把 RT-Thread 常用的設(shè)備都寫完,其實(shí)通過前面的《全面認(rèn)識(shí) RT-Thread I/O 設(shè)備模型》文章學(xué)習(xí),以及 UARTPIN設(shè)備的學(xué)習(xí)分析,對(duì)于 RT-Thread 其他的一些設(shè)備 自己看資料基本都可以用起來了,都是同樣的思路,自己寫寫程序測(cè)試都可以用起來了。

再加上 RT-Thread 有很多軟件包,正真的我們實(shí)際的普通應(yīng)用中需要自己寫的也不會(huì)太多(除非你使用的設(shè)備傳感器是小眾品牌或者新品,那根據(jù)前面文章也刻意自己嘗試把驅(qū)動(dòng)寫好),所以我再簡(jiǎn)單的測(cè)試幾個(gè)典型的設(shè)備,設(shè)備驅(qū)動(dòng)篇也就算更新完了。

本文相對(duì)比較輕松,測(cè)試一下簡(jiǎn)單的 ADC 設(shè)備。

??
本 RT-Thread 專欄記錄的開發(fā)環(huán)境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手)
RT-Thread記錄(二、RT-Thread內(nèi)核啟動(dòng)流程 — 啟動(dòng)文件和源碼分析)
??
RT-Thread 設(shè)備篇系列博文鏈接:
RT-Thread記錄(十、全面認(rèn)識(shí) RT-Thread I/O 設(shè)備模型)
RT-Thread記錄(十一、I/O 設(shè)備模型之UART設(shè)備 — 源碼解析)
RT-Thread記錄(十二、I/O 設(shè)備模型之UART設(shè)備 — 使用測(cè)試)
RT-Thread記錄(十三、I/O 設(shè)備模型之PIN設(shè)備)

一、ADC 采樣基礎(chǔ)

ADC(Analog-to-Digital Converter) 模數(shù)轉(zhuǎn)換器,把模擬信號(hào)轉(zhuǎn)化為數(shù)字信號(hào),比較簡(jiǎn)單。在我們測(cè)試之前簡(jiǎn)單的說明 ADC 使用的幾個(gè)基本點(diǎn):

1.1 ADC 通道

對(duì)于現(xiàn)在的 MCU 來說,一般都有 ADC 引腳,將需要檢測(cè)的模擬量連接至對(duì)應(yīng)的 IO 口,做好配置就能使用,對(duì)于我們測(cè)試使用的 STM32 來說,其 ADC 通道對(duì)應(yīng)關(guān)系我在以前 STM32 筆記文章中有過記錄,如下表格:

poYBAGLCbHKAa5RPAAcVMifkNbI987.png

1.2 ADC 分辨率

分辨率以二進(jìn)制(或十進(jìn)制)數(shù)的位數(shù)來表示,一般有8位、10位、12位、16位等。

對(duì)于我們測(cè)試使用的 STM32F1xx 系列的芯片來說,他們的 ADC 最大支持12位,這個(gè)在 STM32 芯片手冊(cè)中可以看到:

pYYBAGLCbHKAAu4gAACrI8F4YwM689.png

截圖是為了說明很多資料其實(shí)都是官方文檔中會(huì)說明,當(dāng)然官方文檔是英文版本的,再次聲明一下,學(xué)習(xí)一個(gè)芯片最好的資料就是官方文檔 。

很多常見的問題你或許可以網(wǎng)上搜索就能找到,但是如果一個(gè)新的芯片,網(wǎng)上參考資料少,你得想起來官方文檔!

分辨率是什么概念?

比如一個(gè)ADC設(shè)置為 12 位的分辨率,2 的12 次方 = 4096,簡(jiǎn)單來說就是這個(gè) ADC 設(shè)備把他的量程分為 4096 份:0 ~ 4095 最大值 4095 就等于他量程的最大值。
一般來說我們使用 STM32 VDDA引腳都是直接連接3.3V,所以STM32 ADC的量程為 0~ 3.3V 。如果讀到 4095 的ADC 值,就表示讀到的電壓為 3.3V 。

至于12位分辨率是除 4095 還是 4096 ,這個(gè)其實(shí)網(wǎng)上各有說法,用 4095 的可能占大多數(shù),實(shí)際上結(jié)果相差不大。

1.3 ADC 采樣計(jì)算

我們 ADC 讀取到的是數(shù)字量,數(shù)字量表示并不直觀,所以一般我們最終還是要轉(zhuǎn)化成模擬量,轉(zhuǎn)化的公式在以前 STM32 使用記錄文章中也有過,如下圖:

poYBAGLCbHOAeOKJAAPxoehgz5A255.png

根據(jù)上文說明,只要在電路設(shè)計(jì)的時(shí)候 STM32 的 VDDA 引腳是直接與3.3V 連接的,就可以用如下公式計(jì)算:

最終讀出的電壓值 = VDDA(一般來說是3.3V)* 讀到的 ADC 的值(理解為實(shí)際讀到了多少份)/ 4095 (12位分辨率)。

二、ADC 設(shè)備操作函數(shù)

從本文開始我們就不分析設(shè)備的驅(qū)動(dòng)實(shí)現(xiàn)原理了,前面的 UART 和 PIN 設(shè)備已經(jīng)很透徹了,感興趣大家都可以自己查看源碼分析。

ADC設(shè)備操作函數(shù),還是比較簡(jiǎn)單的,就4個(gè):

poYBAGLCZzyADGsfAAA4mliadAQ953.png

2.1 查找 ADC 設(shè)備

rt_device_find以前就見過的,I/O 設(shè)備模型通用的查找函數(shù):

/*
參數(shù) 	描述
name 	ADC 設(shè)備名稱
返回 	——
設(shè)備句柄 	查找到對(duì)應(yīng)設(shè)備將返回相應(yīng)的設(shè)備句柄
RT_NULL 	沒有找到設(shè)備
*/
rt_device_t rt_device_find(const char* name);

但是這里需要額外說明的是,使用此函數(shù)查找 ADC 設(shè)備需要強(qiáng)制轉(zhuǎn)換一下,我們定義用來接收的設(shè)備句柄不是使用rt_device_t ,而應(yīng)該使用rt_adc_device_t

pYYBAGLCbHOAUzZ8AAAqCKEnoj4327.png

2.2 使能/關(guān)閉 ADC 通道

根據(jù)自己使用的 GPIO 引腳(對(duì)應(yīng)上文 ADC 通道表格),對(duì) ADC 通道進(jìn)行使能和關(guān)閉。

使能 ADC 通道:

/*
參數(shù) 	描述
dev 		ADC 設(shè)備句柄
channel 	ADC 通道
返回 	——
RT_EOK 		成功
-RT_ENOSYS 	失敗,設(shè)備操作方法為空
其他錯(cuò)誤碼 	失敗
*/
rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel)

關(guān)閉 ADC 通道:

/*
參數(shù) 	描述
dev 		ADC 設(shè)備句柄
channel 	ADC 通道
返回 	——
RT_EOK 		成功
-RT_ENOSYS 	失敗,設(shè)備操作方法為空
其他錯(cuò)誤碼 	失敗
*/
rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_uint32_t channel)

2.3 讀取采樣值

/*
參數(shù) 	描述
dev 	ADC 設(shè)備句柄
channel 	ADC 通道
返回 	——
讀取的數(shù)值 	
*/
rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel)

三、ADC 設(shè)備示例

ADC的原理以及操作函數(shù)都比較簡(jiǎn)單,我們?cè)?RT-Thread Studio 使用 ADC 設(shè)備,反倒是他的使用步驟需要稍微注意一下:

3.1 ADC 設(shè)備使用步驟

我們以前講過,在 RT-Thread 工程中,所有的外設(shè)的配置都是在 board.h 文件中,我們可以查看其中關(guān)于 ADC 使用步驟的注釋:

poYBAGLCbHOAXaFjAACrhZX1Q-g924.png

1、首先,在 RT-Thread Studio 工程中,打開 RT-Thread Settings,使能 ADC 驅(qū)動(dòng),如下圖所示:

pYYBAGLCbHSAIEfVAAFsYJyEWP8574.png

接著上圖的操作,通過組件欄目打開 ADC 驅(qū)動(dòng),退出保存:

poYBAGLCbHSAUdINAADwG9WEf9M160.png

2、 宏定義 #define BSP_USING_ADC1(這里需要確定自己準(zhǔn)備使用哪一個(gè) ADC):

pYYBAGLCbHSAA-IEAAAmCZYAoIw361.png

3、找一個(gè) ADC 初始化的代碼,通過STM32CubeMX 配置:

我們按照系列文章第一篇:RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境 及 配合CubeMX開發(fā)快速上手) 來使用STM32CubeMX 進(jìn)行配置:

poYBAGLCbHWASGpSAADSLFBeSnU763.png

設(shè)置完成后記得看一下 ADC 時(shí)鐘部分:

pYYBAGLCbHWAGA1sAABVmu0w8Vc041.png

完成后直接生成代碼(不要打開,回到 RT-Thread Studio 如果彈出界面點(diǎn)擊確認(rèn))然后可以發(fā)現(xiàn)工程中已經(jīng)更新了 adc.h

poYBAGLCbHWAWhkDAABtSegU3Jo329.png

到這一步,我們已經(jīng)能夠找到我們需要的 HAL_ADC_MspInit 文件了,通過 adc.h 頭文件找到 adc.c 文件中的這個(gè)函數(shù):

pYYBAGLCbHWAYn7NAACcIPdDkpc979.png

4、 把HAL_ADC_MspInit 函數(shù)復(fù)制到 board.c 文件最后面,如下圖:

poYBAGLCbHaAAC7eAADL34-IhXo402.png

5. 修改 stm32xxxx_hal_config.h 文件,使能 ADC 模塊:

這里我們要注意下一下,我們使用過 STM32CubeMX ,所以這個(gè)文件的位置發(fā)生了變化,這個(gè)在以前講過,具體看圖:

pYYBAGLCbHaABCWiAADBzangBvA528.png

其實(shí)我們使用 STM32CubeMX 設(shè)置過 ADC 以后,這最后一步我們不需要修改,因?yàn)樵谖募?CubeMX已經(jīng)修改好了:

poYBAGLCbHeASCByAAAqoMVH9Gg462.png

到這里,ADC 的配置就算全部完成了,我們可以直接在應(yīng)用程序中,使用 ADC 設(shè)備操作函數(shù)實(shí)現(xiàn)ADC 的讀取。

3.2 測(cè)試

基于上面的步驟,我們直接在應(yīng)用層調(diào)用接口,直接放一張圖說明:

pYYBAGLCbHeARkelAACHpWKNvT8634.png

測(cè)試結(jié)果:

poYBAGLCbHeAWXMOAABT1r9y5Oo312.png

開發(fā)板的供電不是標(biāo)準(zhǔn)的3.3V,而是3.28V,所以最終結(jié)果計(jì)算出來有點(diǎn)誤差= =!

結(jié)語

本文學(xué)習(xí)的 ADC 設(shè)備操作使用比較簡(jiǎn)單,反倒是他的使用配置相對(duì)來說復(fù)雜一點(diǎn)。

寫完 ADC 設(shè)備,計(jì)劃再測(cè)試一個(gè) SPI 設(shè)備,就要做設(shè)備驅(qū)動(dòng)小結(jié)了,I/O 設(shè)備模型部分其實(shí)前面幾篇博文學(xué)會(huì)了,也就會(huì)了,其他的只不過是需要花時(shí)間看一看。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • adc
    adc
    +關(guān)注

    關(guān)注

    97

    文章

    6300

    瀏覽量

    542460
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61971
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1239

    瀏覽量

    39442
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread記錄(十、全面認(rèn)識(shí) I/O 設(shè)備模型

    學(xué)完 RT-Thread 內(nèi)核,從本文開始熟悉了解 RT-Thread I/O 設(shè)備管理相關(guān)知識(shí)。
    的頭像 發(fā)表于 06-30 10:38 ?3942次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十、全面認(rèn)識(shí) <b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>)

    RT-Thread記錄(十一、UART設(shè)備—源碼解析)

    一文帶你深入理解 RT-Thread I/O 設(shè)備模型 — UART 設(shè)備源碼分析。
    的頭像 發(fā)表于 07-01 11:24 ?5278次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十一、UART<b class='flag-5'>設(shè)備</b>—源碼解析)

    RT-Thread記錄(十二、UART設(shè)備—使用測(cè)試)

    從 UART 設(shè)備開始學(xué)會(huì)使用 RT-Thread I/O 設(shè)備模型
    的頭像 發(fā)表于 07-02 12:42 ?4816次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十二、UART<b class='flag-5'>設(shè)備</b>—使用測(cè)試)

    RT-Thread記錄(十三、I/O 設(shè)備模型PIN設(shè)備

    講完UART設(shè)備之后,我們已經(jīng)熟悉RT-Thread I/O 設(shè)備模型了,回頭看看基本的 PIN
    的頭像 發(fā)表于 07-03 11:28 ?4338次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十三、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b><b class='flag-5'>之</b>PIN<b class='flag-5'>設(shè)備</b>)

    RT-Thread記錄(十五、I/O 設(shè)備模型SPI設(shè)備

    本文學(xué)習(xí)一下I/O 設(shè)備模型SPI設(shè)備使用,I/
    的頭像 發(fā)表于 07-04 15:46 ?3620次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>記錄</b>(十五、<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b><b class='flag-5'>之</b>SPI<b class='flag-5'>設(shè)備</b>)

    RT-Thread 的 IO 設(shè)備模型框架是由哪些部分組成的呢

    RT-ThreadI/O 設(shè)備模型框架是由哪些部分組成的呢?接下來由小編給大家詳細(xì)介紹一下。1、R
    發(fā)表于 03-11 18:17

    【原創(chuàng)精選】RT-Thread征文精選技術(shù)文章合集

    RT-Thread記錄(十二、UART設(shè)備—使用測(cè)試)RT-Thread記錄(十三、I/
    發(fā)表于 07-26 14:56

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊(cè)設(shè)備的實(shí)現(xiàn)

    RT-Thread設(shè)備模型框架及創(chuàng)建注冊(cè)設(shè)備的實(shí)現(xiàn)方式介紹如下:
    的頭像 發(fā)表于 05-28 10:38 ?2044次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>框架及創(chuàng)建注冊(cè)<b class='flag-5'>設(shè)備</b>的實(shí)現(xiàn)

    RT-Thread文檔_I/O 設(shè)備模型

    RT-Thread文檔_I/O 設(shè)備模型
    發(fā)表于 02-22 18:31 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>I</b>/<b class='flag-5'>O</b> <b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>

    RT-Thread文檔_ADC 設(shè)備

    RT-Thread文檔_ADC 設(shè)備
    發(fā)表于 02-22 18:33 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>ADC</b> <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_I2C 總線設(shè)備

    RT-Thread文檔_I2C 總線設(shè)備
    發(fā)表于 02-22 18:35 ?0次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>I</b>2C 總線<b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_PWM 設(shè)備

    RT-Thread文檔_PWM 設(shè)備
    發(fā)表于 02-22 18:35 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_PWM <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_SPI 設(shè)備

    RT-Thread文檔_SPI 設(shè)備
    發(fā)表于 02-22 18:36 ?2次下載
    <b class='flag-5'>RT-Thread</b>文檔_SPI <b class='flag-5'>設(shè)備</b>

    RT-Thread文檔_Pulse Encoder 設(shè)備

    RT-Thread文檔_Pulse Encoder 設(shè)備
    發(fā)表于 02-22 18:39 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_Pulse Encoder <b class='flag-5'>設(shè)備</b>

    RT-ThreadI/O設(shè)備模型與分類

    RT- ThreadI/O設(shè)備模型(簡(jiǎn)稱“設(shè)備
    的頭像 發(fā)表于 10-11 17:12 ?555次閱讀
    <b class='flag-5'>RT-Thread</b>的<b class='flag-5'>I</b>/<b class='flag-5'>O</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>模型</b>與分類