KKM: 12-bit MCP4725 DAC breakout

Uvod

 

Mikrokontroleri kao i ostala računala rade sa digitalnim signalima zbog jednostavnog računanja i spremanja podataka, a kako je većina signala zapravo analognog oblika, potreban nam je sklop koji će digitalni signal pretvoriti u analogni. Željeni efekt dobit ćemo korištenjem ovog modula koji sadrži 12-bitni MCP4725 digitalno-analogni pretvornik (eng. DAC, digital-analog converter).
Za početak ćemo navesti neke karakteristike ovog modula, a zatim ćemo objasniti na koji način radi te kako ga spojiti i koristiti uz Croduino.

Karakteristike:
Napon: 2.7V - 5.5V
Rezolucija: 12 bita
Komunikacijsko sučelje: I2C
Dimenzije: 15 mm x 12 mm

 

Kako radi?

 

Modul je projektiran na način koji osigurava jednostavno korištenje i kompatibilnost sa eksperimentalnim pločicama te drugim modulima i kontrolerima u našoj ponudi. Na ovaj pretvornik šaljemo broj iz intervala od 0 - 4095, a na izlazu iz pretvornika dobivamo napon između 0V i VCC (napon napajanja). Zbog visoke rezolucije pretvornika, na izlazu možemo dobiti vrlo lijepe signale jer je razlika između dvije susjedne vrijednosti svega 1.22mV. Svi digitalno-analogni pretvarači rade na sljedećem principu. DAC-u šaljemo skup podataka koje on postupno pretvara u naponski signal na taj način da jedan podatak pretvori u ekivalentni napon na svome izlazu kojega drži konstantnim dok ne naiđe drugi podatak. Primjerice, ako bismo na DAC slali podatke 0->2048->0->2048->... , na izlazu bismo dobili pravokutni signal između nula volti i VCC/2. Ako želimo ostvariti složeniji analogni signal, poput sinusnog, na DAC moramo slati mnoštvo podataka (brojeva iz intervala 0-4095) koji se mijenjaju po sinusnoj funkciji. Na slici ispod vidimo vidimo sinusni valni oblik dobiven pomoću ovog modula. Ako smanjimo vremensku skalu tj. zumiramo signal, vidjet ćemo kako je on sačinjen od niza različitih vrijednosti.

 

Kako povezati?

 

Priključnice:
gnd: ground
VCC: napajanje 2.7V - 5.5V
SDA: serial data I2C
SCL: serial clock
Vout: izlazni napon

 

Kako bismo modul mogli koristiti s Croduinom potrebno je spojiti ga na način prikazan slikom.  Napajanje modula zbog jednostavnosti možemo ostvariti povezivanjem +5V pina na Croduinu i VCC pina na modulu. Gnd priključnica modula spaja se na jedan od dva gnd pina na Croduinu. Komunikacija se ostvaruje povezivanjem SDA pina na modulu sa A4 pinom na kontroleru, a SCL sa A5. Izlazne priključnice modula spojili smo na sondu osciloskopa kako bismo vam prikazali valni oblik napona.

 

 

Arduino kod

 

Kako bismo si olakšali korištenje modula koristit ćemo adafruit mcp4725 biblioteku koju možete pronaći na linku. Upute za instalaciju arduino biblioteka možete pronaći u ovome tutorijalu. Programski kod prikazuje kako pomoću Croduina i ovog DAC-a možemo ostvariti analogni sinusni signal kojemu možemo mijenjati frekvenciju i amplitudu.

 

#include "Adafruit_MCP4725.h"                      //Library za I2C komunikaciju
#include "Wire.h"        

Adafruit_MCP4725 dac;


#define DAC_RESOLUTION    (12)        //Odabir rezolucije pretvornika


void setup(void) {
  Serial.begin(9600);
  Serial.println("Hello!");

  dac.begin(0x64);             //adresu treba podesiti na 0x64 jer je tako sklopovski podešena

  Serial.println("Generating a sine wave");
}

void loop(void) {
  float t = 0.0f;
  float f = 240;    //odaberi frekvenciju
  float A = 1;    //odaberi amplitudu u voltima ( od nula do VCC/2 ), za napajanje od 5V biramo A između 0 i 2.5 V
  int wait;
  int out = 0;
  t = micros()/1000000.0;
  out = 2048 + 2048*A/2.5*sin(2*PI*f*t);
  if(out > 4095){
    out = 4095;    
  }

  dac.setVoltage(out, false);
  wait = racunajdelay(f);
  delayMicroseconds(wait);
}

int racunajdelay (int frekvencija){
  float T;
  T = 1000000/(frekvencija*4096);
  return T;
  }
Leave a Reply