1. 程式人生 > 其它 >Mini2440裸機開發之模數轉換開發

Mini2440裸機開發之模數轉換開發

一、硬體介紹

1.1 S3C2440 ADC概述

模數轉換器即A/D轉換器,或簡稱ADC,通常是指一個將模擬訊號轉變為數字訊號的電子元件。S3C2440集成了8通道10位CMOS A/D轉換器,最大轉換率為2.5MHz A/D轉換器時鐘下的500KSPS。A/D轉換器支援片上取樣-保持功能和掉電模式的操作。

對於數字訊號我們需要得到它的2個屬性:

1) 轉換精度:
用多少位來儲存這個資料。

2) 取樣/轉換速度。

S3C2440 ADC具有以下特性:

  • 解析度:10 位
  • 差分線性誤差:± 1.0 LSB
  • 積分線性誤差:± 2.0 LSB
  • 最大轉換率:500 KSPS
  • 功耗低
  • 供電電壓:3.3V
  • 模擬輸入範圍:0 至3.3V
  • 片上取樣-保持功能
  • 普通轉換模式;   
  • 分離的X/Y方向轉換模式 ;
  • 自動(順序)X/Y方向轉換模式
  • 等待中斷觸發;

從上圖可以看出AD converter前有一個多路選擇器,用來選擇模擬輸入源,這裡選擇A[3:0]作為模擬輸入源。這裡的XP、XM、YP、YM引腳是適用於電阻屏的觸控式螢幕觸控檢測、

1.2 A/D轉換時間

當PCLK 頻率在50MHz 並且預分頻器的值為49 時,共10 位的轉換時間如下:

$$A/D轉換器速率=\frac{50MHZ}{(49+1}=1MHZ$$

$$轉換時間=\frac{1}{1MHZ/5週期}=\frac{1}{200kHz=5us}$$

註釋: 此A/D 轉換器被設計為最高工作在2.5MHz 時鐘下,因此轉換率可以達到500 KSPS。

1.3 Mini2440 ADC電路

Mini2440開發板引出4路A/D(模數轉換)轉換通道,它們位於板上的CON4-GPIO介面。為了方便測試, AIN0連線到了開發板上的可調電阻W1,原理圖如下所示:

如圖,是把可變電阻上的電壓值變換的模擬訊號通過ADC轉換,輸出數字訊號。

二、暫存器

2.1 ADC控制暫存器(ADCCON)

暫存器資訊:

暫存器 地址 R/W 描述 復位值
ADCCON 0x5800000 R/W ADC 控制暫存器 0x3FC4

暫存器位資訊:

ADCCON 描述 初始狀態
ECFLG [15]

轉換結束標誌位(只讀)

0 = A/D 正在轉換 1 = A/D 轉換已結束

0
PRSCEN [14]

A/D 轉換器預分頻器使能

0 = 禁止 1 = 使能

0
PRSCVL [13:6]

A/D 轉換器預分頻值

數值範圍: 0 至255

注意:ADC 頻率應該設定為低於PCLK 的1/5。(例如PCLK=10MHz,
則ADC 頻率<2MHz)

0xFF
SEL_MUX [5:3]

模擬輸入通道選擇

000 = AIN0 001 = AIN1 010 = AIN2 011 = AIN3
100 = YM 101 = YP 110 = XM 111 = XP

0
STDBM [2]

待機模式選擇

0 = 正常工作模式 1 = 待機模式

1
READ_ START [1]

讀啟動A/D 轉換

0 = 禁止讀啟動操作 1 = 使能讀啟動操作

0

ENABLE_START

[0]

使能A/D 轉換啟動。如果READ_START 為使能,則此值無效

0 = 無操作 1 = A/D 轉換啟動且此位在啟動後被清零

0

注意:

  • 當觸控式螢幕引腳(YM、YP、XM 和XP)為禁止時,這些埠可以被用於ADC 的模擬輸入埠(AIN4、AIN5、AIN6 和AIN7)。
  • 當從待機模式中變換到正常工作模式時,ADC 的預分頻器必須在最後的3 個ADC 時鐘前使能。
  • 注意位[1]這一位, 這說明轉換完成讀取的時候還可以觸發轉換,也就是相當於連續轉換.

這裡我們設定預分頻器使能,PCLCK=50MHZ,設定預分頻器值為49:

$$A/D轉換器速率=\frac{50MHZ}{(49+1}=1MHZ$$

模擬輸入通道選擇AIN0:

ADCCON = (1<<14) | (49<<6) | (0<<3); //設定輸入源AIN0, ADC時鐘為1Mhz

位0用來使能A/D轉換功能,A/D轉換成功後ECFLG會設定為1.

2.2ADC 啟動延時暫存器(ADCDLY)

暫存器資訊:

暫存器 地址 R/W 描述 復位值
ADCDLY 0x5800008 R/W ADC 啟動或初始化延時暫存器 0x00ff

暫存器位資訊:

ADCDLY 描述 初始狀態
DELAY [15:0]

正常轉換模式、XY 方向模式、自動方向模式
→ADC 轉換啟動延時值。
注意:不要使用0 這個值(0x0000)

0x00ff

2.3ADC 轉換資料暫存器(ADCDAT0)

暫存器資訊:

暫存器 地址 R/W 描述 復位值
ADCDAT0 0x580000C R/W ADC 轉換資料暫存器 -

暫存器位資訊:

ADCDAT0 描述 初始狀態
UPDOWN [15]

等待中斷模式中筆尖的起落狀態

0 = 筆尖落下態 1 = 筆尖抬起態

-
AUTO_PST [14]

自動順序X 方向和Y 方向轉換

0 = 正常ADC轉換 1 = 順序X 方向、Y 方向測量

-
XY_PST [13:12]

手動X 方向或Y 方向測量

00 = 無操作模式 01 = X方向測量
10 = Y 方向測量 11 = 等待中斷模式

-
保留 [11:10]

保留

-

XPDATA
(正常ADC)

[9:0]

X 方向轉換數值(包括正常ADC轉換數值)
數值範圍:0 至3FF

-

等到A/D轉換完成,讀取XPDATA[9:0]可以獲取到轉換的資料。

2.4 ADC 轉換資料暫存器(ADCDAT1)

暫存器資訊:

暫存器 地址 R/W 描述 復位值
ADCDAT1 0x5800010 R/W ADC 轉換資料暫存器 -

暫存器位資訊:

ADCDAT1 描述 初始狀態
UPDOWN [15]

等待中斷模式中筆尖的起落狀態

0 = 筆尖落下態 1 = 筆尖抬起態

-
AUTO_PST [14]

自動順序X 方向和Y 方向轉換

0 = 正常ADC 轉換 1 = 順序X 方向、Y 方向測量

-
XY_PST [13:12]

手動X 方向或Y 方向測量

00 = 無操作模式 01 = X方向測量
10 = Y 方向測量 11 = 等待中斷模式

-
保留 [11:10]

保留

-

XPDATA

[9:0]

Y 方向轉換數值
數值範圍:0 至3FF

-

三、ADC程式碼

3.1 ADC初始化步驟

  • GPIO設定,設定為模擬輸入;
  • 使能分頻器,設定分頻係數;
  • 選擇模擬輸入通道;
  • 使能A/D轉換;
  • 等待轉換完成,讀取資料(為了得到準確的資料,可以多次轉換取平均)

3.2 程式碼

參考文章

[1]S3C2440 ADC詳解