版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、-. z.STM32 ADC結(jié)合DMA數(shù)據(jù)采樣與軟件濾波處理2012-03-17 23:53:05| 分類:STM32 | 標(biāo)簽:HYPERLINK m646208823.blog.163./blog/ l m=0&t=3&c=adc結(jié)合dmaadc結(jié)合dma |字號大中小訂閱本文原創(chuàng)于觀海聽濤,原作者所有,請注明出處。作為一個偏向工控的芯片,ADC采樣是一個十分重要的外設(shè)。STM32集成三個12位精度18通道的部ADC,最高速度1微秒,結(jié)合DMA可以解放CPU進(jìn)展更好的處理。ADC接口上的其它邏輯功能包括:同步的采樣和保持穿插的采樣和保持單次采樣模擬看門狗功能允許非常精準(zhǔn)地監(jiān)視一路、多路或所
2、有選中的通道,當(dāng)被監(jiān)視的信號超出預(yù)置的閥值時,將產(chǎn)生中斷。由標(biāo)準(zhǔn)定時器(TIM*)和高級控制定時器(TIM1和TIM8)產(chǎn)生的事件,可以分別部級聯(lián)到ADC的開場觸發(fā)和注入觸發(fā),應(yīng)用程序能使AD轉(zhuǎn)換與時鐘同步。12位ADC是一種逐次逼近型模擬數(shù)字?jǐn)?shù)字轉(zhuǎn)換器。它有多達(dá)18個通道,可測量16個外部和2個部信號源。ADC的輸入時鐘不得超過14MHZ,它是由PCLK2經(jīng)分頻產(chǎn)生。如果被ADC轉(zhuǎn)換的模擬電壓低于低閥值或高于高閥值,AWD模擬看門狗狀態(tài)位被設(shè)置。關(guān)于ADC采樣與DMA關(guān)系,引用網(wǎng)上一段解釋:STM32 的優(yōu)點在哪里?除去宣傳環(huán)節(jié),細(xì)細(xì)分析。STM32 時鐘不算快,72MHZ,也不能擴(kuò)展大容量
3、的RAM FLASH,同樣沒有 DSP 那樣強(qiáng)大的指令集。它的優(yōu)勢在哪里呢?-就在快速采集數(shù)據(jù),快速處理上。ARM 的特點就是方便。這個快速采集,高性能的ADC 就是一個很好的表達(dá),12 位精度,最快1uS 的轉(zhuǎn)換速度,通常具備2 個以上獨立的ADC 控制器,這意味著,STM32 可以同時對多個模擬量進(jìn)展快速采集,這個特性不是一般的MCU具有的。以上高性能的 ADC,配合相比照擬塊的指令集和一些特色的算法支持,就構(gòu)成了STM32 在電機(jī)控制上的強(qiáng)大特性。好了,正題,怎末做一個簡單的ADC,注意是簡單的,ADC 是個復(fù)雜的問題,涉及硬件設(shè)計,電源質(zhì)量,參考電壓,信號預(yù)處理等等問題。我們只就如何在
4、MCU完成一次ADC 作討論。談到 ADC,我們還要第一次引入另外一個重要的設(shè)備DMA.DMA是什么東西呢。通常在 8 位單片機(jī)時代,很少有這個概念。在外置資源越來越多以后,我們把一個MCU局部為主處理器和外設(shè)兩個局部。主處理器當(dāng)然是執(zhí)行我們指令的主要局部,外設(shè)則是串口 I2C ADC 等等用來實現(xiàn)特定功能的設(shè)備回憶一下,8 位時代,我們的主處理器最常干的事情是什么?邏輯判斷?不是。那才幾個指令計算算法?不是。大局部時候算法都很簡單。事實上,主處理器就是作個搬運工,把 USART 的數(shù)據(jù)接收下來,存起來把 ADC 的數(shù)據(jù)接收下來,存起來把要發(fā)送的數(shù)據(jù),存起來,一個個的往USART 里放。為了解
5、決這個矛盾,人們想到一個方法,讓外設(shè)和存間建立一個通道,在主處理器允許下,讓外設(shè)和存直接讀寫,這樣就釋放了主處理器,這個東西就是DMA。打個比方:一個MCU是個公司。老板就是主處理器員工是外設(shè)倉庫就是存從前倉庫的東西都是老板管的。員工需要原料工作,就一個個報給老板,老板去倉庫里一個一個拿。員工作好的東西,一個個給老板,老板一個個放進(jìn)倉庫里。老板很累,雖然老板是超人,也受不了越來越多的員工和單子。最后老板雇了一個倉庫保管員,它就是DMA他專門負(fù)責(zé)入庫和出庫,只需要把出庫和入庫方案給老板過目老板說 OK,就不管了。后面的入庫和出庫過程,員工只需要和這個倉庫保管員打交道就可以了。-閑話,馬七時常想,
6、讓設(shè)備與設(shè)備之間開DMA,豈不更牛*比喻完成。ADC 是個高速設(shè)備,前面提到。而且 ADC 采集到的數(shù)據(jù)是不能直接用的。即使你再小心的設(shè)計外圍電路,測的離譜的數(shù)據(jù)總會出現(xiàn)。則通常來說,是采集一批數(shù)據(jù),然后進(jìn)展處理,這個過程就是軟件濾波。DMA用到這里就很適宜。讓ADC 高速采集,把數(shù)據(jù)填充到RAM 中,填充一定數(shù)量,比方32 個,64 個MCU再來使用。-多一句,也可以說,單次ADC 毫無意義。下面我們來具體介紹,如何使用DMA來進(jìn)展ADC 操作。初始化函數(shù)包括兩局部,DMA 初始化和ADC 初始化我們有多個管理員-DMA一個管理員當(dāng)然不止管一個DMA 操作。所以DMA有多個Channel以下
7、是程序分析:程序基于STM32F103VET6,庫函數(shù)實現(xiàn)RCC局部:忽略系統(tǒng)時鐘配置 /啟動DMA時鐘 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); /啟動ADC1時鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); GPIO局部:(ADC引腳參見上表) /ADC_CH10- PC0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模擬輸入 GPIO_I
8、nit(GPIOC, &GPIO_InitStructure); / PC2 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOC, &GPIO_InitStructure); ADC1配置:兩外部輸入,另采樣部溫度傳感器void ADC1_Configuration(void) ADC_InitTypeDef ADC_InitStructure; ADC_InitStructure.ADC_Mode = ADC_Mode_Independe
9、nt; /轉(zhuǎn)換模式為獨立,還有穿插等非常多樣的選擇 ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; /連續(xù)轉(zhuǎn)換開啟 ADC_InitStructure.ADC_E*ternalTrigConv = ADC_E*ternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 3; /設(shè)置轉(zhuǎn)換序列
10、長度為3,三通道 ADC_Init(ADC1, &ADC_InitStructure); /ADC置溫度傳感器使能要使用片溫度傳感器,切忌要開啟它 ADC_TempSensorVrefintCmd(ENABLE); /常規(guī)轉(zhuǎn)換序列1:通道10 ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5); /常規(guī)轉(zhuǎn)換序列2:通道16部溫度傳感器,采樣時間2.2us,(239cycles) ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 2, ADC_Samp
11、leTime_239Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 3, ADC_SampleTime_239Cycles5); /輸入?yún)?shù):ADC外設(shè),ADC通道,轉(zhuǎn)換序列順序,采樣時間 / Enable ADC1 ADC_Cmd(ADC1, ENABLE); / 開啟ADC的DMA支持要實現(xiàn)DMA功能,還需獨立配置DMA通道等參數(shù) ADC_DMACmd(ADC1, ENABLE); / 下面是ADC自動校準(zhǔn),開機(jī)后需執(zhí)行一次,保證精度 / Enable ADC1 reset calibaration register ADC_
12、ResetCalibration(ADC1); / Check the end of ADC1 reset calibration register while(ADC_GetResetCalibrationStatus(ADC1); / Start ADC1 calibaration ADC_StartCalibration(ADC1); / Check the end of ADC1 calibration while(ADC_GetCalibrationStatus(ADC1); / ADC自動校準(zhǔn)完畢- ADC_SoftwareStartConvCmd(ADC1, ENABLE); /
13、ADC啟動 DMA配置:無軟件濾波void DMA_Configuration(void) DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address; /DMA外設(shè)地址,在頭部定義 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; /存地址 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /外設(shè)至存模
14、式 /BufferSize=2,因為ADC轉(zhuǎn)換序列有2個通道 /如此設(shè)置,使序列1結(jié)果放在AD_Value0,序列2結(jié)果放在AD_Value1 DMA_InitStructure.DMA_BufferSize = 3; /一次轉(zhuǎn)換三個 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /承受一次后,設(shè)備地址不后移 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /承受一次后,存地址后移 DMA_InitStructure.DMA_PeripheralD
15、ataSize = DMA_PeripheralDataSize_HalfWord; /每次傳輸半字 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; /循環(huán)模式開啟,Buffer寫滿后,自動回到初始地址開場傳輸 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_I
16、nit(DMA1_Channel1, &DMA_InitStructure); /配置完成后,啟動DMA通道 DMA_Cmd(DMA1_Channel1, ENABLE); 此DMA例程用于單次ADC轉(zhuǎn)換,配合軟件濾波可做如下改動:全局聲明:vu16 AD_Value303; /AD采樣值vu16 After_filter3; /AD濾波后DMA局部:(帶中斷濾波)void DMA_Configuration(void) DMA_InitTypeDef DMA_InitStructure; DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_Per
17、ipheralBaseAddr = ADC1_DR_Address; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; /BufferSize=2,因為ADC轉(zhuǎn)換序列有2個通道 /如此設(shè)置,使序列1結(jié)果放在AD_Value0,序列2結(jié)果放在AD_Value1 DMA_InitStructure.DMA_BufferSize = 90; DMA_InitStructure.DMA_PeripheralInc = DMA_Peripher
18、alInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; /循環(huán)模式開啟,Buffer寫滿后,自動回到初始地址開場傳輸 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_In
19、itStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStructure); /配置完成后,啟動DMA通道 DMA_Cmd(DMA1_Channel1, ENABLE);DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE); /使能DMA傳輸完成中斷 NVIC局部: NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel
20、1_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); / Enable the DMA Interrupt stm32f10*_it.c文件:void DMA1_Channel1_IRQHandler(void)if(DMA_GetITStatus
21、(DMA1_IT_TC1) != RESET) filter(); DMA_ClearITPendingBit(DMA1_IT_TC1);濾波局部:均值濾波#define N 30void filter(void) int sum = 0; u8 count,i; for(i=0;i2;i+) for ( count=0;countN;count+) sum += AD_Valuecounti; After_filteri=sum/N; sum=0; 采樣數(shù)據(jù)與實際電壓/溫度轉(zhuǎn)換:u16 GetTemp(u16 advalue) u32 Vtemp_sensor; s32 Current_Temp; / ADC轉(zhuǎn)換完畢以后,讀取ADC_DR存放器中的結(jié)果,轉(zhuǎn)換溫度值計算公式如下: / V25 - VSENSE / T() = - + 25 / Avg_Slop
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年叉車駕駛(安全操作規(guī)范)試題及答案
- 2025年大學(xué)園藝技術(shù)(花卉栽培管理)試題及答案
- 2025年中職選礦技術(shù)(選礦基礎(chǔ))試題及答案
- 2026年翻譯服務(wù)(服務(wù)規(guī)范)試題及答案
- 2025年中職美容美發(fā)(黑頭去除技術(shù))試題及答案
- 四川省瀘州市2025年八年級上學(xué)期期末物理試題附答案
- 2026年榆能集團(tuán)陜西精益化工有限公司招聘備考題庫及參考答案詳解一套
- 會議檔案管理與歸檔制度
- 2026年美的硬件設(shè)計筆試綜合試題及答案
- 2026年碳中和認(rèn)證步驟自測含答案
- 課堂變革經(jīng)驗介紹課件
- 2026年魯教版初三政治上冊月考真題試卷(含答案)
- TJFPA 0023-2025《社會單位滅火與應(yīng)急疏散評審導(dǎo)則》
- 2026年衛(wèi)浴潔具安裝合同協(xié)議
- 建房框架結(jié)構(gòu)合同范本
- 退役軍人之家管理制度
- 陜西省2025屆高考 英語適應(yīng)性檢測(二) 英語試卷(含解析)
- 室外及綠化工程技術(shù)難點及質(zhì)量控制關(guān)鍵點
- 施工合作協(xié)議書
- IIT臨床研究培訓(xùn)
- 中國消化內(nèi)鏡內(nèi)痔診療指南及操作共識(2023年)
評論
0/150
提交評論