1. 程式人生 > >1.13裸機ADC部分

1.13裸機ADC部分

離散化 關系 cloc 通道數 put 分辨 都是 實戰 log

1.13.1、ADC的引入

1.13.1.1、什麽是ADC

  • (1)ADC:analog digital converter ,AD轉換,模數轉換(也就是模擬轉數字)
  • (2)CPU本身是數數字的,而外部世界變量(如電壓、溫度、高度、壓力)都是模擬的,所以需要用CPU來處理這些外部的模擬量的時候就需要做AD轉換

1.13.1.2、為什麽需要ADC

  • (1)為了用數字技術來處理外部的模擬量

1.13.1.3、關於模擬量和數字量

  • (1)模擬的就是連續的,顯示生活中的時間、電壓、高度等都是模擬的(連續分布的,劃分的話可以無限劃分)。模擬量反應在數學裏面就是無限多個小數位從0到1之間有無數個數。
  • (2)數字的就是離散的,離散的就是不連續的。這種離散處理實際上是數學上對現實中的模擬量的一種精度的描述,數字化就是離散化,就是把連續分布的模擬量按照一定精度采樣變成多個不連續分布的數字值,就叫數字量
  • (3)數字化的意義就在於可以用(離散)數字來簡化模擬量,這東西是計算機的基礎
  • (4)計算機處理參量的時候都是數字化的,計算機也需要數字化的值來參與運算,如果系統輸入的模擬量就需要外加一個AD轉換器,將這個模擬量轉成數字量,再給CPU

1.13.1.4、有AD自然就有DA

  • (1)AD是analog to digital 而DA是digital to analog
  • (2)純粹用CPU 不可能實現數字轉模擬,因為CPU本身就是數字的。使用一些(具有積分和微分效果的)物理器件,就可以實現數字轉模擬。
  • (3)數字轉模擬的作用。譬如用來做波形發生器

1.13.2、ADC的主要相關概念

1.13.2.1量程(模擬量的輸入範圍)

  • (1)AD轉換器是一個電子器件,所以只能輸入電壓信號,其他種類的模擬信號必須經過傳感器(sensor)的轉換器轉換成模擬的電壓信號,然後才能給AD
  • (2)AD輸入端的模擬電壓要求有一個範圍,一般是0~3.3V或0~5V或者是0~12V等等。模擬電壓的範圍是AD芯片本身的一個參數,實際工作時AD的電壓信號不能超過這個電壓範圍

1.13.2.3、精度(分辨率resolution)

  • (1)AD轉換輸出的數字值是有一定的位數的(譬如說十位,就是說輸出的數字值的位數是用十位二進制表示的,這種就叫10位AD)。這個位數就表示了轉換精度
  • (2)10位AD就相當於把整個範圍分成了1024個格子,每個格子的間隔就是電壓的精度,譬如說,加入AD芯片的量程是0~3.3V,則每一個格子的代表的電壓值是3.3V,則每個格子代表的電壓值是3.3V/1024=0.0032265,如果此時AD轉換後得到的數字是447,則這個數字代表的模擬量是447*0.0032265 = 1.44V
  • (3)AD位數越多,則每個格子表示的電壓值越小,將來的算出來的值就越小,就越精確。
  • (4)AD的模擬來那個城一樣的情況下,AD精度位數越多精度越高,測出來的值越準。但是如果AD的量程不一樣。譬如2個AD,A的量程是0~50V,B是0~0.5V,A是12位的,B是10位的,實際上B的精度比A的還要高。(A的精度50/1024 = 0.04883,0.5/4096 = 0.000122)

1.13.2.3、轉換速率(MSPS與convert clock不同)

  • (1)首先要明白:AD芯片進行AD轉換是耗費時間的。這個時間需要多久,不同的芯片是不一樣的,同一顆芯片在配置不一樣的(譬如說精度為10位時時間比精度配置為12位時小,譬如說有些AD可以分配轉換時鐘,時鐘頻率高則轉換時間短)時轉換時間也不一樣。
  • (2)詳細的需要時間可以參考數據手冊。一般數據手冊中描述轉換速率用的單位是MSPS(第一個M是兆,第二個S是sample,,就是采樣,後面的PS是每秒,每秒鐘轉出來多少M個數字值)
  • (3)AD工作都需要一個時鐘,這個時鐘有一個範圍,我們實際給他配置時不要超過這個範圍就可以了。AD轉換是在這個時鐘下進行的,時鐘的頻率控制著AD轉換的速率。註意:時鐘頻率和MSPS不是一回事,只是成正比不是完全相等。譬如S5PV210中的AD轉換器,MSPS = 時鐘頻率/5

1.13.2.4、通道數

  • (1)AD有多少路analog input通道代表了將來可以同時進行多少路模擬信號的輸入

1.13.3、S5PV210的ADC控制器

1.13.3.1、ADC和(電阻式)觸摸屏的關系

  • (1)ADC在210的數據手冊的section10.7
  • (2)電阻式觸摸屏工作時依賴AD轉換,所以在210SOC中電阻觸摸屏接口本身和ADC接口是合二為一的。或者說電阻觸摸屏接口使用了(復用了ADC的接口)

1.13.3.2、ADC的工作時鐘框圖

  • ADCCLK是ADC控制器工作的時鐘,也就是1.13.2.3節中講到的convertor clock。從時鐘框圖可以看出,他是PCLK(當然是PCLK_PSYS)經過了一次分頻後得到的,所以將來初始化ADC控制器時一定有一個步驟是初始化這裏的分頻器

1.13.3.3、210的10個ADC通道(註意ADC引腳和GPIO的區別)

  • (1)210一共支持10個ADC通道,分別叫AIN[0]~AIN[9]。理論上可以同時做10路AD轉換
  • (2)SoC的引腳至少分2中:digit數字引腳和analog模擬引腳。我們以前接觸的GPIO都屬於數字引腳,ADCchannel通道引腳屬於模擬引腳。數字引腳和模擬引腳一般不復用

1.13.2.4、ADC控制器的主要寄存器

  • TSADCCON0
  • TSDATX0  TSDATY0  轉出來的AD值存在這裏,我們讀也是在這裏讀
  • CLRINTADC0 清中斷
  • ADCMUX 選擇當前正在操作的AD通道

(1)等待觸摸屏轉換完畢的方法有2種:一種是檢查標誌位,第二種是中斷。第一種方式下我們先開啟一次轉換後循環不同檢查標誌位直到標誌位為1為1表明已經轉化好了。可以去讀了,第二種方式下就是設置好中斷,寫好中斷isr來讀取AD轉換數據,然後開啟中斷後CPU就不用管了,等AD轉換完就會生成一個中斷給CPU,就會進入中斷處理流程,第一種方法是同步的,第二種方式是異步的。

(2)AD轉換都是需要反復進行的,那麽轉完一次一般立即開啟下一次轉換,所以需要一種機制能夠在一次轉完時自動開啟下一次,這個機制就叫做start by read。這個機制的原理是:當我們讀取本次AD轉換的AD值後,硬件自動開啟下一次轉換。

1.13.4轉換的變成實戰1

1.13裸機ADC部分