- MCP4921 DAC (digitālais uz analogo pārveidotāju)
- Nepieciešamās sastāvdaļas
- Shematisks
- Kods Paskaidrojums
- Digitālās analogas pārveidošanas pārbaude, izmantojot PIC
Digitālais un analogais ir neatņemama elektronikas sastāvdaļa. Lielākajai daļai ierīču ir gan ADC, gan DAC, un tās tiek izmantotas, ja ir nepieciešams pārveidot signālus vai nu no analogajiem uz digitālajiem, vai digitālajiem uz analogajiem. Arī reālās pasaules signāli, piemēram, skaņa un gaisma, pēc savas būtības ir analogi, tāpēc, kad vien šie reālās pasaules signāli ir jāizmanto, digitālie signāli ir jāpārvērš analogos, piemēram, lai radītu skaņu, izmantojot skaļruņus, vai lai kontrolētu gaismas avotu.
Cits DAC veids ir pulsa platuma modulators (PWM). PWM paņem digitālu vārdu un ģenerē digitālu impulsu ar mainīgu impulsa platumu. Kad šis signāls tiek izlaists caur filtru, rezultāts būs tīri analogs. Analogajā signālā signālā var būt vairāki datu veidi.
Šajā apmācībā mēs saskarnēs DAC MCP4921 ar Microchip PIC16F877A digitālajai analogai pārveidošanai.
Šeit šajā apmācībā mēs pārveidosim digitālo signālu analogajā signālā un parādīsim ieejas digitālo vērtību un izejas analogo vērtību 16x2 LCD ekrānā. Tas nodrošinās 1V, 2V, 3V, 4V un 5V kā galīgo analogo izeju, kas parādīta beigās sniegtajā video. Jūs varat uzzināt vairāk par DAC mūsu dārgajā apmācībā par DAC saskarni ar Raspberry Pi, Arduino un STM32 dēļiem.
DAC var izmantot daudzās lietojumprogrammās, piemēram, motora vadībā, LED apgaismojuma vadības spilgtumā, audio pastiprinātājā, video kodētājos, datu iegūšanas sistēmās utt. Pirms pāriet tieši uz saskarnes daļu, ir svarīgi, lai būtu pārskats par MCP4921.
MCP4921 DAC (digitālais uz analogo pārveidotāju)
MCP4921 ir 12 bitu DAC, tāpēc MCP4921 nodrošinās 12 bitu izejas izšķirtspēju. DAC izšķirtspēja nozīmē digitālo bitu skaitu, kurus var pārveidot par analogo signālu. Tas, cik daudz vērtību mēs no tā varam sasniegt, ir balstīts uz formulu. 12 bitu gadījumā tas ir = 4096. Tas nozīmē, ka 12 bitu izšķirtspēja DAC varētu radīt 4096 dažādas izejas.
Izmantojot šo vērtību, var viegli aprēķināt viena analogā pakāpiena spriegumu. Lai aprēķinātu darbības, ir nepieciešams atskaites spriegums. Tā kā ierīces loģiskais spriegums ir 5 V, pakāpiena spriegums ir 5/4095 (4096-1, jo ciparu sākuma punkts nav 1, tas ir 0), kas ir 0,00122100122 milivolti. Tātad, mainot 1 bitu, analogā izeja tiks mainīta ar 0.00122100122.
Tā bija konversijas daļa. MCP4921 ir 8-pin IC. Pin diagramma un aprakstu var atrast zemāk.
MCP4921 IC sazinās ar mikrokontrolleru ar SPI protokolu. Lai sazinātos ar SPI, ierīcei jābūt galvenajai, kas iesniedz datus vai komandu ārējai ierīcei, kas savienota kā vergs. SPI sakaru sistēmā ar vienu galveno ierīci var savienot vairākas vergu ierīces.
Lai iesniegtu datus un komandu, ir svarīgi saprast komandu reģistru.
Zemāk redzamajā attēlā ir parādīts komandu reģistrs,
Komanda reģistrs ir 16 bitu reģistrā. Bit-15 līdz bit-12 tiek izmantoti konfigurācijas komandai. Datu ievadīšana un konfigurācija ir skaidri parādīta iepriekš redzamajā attēlā. Šajā projektā MCP4921 tiks izmantota kā šāda konfigurācija-
Bitu skaits |
Konfigurācija |
Konfigurācijas vērtība |
15. bits |
DAC |
0 |
14. bits |
Nav buferēts |
0 |
13. bits |
1x (V OUT * D / 4096) |
1 |
12. bits |
Izejas izslēgšanas vadības bits |
1 |
Tātad binārā vērtība ir 0011 kopā ar datiem, kurus nosaka reģistra D11 līdz D0 biti. 16 bitu dati 0011 xxxx xxxx xxxx jāiesniedz, kur pirmie 4 MSB biti ir konfigurācija, bet pārējie ir LSB. Tas būs skaidrāk, redzot rakstīšanas komandu laika shēmu.
Saskaņā ar laika shēmu un datu lapu CS piespraude ir zema visu komandu rakstīšanas periodu MCP4921.
Tagad ir pienācis laiks saskarnei pievienot ierīci aparatūrai un rakstīt kodus.
Nepieciešamās sastāvdaļas
Šim projektam ir nepieciešami šādi komponenti:
- MCP4921
- PIC16F877A
- 20 MHz kristāls
- Displejs 16x2 rakstzīmju LCD.
- 2k rezistors -1 gab
- 33pF kondensatori - 2 gab
- 4.7k rezistors - 1 gab
- Daudzmetrs izejas sprieguma mērīšanai
- Maizes dēlis
- 5V barošanas avots, var darboties tālruņa lādētājs.
- Daudz pieslēguma vadu vai bergu vadu.
- Mikroshēmu programmēšanas vide ar Programmētāja komplektu un IDE ar kompilatoru
Shematisks
Ķēdes shēma DAC4921 saskarnei ar PIC mikrokontrolleru ir sniegta zemāk:
Ķēde ir izveidota maizes plātnē
Kods Paskaidrojums
Complete kods, lai pārveidotu ciparu signālu analogajā ar PIC16F877A ir dota beigās rakstu. Kā vienmēr, vispirms mums jāiestata konfigurācijas biti PIC mikrokontrollerī.
// PIC16F877A konfigurācijas bitu iestatījumi // 'C' avota rindas konfigurācijas paziņojumi // CONFIG #pragma config FOSC = HS // oscilatora izvēles biti (HS oscilators) #pragma config WDTE = OFF // sargsuņa taimeris Iespējot bitu (WDT atspējots) # pragma config PWRTE = OFF // Ieslēgšanas taimera iespējošanas bits (PWRT atspējots) # pragma config BOREN = ON // Brown-out Reset Enable bit (BOR iespējots) #pragma config LVP = OFF // Zemspriegums (Single-Supply)) Iekārtas sērijveida programmēšanas iespējošanas bits (RB3 / PGM tapai ir PGM funkcija; iespējota zemsprieguma programmēšana) #pragma config CPD = OFF // Data EEPROM atmiņas koda aizsardzības bits (datu EEPROM koda aizsardzība izslēgta) #pragma config WRT = IZSLĒGTS // Flash programmas atmiņas rakstīšanas iespējošanas biti (ierakstīšanas aizsardzība izslēgta; visu programmas atmiņu var ierakstīt ar EECON vadības palīdzību) #pragma config CP = OFF // Flash programmas atmiņas koda aizsardzības bits (koda aizsardzība izslēgta)
Zemāk esošās koda rindas tiek izmantotas, lai integrētu LCD un SPI galvenes failus, kā arī tiek deklarēts XTAL frekvence un DAC CS pin savienojums.
PIC SPI apmācība un bibliotēka ir atrodama norādītajā saitē.
# iekļaut
Funciton SPI_Initialize_Master () ir nedaudz modificēts citai konfigurācijai, kas nepieciešama šim projektam. Šajā gadījumā SSPSTAT reģistrs ir konfigurēts tā, ka ievades dati, no kuriem ņemti paraugi datu izejas laika beigās, un arī SPI pulkstenis, kas konfigurēts kā Pārraide, notiek pārejā no aktīvā uz gaidīšanas laika režīmu. Cits ir tas pats.
void SPI_Initialize_Master () { TRISC5 = 0; // Iestatīt kā izvadi SSPSTAT = 0b11000000; // pp 74/234 SSPCON = 0b00100000; // pp 75/234 TRISC3 = 0; // Iestatīt kā izvadi vergu režīmam }
Arī zemāk redzamajai funkcijai SPI_Write () ir nedaudz modificēts. Datu pārraide notiks pēc bufera notīrīšanas, lai nodrošinātu perfektu datu pārraidi, izmantojot SPI.
void SPI_Write (char ienākošā) { SSPBUF = ienākošā; // Ierakstiet lietotāja norādītos datus buferī while (! SSPSTATbits.BF); }
Svarīga programmas daļa ir MCP4921 draiveris. Tā ir nedaudz sarežģīta daļa, jo komanda un digitālie dati tiek salikti kopā, lai nodrošinātu pilnīgus 16 bitu datus, izmantojot SPI. Tomēr šī loģika ir skaidri parādīta koda komentāros.
/ * Šī funkcija ir paredzēta digitālās vērtības pārvēršanai analogajā. * / void convert_DAC (neparakstīta int vērtība) { / * soļa lielums = 2 ^ n, tāpēc 12 bitu 2 ^ 12 = 4096 5V atsauces gadījumā solis būs 5/4095 = 0,0012210012210012V vai 1 mV (aptuveni) * / neparakstīts int konteiners; neparakstīts starp MSB; neparakstīts int LSB; / * Solis: 1, saglabājot 12 bitu datus konteinerā. Pieņemsim, ka dati ir 4095, binārā 1111 1111 1111 * / container = vērtība; / * Solis: 2 8 bitu manekena izveide. Tātad, dalot 256, augšējie 4 biti tiek uztverti LSB LSB = 0000 1111 * / LSB = konteiners / 256; / * Solis: 3 Konfigurācijas nosūtīšana ar 4 bitu datu perforēšanu. LSB = 0011 0000 VAI 0000 1111. Rezultāts ir 0011 1111 * / LSB = (0x30) - LSB; / * Solis: 4 konteineram joprojām ir 21 bitu vērtība. Izņemot apakšējos 8 bitus. 1111 1111 UN 1111 1111 1111. Rezultāts ir 1111 1111, kas ir MSB * / MSB = 0xFF & container; / * Solis: 4 16 bitu datu nosūtīšana, dalot tos divos baitos. * / DAC_CS = 0; // datu pārraides laikā CS ir maz. Saskaņā ar datu lapu ir nepieciešams SPI_Write (LSB); SPI_Write (MSB); DAC_CS = 1; }
Galvenajā funkcijā tiek izmantots “for loop”, kur tiek izveidoti digitālie dati 1V, 2V, 3V, 4V un 5V izejas radīšanai. Digitālā vērtība tiek aprēķināta, ņemot vērā izejas spriegumu / 0,0012210012210012 milivoltu.
void main () { system_init (); ievads_ekrāns (); int skaitlis = 0; int volt = 0; kamēr (1) { par (volts = 1; volts <= MAX_VOLT; volts ++) { skaitlis = volt / 0,0012210012210012; notīrīt_ekrānu (); lcd_com (FIRST_LINE); lcd_puts ("Nosūtītie dati: -"); lcd_print_number (numurs); lcd_com (SECOND_LINE); lcd_puts ("Izeja: -"); lcd_print_number (volt); lcd_puts ("V"); konvertēt_DAC (skaitlis); __kavēšanās_ms (300); } } }
Digitālās analogas pārveidošanas pārbaude, izmantojot PIC
Uzbūvētā shēma tiek pārbaudīta, izmantojot daudzmetru. Zemāk redzamajos attēlos izejas spriegums un digitālie dati tiek parādīti LCD. Daudzmetrs rāda ciešu lasījumu.
Zemāk ir pievienots pilnīgs kods ar darba video.