




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
模擬看門狗功能允許非常精準(zhǔn)地監(jiān)視一路、多路或所有選中的通道,當(dāng)被監(jiān)視的信號超出預(yù)置的閥值時,將產(chǎn)生中斷。由標(biāo)準(zhǔn)定時器(TIMx)和高級控制定時器(TIM1和TIM8)產(chǎn)生的事件,可以分別內(nèi)部級聯(lián)到ADC的開始觸發(fā)和注入觸發(fā),應(yīng)用程序能使AD轉(zhuǎn)換與時鐘同步。12位ADC是一種逐次逼近型模擬數(shù)字?jǐn)?shù)字轉(zhuǎn)換器。它有多達18個通道,可測量16個外部和2個內(nèi)部信號源。ADC的輸入時鐘不得超過14MHZ,它是由PCLK2經(jīng)分頻產(chǎn)生。如果被ADC轉(zhuǎn)換的模擬電壓低于低閥值或高于高閥值,AWD模擬看門狗狀態(tài)位被設(shè)置。關(guān)于ADC采樣與DMA關(guān)系,引用網(wǎng)上一段解釋:12位精度,最快1uS的轉(zhuǎn)換速度,通常具備2個以上獨立的ADC控制器,這意味著,STM32可以同時對多個模擬量進行快速采集,這個特性不是一般的MCU具有的。以上高性能的ADC,配合相對比較塊的指令集和一些特色的算法支持,就構(gòu)成了STM32在電機控制上的強大特性。好了,正題,怎末做一個簡單的ADC,注意是簡單的,ADC是個復(fù)雜的問題,涉及硬件設(shè)計,電源質(zhì)量,參考電壓,信號預(yù)處理等等問題。我們只就如何在MCU內(nèi)完成一次ADC作討論。談到ADC,我們還要第一次引入另外一個重要的設(shè)備DMA.DMA是什么東西呢。通常在8位單片機時代,很少有這個概念。在外置資源越來越多以后,我們把一個MCU內(nèi)部分為主處理器和外設(shè)兩個部分。主處理器當(dāng)然是執(zhí)行我們指令的主要部分,外設(shè)則是串口I2CADC等等用來實現(xiàn)特定功能的設(shè)備回憶一下,8位時代,我們的主處理器最常干的事情是什么?邏輯判斷?不是。那才幾個指令計算算法?不是。大部分時候算法都很簡單。事實上,主處理器就是作個搬運工,把USART的數(shù)據(jù)接收下來,存起來把ADC的數(shù)據(jù)接收下來,存起來把要發(fā)送的數(shù)據(jù),存起來,一個個的往USART里放。為了解決這個矛盾,人們想到一個辦法,讓外設(shè)和內(nèi)存間建立一個通道,在主處理器允許下,讓外設(shè)和內(nèi)存直接讀寫,這樣就釋放了主處理器,這個東西就是DMA。打個比方:一個MCU是個公司。老板就是主處理器員工是外設(shè)倉庫就是內(nèi)存從前倉庫的東西都是老板管的。員工需要原料工作,就一個個報給老板,老板去倉庫里一個一個拿。員工作好的東西,一個個給老板,老板一個個放進倉庫里。老板很累,雖然老板是超人,也受不了越來越多的員工和單子。最后老板雇了一個倉庫保管員,它就是DMA他專門負責(zé)入庫和出庫,只需要把出庫和入庫計劃給老板過目老板說0K,就不管了。后面的入庫和出庫過程,員工只需要和這個倉庫保管員打交道就可以了。閑話,馬七時常想,讓設(shè)備與設(shè)備之間開DMA,豈不更牛X比喻完成。ADC是個高速設(shè)備,前面提到。而且ADC采集到的數(shù)據(jù)是不能直接用的。即使你再小心的設(shè)計外圍電路,測的離譜的數(shù)據(jù)總會出現(xiàn)。那么通常來說,是采集一批數(shù)據(jù),然后進行處理,這個過程就是軟件濾波。DMA用到這里就很合適。讓ADC高速采集,把數(shù)據(jù)填充到RAM中,填充一定數(shù)量,比如32個,64個MCU再來使用。-----多一句,也可以說,單次ADC毫無意義。下面我們來具體介紹,如何使用DMA來進行ADC操作。初始化函數(shù)包括兩部分,DMA初始化和ADC初始化我們有多個管理員--DMA一個管理員當(dāng)然不止管一個DMA操作。所以DMA有多個ChannelADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_ScanConvMode=ENABLE;ADC_InitStructure.ADC_ScanConvMode=ENABLE;以下是程序分析:程序基于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-->PC0GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;〃模擬輸入GPIO_Init(GPIOC,&GPIO_InitStructure);//PC2GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_Init(GPIOC,&GPIO_InitStructure);ADC1配置:(兩外部輸入,另采樣內(nèi)部溫度傳感器)voidADC1_Configuration(void){ADC_InitTypeDefADC_InitStructure;ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//轉(zhuǎn)換模式為獨立,還有交叉等非常多樣的選擇ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;//連續(xù)轉(zhuǎn)換開啟ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;ADC_InitStructure.ADC_NbrOfChannel=3;//設(shè)置轉(zhuǎn)換序列長度為3,三通道ADC_Init(ADC1,&ADC_InitStructure);//ADC內(nèi)置溫度傳感器使能(要使用片內(nèi)溫度傳感器,切忌要開啟它)ADC_TempSensorVrefintCmd(ENABLE);//常規(guī)轉(zhuǎn)換序列1:通道10ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_239Cycles5);//常規(guī)轉(zhuǎn)換序列2:通道16(內(nèi)部溫度傳感器),采樣時間>2.2us,(239cycles)ADC_RegularChannelConfig(ADC1,ADC_Channel_16,2,ADC_SampleTime_239Cycles5);ADC_RegularChannelConfig(ADC1,ADC_Channel_1,3,ADC_SampleTime_239Cycles5);〃輸入?yún)?shù):ADC外設(shè),ADC通道,轉(zhuǎn)換序列順序,采樣時間//EnableADC1ADC_Cmd(ADC1,ENABLE);//開啟ADC的DMA支持(要實現(xiàn)DMA功能,還需獨立配置DMA通道等參數(shù))ADC_DMACmd(ADC1,ENABLE);//下面是ADC自動校準(zhǔn),開機后需執(zhí)行一次,保證精度//EnableADC1resetcalibarationregisterADC_ResetCalibration(ADC1);DMA_InitStructure.DMA_BufferSize=3;DMA_InitStructure.DMA_BufferSize=3;DMA_InitStructure.DMA_BufferSize=3;DMA_InitStructure.DMA_BufferSize=3;//ChecktheendofADC1resetcalibrationregisterwhile(ADC_GetResetCalibrationStatus(ADCI));//StartADC1calibarationADC_StartCalibration(ADC1);//ChecktheendofADC1calibrationwhile(ADC_GetCalibrationStatus(ADC1));//ADC自動校準(zhǔn)結(jié)束ADC_SoftwareStartConvCmd(ADC1,ENABLE);//ADC啟動}DMA配置:(無軟件濾波)voidDMA_Configuration(void){DMA_InitTypeDefDMA_InitStructure;DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;//DMA外設(shè)地址,在頭部定義DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&AD_Value;〃內(nèi)存地址DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;〃外設(shè)至內(nèi)存模式〃BufferSize=2,因為ADC轉(zhuǎn)換序列有2個通道〃如此設(shè)置,使序列1結(jié)果放在AD_Value[0],序列2結(jié)果放在AD_Value[1]〃一次轉(zhuǎn)換三個DMA_InitStructure.DMA_Peripherallnc=DMA_Peripherallnc_Disable;DMA_InitStructure.DMA_Peripherallnc=DMA_Peripherallnc_Disable;〃接受一次后,DMA_InitStructure.DMA_Peripherallnc=DMA_Peripherallnc_Disable;DMA_InitStructure.DMA_Peripherallnc=DMA_Peripherallnc_Disable;〃接受一次后,設(shè)備地址不后移DMA_InitStructure.DMA_Memorylnc=DMA_Memorylnc_Enable;〃接受一次后,內(nèi)存地址后移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_InitStructure.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例程用于單次ADC轉(zhuǎn)換,配合軟件濾波可做如下改動:全局聲明:vu16AD_Value[30][3];//AD采樣值vu16After_filter[3];//AD濾波后DMA部分:(帶中斷濾波)voidDMA_Configuration(void){DMA_InitTypeDefDMA_InitStructure;DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;DMA_InitStructure.DMA_PeripheralBaseAddr=ADC1_DR_Address;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&AD_Value;DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;〃BufferSize=2,因為ADC轉(zhuǎn)換序列有2個通道〃如此設(shè)置,使序列1結(jié)果放在AD_Value[O],序列2結(jié)果放在AD_Value[1]DMA_InitStructure.DMA_BufferSize=90;DMA_InitStructure.DMA_Peripherallnc=DMA_Peripherallnc_Disable;DMA_InitStructure.DMA_Memorylnc=DMA_Memorylnc_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_InitStructure.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_Channel1_IRQChannel;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;}}}}NVIC_Init(&NVIC_lnitStructure);//EnabletheDMAInterruptNVIC_Init(&NVIC_lnitStructure);//EnabletheDMAInterruptstm32f10x_it.c文件:voidDMA1_Channel1_IRQHandler(void){if(DMA_GetlTStatus(DMA1」T_TC1)!=RESET){filter();DMA_ClearlTPendingBit(DMA1」T_TC1);}}濾波部分:(均值濾波)#defineN30voidfilter(void){intsum=0;u8count,i;for(i=0;i<2;i++){for(count=0;count<N;count++){sum+=AD_Value[count][i];}After_filter[i]=sum/N;sum=0;}}采樣數(shù)據(jù)與實際電壓/溫度轉(zhuǎn)換:u16GetTemp(u16advalue){u32Vtemp_sensor;s32Current_Temp;//ADC轉(zhuǎn)換結(jié)束以后,讀取ADC_DR寄存器中的結(jié)果,轉(zhuǎn)換溫度值計
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海普陀區(qū)2025年高三壓軸卷化學(xué)試卷含解析
- 康復(fù)運動訓(xùn)練培訓(xùn)課件
- 工程供應(yīng)鏈管理概述
- 福建省泉州市2023年第29屆WMO競賽六年級數(shù)學(xué)下學(xué)期競賽試卷
- 2025屆福建省永安市一中高考化學(xué)三模試卷含解析
- 手工燈具制作課件
- 截癱定位診斷
- 2025屆江蘇省橫林高級中學(xué)高考化學(xué)考前最后一卷預(yù)測卷含解析
- 勞動安全教育小班
- 山東省濰坊市示范中學(xué)2025年高三第一次模擬考試化學(xué)試卷含解析
- 滬教版三年級下冊數(shù)學(xué)第二單元 用兩位數(shù)乘除 測試卷附完整答案(典優(yōu))
- 酒店安全隱患排查獎懲制度
- 發(fā)生治療錯誤的應(yīng)急預(yù)案
- 廢舊家電拆解與零件再制造工藝
- 農(nóng)產(chǎn)品食品檢驗員(高級)職業(yè)技能鑒定考試題庫
- 【MOOC】模擬電子電路實驗-東南大學(xué) 中國大學(xué)慕課MOOC答案
- 2024年注冊會計師考試稅法科目試卷與參考答案
- 《大壩安全監(jiān)測培訓(xùn)》課件
- 2024年全國中學(xué)生生物學(xué)聯(lián)賽試題含答案
- 大學(xué)藻類課件教學(xué)課件
- 報關(guān)實務(wù)-教學(xué)課件 第一章 海關(guān)概念
評論
0/150
提交評論