الصنّاع العرب

التحويل من تناظري (Analog) إلى رقمي (Digital)

العالم القياسي

تستطيع المتحكمات الدقيقة (microcontrollers) استخلاص الإشارات الرقمية الثنائية (وهما احدى قيمتين صفر أو واحد). كمثال هل الزّر مضغوط أم لا؟ هذا هو ما تعنيه الإشارات الرقمية.

إذا تم تغذية المتحكم الدقيق بجهد قيمته 5 فولت فإنه يفسر صفر فولت كقيمة ثنائية (صفر)، وخمسة فولت كقيمة ثنائية (واحد). ولكن ليس الأمر بهذه البساطة، وعادة ما يكون هناك تفاوت وتدرج في القيم. ماذا تعنى قيمة الإشارة إذا كانت 2.72 فولت؟ هل يعني ذلك أنها (صفر أم واحد)؟ غالباً ما تدفعنا الحاجة إلى قياس الإشارات المتغيرة، والتي تُسمى الإشارات التناظرية أو القياسية.

ربما يُعطى جهاز استشعار تناظري (قيمته 5 فولت) خرجاً 0.01 فولت أو 4.99 فولت أو قيمة بينهما. ولحسن الحظ عادة ما تُزود المتحكمات الدقيقة بجهاز مثبت داخلها والذي يسمح لنا بتحويل هذه الجهود إلى قيم يمكننا استخدامها فيما بعد في برنامج أخر لكي ينفذ أمراً ما.

وقبل التعرض للمحتوى، هناك بعض المفاهيم التي يجب معرفتها:

ما هو المحول التناظري الرقمي (ADC)؟

يعتبر المحول التناظري الرقمي سمة مميزة ومفيدة؛ حيث يقوم بتحويل القيمة التناظرية للجهد على أحد الوصلات إلى قيمة رقمية. وبتحويل القيم من العالم القياسي (التناظري) إلى العالم الرقمي؛ يمكننا البدء في استخدام الإلكترونيات في التواصل مع العالم الخارجي المحيط بنا.

ليس لكل منفذ على المتحكم الدقيق القدرة على التحويل من قيم تناظرية إلى قيم رقمية. فمثلاً في بطاقة أردوينو يُرمز لهذه المنافذ بالرمز (A) بالإضافة إلى رقم (من A0 إلى  (A5 وذلك للإشارة إلى أن هذه المنافذ تستطيع قراءة قيم الجهد التناظرية.

وبالنظر إلى المحول التناظري الرقمي نجد أنه يختلف بشكل كبير من متحكم الدقيق إلى آخر. فالمحول الرقمي التناظري على بطاقة أردوينو له سعة 10 خانات (10-bit)، بمعنى أن لديه القدرة على استخلاص 1024 (210) قيمة تناظرية منفصلة. البعض الآخر من المتحكمات الدقيقة تحتوي على محولات رقمية ذات ثمان خانات (28=256 قيمة تناظرية منفصلة)، والبعض لديه 16 خانة (216=65535 قيمة تناظرية منفصلة).

تعتبر الطريقة التي يعمل بها المحول التناظري الرقمي معقدة بعض الشيء، هناك طرق مختلفة ولكنها قليلة لتحقيق ذلك العمل المبهر (يمكنك قراءة تلك القائمة)، ولكن الطريقة الأكثر شيوعاً تستخدم قيم تناظرية للجهد لشحن مكثف داخلي ثم قياس الوقت الذي تستغرقه عملية تفريغ المكثف خلال المقاومات داخلية. يعمل المتحكم الدقيق على مراقبة عدد الدورات لعداد التوقيت والتي تتم إلى أن يتم تفريغ المكثف. عدد الدورات هو العدد الذي تتم إعادته بعد اكتمال عملية التحويل.

علاقة قيمة المحول الرقمي بالجهد

يُعطي المحول الرقمي قيمة نسبية، بمعنى أنه يفترض أن قيمة خمسة فولت تقابلها 1023، والقيم التي أقل من خمسة فولت، تأخذ قيماً نسبية فيما بين خمسة فولت و1023.

يعتمد التحويل من تناظري إلى رقمي على قيمة جهد النظام، وحيث أننا نستخدم محول رقمي بسعة عشر خانات الخاص ببطاقات أردوينو وجهد النظام قيمته 5 فولت؛ يمكننا تبسيط المعادلة السابقة كالتالي:

إذا كان نظامك يعمل بجهد 3.3 فولت، يمكنك ببساطة تغيير 5 فولت بالقيمة الجديدة للنظام والتي هي 3.3 فولت في المعادلة السابقة. إذا كان النظام 3.3 فولت والمحول التناظري الرقمي يُعطي قراءة 512، ماذا سيكون الجهد التناظري المُقاس؟ سيكون تقريبا 1.65 فولت.

أما إذا كان الفولت التناظري 2.12 فولت، ماذا ستكون قراءة المحول التناظري الرقمي؟

وبترتيب الحدود نجد أن:

المحول الرقمي سوف يعطي قيمة 434.

مثال على التحويل التناظري الرقمي باستخدام أردوينو

لتوضيح ذلك في العالم الحقيقي، سوف نستخدم أردوينو لقياس جهد تناظري. يمكننا استخدام مقاومة متغيرة، أو جهاز استشعار للضوء أو مُجزئ للجهد؛ وذلك لإنشاء مصدر للجهد. دعونا الآن نُنشئ دائرة بسيطة باستخدام مقاومة متغيرة.

قبل البدء، لابد من تعريف المنفذ كدخل، ولكي يتماشى ذلك مع الدائرة الموضحة سوف نستخدم (A3):

pinMode(A3, INPUT);

ثم نقوم بالتحويل من تناظري إلى رقمي باستخدام الأمر: analogRead()

لقراءة القيمة التناظرية على المنفذ (A3) ويضعها في القيمة (x)

int x = analogRead(A3);

تعود القيمة ويتم تخزينها في المعامل (x) وتكون قيمته ما بين 0 إلى 1023. المحول الرقمي الموجود ببطاقة أردوينو له سعة 10 أرقام ثنائية (بمعنى أن له 210 = 1024 قيمة تناظرية مقابلة). يتم تخزين تلك القيمة في النوع (int) لأن قيمة (x) أكبر من القيمة التي تستطيع الوحدة التخزينية (byte=8 bit) الاحتفاظ بها.

دعنا نضع تلك القيمة ونرى كيف تتغير:

Serial.print(“Analog value: “);
Serial.println(x);

وبتغير القيمة التناظرية، القيمة (x) سوف تتغير أيضا.

فعلى سبيل المثال، إذا كانت قيمة (x) هي 334، وسوف نستخدم أردوينو بجهد 5 فولت، ماذا ستكون قيمة الفولت الحقيقي؟

وبالقياس باستخدام مقياس متعدد (مالتيميتر)، والتأكد من قيمة الفولت، من المؤكد أنها ستكون 1.63 تقريبًا.

لقد صنعت للتو جهاز رقمي متعدد القياسات باستخدام “أردوينو”.

ربط الدوائر الكهربية مع بعضها

تخيل معي ماذا سوف يحدث إذا تم توصيل جهاز استشعار تناظري بمنفذ رقمي؟ لا شيء سيئ سوف يحدث، كل ما في الأمر أنك لن تستطيع تنفيذ الأمر analogRead.

سوف تحاول قراءة القيمة على الوصلة الرقمية 8، ولكنها لن تنجح

int x = analogRead(8);

سوف يعمل ذلك ولكن سوف يتم تخزين قيمة غير معلومة في العنصر (x).

وماذا سوف يحدث أيضًا إذا تم توصيل جهاز استشعار رقمي إلى وصلة تناظرية؟ لا شيء سيئ سوف يحدث أيضا.

إذا قمت بعمل تحويل من تناظري إلى رقمي على أحد الأزرار، من المحتمل أن ترى قيم المحول الرقمي قريبة جدا من 1023 (أو 5 فولت والتي تعنى 1 كقيمة ثنائية)، أو ربما تجدها قريبة جدًا من صفر ( أو صفر فولت والتي تعنى 0 كقيمة ثنائية ).

المصادر والمضي قدماً

يُعتبر التحويل من تناظري إلى رقمي شيء مهم يجب تعلمه، هذا وبعد أن أصبح لديك خلفية عن هذا المفهوم المهم، يُمكنك تفقد المشاريع وأجهزة الاستشعار التي تستفيد من ذلك المفهوم.

  • بعض أنواع مقاييس التسارع (accelerometers) والجيرسكوب (gyroscopes) (وهو جهاز يُستعان به على حفظ توازن السفينة أو الطائرة وعلى تحديد اتجاهها) لديها خرج تناظري والذي يجب أن يتم قراءته باستخدام المحول التناظري الرقمي للحصول على قيم يمكن استخدامها فيما بعد.
  • تعديل عرض النبضة (Pulse-width Modulation (PWM)) (سيتم شرحها في درس قريباً) هو خرج تناظري، والذي هو عكس الدخل التناظري.
  • شريحة INA169 والتي تسمح لنا باستشعار التيار باستخدام محول تناظري رقمي.
  • وباستخدام محول رقمي تناظري ومُجزئ جهد (voltage divider) يمكنك قراءة كل أنواع أجهزة الاستشعار والعناصر متغيرة القيمة مثل المقاومة المتغيرة، عصا التحكم، المقاومات المنزلقة، والمقاومة الحساسة للقوة وغيرها.
  • الدالة map() في بطاقات أردوينو.
  • المنافذ التناظرية في أردوينو.

تمّت ترجمة هذه المادّة من موقع sparkfun تحت تصريح كرييتف كومّونز 3 (Creative Commons 3.0)

عبدالله خيري

أضف تعليق

اترك رد

تابعنا