https://m./answer/6803809490698256648/?app=news_article&app_id=13&share_ansid=6803809490698256648 作為單片機開發(fā)的工程師都知道,ADC采集是非常常用,而且也是很基礎(chǔ)的一個外設(shè)。常常被工程師用于采集模擬信號。 那么很多初學(xué)者一般怎么在使用ADC應(yīng)用時,怎么編寫代碼呢?我將以STM32F103RCT6單片機,作為本文參考芯片,此芯片有3個12位的ADC,我選擇其中一個ADC,實現(xiàn)采集電池供電電壓功能的過程。 第一步,配置對應(yīng)的引腳, ADC功能屬于IO端口的復(fù)用,所以需要選擇對應(yīng)的IO進行初始化(此處前提條件硬件設(shè)計端口分配正確) 如上圖所示,我們選用pc0引腳作為采集端口,先需要使能GPIOC的時鐘,然后根據(jù)設(shè)計手冊對GPIOC->CRL寄存器描述,對應(yīng)PC0地址位置賦值為0,配置為模擬輸入。如下圖所示 第二步,配置ADC初始化函數(shù) STM32F103RCT6有3個ADC,可以選擇其中的任何一個作為采集ADC,但通道是已經(jīng)規(guī)定好了,不能更改。 根據(jù)如上圖的官方技術(shù)手冊所示,PC0是ADC的第10個通道,所以在配置參數(shù)時候,我們選擇ADC1,并將ADC1->SQR3寄存器設(shè)置為10通道。 如下圖所示,首先需要對ADC的時鐘進行使能,接著配置ADC控制寄存器,配置ADC通道,規(guī)則等,配置我已對每個寄存器配置賦值進行備注說明。 第三步,ADC掃描函數(shù),獲取ADC采集的電壓值。 電池電壓采集,因為電池電壓信號是一個變化較慢的模擬量,所以為了獲得采集數(shù)據(jù)的穩(wěn)定性,減少誤差和誤判,需要對1000次采集的數(shù)據(jù)求平均值。 再結(jié)合電路中匹配的分壓電阻,200K+100K分壓,所以計算部分如下圖所示,最終計算出Bat_Vol的電壓值,單位是mV。 延伸說明1 ,ADC與DMA結(jié)合使用采集數(shù)據(jù),每次ADC轉(zhuǎn)換完成的數(shù)據(jù),直接轉(zhuǎn)到DMA的設(shè)定的地址當中,單片機只需要對設(shè)定地址的變量進行操作,在ADC初始化當中需要對ADC1->CR1,ADC1->CR2兩個寄存器進行操作,如下圖所示: 同時還需要配置對應(yīng)的DMA初始化函數(shù)和ADC處理函數(shù),此函數(shù)不再這里表述。大家可以查閱技術(shù)資料,試著去完成剩余的代碼。 2,外掛ADC芯片,有些項目中,為了能夠?qū)崿F(xiàn)高精度的模擬信號采集,單片機會使用外部的ADC芯片。如ADS1294等芯片。此芯片為24位高精度ADC芯片,采用spi通信接口,實現(xiàn)過程比單片機ADC芯片稍顯復(fù)雜。 總結(jié) 在單片機系統(tǒng)當中,ADC的使用非常普遍,也非常重要,各種模擬量的采集離不開它,所以作為從事單片機開發(fā)的工程師,是必須掌握這些知識點。 |
|
來自: 山峰云繞 > 《單片機電子電路及代碼》