welcom ! Handel home

2014年7月3日 星期四

ST32 ADC 要點說明


               ST32 ADC read By DMA 要點說明

1  對於ADC來說,我們關注的是它的解析度、轉換速度、ADC類型、參考電壓範圍。
A 解析度,12位元解析度,最小量化單位LSB=VREF+/212
B 轉換時間,可編程的,採樣一次至少要用14ADC時鐘週期,而ADC時鐘頻率
高為14MHz,也就是說它的最短採樣時間為1us
C ADC類型,類型決定了性能的極限,stm32是逐次比較型ADC(SAR)
D 參考電壓範圍,當需要測量負電壓或測量的信號超出範圍時,要先經過運算電路進行平移或利用電阻分壓
2  ADC工作過程分析,ADC部件要受到觸發信號才開始進行轉換,如EXTI外部觸發、計時器觸發,也可以軟體觸發。ADC部件在接收到觸發信號後,在ADCCLK時鐘的驅動下對輸入通道信號進行採樣,並進行模數轉換。其中,ADCCLK來自ADC的預分頻器

3  DMA在傳輸時,由於不是內核執行的指令,所以修改變數值是絕對不會出現賦值語句的。

4  ADC_Init( )中完成對ADCDMA配置後,ADC就不停地採集資料,而DMA就自動把ADC採集到的資料轉移至記憶體中的變數ADC_ConvertedValue.因此,它是一個即時值

5  ADC1_GPIO_Config( )的功能就是使能DMA時鐘、GPIO時鐘、ADC1時鐘。然後把ADC1的通道11使用的GPIO引腳PC1配置成類比輸入模式

6  配置DMAADC模式及其DMA傳輸方式都在ADC_Mode_Config( )中實現,ADCDMA整體上被配置為:使用DMA1的通道1

7  配置ADC模式:主要對ADC的初始化結構體進行賦值,下面是它的結構體成員:

A.ADC_Mode,多個ADC,不同的ADC又是共用相同的通道,根據同一個通道的先後順序、時間間隔,可劃分10種模式(測量電壓分壓後的電壓值,要求不高,用一個ADC就可以了
B.ADC_ScanConvMode,當有多個通道需要採集信號時,可配置為按一定順序對各個通道進行掃描轉換,即輪流採集各通道的值,若採集多個通道,必須開啟此模式
CADC_ContinuousConvMode,連續轉換模式,即在上一次轉換完後,立即開啟下一次的轉換
DADC_ExternalTrigConv,外部觸發,若使用軟體觸發,則ADC_ExternalTrigConv_None
E.ADC_DataAlign,資料對齊方式
F.ADC_NbrOfChannel,這個成員保存了要進行ADC資料轉換的通道數

8ADC初始化使用ADC_Init( )函數,但要調用ADC_Cmd( )函數來使能ADC外設,用ADC_DMACmd( )函數來使能ADCDMA介面

9ADC轉換時間配置:RCC_ADCCLKConfig( )設置分頻值,ADC轉換時間不僅與ADC的時鐘有關,還與採樣週期有關

10stm32 ADC採樣時間計算公式:Tconv=採樣週期+12.5個週期,公式中的採樣週期就是本函數配置的ADC_SampleTime,後面再加上12.5個固定週期值。所以,轉換時間=採樣時間/分頻值

11ADC自校準,在ADC轉換前,要啟動ADC的自校準,校準可以大幅度減少准精度誤差

12、軟體觸發可以調用庫函數ADC_SoftwareStartConvCmd( )來開啟軟體觸發

13Volatile定義的變數,使用該關鍵字來修飾,為的是不要讓編譯器去優化變數

14、用volatile聲明的類型變數表示可以被某些編譯器未知的因素更改,比如:作業系統、硬體或者其他線程等。 因為ADC_ConvertedValue這個變數值隨時都是會被DMA控制器改變的,所以我們用volatile來修飾它,確保每次讀取到的都是即時的ADC轉換值。

15ADC通用的電壓計算公式:實際電壓值=ADC轉換值*LSB


[ STM32 ADC採樣頻率的確定 ]


1. 先看一些資料,確定一下 ADC 的時鐘:

1)、 由時鐘控制器提供的 ADCCLK 時鐘和 PCLK2(APB2 時鐘)同步。CLK 控制器為
ADC 時鐘提供一個專用的可編程預分頻器。

2)、 一般情況下在程式 中將 PCLK2 時鐘設為與系統時鐘相同
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
3)、 在時鐘配置寄存器(RCC_CFGR) 中有為 ADC 時鐘提供一個專用的可編程預分器。
15:14 ADCPREADC 預分頻由軟體設置來確定 ADC 時鐘頻率
00PCLK2 2 分頻後作為 ADC 時鐘
01PCLK2 4 分頻後作為 ADC 時鐘
10PCLK2 6 分頻後作為 ADC 時鐘
11PCLK2 8 分頻後作為 ADC 時鐘

我們可對其進行設置例如:RCC_ADCCLKConfig(RCC_PCLK2_Div4);
另外 ADC 時鐘使能設置:RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1|
RCC_APB2Periph_ADC2 | RCC_APB2Periph_GPIOC, ENABLE);

4)、 可編程的通道採樣時間
ADC 使用若干個 ADC_CLK 週期對輸入電壓採樣,採樣週期數目可以通過
ADC_SMPR1 ADC_SMPR2 寄存器中的 SMP[2:0]位而更改。每個通道可以以不同的時間採樣。
總轉換時間如下計算:
TCONV = 採樣時間+ 12.5 個週期
例如:當 ADCCLK=14MHz 1.5 週期的採樣時間
TCONV = 1.5 + 12.5 = 14 週期 = 1μs
SMPx[2:0]:選擇通道 x的採樣時間這些位用於獨立地選擇每個通道的採樣時間。在
採樣週期中通道選擇位必須保持不變。 
0001.5 週期 10041.5 週期
0017.5 週期 10155.5 週期
01013.5 週期 11071.5 週期
01128.5 週期 111239.5 週期
注:
ADC1 的模擬輸入通道 16 和通道 17 在晶片內部分別連到了溫度感測器和VREFINT
ADC2 的模擬輸入通道 16 和通道17 在晶片內部連到了 VSS




2. 具體分析如下:
1 我們的輸入信號是 50Hz (週期為 20ms),初步定為1 週期200 個採樣點,(注:一
週期最少采 20 個點,即採樣率最少為 1k ,每 2個採樣點間隔為 20ms/200=100us
 ADC 可編程的通道採樣時間我們選最小的 1.5 週期,則 ADC 採樣週期一週期大小
100us /1.5=66us ADC 時鐘頻率為 1/66us =15 KHzADC 可編程的通道採樣時
間我們選 71.5 週期,則 ADC 採樣週期一週期大小為(100us /71.5)。ADC 時鐘
頻率為 7.15MHz

2 接下來我們要確定系統時鐘:我們 用的是 8M Hz 的外部晶振做時鐘源(HSE),估
計得經過 PLL 倍頻 PLL 倍頻係數分別為 2 的整數倍,最大 72 MHz。為了提高資料
計算效率,我們把系統時鐘定為 72MHz(PLL 9 倍頻)
PCLK2=72MHz,PCLK1=36MHz;我們通過設置時鐘配置寄存器(RCC_CFGR)
有為 ADC 時鐘提供一個專用的可編程預分器,將 PCLK2 8 分頻後作為 ADC 的時
鐘,則可 ADC 時鐘頻率為 9MHz
從手冊可知: ADC 轉換時間:STM32F103xx 增強型產品:ADC 時鐘為 56MHz
1μs (ADC 時鐘為 72MHz 1.17μs)

3 由以上分析可知:不太對應,我們重新對以上中 內容調整,提出如下兩套方案:

方案一:
我們的輸入信號是 50Hz (週期為 20ms), 初步定為 1 週期 2500 個採樣點,(注:
一週期最少采 20 個點, 即採樣率最少為 1k), 2 個採樣為 20ms /2500= 8 us
ADC 可編程的通道採樣時間我們選 71.5 週期,則 ADC 採樣週期一週期大小為
8us /71.5 ADC 時鐘頻率約為 9 MHz。將 PCLK2 進行 8 分頻後 作為 ADC 的時 鐘,
則可知 ADC 時鐘頻率為 9MHz

方案二:
我們的輸入信號是 50Hz (週期為20ms),初步定為 1 週期1000 個採樣點,(注:一
週期最少采 20 個點,即採樣率最少為 1k ,每2 個採樣點間隔為 20ms /1000= 20 us
ADC 可編程的通道採樣時間我們選 239.5 週期,則 ADC 採樣週期一週期大小為
20us /239.5 ADC 時鐘頻率約為 12 MHz。將PCLK2 進行6 分頻後作為 ADC
時鐘,則可知 ADC 時鐘頻率為 12MHz
       @ ADCCLK = 12MHZ  by the SMPX[0:2] set
                                                                                                                      uSec
1.5 12.5 14 1.16667E-06
7.5 12.5 20 1.66667E-06
13.5 12.5 26 2.16667E-06
28.5 12.5 41 3.41667E-06
41.5 12.5 54 0.0000045
55.5 12.5 68 5.66667E-06
71.5 12.5 84 0.000007
239.5 12.5 252 0.000021






沒有留言: