很多開發者在嵌入式項目中都會用到傳感器采集信號,無論是溫度、光照,還是電壓電流測量,都離不開 ADC(模數轉換器)。但是,很多人對 ADC 的使用仍停留在“能讀就行”的層面,忽略了精度、采樣率、參考電壓等關鍵因素。今天,我們就從原理到實戰,帶你搞懂 ADC,幫你精準讀取傳感器信號。
一、ADC 基礎回顧
ADC(Analog-to-Digital Converter)是將連續的模擬信號轉換為數字信號的模塊,便于 MCU 處理。
- 分辨率:ADC 能輸出的數字位數。比如 12 位 ADC 的輸出范圍是 0~4095,對應參考電壓范圍。
- 采樣率:ADC 每秒能讀取多少次信號,單位 Hz。
- 參考電壓(Vref):ADC 將模擬信號映射到數字值的參考電壓。
二、如何選擇 ADC 通道
STM32 等 MCU 的 ADC 通常帶多個通道,用于采集不同的傳感器信號。選擇時要注意:
- 信號源的電壓范圍:確保傳感器輸出在 Vref 范圍內。
- 通道干擾:避免高頻信號或噪聲信號靠近 ADC 引腳。
- 引腳復用:一些 ADC 引腳可能同時有其他外設功能,需要查看手冊。
三、ADC 精度優化技巧
- 穩定參考電壓:使用 LDO 或參考芯片,減少 Vref 波動。
- 信號濾波:在 ADC 輸入端加 RC 濾波或低通濾波,降低高頻干擾。
- 多次采樣平均:通過軟件對多次采樣結果取平均,提高測量精度。
- 降低采樣速率:在允許情況下,適當降低 ADC 采樣率,減小噪聲影響。
四、STM32 ADC 使用實戰
假設我們要讀取一個光敏電阻的電壓值:
- #include"stm32f1xx.h"
- voidADC_Config(void){
- RCC->APB2ENR|=RCC_APB2ENR_IOPAEN;// GPIOA 時鐘
- RCC->APB2ENR|=RCC_APB2ENR_ADC1EN;// ADC1 時鐘
- GPIOA->CRL&=~GPIO_CRL_CNF1;// PA1 模擬輸入
- GPIOA->CRL&=~GPIO_CRL_MODE1;
- ADC1->SQR3=1;// 第1個通道
- ADC1->SMPR2|=ADC_SMPR2_SMP1;// 采樣時間
- ADC1->CR2|=ADC_CR2_ADON;// 開啟 ADC
- }
- uint16_tADC_Read(void){
- ADC1->CR2|=ADC_CR2_ADON;// 啟動轉換
- while(!(ADC1->SR&ADC_SR_EOC));
- returnADC1->DR;
- }
- intmain(void){
- ADC_Config();
- while(1){
- uint16_tvalue=ADC_Read();
- // 處理采樣值,例如轉換為電壓或亮度
- }
- }
五、多通道采樣與 DMA
當你需要同時讀取多個傳感器信號時,單次輪詢效率低,容易拖慢 MCU 主循環。此時可以使用 ADC 的掃描模式 + DMA:
- 配置 ADC 掃描模式,依次采集多個通道。
- 配置 DMA,將采樣結果自動存儲到內存數組中。
- MCU 只需在數據更新后處理數組,無需頻繁輪詢。
六、ADC 與實際傳感器匹配
不同傳感器信號特點不同,需要匹配 ADC 參數:
七、常見坑點
- 忽略 Vref 穩定性:參考電壓波動會直接影響采樣精度。
- 采樣時間太短:高阻抗輸入在短采樣時間下可能不穩定。
- 引腳干擾:ADC 輸入鄰近高頻信號會引入噪聲。
- 單次采樣依賴性高:未做多次平均,導致測量抖動明顯。
八、小結
通過今天的學習,你應該掌握了:
- ADC 的基本原理、分辨率和采樣率
- 如何選擇 ADC 通道并減少干擾
- 軟件與硬件結合提高 ADC 精度的方法
- STM32 下 ADC 實戰代碼示例
- 多通道采樣與 DMA 使用
- 不同傳感器信號與 ADC 匹配策略
掌握這些內容后,你就能在嵌入式項目中精準讀取各種傳感器信號,為數據處理和控制算法提供可靠輸入。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
嵌入式
+關注
關注
5198文章
20442瀏覽量
333975 -
adc
+關注
關注
100文章
7511瀏覽量
555916 -
傳感器信號
+關注
關注
0文章
22瀏覽量
5017
發布評論請先 登錄
相關推薦
熱點推薦
如何讀取LPC55S28溫度傳感器?
我正在嘗試讀取芯片溫度傳感器。
我嘗試使用 LPADC 組件來讀取傳感器。我意識到我必須禁用掉電、啟用 kclock_adc0 并為其附加一
發表于 04-04 06:46
ADIS的傳感器接線和信號讀取問題
CLM-112-02的連接器,這個連接器引出的端口是直接焊接嗎?我看距離太近了焊接技術不夠啊。或者說原來傳感器的接口直接有線可以接嗎?另這個傳感器
發表于 06-15 18:42
Micropython TPYBoard讀取芯片上的溫度傳感器
過高或者過低了 則馬上睡眠或者停止運轉. 可以保證您的設備工作的可靠性。 STM32內部溫度傳感器參數1.STM32內部溫度傳感器與ADC的通道16相連,與ADC配合使用實現溫度測量。
發表于 03-30 09:07
arduinoUNO怎么讀取采用UART的傳感器傳入的信號
我初學Arduino,買了傳輸數字信號的傳感器模組,采用的是UART。老板給出了下面的信息:實在是搞不明白怎么讀取信號,請教一下各位大神!萬分感謝
發表于 05-03 21:09
怎樣提高霍爾傳感器測量的精準度
的精準度雖然好但是霍爾傳感器測量的精準度對于用于來說是非常重要的,如果有提高霍爾傳感器精準度的方法那是更加好的,今天小編就來為大家介紹一下方
發表于 08-15 10:29
如何去讀取ADC1內部溫度傳感器及內部參照電壓
單片機為:STM32F103RCT6軟件:STM32CubeMX,MDK功能:不使用DMA,不使用中斷,讀取ADC1內部溫度傳感器及內部參照電壓VREFINT的值描述:溫度傳感器和通道
發表于 12-10 07:39
如何正確配置溫度傳感器并通過ADC進行轉換并讀取數字結果?
供電。溫度傳感器仍然沒有任何反應。使用 SEQA_CTRL 寄存器訪問序列 A。按照第 45 章讀取溫度傳感器讀數的步驟。誰能告訴我如何正確配置溫度
發表于 03-29 07:50
接觸式圖像傳感器的信號讀取與補償技術
圖像傳感器是利用光電轉換原理將圖像數據裝換為一系列電子信號的一種裝置。接觸式圖像傳感器CIS是80年代末初相是一種新型圖像傳感器,是以CMOS技術為主的一種光電掃描器件
發表于 06-25 10:39
?27次下載
接觸式圖像傳感器的信號讀取與補償技術
接觸式圖像傳感器的信號讀取與補償技術
圖像傳感器是利用光電轉換原理將圖像數據轉換為一系列電子信號的一種裝置。接觸式圖像
發表于 02-09 10:00
?782次閱讀
STM32使用ADC獲取內部溫度傳感器數據輸出(直接讀取/DMA兩種方式實現)
STM32使用ADC獲取內部溫度傳感器數據輸出(直接讀取/DMA兩種方式實現)前言一、內部溫度傳感器的使用?二、代碼操作講解1.直接讀取2.
發表于 12-02 18:36
?34次下載
雪深數據精準采集:激光傳感器抗干擾技術實戰指南
。本文結合實戰經驗,拆解激光雪深傳感器的抗干擾技術細節與實操要點,助力搭建穩定可靠的監測系統。 一、雪天激光傳感器核心干擾源解析 1. 光學類干擾 自然強光(陽光直射、雪地反射)會淹沒激光回波
ADC 實戰:如何精準讀取傳感器信號
評論