جدول المحتويات:

الفولتية التناظرية فائقة السرعة من Arduino: 10 خطوات (بالصور)
الفولتية التناظرية فائقة السرعة من Arduino: 10 خطوات (بالصور)

فيديو: الفولتية التناظرية فائقة السرعة من Arduino: 10 خطوات (بالصور)

فيديو: الفولتية التناظرية فائقة السرعة من Arduino: 10 خطوات (بالصور)
فيديو: Control XY-1250 10-50V 60A 3000W PWM motor Speed controller using Arduino 2024, يوليو
Anonim
Image
Image

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

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

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

إذا أعجبك هذا Instructable ، فيرجى التفكير في التصويت له!:)

الخطوة 1: بناء الدائرة

بناء الدائرة
بناء الدائرة

لبناء الدائرة ، ستحتاج إلى ما يلي:

أ) Arduino على أساس Atmel 16MHz ATmega328P ، مثل Arduino Uno أو Arduino Nano.

ب) مقاومتان بقيمة R لا تقل عن 150 درجة.

ج) مكثفتان من القيمة C بحيث يكون C = 0.0015 / R ، أمثلة:

  • R = 150Ω و C = 10µ
  • R = 1.5kΩ و C = 1µ
  • R = 15kΩ و C = 100nF
  • R = 150kΩ و C = 10nF

أسباب اختيار هذه القيم شقين. في المقام الأول ، نريد إبقاء التيار على دبابيس Arduino أقل من الحد الأقصى للتيار المقنن البالغ 40 مللي أمبير. يؤدي استخدام قيمة 150 درجة إلى الحد من التيار إلى 30 مللي أمبير عند استخدامه مع جهد إمداد Arduino البالغ 5 فولت. ستؤدي القيم الأكبر لـ R إلى تقليل التيار وبالتالي فهي مقبولة.

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

سيتم تقديم شرح أكثر شمولاً عن سبب أهمية ثابت RC في قسم النظرية ، بعد أن أوضحت لك كيفية تجميع دائرة العرض التوضيحي.

الخطوة الثانية: إعداد راسم الذبذبات

إعداد راسم الذبذبات
إعداد راسم الذبذبات

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

أ) اضبط المسح الأفقي ليتم التحكم فيه بواسطة القناة B (المحور X).

ب) اضبط راسم الذبذبات على وضع القناة المزدوجة.

ج) اضبط الفولتات / div على كلا القناتين بحيث يمكنها عرض الفولتية من 0 فولت إلى 5 فولت. قمت بضبط المنجم على 0.5V / div.

د) اضبط وضع الاقتران على DC على كلا القناتين.

هـ) اضبط موضع X و Y بحيث تكون النقطة في الزاوية اليسرى السفلية من الشاشة عند إيقاف تشغيل Arduino.

الخطوة 3: تنزيل البرنامج وتشغيله

Image
Image

قم بتنزيل البرنامج من مستودع Fast Vector Display For Arduino. البرنامج مرخص بموجب GNU Affero Public License v3 ويمكن استخدامه بحرية وتعديله بموجب شروط ذلك الترخيص.

افتح ملف "fast-vector-display-arduino.ino" في Arduino IDE وقم بتحميله على Arduino. في الحال ، سترى الرسوم المتحركة "سنة جديدة سعيدة" على شاشة الذبذبات.

لقد طورت هذا المشروع كقرصنة شخصية في الأسابيع التي تسبق عيد الميلاد ، لذلك هناك رسالة تحت عنوان عيد الميلاد ورأس السنة الجديدة يمكنك رؤيتها عن طريق تعديل متغير PATTERN في الكود.

الخطوة 4: قم بإنشاء الرسم المخصص الخاص بك

افهم لماذا يكون PWM بطيئًا جدًا
افهم لماذا يكون PWM بطيئًا جدًا

إذا كنت ترغب في إنشاء الرسم الخاص بك ، فيمكنك لصق إحداثيات النقطة في رسم Arduino على السطر الذي يحدد USER_PATTERN.

لقد وجدت أن Inkscape هي أداة جيدة جدًا لعمل رسم مخصص:

  1. قم بإنشاء نص باستخدام خط كبير وعريض مثل Impact.
  2. حدد كائن النص وحدد "كائن إلى مسار" من قائمة "المسار".
  3. حدد أحرفًا فردية وقم بتداخلها لإنشاء شكل متصل
  4. حدد "الاتحاد" من قائمة "المسار" لدمجها في منحنى واحد.
  5. إذا كانت هناك ثقوب في أي أحرف ، فقم بقص شق صغير عن طريق رسم مستطيل باستخدام أداة المستطيل وطرحه من المحيط باستخدام أداة "الفرق".
  6. انقر نقرًا مزدوجًا فوق المسار لإظهار العقد.
  7. حدد المستطيل كافة العقد وانقر فوق أداة "جعل ركن العقد المحددة".
  8. احفظ ملف SVG.

الشيء المهم هو أن الرسم الخاص بك يجب أن يكون له مسار واحد مغلق ولا توجد ثقوب. تأكد من أن التصميم الخاص بك يحتوي على أقل من حوالي 130 نقطة.

الخطوة 5: الصق الإحداثيات من ملف SVG في Arduino IDE

  1. افتح ملف SVG وانسخ الإحداثيات. سيتم تضمينها في عنصر "المسار". يمكن تجاهل أول زوج من الإحداثيات ؛ استبدلها بـ 0 ، 0.
  2. الصق الإحداثيات في مخطط Arduino داخل الأقواس مباشرة بعد "#define USER_PATTERN".
  3. استبدل جميع المسافات بفاصلات ، وإلا ستحصل على خطأ في الترجمة. قد تكون أداة "استبدال والبحث" مفيدة.
  4. تجميع وتشغيل!
  5. إذا كانت لديك مشاكل ، فراقب وحدة التحكم التسلسلية بحثًا عن أي أخطاء. على وجه الخصوص ، سترى رسائل إذا كان النمط الخاص بك يحتوي على عدد كبير جدًا من النقاط للمخزن المؤقت الداخلي. في مثل هذه الحالات ، ستظهر الصورة وميض مفرط.

الخطوة السادسة: افهم لماذا يكون PWM بطيئًا جدًا

للبدء ، دعنا نراجع سلوك المكثف أثناء شحنه.

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

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

عندما تقوم بتوسيط كل شيء ، فإن سلوك شحن مكثف باستخدام PWM هو نفسه تمامًا كما لو كنت قد استخدمت جهدًا ثابتًا من Vpwm لشحن المكثف. لا يزال الأمر يستغرق حوالي 5 ثوانٍ RC لنقترب بدرجة كافية من الجهد المطلوب.

الخطوة 7: الانتقال من أ إلى ب ، أسرع قليلاً

الانتقال من أ إلى ب ، أسرع قليلاً
الانتقال من أ إلى ب ، أسرع قليلاً

لنفترض أن لدينا مكثفًا مشحونًا بالفعل حتى Va. لنفترض أننا نستخدم analogWrite () لكتابة القيمة الجديدة لـ b. ما هو الحد الأدنى من الوقت الذي يجب أن تنتظره حتى يصل الجهد Vb؟

إذا خمنت 5 ثوانٍ RC ، فهذا رائع! من خلال الانتظار لمدة 5 ثوانٍ RC ، سيتم شحن المكثف إلى Vb تقريبًا. ولكن إذا أردنا ، يمكننا بالفعل الانتظار قليلاً قليلاً.

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

لذلك من خلال عدم انتظار ذلك الوقت ، نرى تحسنًا. الوقت t_ab هو في الواقع أقصر قليلاً من 5 RC.

لكن انتظر ، يمكننا أن نفعل ما هو أفضل بكثير! انظر إلى كل تلك المساحة فوق v_b. هذا هو الفرق بين Vcc ، والجهد الأقصى المتاح لنا ، و Vb الذي ننوي الوصول إليه. هل يمكنك أن ترى كيف يمكن أن يساعدنا هذا الجهد الإضافي في الوصول إلى حيث نريد أن نذهب بشكل أسرع؟

الخطوة 8: انتقل من أ إلى ب ، باستخدام شاحن توربو

انتقل من أ إلى ب ، مع شاحن توربو!
انتقل من أ إلى ب ، مع شاحن توربو!

هذا صحيح. بدلاً من استخدام PWM عند الجهد المستهدف V_b ، فإننا نحتفظ به عند جهد ثابت Vcc لفترة زمنية أقصر بكثير. أسمي هذا أسلوب Turbo Charger وهو يقودنا إلى حيث نريد أن نذهب بسرعة حقًا! بعد التأخير الزمني (الذي يجب أن نحسبه) ، نضغط على الفرامل بالتبديل إلى PWM في V_b. هذا يمنع الجهد من تجاوز الهدف.

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

الخطوة 9: فهم المدونة

افهم المدونة
افهم المدونة

الصورة تساوي ألف كلمة ، لذا فإن الرسم البياني يوضح البيانات والعمليات التي يتم إجراؤها في الكود. من اليسار الى اليمين:

  • يتم تخزين بيانات الرسومات في PROGMEM (أي ذاكرة فلاش) على شكل قائمة بالنقاط.
  • يتم دمج أي مجموعة من عمليات الترجمة والقياس والتناوب في مصفوفة تحويل أفيني. يتم ذلك مرة واحدة في بداية كل إطار للرسوم المتحركة.
  • تتم قراءة النقاط واحدة تلو الأخرى من بيانات الرسومات ويتم ضرب كل منها بمصفوفة التحويل المخزنة.
  • يتم تغذية النقاط المحولة من خلال خوارزمية مقصية تقوم بقص أي نقاط خارج المنطقة المرئية.
  • باستخدام جدول بحث تأخير RC ، يتم تحويل النقاط إلى جهد قيادة وتأخيرات زمنية. يتم تخزين جدول البحث عن تأخير RC في EEPROM ويمكن إعادة استخدامه لعمليات تشغيل متعددة للتعليمات البرمجية. عند بدء التشغيل ، يتم فحص جدول بحث RC للتأكد من دقته ويتم تحديث أي قيم غير صحيحة. يوفر استخدام EEPROM ذاكرة RAM قيمة.
  • تتم كتابة الفولتية والتأخيرات الدافعة على الإطار غير النشط في المخزن المؤقت للإطار. يحتوي المخزن المؤقت للإطار على مساحة لإطار نشط وإطار غير نشط. بمجرد كتابة إطار كامل ، يتم تنشيط الإطار غير النشط.
  • يقوم روتين خدمة المقاطعة بإعادة رسم الصورة باستمرار عن طريق قراءة قيم الجهد والتأخير من المخزن المؤقت للإطار النشط. بناءً على هذه القيم ، تقوم بضبط دورات عمل دبابيس الإخراج. يستخدم Timer 1 لقياس التأخير الزمني وصولاً إلى بضع نانو ثانية من الدقة ، بينما يستخدم المؤقت 2 للتحكم في دورة عمل المسامير.
  • دائمًا ما يكون الدبوس ذو أكبر تغيير في الجهد "مشحونًا بالتوربو" مع دورة تشغيل تبلغ صفرًا أو 100٪ ، مما يوفر أسرع وقت للشحن أو التفريغ. يتم تشغيل الدبوس ذو التغيير الأقل في الجهد بدورة عمل يتم اختيارها لتتناسب مع وقت الانتقال الخاص بالدبوس الأول - مطابقة هذه المرة مهمة لضمان رسم الخطوط مباشرة على راسم الذبذبات.

الخطوة 10: بسرعة كبيرة ، تأتي بمسؤولية كبيرة

نظرًا لأن هذه الطريقة أسرع بكثير من PWM ، فلماذا لا تستخدمها analogWrite ()؟ حسنًا ، لأن استخدام PWM فقط جيد بما يكفي لمعظم البرامج وهو أكثر تسامحًا. ومع ذلك ، تتطلب طريقة "Turbo Charger" ترميزًا دقيقًا وهي مناسبة فقط لحالات محددة:

  1. إنها حساسة للغاية للتوقيت. بمجرد أن نصل إلى مستوى الجهد المستهدف ، يجب تحويل دبوس القيادة على الفور إلى وضع PWM العادي لتجنب تجاوز الجهد المستهدف.
  2. يتطلب معرفة ثابت RC ، لذلك يجب إدخال هذه القيم مسبقًا. مع القيم غير الصحيحة ، سيكون التوقيت خاطئًا وستكون الفولتية غير صحيحة. مع PWM العادي ، هناك ضمان بأنك ستستقر على الجهد الصحيح بعد مرور بعض الوقت ، حتى لو لم يكن ثابت RC معروفًا.
  3. يتطلب حساب الفاصل الزمني الدقيق لشحن المكثف معادلات لوغاريتمية بطيئة جدًا للحساب في الوقت الفعلي على Arduino. يجب حسابها مسبقًا قبل كل إطار للرسوم المتحركة وتخزينها مؤقتًا في الذاكرة في مكان ما.
  4. يجب أن تتعامل البرامج التي تتعامل مع هذه الطريقة مع حقيقة أن التأخيرات غير خطية للغاية (فهي في الواقع أسية). سوف تستغرق الفولتية المستهدفة بالقرب من Vcc أو GND عدة أوامر من حيث الحجم أطول للوصول إليها من الفولتية بالقرب من نقطة المنتصف.

للتغلب على هذه القيود ، يقوم كود رسومات المتجه الخاص بي بالأشياء التالية:

  1. يستخدم Timer 1 عند 16 كيلو هرتز وروتين خدمة المقاطعة لمعالجة الإخراج والتوقيت بدقة.
  2. يتطلب استخدام قيمة محددة لثابت وقت RC ، مما يحد من خيارات قيم المكثف والمقاوم.
  3. يخزن التأخيرات الزمنية لجميع النقاط في إطار الرسوم المتحركة في ذاكرة مؤقتة. هذا يعني أن الروتين الذي يحسب التأخيرات الزمنية يعمل بمعدل أبطأ بكثير من روتين خدمة المقاطعة الذي يقوم بتحديث دبابيس الإخراج. قد يتم طلاء أي إطار معين عدة عشرات من المرات قبل أن تصبح مجموعة التأخيرات الجديدة للإطار التالي جاهزة للاستخدام.
  4. يضع استخدام ذاكرة التخزين المؤقت قيدًا على عدد النقاط التي يمكن رسمها لكل إطار. أستخدم ترميزًا موفرًا للمساحة لتحقيق أقصى استفادة من ذاكرة الوصول العشوائي المتاحة ، لكنها لا تزال محدودة بحوالي 150 نقطة. بعد مائة نقطة أو نحو ذلك ، ستبدأ الشاشة في الوميض على أي حال ، لذا فهي نقطة خلافية!

موصى به: