- Kas ir ADC?
- ADC ARM7-LPC2148
- ADC tapas ARM7-LPC2148
- ADC reģistri ARM7-LPC2148
- ADxCR reģistrējieties LPC2148
- ADxGDR: ADC globālais datu reģistrs
- Nepieciešamās sastāvdaļas
- Ķēdes shēma
- ARM7-LPC2148 programmēšana ADC
Elektronikas pasaulē tirgū ir daudz dažādu analogo sensoru, kas tiek izmantoti temperatūras, ātruma, darba tilpuma, spiediena utt. Mērīšanai. Analogos sensorus izmanto, lai iegūtu jaudu, kas laika gaitā nepārtraukti mainās. Šie signāli no analogajiem sensoriem parasti ir ļoti mazi, sākot no dažiem mikrovoltiem (uV) līdz vairākiem milivoltiem (mV), tāpēc ir nepieciešama noteikta veida pastiprināšana. Lai šos analogos signālus izmantotu mikrokontrollerī, mums analogais signāls jāpārvērš ciparu signālā, jo mikrokontrolleris saprot un apstrādā tikai digitālos signālus. Tātad lielākajai daļai mikrokontrolleru ir iebūvēta svarīga funkcija, ko sauc par ADC (Analog to Digital pārveidotājs). Mūsu mikrokontrollerim ARM7-LPC2148 ir arī ADC funkcija.
Šajā apmācībā mēs redzēsim, kā izmantot ADC ARM7-LPC2148, piegādājot mainīgu spriegumu analogajai tapai un parādot to 16x2 LCD ekrānā pēc analogās uz ciparu pārveidošanas. Tātad sāksim ar īsu ievadu par ADC.
Kas ir ADC?
Kā minēts iepriekš, ADC nozīmē Analog to Digital Conversion, un to izmanto, lai pārveidotu analogās vērtības no reālās pasaules tādās digitālajās vērtībās kā 1 un 0. Kādas ir šīs analogās vērtības? Tie ir tie, kurus mēs redzam ikdienas dzīvē, piemēram, temperatūru, ātrumu, spilgtumu utt. Šie parametri tiek mērīti kā analogie spriegumi ar attiecīgajiem sensoriem, un pēc tam šīs analogās vērtības tiek pārveidotas par mikrokontrolleru digitālajām vērtībām.
Pieņemsim, ka mūsu ADC diapazons ir no 0 V līdz 3,3 V un mums ir 10 bitu ADC, tas nozīmē, ka mūsu ieejas spriegums 0-3,3 volti tiks sadalīti 1024 diskrētu analogo vērtību līmeņos (2 10 = 1024). Nozīme 1024 ir 10 bitu ADC izšķirtspēja, tāpat kā 8 bitu ADC izšķirtspēja būs 512 (28) un 16 bitu ADC izšķirtspēja būs 65 536 (216). LPC2148 ir 10 bitu izšķirtspēja ADC.
Ja faktiskais ieejas spriegums ir 0 V, tad MCU ADC to nolasīs kā 0, un, ja tas ir 3,3 V, MCU rādīs 1024, un, ja tas kaut kur pa vidu, piemēram, 1,65 V, tad MCU rādīs 512. Mēs varam izmantot zemāk formulas, lai aprēķinātu digitālo vērtību, kuru MCU nolasīs, pamatojoties uz ADC izšķirtspēju un darba spriegumu.
(ADC izšķirtspēja / darba spriegums) = (ADC digitālā vērtība / faktiskā sprieguma vērtība)
Piemēram, piemēram, ja atskaites spriegums ir 3v:
Iepriekšējā rakstā mēs detalizēti izskaidrojām ADC.
ADC ARM7-LPC2148
- LPC2148 ir divi analogie uz ciparu pārveidotāji.
- Šie pārveidotāji ir 10 bitu secīgi tuvināšanas analogi ciparu pārveidotājiem.
- Kamēr ADC0 ir seši kanāli, ADC1 ir astoņi kanāli.
- Tāpēc LPC2148 pieejamo ADC ieeju kopējais skaits ir 14.
- Tas pārveido ieejas spriegumu tikai diapazonā (0 līdz 3,3 V). Tas nedrīkst pārsniegt 3,3 V sprieguma atskaiti. Tā kā tas sabojās IC, kā arī nodrošinās nenoteiktas vērtības.
Dažas svarīgas ADC iezīmes LPC2148
- Katrs pārveidotājs, kas spēj veikt vairāk nekā 400000 10 bitu paraugu sekundē.
- Katrai analogajai ieejai ir īpašs rezultātu reģistrs, lai samazinātu pārtraukuma pieskaitāmās izmaksas.
- Sērijveida pārveidošanas režīms vienai vai vairākām ieejām.
- Pēc izvēles pārveidošana par pāreju uz ieejas tapu vai taimera spēles signālu.
- Globālā sākuma komanda abiem pārveidotājiem.
Pārbaudiet arī to, kā izmantot ADC citos mikrokontrolleros:
- Kā lietot ADC Arduino Uno?
- Saskarne ADC0808 ar 8051 mikrokontrolleru
- Izmantojot PIC mikrokontrollera ADC moduli
- Aveņu Pi ADC apmācība
- Kā lietot ADC programmā MSP430G2 - analogā sprieguma mērīšana
- Kā lietot ADC programmā STM32F103C8
ADC tapas ARM7-LPC2148
Kā stāstīja earliar, ARM7-LPC2148 ir divi kanāli ADC0 ar 6 analogās ieejas tapām un ADC1 ar 8 analogās ieejas tapām. Tātad pilnīgi ir 14 tapas analogajām ieejām. Zemāk redzamajā diagrammā ir parādītas tapas, kas ir pieejamas analogai ieejai.
Tā kā ADC ievades tapas tiek multipleksētas ar citām GPIO tapām. Mums tie jāiespējo, konfigurējot PINSEL reģistru, lai izvēlētos ADC funkciju.
Zemāk esošajā tabulā ir parādīti ADC tapas un ievērotais ADC kanāla nr. LPC2148. AD0 ir 0 kanāls un AD1 ir 1 kanāls
LPC2148 tapa |
ADC kanāla Nr |
P0.28 |
AD0.1 |
P0.29 |
AD0.2 |
P0.30 |
AD0.3 |
P0.25 |
AD0.4 |
P0.4 |
AD0.6 |
P0.5 |
AD0.7 |
P0.6 |
AD1.0 |
P0.8 |
AD1.1 |
P0.10 |
AD1.2 |
P0.12 |
AD1.3 |
P0.13 |
AD1.4 |
P0.15 |
AD1.5 |
P0.21 |
AD1.6 |
P0.22 |
AD1.7 |
ADC reģistri ARM7-LPC2148
Reģistrus izmanto, lai LPC2148 izmantotu A / D pārveidošanas funkciju.
Zemāk ir saraksts ar reģistriem, kurus LPC2148 izmanto A / D pārveidošanai
1. ADCR: analogās ciparu vadības reģistrs
Lietošana: Šis reģistrs tiek izmantots A / D pārveidotāja konfigurēšanai LPC2148
2. ADGDR: Analog to Digital Global Data Register
Lietošana: Šajā reģistrā A / D pārveidotājam ir GATAVS bits, un šeit tiek saglabāts pārveidošanas rezultāts.
3. ADINTERN: Analog to Digital Interrupt Enable Register
Lietošana: Šis ir Interrupt Enable reģistrs.
4. ADDR0 - ADDR7: analogo ciparu kanālu datu reģistrs
Lietošana: Šajā reģistrā ir A / D vērtība attiecīgajiem kanāliem.
5. ADSTAT: analogā digitālā statusa reģistrs.
Lietošana: Šajā reģistrā ir karogs DONE attiecīgajam ADC kanālam un OVERRUN karogs attiecīgajam ADC kanālam.
Šajā apmācībā mēs izmantosim tikai ADCR un ADGDR reģistrus. Apskatīsim sīkāk par viņiem
ADxCR reģistrējieties LPC2148
AD0CR un AD1CR attiecīgi 0 un 1 kanālam. Tas ir 32 bitu reģistrs. Zemāk esošajā tabulā norādīti bitu lauki ADCR reģistram.
31:28 |
27 |
26:24 |
23:22 |
21 |
20 |
19:17 |
16 |
15: 8 |
7: 0 |
REZERVĒTS |
EDGE |
SĀKT |
REZERVĒTS |
PDN |
REZERVĒTS |
CLKS |
BURST |
CLCKDIV |
SEL |
Apskatīsim, kā konfigurēt atsevišķus reģistrus
1. SEL: Bitus no (0 līdz 7) izmanto, lai izvēlētos kanālu ADC pārveidošanai. Katram kanālam tiek piešķirts viens bits. Piemēram, iestatot Bit-0, ADC tiks pārveidots ar AD0.1 paraugu. Un, iestatot bitu -1, būs AD0.1; līdzīgi iestatot bitu 7, tiks veikta AD0.7 pārveidošana. Svarīgs solis ir tas, ka mums ir PINSEL atbilstoši pieslēgvietai, kuru mēs izmantojam, piemēram, PINSEL0 for PORT0 PLC2148.
2. CLCKDIV: Biti no (8 līdz 15) ir paredzēti pulksteņa dalītājam. Šeit APB pulkstenis (ARM perifērās kopnes pulkstenis) tiek dalīts ar šo vērtību plus viens, lai izveidotu A / D pārveidotājam nepieciešamo pulksteni, kam jābūt mazākam vai vienādam ar 4,5 MHz, jo LPC2148 mēs izmantojam secīgas tuvināšanas metodi.
3. BURST: Bits 16 tiek izmantots BURST pārveidošanas režīmā.
1. iestatījums: ADC veiks konvertēšanu visiem kanāliem, kas atlasīti SEL bitos.
Iestatījums 0: atspējos BURST pārveidošanas režīmu.
4. CLCKS: Biti no (17 līdz 19) trim bitiem tiek izmantoti, lai izvēlētos izšķirtspēju un pulksteņu skaitu A / D pārveidošanai sērijveida režīmā, jo tas ir nepārtraukts A / D pārveidošanas režīms.
Bitu vērtība (no 17 līdz 19) |
Biti (precizitāte) |
Pulksteņa numurs |
000 |
10 |
11 |
001 |
9 |
10 |
010 |
8 |
9 |
011 |
7 |
8 |
100 |
6 |
7 |
101 |
5 |
6 |
110 |
4 |
5 |
111. |
3 |
4 |
5. PDN: Bits 21 ir paredzēts ADC izslēgšanas režīma izvēlei LPC2148.
- A / D ir PDN režīmā.
- A / D ir darba režīmā
6. START: Biti no (24 līdz 26) ir paredzēti START. Kad BURST pārveidošanas režīms ir izslēgts, iestatot 0, šie START biti ir noderīgi, lai sāktu A / D pārveidošanu. START tiek izmantots arī malu kontrolētai pārveidošanai. Tas ir tad, ja LPC2148 CAP vai MAT tapā ir ievads, A / D sāk pārveidot. Pārbaudīsim zemāk esošo tabulu
Bitu vērtība (no 24 līdz 26) |
LPC2148 tapas |
ADC funkcija |
000 |
Izmanto, lai iestatītu ADC PDN režīmā Nav sākuma |
|
001 |
Sāciet A / D pārveidošanu |
|
010 |
CAP0.2 / MAT0.2 |
Sāciet A / D pārveidošanu ar EDGE, kas atlasīts 27. tapā (Rising or Falling) uz LPC2148 CAP / MAT tapām |
011 |
CAP0.0 / MAT0.0 |
|
100 |
MAT0.1 |
|
101 |
MAT0.3 |
|
110 |
MAT1.0 |
|
111. |
MAT1.1 |
7. EDGE: 27 th bits ir EDGE tiek izmantota tikai tad, ja START mazliet satur 010-111. Tā sāk pārveidot, kad ir CAP vai MAT ievade, kuru varat redzēt iepriekš tabulā.
Iestatījums : 0 - On Falling Edge
1 - uz Rising Edge
ADxGDR: ADC globālais datu reģistrs
AD0GDR un AD1GDR attiecīgi ADC 0. kanālam un 1. ADC kanālam.
Tas ir 32 bitu reģistrs, kas satur A / D pārveidošanas REZULTĀTU, kā arī DONE bitu, kas norāda, ka A / D pārveidošana ir veikta. Zemāk esošajā tabulā norādīti bitu lauki ADGDR reģistram.
31 |
30 |
29:27 |
26:24 |
23:16 |
15: 6 |
5: 0 |
GATAVS |
PĀRSKRIT |
REZERVĒTS |
CHN |
REZERVĒTS |
REZULTĀTS |
REZERVĒTS |
1. REZULTĀTS: Šie biti (6 līdz 15) satur A / D pārveidošanas rezultātu izvēlētajam kanālam ADCR SEL reģistrā. Vērtība tiek nolasīta tikai pēc A / D konvertēšanas pabeigšanas, un to norāda bit DONE.
PIEMĒRS: 10 bitu ADC rezultātam saglabātā vērtība svārstās no (0 līdz 1023).
2. KANĀLS: šajos 24. līdz 26. bitā ir kanāla numurs, kuram tiek veikta A / D pārveidošana. Konvertētā digitālā vērtība ir bītā RESULT.
PIEMĒRS: 000 ir paredzēts ADC 0 kanālam, bet 001 - ADC 1 kanālam utt
3. pārsniegšana: 30 th mazliet par pārtēriņš tiek izmantota pārsprāgt režīmā. Iestatot 1. vērtību, iepriekšējā konvertētā ADC vērtība tiek pārrakstīta ar nesen konvertēto ADC vērtību. Kad reģistrs ir lasīts, tas notīra OVERRUN bitu.
4. GATAVS: 31. bits ir paredzēts DONE bitam.
1. komplekts: kad A / D pārveidošana ir pabeigta.
Set 0: Kad reģistrs ir lasīts un ADCR rakstīts.
Mēs esam redzējuši par svarīgiem reģistriem, kas tiek izmantoti ADC, LPC2148. Tagad ļauj sākt izmantot ADC ARM7.
Nepieciešamās sastāvdaļas
Aparatūra
- ARM7-LPC2148 mikrokontrolleris
- 3,3 V sprieguma regulatora IC
- 5V sprieguma regulatora IC
- 10K potenciometrs - 2 Nr
- LED (jebkura krāsa)
- LCD displejs (16X2)
- 9V akumulators
- Maizes dēlis
- Vadu savienošana
Programmatūra
- Keil uVision5
- Magic Flash rīks
Ķēdes shēma
Zemāk esošajā tabulā parādīti ķēdes savienojumi starp LCD un ARM7-LPC2148.
ARM7-LPC2148 |
LCD (16x2) |
P0.4 |
RS (Reģistrēties Atlasīt) |
P0.6 |
E (iespējot) |
P0.12 |
D4 (4. datu tapa) |
P0.13 |
D5 (5. datu tapa) |
P0.14 |
D6 (6. datu tapa) |
P0.15 |
D7 (7. datu tapa) |
Uzziniet vairāk par LCD izmantošanu ar ARM 7 - LPC2148.
SVARĪGI: Šeit mēs izmantojam divus sprieguma regulatora IC, vienu 5V LCD displejam un vēl 3,3 V analogai ieejai, ko var mainīt ar potenciometru.
Savienojumi starp 5V sprieguma regulatoru ar LCD un ARM7 Stick
5V sprieguma regulatora IC |
Pin funkcija |
LCD un ARM-7 LPC2148 |
1. Kreisā tapa |
+ Ve no akumulatora 9V ieejas |
NC |
2. Centra tapa |
- Ve no akumulatora |
LCD VSS, R / W, K ARM7 GND |
3. Labais tapa |
Regulēta + 5V izeja |
VDD, A LCD + 5 V no ARM7 |
Potenciometrs ar LCD
LCD displeja kontrasta mainīšanai tiek izmantots potenciometrs. Katliņam ir trīs tapas, kreisā tapa (1) ir savienota ar + 5V un centrālā daļa (2) pie LCD moduļa VEE vai V0, un labā tapa (3) ir savienota ar GND. Mēs varam pielāgot kontrastu, pagriežot pogu.
Savienojums starp LPC2148 un potenciometru ar 3,3 V sprieguma regulatoru
3.3V sprieguma regulatora IC |
Pin funkcija |
ARM-7 LPC2148 |
1. Kreisā tapa |
- Ve no akumulatora |
GND tapa |
2. Centra tapa |
Regulēta + 3,3 V izeja |
Potenciometra ieejai un potenciometra izejai uz P0.28 |
3. Labais tapa |
+ Ve no akumulatora 9V ieejas |
NC |
ARM7-LPC2148 programmēšana ADC
Lai ieprogrammētu ARM7-LPC2148, mums ir nepieciešams Keil uVision un Flash Magic rīks. Mēs izmantojam USB kabeli, lai programmētu ARM7 Stick, izmantojot mikro USB portu. Mēs rakstām kodu, izmantojot Keil, un izveidojam hex failu, un pēc tam HEX fails tiek flashed uz ARM7 stick, izmantojot Flash Magic. Lai uzzinātu vairāk par keil uVision un Flash Magic instalēšanu un to izmantošanu, sekojiet saitei Darba sākšana ar ARM7 LPC2148 mikrokontrolleru un ieprogrammējiet to, izmantojot Keil uVision.
Šajā apmācībā mēs pārveidojam analogo ieejas spriegumu (no 0 līdz 3,3 V) ciparu vērtībā, izmantojot ADC LPC2148 un parādām analogo spriegumu LCD displejā (16x2). Lai mainītu ieejas analogo spriegumu, tiks izmantots potenciometrs.
Lai uzzinātu vairāk par LCD saskarni ar ARM7-LPC2148 4 bitu režīmu, izmantojiet šo saiti.
Pilnīgs kods izmantot ADC ar ARM 7 tiek dota beigās šo pamācību, šeit mēs izskaidrot dažas daļas.
LPC2148-ADC programmēšanā iesaistītie soļi
1. PINSEL reģistrs tiek izmantots, lai atlasītu LPC2148 porta tapu un ADC funkciju kā analogo ieeju.
PINSEL1 = 0x01000000; // Atlasiet P0.28 kā AD0.1
2. Atlasiet pulksteņa un bitu precizitāti konvertēšanai, ierakstot vērtību ADxCR (ADC vadības reģistrs).
AD0CR = 0x00200402; // Konvertēšanai ADC darbību iestata kā 10 bitu / 11 CLK (000)
3. Sāciet konvertēšanu, ADxCR ierakstot vērtību START biti.
Šeit es esmu rakstījis 24 th mazliet AD0CR reģistra.
AD0CR = AD0CR - (1 << 24);
4. Tagad mums jāpārbauda atbilstošā ADxDRy (ADC datu reģistra) BATS (31.), kad tas mainās no 0 uz 1. Tāpēc mēs izmantojam while ciklu, lai pastāvīgi pārbaudītu, vai konvertēšana tiek veikta datu reģistra 31. bitā.
kamēr (! (AD0DR1 & 0x80000000));
5. Kad pabeigtais bits ir iestatīts uz 1, konvertēšana ir veiksmīga, pēc tam mēs nolasām rezultātu no tā paša ADC datu reģistra AD0DR1 un saglabājam vērtību mainīgajā.
adcvalue = AD0DR1;
Tālāk mēs izmantojam formulu, lai pārveidotu digitālo vērtību spriegumā un saglabātu mainīgajā nosauktajā spriegumā .
spriegums = ((adcvalue / 1023.0) * 3.3);
5. Digitālo vērtību (0 līdz 1023) parādīšanai pēc analogās uz ciparu pārveidošanas tiek izmantotas šādas rindas.
adc = adcvalue; sprintf (displayadc, "adcvalue =% f", adc); LCD_DISPLAY (displayadc); // Parādīt ADC vērtību (no 0 līdz 1023)
6. Turpmākās rindas tiek izmantotas, lai parādītu ieejas analogo spriegumu (no 0 līdz 3,3 V) pēc analogās uz ciparu pārveidošanas un pēc 5. darbības.
LCD_SEND (0xC0); sprintf (voltvērtība, "Spriegums =%. 2f V", spriegums); LCD_DISPLAY (voltvērtība); // Displejs (ieejas analogais spriegums)
7. Tagad mums LCD displejā jāparāda ieejas spriegums un digitālās vērtības. Pirms tam mums ir jāinicializē LCD displejs un jāizmanto atbilstošas komandas, lai nosūtītu ziņojumu.
Zemāk esošais kods tiek izmantots LCD inicializēšanai
void LCD_INITILIZE (void) // Funkcija, lai sagatavotos LCD { IO0DIR = 0x0000FFF0; // iestata tapu P0.12, P0.13, P0.14, P0.15, P0.4, P0.6 kā OUTPUT delay_ms (20); LCD_SEND (0x02); // Inicializēt LCD 4 bitu darbības režīmā LCD_SEND (0x28); // 2 rindas (16X2) LCD_SEND (0x0C); // Rādīt kursorā ārpus LCD_SEND (0x06); // Automātiskā pieauguma kursors LCD_SEND (0x01); // Parādīt skaidru LCD_SEND (0x80); // Pirmās rindas pirmā pozīcija }
Zemāk redzamais kods tiek izmantots, lai parādītu vērtības LCD
neesošu LCD_DISPLAY (char * msg) // funkcija drukāt rakstzīmes nosūta pa vienam { uint8_t i = 0; kamēr (msg! = 0) { IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0xF0) << 8)); // Nosūta augšējo nibble IO0SET = 0x00000050; // RS HIGH & ENABLE HIGH, lai drukātu datus IO0CLR = 0x00000020; // RW LOW Write mode delay_ms (2); IO0CLR = 0x00000040; // EN = 0, RS un RW nemainās (ti, RS = 1, RW = 0) kavēšanās_ ms (5); IO0PIN = ((IO0PIN & 0xFFFF00FF) - ((msg & 0x0F) << 12)); // Nosūta apakšējo nibble IO0SET = 0x00000050; // RS & EN AUGSTS IO0CLR = 0x00000020; kavēšanās_ms (2); IO0CLR = 0x00000040; kavēšanās_ms (5); i ++; } }
Zemāk funkcija tiek izmantota, lai izveidotu aizkavēšanos
void delay_ms (uint16_t j) // Funkcija aizkavēšanās veikšanai milisekundēs { uint16_t x, i; par (i = 0; i
Pilns kods ar demonstrācijas video ir norādīts zemāk.