RT-Thread ADC 設備學習使用
目錄
前言
一、ADC 采樣基礎
- 1.1 ADC 通道
- 1.2 ADC 分辨率
- 1.3 ADC 采樣計算
二、ADC 設備操作函數
- 2.1 查找 ADC 設備
- 2.2 使能/關閉 ADC 通道
- 2.3 讀取采樣值
三、ADC 設備示例
- 3.1 ADC 設備使用步驟
- 3.2 測試
結語
前言
我曾經考慮過把 RT-Thread 常用的設備都寫完,其實通過前面的《全面認識 RT-Thread I/O 設備模型》文章學習,以及 UART 和 PIN設備的學習分析,對于 RT-Thread 其他的一些設備 自己看資料基本都可以用起來了,都是同樣的思路,自己寫寫程序測試都可以用起來了。
再加上 RT-Thread 有很多軟件包,正真的我們實際的普通應用中需要自己寫的也不會太多(除非你使用的設備傳感器是小眾品牌或者新品,那根據前面文章也刻意自己嘗試把驅動寫好),所以我再簡單的測試幾個典型的設備,設備驅動篇也就算更新完了。
本文相對比較輕松,測試一下簡單的 ADC 設備。
??
本 RT-Thread 專欄記錄的開發環境:
RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發環境 及 配合CubeMX開發快速上手)
RT-Thread記錄(二、RT-Thread內核啟動流程 — 啟動文件和源碼分析)
??
RT-Thread 設備篇系列博文鏈接:
RT-Thread記錄(十、全面認識 RT-Thread I/O 設備模型)
RT-Thread記錄(十一、I/O 設備模型之UART設備 — 源碼解析)
RT-Thread記錄(十二、I/O 設備模型之UART設備 — 使用測試)
RT-Thread記錄(十三、I/O 設備模型之PIN設備)
一、ADC 采樣基礎
ADC(Analog-to-Digital Converter) 模數轉換器,把模擬信號轉化為數字信號,比較簡單。在我們測試之前簡單的說明 ADC 使用的幾個基本點:
1.1 ADC 通道
對于現在的 MCU 來說,一般都有 ADC 引腳,將需要檢測的模擬量連接至對應的 IO 口,做好配置就能使用,對于我們測試使用的 STM32 來說,其 ADC 通道對應關系我在以前 STM32 筆記文章中有過記錄,如下表格:
1.2 ADC 分辨率
分辨率以二進制(或十進制)數的位數來表示,一般有8位、10位、12位、16位等。
對于我們測試使用的 STM32F1xx 系列的芯片來說,他們的 ADC 最大支持12位,這個在 STM32 芯片手冊中可以看到:
截圖是為了說明很多資料其實都是官方文檔中會說明,當然官方文檔是英文版本的,再次聲明一下,學習一個芯片最好的資料就是官方文檔 。
很多常見的問題你或許可以網上搜索就能找到,但是如果一個新的芯片,網上參考資料少,你得想起來官方文檔!
分辨率是什么概念?
比如一個ADC設置為 12 位的分辨率,2 的12 次方 = 4096,簡單來說就是這個 ADC 設備把他的量程分為 4096 份:0 ~ 4095 最大值 4095 就等于他量程的最大值。
一般來說我們使用 STM32 VDDA引腳都是直接連接3.3V,所以STM32 ADC的量程為 0~ 3.3V 。如果讀到 4095 的ADC 值,就表示讀到的電壓為 3.3V 。
至于12位分辨率是除 4095 還是 4096 ,這個其實網上各有說法,用 4095 的可能占大多數,實際上結果相差不大。
1.3 ADC 采樣計算
我們 ADC 讀取到的是數字量,數字量表示并不直觀,所以一般我們最終還是要轉化成模擬量,轉化的公式在以前 STM32 使用記錄文章中也有過,如下圖:
根據上文說明,只要在電路設計的時候 STM32 的 VDDA 引腳是直接與3.3V 連接的,就可以用如下公式計算:
最終讀出的電壓值 = VDDA(一般來說是3.3V)* 讀到的 ADC 的值(理解為實際讀到了多少份)/ 4095 (12位分辨率)。
二、ADC 設備操作函數
從本文開始我們就不分析設備的驅動實現原理了,前面的 UART 和 PIN 設備已經很透徹了,感興趣大家都可以自己查看源碼分析。
ADC設備操作函數,還是比較簡單的,就4個:
2.1 查找 ADC 設備
rt_device_find
以前就見過的,I/O 設備模型通用的查找函數:
/*
參數 描述
name ADC 設備名稱
返回 ——
設備句柄 查找到對應設備將返回相應的設備句柄
RT_NULL 沒有找到設備
*/
rt_device_t rt_device_find(const char* name);
但是這里需要額外說明的是,使用此函數查找 ADC 設備需要強制轉換一下,我們定義用來接收的設備句柄不是使用rt_device_t
,而應該使用rt_adc_device_t
:
2.2 使能/關閉 ADC 通道
根據自己使用的 GPIO 引腳(對應上文 ADC 通道表格),對 ADC 通道進行使能和關閉。
使能 ADC 通道:
/*
參數 描述
dev ADC 設備句柄
channel ADC 通道
返回 ——
RT_EOK 成功
-RT_ENOSYS 失敗,設備操作方法為空
其他錯誤碼 失敗
*/
rt_err_t rt_adc_enable(rt_adc_device_t dev, rt_uint32_t channel)
關閉 ADC 通道:
/*
參數 描述
dev ADC 設備句柄
channel ADC 通道
返回 ——
RT_EOK 成功
-RT_ENOSYS 失敗,設備操作方法為空
其他錯誤碼 失敗
*/
rt_err_t rt_adc_disable(rt_adc_device_t dev, rt_uint32_t channel)
2.3 讀取采樣值
/*
參數 描述
dev ADC 設備句柄
channel ADC 通道
返回 ——
讀取的數值
*/
rt_uint32_t rt_adc_read(rt_adc_device_t dev, rt_uint32_t channel)
三、ADC 設備示例
ADC的原理以及操作函數都比較簡單,我們在 RT-Thread Studio 使用 ADC 設備,反倒是他的使用步驟需要稍微注意一下:
3.1 ADC 設備使用步驟
我們以前講過,在 RT-Thread 工程中,所有的外設的配置都是在 board.h
文件中,我們可以查看其中關于 ADC 使用步驟的注釋:
1、首先,在 RT-Thread Studio 工程中,打開 RT-Thread Settings,使能 ADC 驅動,如下圖所示:
接著上圖的操作,通過組件欄目打開 ADC 驅動,退出保存:
2、 宏定義 #define BSP_USING_ADC1
(這里需要確定自己準備使用哪一個 ADC):
3、找一個 ADC 初始化的代碼,通過STM32CubeMX 配置:
我們按照系列文章第一篇:RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發環境 及 配合CubeMX開發快速上手) 來使用STM32CubeMX 進行配置:
設置完成后記得看一下 ADC 時鐘部分:
完成后直接生成代碼(不要打開,回到 RT-Thread Studio 如果彈出界面點擊確認)然后可以發現工程中已經更新了 adc.h
:
到這一步,我們已經能夠找到我們需要的 HAL_ADC_MspInit
文件了,通過 adc.h
頭文件找到 adc.c
文件中的這個函數:
4、 把HAL_ADC_MspInit
函數復制到 board.c
文件最后面,如下圖:
5. 修改 stm32xxxx_hal_config.h
文件,使能 ADC 模塊:
這里我們要注意下一下,我們使用過 STM32CubeMX ,所以這個文件的位置發生了變化,這個在以前講過,具體看圖:
其實我們使用 STM32CubeMX 設置過 ADC 以后,這最后一步我們不需要修改,因為在文件中 CubeMX已經修改好了:
到這里,ADC 的配置就算全部完成了,我們可以直接在應用程序中,使用 ADC 設備操作函數實現ADC 的讀取。
3.2 測試
基于上面的步驟,我們直接在應用層調用接口,直接放一張圖說明:
測試結果:
開發板的供電不是標準的3.3V,而是3.28V,所以最終結果計算出來有點誤差= =!
結語
本文學習的 ADC 設備操作使用比較簡單,反倒是他的使用配置相對來說復雜一點。
寫完 ADC 設備,計劃再測試一個 SPI 設備,就要做設備驅動小結了,I/O 設備模型部分其實前面幾篇博文學會了,也就會了,其他的只不過是需要花時間看一看。
-
adc
+關注
關注
98文章
6430瀏覽量
544074 -
函數
+關注
關注
3文章
4304瀏覽量
62427 -
RT-Thread
+關注
關注
31文章
1272瀏覽量
39919
發布評論請先 登錄
相關推薦
評論