PWM: محاكاة المسامير التناظرية باستخدام لوحة Arduino

إشارات PWM

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

تعد هذه الأنواع من الإشارات عملية للغاية عندما لا ترغب فقط في استخدام إشارات رقمية عالية ومنخفضة ، أي 1 أو 0 ، وتشغيل وإيقاف ، ولكنك تريد أن تذهب أبعد من ذلك وتصف إشارات أكثر تعقيدًا إلى حد ما. على سبيل المثال ، من الممكن تعديل سرعة ملف محرك DC، أو شدة الضوء لملف لولبي ، إلخ.

التناظرية مقابل النظام الرقمي

التناظرية مقابل الإشارة الرقمية

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

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

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

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

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

التناظرية مقابل الإشارة الرقمية

يقال ، أ الإشارات التناظرية سيكون جهدًا أو تيارًا كهربائيًا يتغير بمرور الوقت وباستمرار. إذا تم رسمها ، ستكون الإشارة التناظرية عبارة عن موجة جيبية أحادية التردد.

أما بالنسبة لل الإشارات الرقمية، هو الجهد الذي يتغير تدريجيًا فيما يتعلق بالوقت. بمعنى ، إذا تم تمثيله على الرسم البياني ، فسيكون إشارة خطوة لا تتغير باستمرار ، ولكنها تتغير في الخطوات أو الزيادات المنفصلة.

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

من قبل مثال، مكبر صوت أو ميكروفون بإشارات تمثيلية تعمل مع بطاقة صوت ، أو بطاقات رسومية رقمية بها شريحة RAMDAC الشهيرة لمنافذ المراقبة التناظرية ... في Arduino ، يتم استخدام هذا النوع من المحولات أيضًا لمشاريع متعددة ، كما سنرى ...

ما هو PWM؟

دورة عمل الرسم

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

هذا مفيد ل اردوينو نظرًا لوجود العديد من الآليات أو المكونات الإلكترونية التي يمكنك إضافتها إلى مشاريعك وذاك ليست قادرة على توفير إشارة تناظرية حقيقية، لكنهم يستخدمون PWM للعمل. كما لا يمكنهم استخدام إشارة تناظرية محددة ، أي أنها تذهب إلى قفزات الجهد لتشبه إشارة رقمية. ما يمكنهم فعله هو استخدام مخرج رقمي Vcc أو Vcc من نوع رقمي لتوليد هذه الإشارة الغريبة ...

لذلك ، تعد PWM نوعًا من "الحيلة" التي يمكن من خلالها لـ Arduino والأنظمة الأخرى التعامل مع هذا النوع من الإشارات التي فهي ليست تناظرية تمامًا وليست رقمية تقليدية. لجعل ذلك ممكنًا ، يحتفظون بإخراج رقمي نشطًا لفترة محددة أو خارجها ، اعتمادًا على الفائدة في جميع الأوقات. هذا بعيد عن ما يمكن أن يكون ساعة رقمية أو إشارة رمز ثنائي ، نبضاتها لها نفس العرض.

في مشاريعك مع Arduino ، يمكنك التحقق من هذا النوع من إشارات PWM التي يتم فيها الحفاظ على تردد ثابت لمشغلات النبض بمرور الوقت ، ولكن عرض هذه النبضات متنوع. في الواقع ، يطلق عليها Duty Cycle عندما يتم الاحتفاظ بإشارة عالية فيما يتعلق بإجمالي الدورة. لذلك ، يتم إعطاء دورة العمل في المائة.

تذكر أنه في PWM لا تعمل كإشارة تناظرية ، بين عدة قيم للجهد وتتأرجح فيما بينها. في حالة PWM فهي إشارة مربعة في النمط الرقمي و قيمته القصوى هي Vcc. على سبيل المثال ، إذا كنت تعمل مع مصدر طاقة 3 فولت ، فيمكنك إعطاء نبضات 3 فولت أو 0 فولت ، ولكن ليس 1 فولت أو أي قيمة وسيطة أخرى كما يحدث في التناظرية الحقيقية. ما قد يختلف في هذه الحالة هو عرض النبضة ، والذي يمكننا الاحتفاظ به بنسبة 30٪ عند قيمة Vcc العالية ، أو 60٪ لمنحها مزيدًا من الطاقة ، إلخ.

لكن كن حذرًا ، لأنه إذا كان الجهاز يدعم حد Vcc وتم تجاوزه بـ PWM ، فقد يتلف. لذلك سيكون من الضروري دائمًا احترام قيم أوراق البيانات المقدمة من الشركات المصنعة. أيضًا ، في بعض الأجهزة مثل محركات التيار المستمر ، يمرر، والمغناطيسات الكهربائية ، وما إلى ذلك ، قد يعني سحب الجهد بعد دورة التشغيل أن الأحمال الاستقرائية يمكن أن تسبب ضررًا. هذا هو السبب في أن الحماية في الوقت المناسب.

PWM على اردوينو

اردوينو I2C حافلة

الآن بعد أن عرفت كيف يعمل ، دعنا نرى الحالة المحددة لـ PWM في عالم Arduino ...

PWM: pinout على اردوينو

على لوحات Arduino ، يمكنك العثور على العديد من المسامير التي تنفذ أجهزة PWM. يمكنك التعرف عليهم على PCB نفسه لأن لديهم ملف رمز ~ (رأس صغير) مع رقم التعريف الشخصي. يمكن أن يتم ذلك أيضًا عن طريق برنامج في كود Arduino ، لكن هذا من شأنه أن يثقل كاهل وحدة التحكم الدقيقة بالعمل ، وهو أمر سخيف عندما يمكن القيام به محليًا وعن طريق الأجهزة ...

  • Arduino UNOوميني ونانو- لديك 6 مخرجات PWM 8 بت على المسامير 3 و 5 و 6 و 9 و 10 و 11 ، والتي ستكون أمام الرقم مباشرة.
  • ميجا اردوينو- في أقوى لوحة Arduino ، لديك 15 مخرجات PWM 8 بت. هم على السنون من 2 إلى 13 ومن 44 إلى 46.
  • اردوينو ديو: في هذه الحالة يوجد 13 مخرجات PWM 8 بت. هم على دبابيس 2 إلى 13 ، بالإضافة إلى اثنين من المخرجات التناظرية الأخرى التي تم تحديدها بواسطة DAC بدقة 12 بت.

عندما تتحدث عن دقة 8 بت أو 12 بت ، وما إلى ذلك ، في هذا النوع من مخرجات PWM ، فأنت تشير إلى غرفة المناورة لديك. مع 8 بت لها 256 مستوى يمكنك التنويع بينها ، وترتفع الـ 12 بت إلى 4096 مستوى.

السيطرة مع الموقتات

للتحكم في أجهزة PWM ، Arduino سوف تستخدم الموقتات لذلك. يمكن لكل Timer الحالي أن يخدم 2 أو 3 مخرجات PWM. يكمل سجل المقارنة لكل إخراج هذا النظام بحيث عندما يصل الوقت إلى قيمة السجل ، يتم تغيير حالة أو قيمة المخرجات لإيقاف دورات الخدمة هذه. على الرغم من وجود مخرجين يتحكم فيهما نفس المؤقت ، يمكن أن يكون لكلاهما دورات عمل مختلفة ، على الرغم من أنهما يشتركان في نفس التردد.

في حالة الموقتات المرتبطة بكل دبوس PWM ، فإنها ستختلف اعتمادًا على نوع لوحة Arduino التي تملكها:

  • Arduino UNOوميني ونانو:
    • الموقت 0 - 5 و 6
    • الموقت 1 - 9 و 10
    • الموقت 2 - 3 و 11
  • ميجا اردوينو:
    • الموقت 0 - 4 و 13
    • الموقت 1 - 11 و 12
    • الموقت 2 - 9 و 10
    • الموقت 3 - 2 و 3 و 5
    • الموقت 4 - 6 و 7 و 8
    • الموقت 5 - 44 و 45 و 46

سيقوم السجل الذي تم قياسه مسبقًا بتقسيم الوقت على عدد صحيح ويقوم Timer بالباقي للتحكم في كل من مخرجات PWM المرتبطة. يمكن أن يؤدي تعديل قيمة التسجيل إلى تغيير التكرار. ال تردد ستكون مختلفة أيضًا اعتمادًا على المؤقت واللوحة:

  • Arduino UNOوميني ونانو:
    • Timer0: يسمح بضبط القياس المسبق لـ 1 و 8 و 64 و 256 و 1024. التردد 62.5 كيلو هرتز.
    • المؤقت 1: بمقاس مسبق 1 و 8 و 64 و 256 و 1024. بتردد 31.25 كيلوهرتز.
    • Timer2: يساوي Timer1 ، فقط يضيف مقياسًا مسبقًا لـ 32 و 128 بالإضافة إلى السابق.
  • ميجا اردوينو:
    • Timer0 ، 1 ، 2: نفس ما ورد أعلاه.
    • المؤقت 3 و 4 و 5: بتردد 31.25 كيلوهرتز ومقاس مسبقًا 1 و 8 و 64 و 256 و 1024.

عدم التوافق والصراعات

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

  • مكتبة المؤازرة: عند استخدام محركات مؤازرة ، فإنها تستخدم بشكل مكثف الموقتات ، لذلك يمكن أن تولد تعارضات. استخدم Timer1 على وجه التحديد لـ UNO و Nano و Mini ، أي أنه لا يمكنك استخدام الدبابيس 9 و 10 أثناء استخدامك للرسم مع تلك المكتبة. في ميجا سيعتمد على عدد الماكينات ...
  • SPI: إذا تم استخدام اتصال SPI على لوحة Arduino ، فسيتم استخدام الدبوس 11 لوظيفة MOSI. هذا هو السبب في أنه لا يمكن استخدام دبوس PWM هذا.
  • نغمة: تستخدم هذه الوظيفة Timer2 للعمل. لذلك إذا تم استخدامه ، فإنك تجعل الدبابيس 3 و 11 (أو 9 و 10 للميجا) عديمة الفائدة.

اختبار عملي مع اردوينو

Arduino PWM التخطيطي مع LED

إذا كنت تريد أن ترى في الموقع كيف يعمل PWM على Arduino ، فإن أفضل شيء يمكنك القيام به هو توصيل خيوط القياس الخاصة بـ الفولتميتر أو المتعدد (في وظيفة لقياس الجهد) بين دبوس PWM الذي اخترت استخدامه والدبوس الأرضي أو GND للوحة Arduino. بهذه الطريقة ، على شاشة جهاز القياس ، ستتمكن من رؤية كيف يتغير الجهد بإخراج رقمي بفضل خدعة PWM هذه.

يمكنك استبدال الفولتميتر / المتعدد بمصباح LED لترى كيف تختلف شدة الضوء ، مع محرك DC ، أو مع أي عنصر آخر تريده. لقد قمت بتبسيطها في الرسم التخطيطي باستخدام Fritzing بمصباح LED دون المزيد ، ولكن أعلم أنه يمكن أن يمثل أيضًا نصائح لمقياس متعدد ...

إذا كنت تستخدم مؤشر LED ، فتذكر المقاومة عند الكاثود و GND.

إلى شفرة المصدر للتحكم في متحكم لوحة Arduino لجعل كل شيء يعمل ، يجب عليك إدخال هذا في Arduino IDE (في هذه الحالة ، استخدمت PWM pin 6 من Arduino UNO):

const int analogOutPin = 6;
byte outputValue = 0;  
 
void setup()
{  
   Serial.begin(9600);        
   pinMode(ledPIN , OUTPUT); 
 
   bitSet(DDRB, 5);       // LED o voltímetro
   bitSet(PCICR, PCIE0);       
   bitSet(PCMSK0, PCINT3);     
}
 
void loop() 
{
   if (Serial.available()>0)  
   {
      if(outputValue >= '0' && outputValue <= '9')
      {
         outputValue = Serial.read();   // Leemos la opción
         outputValue -= '0';      // Restamos '0' para convertir a un número
         outputValue *= 25;      // Multiplicamos x25 para pasar a una escala 0 a 250
         analogWrite(ledPIN , outputValue);
      }
   }
}  
 
ISR(PCINT0_vect)
{
   if(bitRead(PINB, 3))
   { 
      bitSet(PORTB, 5);   // LED on 
   }
   else
   { 
      bitClear(PORTB, 5); // LED off  
   } 
} 
أنصحك أن تلعب بالقيم وترى النتائج على الضوء أو الفولتميتر. يمكن للبرنامج تلقي القيم من 0 إلى 9 حتى تتمكن من رؤية كيف يختلف كل شيء. لمزيد من المعلومات ، أنصحك دورة اردوينو التي لدينا في تحميل مجاني ...

تعليق ، اترك لك

اترك تعليقك

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها ب *

*

*

  1. المسؤول عن البيانات: ميغيل أنخيل جاتون
  2. الغرض من البيانات: التحكم في الرسائل الاقتحامية ، وإدارة التعليقات.
  3. الشرعية: موافقتك
  4. توصيل البيانات: لن يتم إرسال البيانات إلى أطراف ثالثة إلا بموجب التزام قانوني.
  5. تخزين البيانات: قاعدة البيانات التي تستضيفها شركة Occentus Networks (الاتحاد الأوروبي)
  6. الحقوق: يمكنك في أي وقت تقييد معلوماتك واستعادتها وحذفها.

  1.   جوزيه قال

    مرحبا يوم سعيد. بادئ ذي بدء ، أود أن أشكرك على الوقت المخصص لهذا الشرح للأحدث.
    أود أن أجعلك استعلام. أحاول تشغيل الكود على محاكي البروتيوس 8 لـ Arguino Mega. أقوم بتوصيل الفولتميتر بالدبوس 6 ، Proteus متصل بمنفذ تسلسلي ، لكنني لا أعرف كيف أو ما الذي يجب تغييره بحيث يتم إخراج الفولتية المختلفة. اضطررت إلى إجراء تعديلات طفيفة على التعليمات البرمجية لجعلها مجمعة. شكرا جزيلا لك على مساعدتك