從零入手Kinetis系統(tǒng)開發(fā)(七)之ADC模塊-_第1頁
從零入手Kinetis系統(tǒng)開發(fā)(七)之ADC模塊-_第2頁
從零入手Kinetis系統(tǒng)開發(fā)(七)之ADC模塊-_第3頁
從零入手Kinetis系統(tǒng)開發(fā)(七)之ADC模塊-_第4頁
從零入手Kinetis系統(tǒng)開發(fā)(七)之ADC模塊-_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、【原創(chuàng)】從零入手Kinetis系統(tǒng)開發(fā)(七之ADC模塊2012-02-2922:52發(fā)表系統(tǒng)分類:嵌入式系統(tǒng)自定義分類:Kinetis標(biāo)簽:Kinetis K60IAR ADC今天是2月最后一天,而且還是四年一次的2月29日,為了紀(jì)念這難得的一天還是決定寫點(diǎn)東西,呵呵。在連續(xù)寫了幾篇有關(guān)飛思卡爾開發(fā)環(huán)境(IDE的博客之后,覺著雖然有點(diǎn)新意有點(diǎn)小技巧在里面,不過看多了估計(jì)大家也看膩歪了也會(huì)覺著其實(shí)寫了那么多沒實(shí)際內(nèi)容(其實(shí)真有的,這些小技巧我還是花費(fèi)了一些心思專研了一番的,哈哈,所以這次就再爆點(diǎn)實(shí)料,繼續(xù)更新從零入手系列。前一陣兒,自己的確在找狀態(tài),因?yàn)榉偶倩貋碇笥X著對Kinetis生疏了不少

2、,思路有些空白,所以私底下彌補(bǔ)了一番,真的是臺上十分鐘,臺下十年功,當(dāng)然不是在給開源者邀功頌德之類的,就是明白了為什么好多人不愿意開源,其實(shí)一方面可能的確涉及到自己的知識產(chǎn)權(quán)和核心的東西,還有就是想要開源不單單是簡單的貼出源代碼這么簡單(這點(diǎn)很同意AET博主說的,其實(shí)作為開源者也是,作為開源者,開源常常會(huì)拖帶一些麻煩的義務(wù)還有因?yàn)樽约盒量嗟膭趧?dòng)被別人簡單的貼出去連轉(zhuǎn)載兩個(gè)字都不加的委屈,說真的,簡單的貼出源代碼,估計(jì)沒幾個(gè)人能看懂,當(dāng)然代碼風(fēng)格好的就不算了,嘿嘿,所以開源需要很大的勇氣。暈,又扯偏了,呵呵,還是繼續(xù)說正事吧,哈哈又是老慣例,啰嗦了一堆,所以老朋友可以直接跳的該段了,哈哈,本篇就

3、拿Kinetis的ADC模塊開刀,其實(shí)有過網(wǎng)友說急需DMA的例程還有說寫寫細(xì)說寄存器使用方法之類的,不是不想寫,是的確我還沒用到DMA之類的,所以可能還需一些時(shí)日,不過保證肯定會(huì)有的,如果有先寫出來的還是歡迎分享出來,獨(dú)樂樂不如眾樂樂嘛,哈哈,下面進(jìn)入正題:1.Kinetis的ADC模塊的一些特點(diǎn)(以K60為例,挑重要的說了,一些AD模塊常見的特點(diǎn)就不提了,呵呵:(1最高16位AD轉(zhuǎn)換精度,逐次逼近型的,所以速度沒問題,而且能做到如此精度已實(shí)屬不易了,再往高估計(jì)就該換-的了;(2最多4對差分模擬輸入通道和24個(gè)單端模擬輸入通道,對一般工業(yè)應(yīng)用足夠了,其實(shí)在對AD要求不高的應(yīng)用還是用內(nèi)部AD好些

4、,選外部AD的話一是操作起來麻煩,還有就是對模擬電路布局布線上還是有些技巧的;(3輸出精度可選,例如差分的話可編程16位,13位,11位和9位模式,單端的話可編程為16位, 12位,10位和8位,不明白為什么差分精度非要比單端多1位,有知道的希望不吝告訴一下,在下面留言即可,呵呵;(4輸入時(shí)鐘可選四種時(shí)鐘,即bus_clock,bus_clock/2,ALTCK,ADACK;(5內(nèi)設(shè)內(nèi)部溫度傳感器,用于監(jiān)控芯片溫度,這個(gè)還是有一定用途的,不過對他的精度不要有過高期望;(6硬件平均功能,對AD轉(zhuǎn)換結(jié)果在隊(duì)列里平均之后輸出,挺實(shí)用的,要是再能對列排列一下就好了,咳咳,有點(diǎn)要求太高了,哈哈;(7帶自

5、校準(zhǔn)模式,用過外部AD的知道,這個(gè)功能是必須的但又頗有點(diǎn)小道道的,深入做過項(xiàng)目的肯定知道,呵呵;(8最高64倍PGA(programable gain Amplifier,加上這個(gè)還是讓俺們給飛思卡爾加點(diǎn)滿意分的,哈哈。2.Kinetis的ADC內(nèi)部結(jié)構(gòu)框圖,是我們接下來的編程的依據(jù),老套路,上圖: 可能第一眼我們的感覺都是。有點(diǎn)復(fù)雜哈,咳咳,所以我在圖中對重要的部分用紅線圈出來逐個(gè)分析了下,怎樣,應(yīng)該初步了然了吧,圖中我圈出來的是重點(diǎn)抓住的,下面軟件編程的時(shí)候需要用到,其他的可以隨便看看,前提是你有足夠的耐心去看一堆英文說明了,哈哈。3.軟件編程部分,其實(shí)無非就是操作寄存器,其實(shí)按照data

6、sheet的來就可以,另外強(qiáng)調(diào)一下,官方例程給出的是PDB硬件觸發(fā),覺著有點(diǎn)麻煩,所以按照平時(shí)常用的方法(對我來說,還是習(xí)慣軟件觸發(fā)針對Tower系統(tǒng)寫了下,采用的是單端模式。如下:/*Routine:ADC_Init*input:ADC-ADC0and ADC1module selectionbits:0-8bit,1-12bit,2-10bit,3-16bitchannel:023in total of24channels in single-ended convertion modemode:INT_MODE,SEARCH_MODE(母語解釋一下吧,哈哈,這里分為中斷方式和查詢方式*/v

7、oid ADC_Init(ADC_MemMapPtr ADC,uint8bits,uint8channel,uint8modeif(ADC=ADC0_BASE_PTRSIM_SCGC6|=SIM_SCGC6_ADC0_MASK;/*turn on the ADC0clock*/else if(ADC=ADC1_BASE_PTRSIM_SCGC3|=(SIM_SCGC3_ADC1_MASK;/*turn on the ADC1clock*/ADC_CFG1_REG(ADC|=ADC_CFG1_ADIV(3/*normal power,clock rate is(inputclock/8*/ +A

8、DC_CFG1_ADLSMP_MASK/*long sample time*/+ADC_CFG1_MODE(bits/*bits range0to3(0-8bit,1-12bit,2-10bit,3-16bit*/+ADC_CFG1_ADICLK(1;/*inputclock is busclock/2*/ADC_CFG2_REG(ADC&=(ADC_CFG2_MUXSEL_MASK/*a registers is selected*/+ADC_CFG2_ADACKEN_MASK/*Asynchronous clock output disabled*/+ADC_CFG2_ADHSC_

9、MASK/*Normal conversion sequence selected*/+ADC_CFG2_ADLSTS_MASK;/*Default longest sample time.*/*set default status:Software triger(a convertion is initated following a write toSC1Acompare function disabled,DMA is disabled,default voltage reference pin (external pins VREFH and VREFL.*/ADC_SC2_REG(A

10、DC=0;ADC_SC3_REG(ADC|=ADC_SC3_ADCO_MASK/*continuous conversions*/+ADC_SC3_AVGE_MASK/*hardware averages enabled.*/+ADC_SC3_AVGS(3;/*4samples average*/-when in software triger mode,a conversion is actived after the ADC_SC1A is writed. ADC_SC1_REG(ADC,0=ADC_SC1_ADCH(channel;/*single-ended AD20channel i

11、s selected*/if(mode=INT_MODEADC_SC1_REG(ADC,0|=ADC_SC1_AIEN_MASK;/*conversion complete interrrupt enabled */if(ADC=ADC0_BASE_PTRenable_irq(adc0_isr_no;/*enable the ADC0IRQ interrupt*/else if(ADC=ADC1_BASE_PTRenable_irq(adc1_isr_no;/*enable the ADC1IRQ interrupt*/else if(mode=SEARCH_MODEADC_SC1_REG(A

12、DC,0&=ADC_SC1_AIEN_MASK;/*conversion complete interrrupt disabled*/ /* *Routine:Read_ADC *input: ADC-ADC0 and ADC1 module selection result: the pointer of the return value of the convertion result. */ void Read_ADC(ADC_MemMapPtr ADC, uint16 * result while(!(ADC_SC1_REG(ADC,0&ADC_SC1_COCO_MAS

13、K; /* wait until the selected numbers of convertion(determined by the AGVS bits */ *result = ADC_R_REG(ADC,0; /* clear the COCO flag by reading the corresponding data register. */ /* *Routine:adc0_isr *Description: the interrupt service routine of ADC0 */ void adc0_isr(void (void ADC0_RA; /* *Routin

14、e:adc1_isr *Description: the interrupt service routine of ADC1 */ void adc1_isr(void (void ADC1_RA; 在這里解釋下上面代碼,其實(shí)看英文注釋就行,我每步都做了簡單的注釋,按照步驟來即可。其實(shí)主 要分兩部分,一個(gè)就是其 AD 初始化部分,主要操作寄存器為 ADC_SC1ADC_SC3和 ADC_CFG1ADC_CFG2。輸入?yún)?shù)包括 ADC 模塊選擇(包括兩個(gè),即 ADC0和 ADC1) ,轉(zhuǎn)換精度 選擇(8位,10位,12位,16位) ,通道號(由于是單端模式,所以范圍為023共24個(gè)通道)和輸 出

15、模式(查詢或者中斷模式) ;另外就是讀結(jié)果寄存器部分,包括了查詢方式讀和中斷方式讀(我使 用了查詢方式,所以中斷方式我設(shè)置了空讀,呵呵,其實(shí)根本沒用到) ,完整文件見附件。 4.再補(bǔ)充一部分,即主函數(shù)內(nèi)部的調(diào)用方法,由于本例程是根據(jù) Tower 系統(tǒng)寫的,而系統(tǒng)板上電位器 的分壓端是連在 ADC1_DM1端上的,不過對單端模式來說其實(shí)是連在了 AD20這個(gè)通道上的,如下 圖通道安排(看到 Chapter3了吧,呵呵,find it in chapter3, you can get it,哈哈) : 下面是具體在 main 函數(shù)里的調(diào)用方法,如下: void main(void /-insert your code in the following-uint16 AD_Result; /* 聲明 AD 轉(zhuǎn)換結(jié)果變量,存儲(chǔ) AD 值 */ ADC_Init(ADC1, 3, 20, SEARCH_MODE; /* 初始化 AD1位單通道20輸入,轉(zhuǎn)換結(jié)果16bit, 查詢模 式 */ EnableInterrupts; while(1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論