一、ADC的原理及定義
Analog-to-Digital Converter的縮寫。中文譯名:模/數轉換器或者模擬/數字轉換器。是指將連續變量的模擬信號轉換爲離散的數字信號的器件。其實就是一個取樣、量化、編碼的一個過程。
典型的模擬數字轉換器將模擬信號轉換爲表示一定比例電壓值的數字信號。比如電量、光照傳感器等常用。
二、模擬信號
模擬信號是指用連續變化的物理量表示的信息,其信號的幅度,或頻率,或相位隨時間作連續變化,如目前廣播的聲音信號,或圖像信號等。
三、數字信號
數字信號指幅度的取值是離散的,幅值表示被限制在有限個數值之內。 二進制碼就是一種數字信號。二進制碼受噪聲的影響小,易於有數字電路進行處理,所以得到了廣泛的應用。
四、單次轉化與連續轉換對比
五、掃描模式
其他請參考其中文參考手冊
六、ADC精度
精度是衡量ADC轉換準確性的一個標準,精度常有8bit 10bit 12bit 16bit四種,如下表所示:
也就是把3.3V的電壓分成256,1024,4096,65535份,每一份電壓是固定的,顯而易見就是分的份數越多,精度就度越高了,也就是精度越小,ADC精度就越高
ADC的轉換公式如下:
七、STM32F40x系列ADC外部通道和引腳對應關係
通道號 |
ADC1 |
ADC2 |
ADC3 |
通道0 |
PA0 |
PA0 |
PA0 |
通道1 |
PA1 |
PA1 |
PA1 |
通道2 |
PA2 |
PA2 |
PA2 |
通道3 |
PA3 |
PA3 |
PA3 |
通道4 |
PA4 |
PA4 |
PF6 |
通道5 |
PA5 |
PA5 |
PF7 |
通道6 |
PA6 |
PA6 |
PF8 |
通道7 |
PA7 |
PA7 |
PF9 |
通道8 |
PB0 |
PB0 |
PF10 |
通道9 |
PB1 |
PB1 |
PF3 |
通道10 |
PC0 |
PC0 |
PC0 |
通道11 |
PC1 |
PC1 |
PC1 |
通道12 |
PC2 |
PC2 |
PC2 |
通道13 |
PC13 |
PC13 |
PC13 |
通道14 |
PC4 |
PC4 |
PF4 |
通道15 |
PC5 |
PC5 |
PF5 |
八、實現過程
//1、開啓PA口時鐘和ADC1時鐘,設置PA1爲模擬輸入。
RCC_AHB1PeriphClockCmd (RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
對應的GPIO初始化
GPIO_Init();
//2、復位ADC1,同時設置ADC1分頻因子。
ADC_DeInit(ADC1);
//3、初始化ADC_CCR寄存器。
ADC_CommonInit();
//4、初始化ADC1參數,設置ADC1的工作模式以及規則序列的相關信息。
void ADC_Init(ADC_TypeDef* ADCx, ADC_InitTypeDef* ADC_InitStruct);
//5、使能ADC。
ADC_Cmd(ADC1, ENABLE);
//6、配置規則通道參數:
ADC_RegularChannelConfig();
//7、開啓軟件轉換:
ADC_SoftwareStartConvCmd(ADC1);
//8、等待轉換完成,讀取ADC值。
ADC_GetConversionValue(ADC1);