< Homepage

Digitális/analóg konverter R-2R ellenálláslétrával

Összeraktam az alábbi kapcsolási rajz szerint működő D/A átalakítót, ami Arduino Mega-hoz használható. Az átalakítást egy ellenálláshálózat végzi, ami a pin-eken kiadott digitális feszültségszinteket binárisan súlyozva összegzi. wikipédia leírás

Kapcsolási rajz

A felhasznált ellenállások R=10kΩ±1% és 2R=20kΩ±1% értékűek, így csatornánként 8 darab R és 8 darab 2R kellett. Legrosszabb esetben minden ellenállás hibája 1%, ekkor az összes hiba durván becsülve 2%, ami log(1/0.02)/log(2)=5.6 bit pontosságot eredményezne. Véletlenszerűen megmérve néhány R-et 9.98, 9.94, 10.01, 9.98 kΩ-ot kaptam a szintén ±1% pontosságú multiméteremmel, ami alapján kb. 7 bites vagy jobb pontosságra számíthatunk. Ezen még egy kicsit tudunk javítani, ha az MSB bitekhez rakjuk a pontosabb ellenállásokat, mert azok számítanak bele az eredménybe a legnagyobb súllyal.

Arduino Mega pinout

Az Arduino Mega lábkiosztásából kiderül, hogy az A és a C port kimenetei sorrendben egymás mellett vannak, ezért én is ezt használtam a két csatornához, mert így a megvalósítás nagyon leegyszerűsödött. Így kaptam két 8-bites csatornát, amiket így lehet használni:

#define X PORTA
#define Y PORTC
DDRA = DDRC = 0xFF; //kimenet
//feltételezzük, hogy 5V a tápfeszültség
X = 127; //2.5V
Y = 214; //4.2V

DAC eleje

DAC hátulja

A két kimenet külön:

DAC az oszcilloszkóphoz csatlakoztatva

Ezután a pontosságot ellenőriztem egy olyan programmal, ami a két csatornát egyszerre növelte, így az oszcilloszkópon egy egyenes lesz látható. Ha itt hirtelen szakadás lenne a felénél, akkor az az MSB ellenállás nagy hibájára utalna. Ha negyedenként, akkor a második bit ellenállása tér el nagyon ... stb. (forráskód)

A rács felbontása a két képen 1V és 0.1V, a tápfeszültség kb. 4.8V (USB):

Mérés eredménye, felbontás: 1V/rács

Mérés eredménye, felbontás: 0.1V/rács


Kapcsolat: Email Github