- MCP4921 DAC (digitálny na analógový prevodník)
- Súčasti sú povinné
- Schematické
- Vysvetlenie kódu
- Testovanie digitálno-analógovej konverzie pomocou PIC
Digitálne a analógové je neoddeliteľnou súčasťou elektroniky. Väčšina zariadení má ADC aj DAC a používajú sa v prípade potreby prevodu signálov z analógového na digitálny alebo digitálneho na analógový. Aj signály z reálneho sveta, ako je zvuk a svetlo, sú v podstate analógové, takže kedykoľvek je potrebné tieto signály z reálneho sveta použiť, musia sa digitálne signály previesť na analógové, napríklad na produkciu zvuku pomocou reproduktorov alebo na riadenie zdroja svetla.
Ďalším typom DAC je pulzný šírkový modulátor (PWM). PWM berie digitálne slovo a generuje digitálny impulz s premenlivou šírkou impulzu. Keď tento signál prejde filtrom, bude výsledok čisto analógový. Analógový signál môže obsahovať viac druhov údajov.
V tomto výučbe prepojíme DAC MCP4921 s Microchip PIC16F877A pre digitálnu na analógovú konverziu.
Tu v tomto návode prevedieme digitálny signál na analógový a zobrazíme vstupnú digitálnu hodnotu a výstupnú analógovú hodnotu na displeji 16 x 2 LCD. Poskytuje 1V, 2V, 3V, 4V a 5V ako konečný analógový výstup, čo je demonštrované na videu na konci. O DAC sa môžete ďalej dozvedieť v našom cennom návode na prepojenie DAC s doskami Raspberry Pi, Arduino a STM32.
DAC je možné použiť v mnohých aplikáciách, ako je napríklad riadenie motora, jas LED svetiel, zvukový zosilňovač, kódovanie videa, systémy na zber dát atď. Pred priamym prechodom na prepojenú časť je dôležité mať prehľad o MCP4921.
MCP4921 DAC (digitálny na analógový prevodník)
MCP4921 je 12 bitový DAC, takže MCP4921 poskytne 12 bitov výstupného rozlíšenia. Rozlíšenie DAC znamená počet digitálnych bitov, ktoré možno previesť na analógový signál. Koľko hodnôt z toho môžeme dosiahnuť, je založené na vzorci. Pre 12-bit je to = 4096. To znamená, že DAC s 12-bitovým rozlíšením môže produkovať 4096 rôznych výstupov.
Pomocou tejto hodnoty je možné ľahko vypočítať jediné analógové krokové napätie. Na výpočet krokov je potrebné referenčné napätie. Pretože logické napätie pre zariadenie je 5V, krokové napätie je 5/4095 (4096-1, pretože východiskový bod pre digitál nie je 1, je 0), čo je 0,00122100122 milivoltov. Takže zmena o 1 bit zmení analógový výstup s 0,00122100122.
Takže to bola konverzná časť. MCP4921 je 8-pin IC. Kolík diagram a popis je uvedený nižšie.
MCP4921 IC komunikuje s mikrokontrolérom protokolom SPI. Pre komunikáciu SPI musí byť zariadenie master, ktoré odosiela dáta alebo príkazy externému zariadeniu pripojenému ako slave. V komunikačnom systéme SPI možno k jednému hlavnému zariadeniu pripojiť viac podradených zariadení.
Pri odosielaní údajov a príkazu je dôležité porozumieť registru príkazov.
Na nasledujúcom obrázku je zobrazený register príkazov,
Register príkazov je 16-bitový register. Pre konfiguračný príkaz sa používa bit-15 až bit-12. Zadaný údaj a konfigurácia sú zreteľne znázornené na obrázku vyššie. V tomto projekte bude MCP4921 použitý ako nasledujúca konfigurácia
Číslo bitu |
Konfigurácia |
Hodnota konfigurácie |
Bit 15 |
DAC A |
0 |
Bit 14 |
Bez vyrovnávacej pamäte |
0 |
Bit 13 |
1x (V OUT * D / 4096) |
1 |
Bit 12 |
Bit riadenia výstupného výkonu |
1 |
Takže binárna hodnota je 0011 spolu s údajmi, ktoré sú určené bitmi D11 až D0 registra. Je potrebné odoslať 16-bitové dáta 0011 xxxx xxxx xxxx, kde prvé 4 bity MSB sú konfigurácia a zvyšok sú LSB. Bude to jasnejšie po zobrazení časovacieho diagramu príkazu na zápis.
Podľa časovacieho diagramu a údajového listu je pin CS nízky po celú dobu zápisu príkazu do MCP4921.
Teraz je čas prepojiť zariadenie s hardvérom a zapisovať kódy.
Súčasti sú povinné
Pre tento projekt sú potrebné nasledujúce komponenty -
- MCP4921
- PIC16F877A
- 20 MHz kryštál
- Displej LCD s rozmermi 16 x 2 znakov.
- 2k rezistor -1 ks
- Kondenzátory 33pF - 2 ks
- 4,7k rezistor - 1 ks
- Multimetr na meranie výstupného napätia
- Nepál
- Napájanie 5 V, Telefónna nabíjačka môže fungovať.
- Veľa prepojovacích alebo berg drôtov.
- Programovacie prostredie pre mikročipy s programátorskou súpravou a IDE s kompilátorom
Schematické
Schéma zapojenia DAC4921 s mikrokontrolérom PIC je uvedená nižšie:
Obvod je skonštruovaný v poli Breadboard-
Vysvetlenie kódu
Kompletný kód na prevod digitálnych signálov na analógové s PIC16F877A je uvedený na konci článku. Ako vždy, najskôr musíme nastaviť konfiguračné bity v mikrokontroléri PIC.
// Nastavenia konfiguračného bitu PIC16F877A // Príkazy na konfiguráciu zdrojového riadku „C“ // CONFIG #pragma config FOSC = HS // Bity výberu oscilátora (HS oscilátor) #pragma config WDTE = VYP // Watchdog Timer Enable bit (WDT disabled) # pragma config PWRTE = VYPNUTO // Časovač zapnutia povolený bit (PWRT deaktivovaný) #pragma config BOREN = ZAPNUTÝ // Brown-out Reset Povolený bit (povolený BOR) #pragma config LVP = VYPNUTÉ // Nízke napätie (jedno napájanie)) Povolený bit sériového programovania v obvode (pin RB3 / PGM má funkciu PGM; programovanie nízkeho napätia je povolené) #pragma config CPD = VYP // Bit ochrany dátového kódu EEPROM (ochrana kódu EEPROM dát vypnutá) #pragma config WRT = VYPNUTO // Zápis do pamäte Flash programu Povolenie bitov (ochrana proti zápisu vypnutá; do pamäte programu môže byť zapisovaná pomocou ovládacieho prvku EECON) #pragma config CP = VYPNUTO // Bit kódu ochrany kódu programovej pamäte (ochrana kódu vypnutá)
Nižšie uvedené riadky kódu sa používajú na integráciu súborov hlavičiek LCD a SPI, deklaruje sa tiež frekvencia XTAL Frequency a DAC CS pin.
Výukový program a knižnicu PIC SPI nájdete na danom odkaze.
#include
Funkcia SPI_Initialize_Master () je mierne upravená pre inú konfiguráciu požadovanú pre tento projekt. V tomto prípade je register SSPSTAT nakonfigurovaný takým spôsobom, že vstupné údaje vzorkované na konci výstupného času údajov a tiež hodiny SPI nakonfigurované ako vysielanie sa vyskytnú pri prechode z aktívneho do režimu stavu nečinnosti hodín. Ostatné sú rovnaké.
void SPI_Initialize_Master () { TRISC5 = 0; // Nastaviť ako výstup SSPSTAT = 0b11000000; // str. 74/234 SSPCON = 0b00100000; // str. 75/234 TRISC3 = 0; // Nastaviť ako výstup pre režim slave }
Taktiež pre nasledujúcu funkciu je SPI_Write () mierne upravená. K prenosu údajov dôjde po vyčistení vyrovnávacej pamäte, aby sa zabezpečil dokonalý prenos údajov cez SPI.
void SPI_Write (char incoming) { SSPBUF = incoming; // Údaje zadané používateľom zapíšete do medzipamäte while (! SSPSTATbits.BF); }
Dôležitou súčasťou programu je ovládač MCP4921. Je to mierne zložitá časť, pretože príkaz a digitálne údaje sú razené dohromady, aby poskytovali úplné 16-bitové údaje cez SPI. Táto logika je však jasne uvedená v komentároch ku kódu.
/ * Táto funkcia slúži na prevod digitálnej hodnoty na analógovú. * / void convert_DAC (unsigned int value) { / * Veľkosť kroku = 2 ^ n, preto 12bit 2 ^ 12 = 4096 Pre referenciu 5V bude krok 5/4095 = 0,0012210012210012V alebo 1mV (približne) * / nepodpísaný int kontajner; unsigned int MSB; nepodpísaný int LSB; / * Krok: 1, uloženie 12-bitových údajov do kontajnera Predpokladajme, že dáta sú 4095, v binárnom formáte 1111 1111 1111 * / container = value; / * Krok: 2 Vytvorenie figuríny s 8 bitmi. Takže delením 256 sa zachytia horné 4 bity v LSB LSB = 0000 1111 * / LSB = kontajner / 256; / * Krok: 3 Odoslanie konfigurácie pomocou dierovania 4-bitových údajov. LSB = 0011 0000 ALEBO 0000 1111. Výsledok je 0011 1111 * / LSB = (0x30) - LSB; / * Krok: 4 Kontajner má stále hodnotu 21 bitov. Vyberanie spodných 8 bitov. 1111 1111 A 1111 1111 1111. Výsledok je 1111 1111, čo je MSB * / MSB = 0xFF & container; / * Krok: 4 Odoslanie 16-bitových údajov rozdelením na dva bajty. * / DAC_CS = 0; // CS je počas prenosu dát nízka. Podľa údajového listu sa vyžaduje SPI_Write (LSB); SPI_Write (MSB); DAC_CS = 1; }
V hlavnej funkcii sa používa slučka „for loop“, kde sa vytvárajú digitálne údaje na vytváranie výstupu 1 V, 2 V, 3 V, 4 V a 5 V. Digitálna hodnota sa počíta proti výstupnému napätiu / 0,0012210012210012 milivoltov.
void main () { system_init (); úvodná obrazovka (); int číslo = 0; int volt = 0; while (1) { for (volt = 1; volt <= MAX_VOLT; volt ++) { number = volt / 0,0012210012210012; clear_screen (); lcd_com (FIRST_LINE); lcd_puts ("DATA Sent: -"); lcd_print_number (číslo); lcd_com (SECOND_LINE); lcd_puts ("Výstup: -"); lcd_print_number (volt); lcd_puts ("V"); convert_DAC (číslo); __delay_ms (300); } } }
Testovanie digitálno-analógovej konverzie pomocou PIC
Zabudovaný obvod sa testuje pomocou multimetra. Na obrázkoch nižšie je výstupné napätie a digitálne údaje zobrazené na LCD displeji. Multimetr ukazuje blízke čítanie.
Kompletný kód s pracovným videom je priložený nižšie.