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

لوحة واجهة عالمية مدمجة - تحكم USB / Bluetooth / WIFI: 6 خطوات
لوحة واجهة عالمية مدمجة - تحكم USB / Bluetooth / WIFI: 6 خطوات

فيديو: لوحة واجهة عالمية مدمجة - تحكم USB / Bluetooth / WIFI: 6 خطوات

فيديو: لوحة واجهة عالمية مدمجة - تحكم USB / Bluetooth / WIFI: 6 خطوات
فيديو: Samsung Galaxy Unpacked January 2021: Official Replay 2024, يوليو
Anonim
لوحة واجهة عالمية مدمجة - تحكم USB / Bluetooth / WIFI
لوحة واجهة عالمية مدمجة - تحكم USB / Bluetooth / WIFI
لوحة واجهة عالمية مدمجة - تحكم USB / Bluetooth / WIFI
لوحة واجهة عالمية مدمجة - تحكم USB / Bluetooth / WIFI

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

غالبًا ما أجد أنني أريد توصيل وحدة مدمجة بجهاز كمبيوتر. إذا كانت الوحدة لا تحتوي على اتصال USB على وجه التحديد ، وهو ما يحدث غالبًا ، فحينئذٍ يتعين عليك عمومًا شراء محول USB باهظ الثمن يقوم بعمل واحد مثل SPI فقط أو I2C فقط.

لهذه الأسباب قررت إنشاء لوحة واجهة عالمية. إنه مصمم للسماح بالاتصالات السهلة القائمة على الكمبيوتر مع الوحدات المدمجة.

تتضمن ميزات الواجهة المضمنة للوحة التي استقرت عليها.

  • إدخال / إخراج رقمي
  • I2C
  • SPI
  • UART
  • PWM
  • أجهزة السيارات
  • إدخال ADC
  • إخراج DAC

يمكن استخدام كل ذلك بشكل مستقل تمامًا.

يمكن التحكم في لوحة الواجهة عبر اتصال USB بجهاز الكمبيوتر ، ولكن لديها أيضًا اتصالات WIFI أو Bluetooth اختيارية للسماح باستخدام اللوحة عن بُعد أو في سيناريو من نوع IoT.

من خلال استخدام موصلات SIL القياسية مقاس 2.54 مم ، من الممكن توصيل الكابلات الأنثوية المزدوجة مباشرة بين اللوحة والوحدة المدمجة مما يسمح بتوصيلات سريعة وموثوقة وخالية من اللحام.

فكرت أيضًا في إضافة أشياء مثل CAN و LIN و H-bridge وما إلى ذلك ، ولكن يمكن أن تأتي هذه لاحقًا بمراجعة v2.

الخطوة 1: تصميم ثنائي الفينيل متعدد الكلور

تصميم ثنائي الفينيل متعدد الكلور
تصميم ثنائي الفينيل متعدد الكلور
تصميم ثنائي الفينيل متعدد الكلور
تصميم ثنائي الفينيل متعدد الكلور
تصميم ثنائي الفينيل متعدد الكلور
تصميم ثنائي الفينيل متعدد الكلور
تصميم ثنائي الفينيل متعدد الكلور
تصميم ثنائي الفينيل متعدد الكلور

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

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

مع وجود 23 دبابيس I / O المتاحة ، سمح لي هذا بهذه الميزات

  • Digtal I / O
  • I2C
  • SPI
  • UART
  • PWM × 2
  • محرك سيرفو × 6
  • إدخال ADC × 3
  • إخراج DAC × 1
  • I / O مدفوعة من 5V أو 3V3
  • LED الحالة

عيب واحد في IC الذي اخترته هو أنه يحتوي على طرف UART واحد فقط وبالتالي فإن استخدام طريقة التحكم في Bluetooth أو Wifi سوف يمنعك من استخدام اتصال UART.

المبينة في الصور أعلاه هي التخطيطي النهائي وثنائي الفينيل متعدد الكلور.

الخطوة 2: تصميم البروتوكول

تصميم البروتوكول
تصميم البروتوكول

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

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

في تصميمي هنا قائمة الوظائف التي أردت تضمينها:

  • إدخال / إخراج رقمي

    • SetPin (رقم التعريف الشخصي ، الدولة)
    • State = GetPin (PinNumber)
  • SPI

    • التهيئة (وضع SPI)
    • DataIn = نقل (DataOut)
    • ControlChipSelect (قناة ، حالة)
    • SetPrescaler (معدل)
  • I2C

    • تهيئة ()
    • يبدأ ()
    • اعادة البدء ()
    • قف ()
    • SlaveAck = إرسال (DataOut)
    • DataIn = تلقي (الأخير)
  • UART

    • تهيئة ()
    • TX بايت (DataOut)
    • BytesAvailable = RX Count ()
    • داتاين = RX بايت ()
    • SetBaud (الباود)
  • PWM

    • تمكين (القناة)
    • تعطيل (القناة)
    • SetFrequency (القناة ، التردد)
    • GetMaxDuty (واجب)
    • SetDuty (واجب)
  • المؤازرة

    • تمكين (القناة)
    • تعطيل (القناة)
    • SetPosition (القناة ، الوظيفة)
  • ADC

    ADCample = نموذج (قناة)

  • DAC

    • ممكن
    • إبطال
    • SetOutput (الجهد)
  • واي فاي

    • SetSSID (SSID)
    • تعيين كلمة المرور (كلمة المرور)
    • الحالة = CheckConnectionStatus ()
    • IP = GetIPAddress ()

تظهر المعلمات بين قوسين وتظهر العوائد قبل رمز يساوي.

قبل أن أبدأ في الترميز ، أقوم بتعيين كل وظيفة رمز أمر يبدأ من 128 (ثنائي 0b10000000) ويعمل بشكل تصاعدي. أقوم بتوثيق البروتوكول بشكل كامل للتأكد من أنه بمجرد أن يكون رأسي في الكود ، لديّ مستند لطيف للرجوع إليه. تم إرفاق مستند البروتوكول الكامل لهذا المشروع ويتضمن أكواد الأوامر الواردة وعروض البت.

الخطوة 3: تصميم البرنامج الثابت

تصميم البرامج الثابتة
تصميم البرامج الثابتة
تصميم البرامج الثابتة
تصميم البرامج الثابتة
تصميم البرامج الثابتة
تصميم البرامج الثابتة

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

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

تتكون آلة الدولة من ثلاث حالات:

1) انتظار الأوامر

2) تلقي المعلمات

3) الرد

تتفاعل الدول الثلاث على النحو التالي:

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

2) نمر بالبايتات الواردة ونحفظها حتى نخزن جميع المعلمات. بمجرد حصولنا على جميع المعلمات ، نقوم بتنفيذ الأمر. إذا كان هناك بايت عائد ، فإننا ننتقل إلى المرحلة 3. إذا لم تكن هناك بايتات رجوع لإرسالها ، فنعود إلى المرحلة 1.

3) نمر بالبايتات الواردة ولكل بايت نكتب فوق بايت الصدى ببايت إرجاع صالح. بمجرد إرسال كل بايتات الإرجاع ، نعود إلى المرحلة 1.

لقد استخدمت Flowcode لتصميم البرنامج الثابت لأنه يوضح بشكل مرئي ما أفعله. يمكن القيام بنفس الشيء بشكل جيد في Arduino أو غيرها من لغات البرمجة المضمنة.

الخطوة الأولى هي إنشاء اتصالات مع جهاز الكمبيوتر. للقيام بذلك ، يجب تهيئة الميكرو ليعمل بالسرعة المناسبة وعلينا إضافة رمز لتشغيل الأجهزة الطرفية لـ USB و UART. في Flowcode ، يكون هذا سهلاً مثل سحب مكون USB Serial ومكون UART من قائمة مكونات Comms إلى المشروع.

نضيف مقاطعة RX ومخزنًا مؤقتًا للقبض على الأوامر الواردة على UART ونقوم باستطلاع USB بانتظام. يمكننا بعد ذلك في وقت فراغنا عملية العازلة.

تم إرفاق مشروع Flowcode ورمز C الذي تم إنشاؤه.

الخطوة 4: التواصل عبر Flowcode

التواصل عبر Flowcode
التواصل عبر Flowcode
التواصل عبر Flowcode
التواصل عبر Flowcode
التواصل عبر Flowcode
التواصل عبر Flowcode

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

يعد وضع SCADA الجديد لـ Flowcode 8.1 مكافأة مطلقة حيث يمكننا بعد ذلك أخذ برنامج يقوم بشيء ما في محاكي Flowcode وتصديره بحيث يتم تشغيله بمفرده على أي جهاز كمبيوتر دون أي مشاكل في الترخيص. قد يكون هذا رائعًا لمشاريع مثل منصات الاختبار أو مجموعات أجهزة الاستشعار.

أستخدم وضع SCADA هذا لإنشاء أداة تكوين WIFI التي يمكن استخدامها لتكوين SSID وكلمة المرور بالإضافة إلى جمع عنوان IP للوحدة. يتيح لي ذلك إعداد كل شيء باستخدام اتصال USB ثم نقله إلى اتصال شبكة WIFI بمجرد تشغيل الأشياء.

بعض الأمثلة على المشاريع مرفقة.

الخطوة 5: طرق التواصل الأخرى

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

فيما يلي قائمة باللغات وطرق التواصل مع لوحة الواجهة.

Python - استخدام مكتبة تسلسلية لدفق البيانات إلى منفذ COM أو عنوان IP

Matlab - استخدام أوامر ملف لدفق البيانات إلى منفذ COM أو عنوان IP

C ++ / C # / VB - باستخدام إما DLL مكتوب مسبقًا ، والوصول مباشرة إلى منفذ COM أو Windows TCP / IP API

Labview - استخدام إما ملف DLL مكتوب مسبقًا أو مكون VISA المسلسل أو مكون TCP / IP

إذا رغب أي شخص في رؤية اللغات المذكورة أعلاه مطبقة ، فيرجى إبلاغي بذلك.

الخطوة 6: المنتج النهائي

منتج منتهي
منتج منتهي
منتج منتهي
منتج منتهي
منتج منتهي
منتج منتهي

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

حتى أنني قمت بتوزيع بعض المجالس للزملاء حتى يتمكنوا من تحسين تدفق عملهم أيضًا وقد تم استقبال هذه اللوحات بشكل جيد للغاية.

شكرًا على قراءة Instructable الخاص بي ، آمل أن تكون قد وجدتها مفيدة وآمل أن تلهمك لإنشاء أدواتك الخاصة لتسريع إنتاجيتك.

موصى به: