الخميس، 20 يونيو، 2013

المقاومة المتغيرة الرقمية Digital Potentiometer

المقاومة المتغيرة الرقمية Digital Potentiometer

MCP41100 Digital Poteniometer


المقاومة المتغيرة potentiometer هي عنصر الكتروني غير فعّال نستطيع تغيير المقاومة عبرها , و لها استخدامات واسعة جداً حتى أننا لا نجد جهاز واحد يخلو منه هذا العنصر .

من أكثر استعمالات الشائعة للمقاومة المتغيرة :
1) تحديد التيار المار في الدوائر الكهربائية ..
2) التحكم في المضخمات العملياتية Amplifier .
3) كوحدة ادخال للتحكم بوظائف معينة اعتماداً على قراءتها , كالتحكم بالمحركات الكهربائية , او التحكم بشدة اضاءة باعث ضوئي LED .
قد يكون الشكل المألوف للمقاومة المتغيرة هو الشكل التماثلي Analoge  كما في الصورة .



لكن لو اردنا مثلاً عن طريق المتحكم الأصغري Microcontroller التحكم في قيمة هذه المقاومة المتغيرة ؟! فهذا سيكون صعباً مع  المقاومات المتغيرة التماثلية .

الحل يكون هنا باستخدام مقاومة متغيرة رقمية , شكلها على شكل دارة متكاملة IC .



توزيع ارجلها كالآتي 



يمكنك الأطلاع على النشرة الفنية Datasheet لهذه القطعة من هنا حيث ستجد فيها الكثير من المعلومات المفيدة .

من أهم الامور التي يجب معرفتها لهذه القطعة أن الحساسية Sensitivity هي 8bit اي ممكن ان تعطينا 255 قيمة مختلفة للمقاومة المتغيرة ! هذا ممتاز للغاية .

يتم برمجة هذه القطعة باستخدام البروتوكول SPI يمكنك الاطلاع عليه من هذا الرابط .

ما سنحتاجه لتنفيذ هذه التجربة :

1) بطاقة اردوينو 
2) المقاومة المتغيرة الرقمية MCP41100 
3) اسلاك توصيل .
4) مقاومة 100 اوم
5)باعث ضوئي LED .
6) BreadBoard .

طريقة التوصيل :



كيفية حساب المقاومة الناتجة ؟ 

هذا الجدول يبين كيفية حساب المقاومة الناتجة .

مثلاً لو كان الأمر الذي اعطيناه من الأردوينو هو 0xDE او 222 بالنظام العشري , و على اعتبار اننا نستخدم MCP41100 الذي مقاومته العظمى 100K ohm ومقاومة المنزلفة wiper  هو 125 اوم فسيكون المقاومة الناتجة هي تقريباً 13.41 كيلو اوم .




الكود :

سنكتب الآن كود يقوم على تقليل المقاومة تدريجياً الى  صفر تقريباً ثم زيادتها مرة أخرى , و الباعث الضوئي LED المربوط مع المقاومة الرقمية المتغيرة ستزيد شدة اضاءته و تخفت حسب قيمة المقاومة الرقمية المتغيرة. 
/*
 this program taken from arduino Example .
  modified by By Mohannad Rawashdeh
  http://www.genotronex.com
  This code used to control the digital potentiometer 
  MCP41100 connected to  arduino Board
  CS >>> D10 
  SCLK >> D13
  DI  >>> D11
  PA0 TO VCC
  PBO TO GND
  PW0 TO led with resistor 100ohm .
*/
#include <SPI.h>
 
const int slaveSelectPin = 10;
 
void setup()
{
  pinMode (slaveSelectPin, OUTPUT);
  SPI.begin();
  // adjust high and low resistance of potentiometer
  // adjust Highest Resistance .
   digitalPotWrite(0x00);
   delay(1000);
   
      // adjust  wiper in the  Mid point  .
   digitalPotWrite(0x80);
   delay(1000);

   // adjust Lowest Resistance .
   digitalPotWrite(0xFF);
   delay(1000);
}
 
void loop()
{
    for (int level = 0; level <= 255; level++)
    {
      digitalPotWrite(level);
      delay(10);
    }
    delay(500);
    for (int level = 255; level >= 0; level--)
    {
      digitalPotWrite(level);
      delay(10);
    }
}
 
int digitalPotWrite(int value)
{
  digitalWrite(slaveSelectPin, LOW);
  SPI.transfer(0x11);
  SPI.transfer(value);
  digitalWrite(slaveSelectPin, HIGH);
}

الخرج على جهاز راسم الاشارة Oscillscope .

و هذا الفيديو يوضح نتيجة تطبيق البرنامج .


3 التعليقات :

  1. السلام عليكم
    شكرا ع هذا المشروع الذي احتاجه بشدة للتحكم بسرعة محرك تيار مستمر عن طريق الأردوينو
    ولكن اذا كان سيريال SPI يوجد به قطعة اخرى على نفس البنات ! هل نضيف بن آخر لتمييز العنوان؟ وكيف؟
    وشكرا جزيلا ،،،

    ردحذف
  2. السلام عليكم
    شكرا ع هذا المشروع الذي احتاجه بشدة للتحكم بسرعة محرك تيار مستمر عن طريق الأردوينو
    ولكن اذا كان سيريال SPI يوجد به قطعة اخرى على نفس البنات ! هل نضيف بن آخر لتمييز العنوان؟ وكيف؟
    وشكرا جزيلا ،،،

    ردحذف
    الردود
    1. اذا كان SPI Device اخر فيجب وصل MOSI, MISO, SCLK و فقط تغيير ال CS بالأردوينو اونو مثلاً ممكن ان يكون D10 او D4

      لا يجوز توصيل ال SPI و قطعه لا تستخدم عذا البروتوكول على نفس المداخل لانه لن يعمل بشكل صحيح

      حذف

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