【ARM】AD转换器
A/D轉(zhuǎn)換器
A/D轉(zhuǎn)換器,又稱模/數(shù)轉(zhuǎn)換器,顧名思義,就是把模擬信號(hào)數(shù)字化。
由于系統(tǒng)的實(shí)際處理對(duì)象往往都是一些模擬量(如溫度、壓力、位移、圖像等),要使計(jì)算機(jī)或數(shù)字儀表能識(shí)別和處理這些信號(hào),必須首先將這些模擬信號(hào)轉(zhuǎn)換成數(shù)字信號(hào),這就必須用到A/D轉(zhuǎn)換器。
A/D轉(zhuǎn)換器的一般步驟
模擬信號(hào)進(jìn)行A/D轉(zhuǎn)換的時(shí)候,從啟動(dòng)轉(zhuǎn)換到轉(zhuǎn)換結(jié)束輸出數(shù)字量,需要一定的轉(zhuǎn)換時(shí)間,在這個(gè)轉(zhuǎn)換時(shí)間內(nèi),模擬信號(hào)要基本保持不變。否則轉(zhuǎn)換精度沒有保證,特別當(dāng)輸入信號(hào)頻率較高時(shí),會(huì)贊成很大的轉(zhuǎn)換誤差。要防止這種誤差的產(chǎn)生,必須在A/D轉(zhuǎn)換開始時(shí)將輸入信號(hào)的電平保持住,而在A/D轉(zhuǎn)換結(jié)束后,又能跟蹤輸入信號(hào)的變化。因此,一般的A/D轉(zhuǎn)換過程是通過取樣、保持、量化和編碼這4個(gè)步驟完成的。一般取樣和保持主要由采樣保持器來完成,而量化編碼就由A/D轉(zhuǎn)換器完成。
實(shí)例
1 //main.c
2
3 #include "2410lib.h"
4
5 externvoid adc_test(void);
6
7 int main(int argc,char **argv)
8
9 {
10
11 sys_init(); // Initial s3c2410's Clock, MMU, Interrupt,Port and UART
12
13 uart_printf("
Embest S3CEB2410 Evaluation Board
");
14
15 while(1)
16
17 {
18
19 adc_test();
20
21 }
22
23 }
24
25 //adc.c
26
27 #include "2410lib.h"
28
29 #define REQCNT 100
30
31 #define ADC_FREQ 2500000
32
33 #define LOOP 10000
34
35 volatile UINT8T unPreScaler;
36
37 volatilechar nEndTest;
38
39 void adc_test(void)
40
41 {
42
43 int j;
44
45 UINT16T usConData;
46
47 float usEndData;
48
49 uart_printf("
Adc Conversion Test Example
");
50
51 uart_printf(" ADC_IN Test,channel 2
");
52
53 uart_printf(" ADC conv. freq. = %dHz
",ADC_FREQ);
54
55 unPreScaler = PCLK/ADC_FREQ -1;
56
57 rADCCON=(1<<14)|(unPreScaler<<6)|(2<<3)|(0<<2)|(1<<1);//enable prescaler,ain2,normal,start by read
58
59 uart_printf(" Please adjust AIN2 value!
");
60
61 uart_printf(" The results of ADC are:
");
62
63 usConData=rADCDAT0&0x3FF;
64
65 for(j=0;j<20;j++) // sample and show data both by UART and leds
66
67 {
68
69 while(!(rADCCON & 0x8000));
70
71 usConData=rADCDAT0&0x3FF;
72
73 usEndData=usConData*3.3000/0x3FF;
74
75 uart_printf(" %0.4f ",usEndData);
76
77 delay(10000);
78
79 }
80
81 uart_printf(" end.
");
82
83 }
84
85 //sys_init.c主要代碼
86
87 void sys_init()
88
89 {
90
91 change_clock_divider(1,1); // 1:2:4
92
93 change_value_MPLL(M_MDIV,M_PDIV,M_SDIV); // Fin=12MHz FCLK=202.8MHz
94
95 delay(0); // adjust the delay count
96
97 port_init();
98
99 beep(1);
100
101 interrupts_init();
102
103 uart_init(PCLK, 115200, UART0);
104
105 uart_init(PCLK, 115200, UART1);
106
107 #ifdef CLK124_200M
108
109 change_value_MPLL(88,1,1); // Fin=12MHz FCLK=192MHz
110
111 uart_init(192000000/4, 115200, UART0);
112
113 uart_init(192000000/4, 115200, UART1);
114
115 #endif
116
117 uart_select(UART0);
118
119 uart_printf ("
boot success...
");
120
121 delay(500);
122
123 beep(0);
124
125 }//sys_init
View Code
總結(jié)
以上是生活随笔為你收集整理的【ARM】AD转换器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据项目开发案例_大数据分析技术——项
- 下一篇: python计算一年有多少天_Pytho