الاثنين، 10 فبراير، 2014

المبدل الرقمي التشابهي DAC في الأردوينو ديو

المبدل الرقمي التشابهي  DAC في الأردوينو ديو 




في لوحات الأردوينو التقليدية ذات الأصدار AVR يوجد فيها منافذ رقمية Digital و منافذ تماثلية Analog .

يمكننا من خلال المنافذ التماثلية من قراءة الحساسات , لكن هل بأمكانها أعطاءنا فولتيات متغيرة كما يتصور البعض ! بأمكانك تجريب ذلك , هل تستطيع الحصول على فولتية ثابته "مثلاً 2.6 فولت " من أحد المداخل التماثلية في الأردوينو " A0-A5 في الأردوينو أونو UNO " ؟!


ببساطة لن تستطيع ذلك , لأنك ستحتاج لشيء يسمى مبدل رقمي - تماثلي DAC و هو ما لا يتوافر في أغلب بطاقات ال AVR التي تعمل الأردوينو عليها .




الحل يكمن بأردوينو ديو ARDUINO DUE ففي هذه البطاقة الألكترونية التي تعتمد على معالج ARM Cortex M3 يوجد فيها وحدة تبديل رقمي - تماثلي ADC مدمجة داخلياً , و تستطيع اعطاءنا فولتيات مختلفة و ايضاً اعطاءنا اشارات Waveform مختلفة "sine , triangle,saw tooth " .

هناك مدخلين مخصصين لهذا المبدل DAC0 , DAC1  




بشكل عام نستطيع توليد أشارات متغيرة Wavform عن طريقهما بفولتية Peak-peak تصل ل 3 فولت تقريباً .

ما سنقوم بتوليده هو أشارة جيبية Sine wave  .

ما سنحتاجه لتنفيذ التجربة :
1) بطاقة أردوينو ديو Arduino DUE فقط .





البرنامج :
int led = 31;
//1kHz
int sine[] = {2048,2305,2557,2802,3034,3251,3449,3625,3777,3901,3995,4059,4092,4092,4060,3996,3902,3778,3628,3452,3254,3037,2805,2560,2308,2051,1795,1542,1297,1065,847,649,473,321,197,102,37,4,4,35,99,193,316,466,642,839,1056,1288,1533,1785,2041};

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);   
  pinMode(DAC0, OUTPUT);   
}

// the loop routine runs over and over again forever:
void loop() {
  for(int i = 0; i<50;i++){
      if(sine[i]>4095) {
         sine[i]=4095;
         digitalWrite(led, LOW);
     }
    analogWriteResolution(12);
    analogWrite(DAC0, sine[i]);
    delayMicroseconds(14);
  }
}
//................



هذا البرنامج سيولد موجه جيبية بتردد 1khz

ممتاز يمكن ايضاً توليد اشارة مثلثية triangle , عن طريق هذا البرنامج :


// triangle waveform generator
// for arduino DUE 
//Written by : Mohannad Rawashdeh
//http://www.genotronex.com/
//......................................
int Resolution=12;
int res_value=(2^Resolution)-1;
void setup()
{
 analogWriteResolution(Resolution); // 12-bit!
}

void draw_triangle(){
 for(int i=0; i<res_value; i++) 
 {
 analogWrite(DAC0, i); // use DAC1 for ... DAC1
 }
 for(int i=res_value; i>=0; i--) 
 {
 analogWrite(DAC0, i);
 } 
}
void loop() 
{
 draw_triangle();
}
يمكن توليد أغلب الموجات الأساسية , هذا مثلاً برنامج لتوليد اشارة منشارية Sawtooth
// SAWTOOTH waveform generator
// for arduino DUE 
//Written by : Mohannad Rawashdeh
//http://www.genotronex.com/
//......................................
int Resolution=12;
int res_value=(2^Resolution)-1;
void setup()
{
 analogWriteResolution(Resolution); // 12-bit!
}

void draw_Sawtooth(){
 for(int i=0; i<res_value; i++) 
 {
 analogWrite(DAC0, i); // use DAC1 for ... DAC1
 }
}
void loop() 
{
 draw_Sawtooth();
}


هذه التقنية مفيدة جداً و هي أحدى مزايا الأردوينو ديو الكثيرة .

يمكنك بناء مولد اشارة خاص فيك بسهولة .

0 التعليقات :

إرسال تعليق

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.