本章通過(guò)兩個(gè)例程介紹STM32的模數(shù)轉(zhuǎn)換器(ADC),第一個(gè)通過(guò)ADC采集內(nèi)部溫度傳感器通道電壓,然后得出MCU內(nèi)部溫度。第二個(gè)通過(guò)DMA的方式采集兩個(gè)ADC通道電壓。
1.ADC
本章程序在串口printf工程的基礎(chǔ)上修改,復(fù)制串口printf的工程,修改文件夾名。擊xxx.ioc打開(kāi)STM32cubeMX的工程文件重新配置。ADC1外設(shè)選擇溫度傳感器通道。
ADC1配置如下,選擇默認(rèn)設(shè)置。其Date Alignment設(shè)置為數(shù)據(jù)右對(duì)齊; 采樣時(shí)間 239.5周期。對(duì)于每個(gè)要轉(zhuǎn)換的通道,采樣時(shí)間建議盡量長(zhǎng)一點(diǎn),以獲得較高的準(zhǔn)確度,但是這樣會(huì)降低 ADC 的轉(zhuǎn)換速率。 ADC 的轉(zhuǎn)換時(shí)間可以由以下公式計(jì)算:
Tcovn=采樣時(shí)間+12.5 個(gè)周期
其中: Tcovn 為總轉(zhuǎn)換時(shí)間,采樣時(shí)間是根據(jù)每個(gè)通道的 SMP 位的設(shè)置來(lái)決定的。例如,
當(dāng) ADCCLK=14Mhz 的時(shí)候,并設(shè)置 1.5 個(gè)周期的采樣時(shí)間,則得到: TCONV = 1.5 + 12.5 = 14周期 = 14×(1 / (14 × 1000000)) = 1μs。
生成報(bào)告以及代碼,編譯程序。在adc.c文件中可以看到ADC初始化函數(shù)。
在stm32f1xx_hal_adc.h頭文件中可以找到如下ADC操作函數(shù)。和串口一樣,ADC也可以通過(guò)三種方式控制。
在main()函數(shù)前面聲明變量保存AD采集的值
在main()函數(shù)while(1)循環(huán)里面添加函數(shù)聲明變量保存AD采集的值
在adc.c還要添加ADC校準(zhǔn)
HAL_ADC_GetValue(&hadc1);讀取ADC轉(zhuǎn)換數(shù)據(jù),數(shù)據(jù)為12位。查看數(shù)據(jù)手冊(cè)可知,寄存器為16位存儲(chǔ)轉(zhuǎn)換數(shù)據(jù),數(shù)據(jù)右對(duì)齊,則轉(zhuǎn)換的數(shù)據(jù)范圍為0~2^12-1,即0~4095.
AD_Value*3300/4096為將轉(zhuǎn)換后的數(shù)據(jù)轉(zhuǎn)化為電壓,單位為mV,參考電壓為3.3V。查詢數(shù)據(jù)手冊(cè)可以電壓和溫度的關(guān)系。經(jīng)過(guò)計(jì)算公式裝換后等到MCU內(nèi)部溫度值。
編譯程序并下載到開(kāi)發(fā)板。打開(kāi)串口調(diào)試助手。設(shè)置波特率為115200。串口助手上會(huì)顯示MCU溫度。
2.ADC_DMA
前面介紹了通過(guò)ADC輪詢的方式采集單通道的數(shù)據(jù)?,F(xiàn)在介紹一下通過(guò)DMA方式采集多通道的數(shù)據(jù)。
復(fù)制串口printf工程的工程,修改文件夾名。點(diǎn)擊xxx.ioc打開(kāi)STM32cubeMX的工程文件重新配置。使用PA6,PA7管腳作為ADC1的輸入管腳。
ADC1配置:使能掃描轉(zhuǎn)換模式(Scan Conversion Mode),使能連續(xù)轉(zhuǎn)換模式(Continuous Conversion Mode),使能DMA連續(xù)請(qǐng)求。ADC規(guī)則組選擇轉(zhuǎn)換通道數(shù)為2(Number Of Conversion)。其他為默認(rèn)設(shè)置。
添加DMA設(shè)置,設(shè)置為連續(xù)傳輸模式,數(shù)據(jù)長(zhǎng)度為字
生成報(bào)告以及代碼,編譯程序。在adc.c文件中可以看到ADC初始化函數(shù)。
在main函數(shù)前面添加變量。其中ADC_Value作為轉(zhuǎn)換數(shù)據(jù)緩存數(shù)組,ad1,ad2存儲(chǔ)PA6,PA7的電壓值。
在while(1)前面以DMA方式開(kāi)啟ADC裝換。HAL_ADC_Start_DMA()函數(shù)第二個(gè)參數(shù)為數(shù)據(jù)存儲(chǔ)起始地址,第三個(gè)參數(shù)為DMA傳輸數(shù)據(jù)的長(zhǎng)度。
由于DMA采用了連續(xù)傳輸?shù)哪J?,ADC采集到的數(shù)據(jù)會(huì)不斷傳到到存儲(chǔ)器中(此處即為數(shù)組ADC_Value)。ADC采集的數(shù)據(jù)從ADC_Value[0]一直存儲(chǔ)到ADC_Value[99],然后采集到的數(shù)據(jù)又重新存儲(chǔ)到ADC_Value[0],一直到ADC_Value[99]。所以ADC_Value數(shù)組里面的數(shù)據(jù)會(huì)不斷被刷新。這個(gè)過(guò)程中是通過(guò)DMA控制的,不需要CPU參與。我們只需讀取ADC_Value里面的數(shù)據(jù)即可得到ADC采集到的數(shù)據(jù)。
其中ADC_Value[0]為通道6(PA6)采集的數(shù)據(jù),ADC_Value[1]為通道7(PA7)采集的數(shù)據(jù),ADC_Value[2]為通道6采集的數(shù)據(jù),如此類推。數(shù)組偶數(shù)下標(biāo)的數(shù)據(jù)為通道6采集數(shù)據(jù),數(shù)組奇數(shù)下標(biāo)的數(shù)據(jù)為通道7采集數(shù)據(jù)。
在while(1)循環(huán)中添加應(yīng)用程序,將采集的數(shù)據(jù)裝換為電壓值并輸出。
程序中將數(shù)組偶數(shù)下標(biāo)數(shù)據(jù)加起來(lái)求平均值,實(shí)現(xiàn)均值濾波的功能,再將數(shù)據(jù)轉(zhuǎn)換為電壓值,即為PA6管腳的電壓值。同理對(duì)數(shù)組奇數(shù)下標(biāo)數(shù)據(jù)處理得到PA7管腳的電壓值。
編譯程序并下載到開(kāi)發(fā)板。打開(kāi)串口調(diào)試助手。設(shè)置波特率為115200。串口助手上會(huì)顯示采集到的電壓值,使用杜邦線連接開(kāi)發(fā)板上的3.3v和GND引腳測(cè)試。
上一篇:STM32學(xué)習(xí)---GPIO和按鍵(流水燈學(xué)習(xí))
下一篇:STM32Cube-直接存儲(chǔ)器訪問(wèn)(DMA)
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- 神經(jīng)形態(tài)芯片可能是革新機(jī)器人實(shí)時(shí)電機(jī)控制的未來(lái)
- 從三個(gè)方面理解ARM嵌入式系統(tǒng)
- 自動(dòng)報(bào)警 基于MCU的家庭防盜報(bào)警系統(tǒng)的設(shè)計(jì)
- 存儲(chǔ)控制器及其訪問(wèn)外設(shè)的原理
- 基于51系列單片機(jī)的智能照明控制系統(tǒng)設(shè)計(jì)方案
- 基于STM32的四旋翼飛行器控制系統(tǒng)
- 單片機(jī)應(yīng)用編程技巧解析
- 基于89C52的教室智能節(jié)能照明系統(tǒng)設(shè)計(jì)
- 一種新型的雨量光照傳感器的設(shè)計(jì)
- ADI 全新技術(shù)資料集錦
- 泰克技術(shù)摩天輪——技術(shù)資料與活動(dòng)的大融合!
- 搶樓有禮:看直播,深入了解ST最新 MEMS氣壓計(jì)原理、操作、防水結(jié)構(gòu)設(shè)計(jì)
- 有獎(jiǎng)?wù){(diào)查——We want you!好的參考設(shè)計(jì)網(wǎng)站什么樣?
- 免費(fèi)測(cè)評(píng)|ESP32-S2-Kaluga-1新型多媒體開(kāi)發(fā)板,靈活拆裝,滿足多種需求
- 世健30周年,寄語(yǔ)世健享好禮!
- 閱讀漲知識(shí)、贏好禮:開(kāi)啟TI汽車電子技術(shù)文章閱讀之旅,贏群積分兌好禮
- 是德科技第二屆示波器感恩月之買一送一
- TI 培訓(xùn)積分全新上線!學(xué)課程 領(lǐng)積分 兌禮品
- ADI有獎(jiǎng)下載活動(dòng)之12 ADI基于視覺(jué)的占用檢測(cè)解決方案
- STM32F030 485通訊遇到的問(wèn)題
- STM32的RS485調(diào)試過(guò)程記錄
- 基于stm32/linux系統(tǒng)的can總線的電機(jī)與485的全方位機(jī)器人通訊
- RS485通訊中使用STM32串口以DMA方式發(fā)送數(shù)據(jù)丟失字節(jié)的問(wèn)題
- STM32F0 內(nèi)部Flash作為數(shù)據(jù)存儲(chǔ)的讀寫(xiě)
- 一加Nord CE發(fā)布:驍龍750G,價(jià)格2328元
- Omdia:下半年筆電面板需求處于高檔 上調(diào)全年出貨量
- NOR Flash報(bào)價(jià)第三季度將上升20-30%
- 京元電5000余名本土員工進(jìn)行二輪篩檢 采用PCR檢測(cè)
- 外媒:芯片短缺正在加劇假冒偽劣零件流竄
- 區(qū)域不能鋪銅,不能過(guò)帶電氣類型的走線
- DSP外部中斷及模擬IO完整代碼
- 求高手MCU+CPLD實(shí)驗(yàn)板編程
- 各位藍(lán)牙大俠幫忙解決下HCI層,BCSP層遇到的問(wèn)題,小弟謝過(guò)!
- 【轉(zhuǎn)】一個(gè)不能讓工程師出身做企業(yè)CEO的精彩理由
- 電源故障暫保護(hù)與死保護(hù)電路圖
- MSP430FR6972的xcl文件無(wú)法更改堆DATA16_HEAP起始地址
- 弱弱的問(wèn)下采樣保持放大器,一直控制在hold模式,保持時(shí)間可以持續(xù)多久
- 【花雕動(dòng)手做】有趣好玩的音樂(lè)可視化系列項(xiàng)目(24)--無(wú)限LED鏡子燈
- 一種適用于無(wú)線鼠標(biāo)的無(wú)接觸供電電路