احتاج يوم مشمس صافٍ للعمل إلى محول واجهة CAN إلى Ethernet رخيص الثمن. بطبيعة الحال ، بدأ البحث بحلول جاهزة ، ولكن كما يحدث في كثير من الأحيان ، تقرر في النهاية تطوير نموذج خاص بهم. بطبيعة الحال ، لم يستطع حماس المؤلف أن يقاوم ويقتصر على هذه الوظيفة "المقطوعة". ما جاء منه ، وكيف ولماذا - تحت الخفض.
ملخص عام. تعرض الصورة أعلاه نموذجًا ثلاثي الأبعاد للوحة التي طورتها باستخدام CAD Altium Designer. الميزات والوظائف الرئيسية:
- 10 \ 100 ميغابايت إيثرنت
- RTC
- MicroSD (FAT12 ، FAT16 ، FAT32) 4 جيجابايت
- RS232 \ RS485
- CAN
- صفارة
- 3 الصمام المستخدم
- GPIO
- EEPROM 32 KB
- فلاش 2 ميغابايت
- I2C
- SPI
- UART
- SW \ JTAG
- مسلسل USB (منفذ COM)
- الطاقة: miniUSB 5V \ الخارجية 9..24V
تكلفة اللوحة التي تم جمعها ~ 5000 R. المشروع مفتوح المصدر في الطبيعة ، ويمكن الاطلاع على المصادر على
جيثب . إن ما ظهر في النهاية ، بالإضافة إلى الوظيفة الرئيسية ، يمكن اعتباره لوحة تصحيح أخطاء جيدة للعمل مع متحكم STM32.
والآن إلى تفاصيل الخلق.
خردوات
بدأت دراسة هذه المشكلة بالبحث وتقييم الحلول الجاهزة. المتطلبات الرئيسية هي:
- تحويل إطارات CAN2.0B الواردة إلى حزم TCP \ IP والعكس ؛
- منخفضة التكلفة ، ونتيجة لذلك ، فإن تنفيذ جهاز يعتمد على متحكم.
لدى الزملاء من الصين العديد من الحلول الصناعية ، ولكن ليس الحلول الرخيصة ، لذلك تم تسليم ممثل PIRS CAN-Ethernet Interface Converter إلى مكتبنا لإجراء اختبار. وفقًا للقدرات والخصائص الموصوفة ، استوفى الجهاز T.Z. المتواضع ، فقد بقي فقط للتحقق من الأداء في الممارسة العملية ، وهو ما فعلته ، مسلحين بـ Wireshark ومنظار الذبذبات. لسبب غير معروف ، عند إرسال حزم إلى TCP الجهاز في إخراج الجهاز ، حيث كان من المفترض أن تظهر إطارات CAN ، تتسلسل مع مستويات CAN الفعلية (الزوج التفاضلي) ولكن بروتوكول واجهة UART المنطقية (مع وحدات بت البدء والإيقاف) يبصق. عند فتح العلبة وفتح وثائق الدوائر الدقيقة ورنين مسارات الألواح ، وجدت بالفعل أن دبابيس RX و TX (UART) الخاصة بالمراقب الدقيق متصلان بجهاز الإرسال والاستقبال CAN ومتصلان بموصل خارجي منه. وبالتالي ، لم يكن من المتوقع وجود دعم للأجهزة لمعيار CAN2.0B.
إليك ما رأيته في إخراج CANL من "PIRS CAN-Ethernet" عند إرسال وحدتي بايت من البيانات [
0xF0 ] و [
0x0A ] عبر TCP \ IP:

ترتيب البتات رأسًا على عقب ، لكن يمكنك التعامل معه برمجيًا ، لكن من الصعب بالفعل القيام بشيء ما على مستوى التطبيق مع بدء البتات والإيقاف عبر كل بايت ، لأن يتم إدراجها في الأجهزة.
وهنا ما يجب أن يبدو عليه إطار CAN2.0B "الحقيقي" مع نفس وحدتي بايت من البيانات:

كما ترون من رسم الذبذبات ، بالإضافة إلى وحدات البايت للبيانات ، يحتوي الإطار على العديد من وحدات خدمة البروتوكول بالإضافة إلى وحدات حشو ، والأهم من ذلك ، أنها تتواصل بشكل مستمر دون أي بتات بداية وتوقف! (بالنسبة لأولئك المهتمين ، تحت المفسد وصفا مفصلا لهذه الحزمة).
المفسد
أول 4 بايت هي معرف الإطار. يمكنك معرفة المزيد حول تنسيق CAN من
[1] وبالتالي ، لم يكن من الممكن بالنسبة لي حل مشكلة عدم توافق إطارات CAN و UART باستخدام طريقة برمجية ، وبالنظر إلى نتائج البحوث المتوسطة بنظرة مخيبة للآمال ، فقد تقرر تطوير نموذجنا الأولي الخاص بالجهاز المطلوب.
نظرًا لأنه أصبح من الممكن الآن التحكم في مجموعة واسعة من الخصائص التقنية للجهاز ، تمت إضافة المتطلبات التالية:
3. القدرة على الطاقة من 12-24 فولت في أنظمة النقل ؛
4. وجود ذاكرة خارجية لتخزين السجلات.
5. أبعاد اللوحة ليست أكثر من 86x80mm.
6. نطاق درجة حرارة التشغيل -40..85 درجة مئوية
تم
اختيار منصة
STM32F407VET6 سيئة السمعة
[2] لتكون عقلاً للجهاز الجديد ، الذي يحتوي على دعم الأجهزة لجميع الواجهات الضرورية وإمدادات جيدة من ذاكرة الوصول العشوائي وذاكرة فلاش. بعد صقل الإنترنت ، تم اختيار
مودم الإرسال والاستقبال
DP83848IVV [3] ليكون PHY Ethernet ، والذي يحتوي ، في رأيي ، على وثائق جيدة وأمثلة كافية من أنظمة الاتصال والتوجيه. كذاكرة خارجية غير متقلبة لتخزين السجلات ، اخترت SPI FLASH 2 ميغابايت و SPI EEPROM لتخزين مجموعة متنوعة من الإعدادات. بالإضافة إلى ذلك ، حماية الطاقة ضد الجهد الزائد ، تم إضافة انعكاس القطبية. بعد الأمسيات N وعطلات نهاية الأسبوع M ، تم تجميع مخطط الدائرة وتتبع لوحة الدوائر المطبوعة لجهاز الإصدار الأول. لأن كانت هناك مساحة كافية على السبورة ، لكنني لم أرغب في ترك أرجل MK الخاملة ، بالإضافة إلى الوظيفة الرئيسية ، تمت إضافة اللوحة:
- أدوات تصحيح الأخطاء SW، JTAG؛
- التبديل 8-DIP.
- micro-USB (USB التسلسلي) ؛
- RS-232.
- UART.
- I2C.
- GPIO
كانت الفكرة أنه ، إذا لزم الأمر ، تكون اللوحة جاهزة لتوسيع الوظيفة عن طريق تثبيت مكونات إضافية. علاوة على ذلك ، لا تؤثر المقاعد الاحتياطية على تكلفة الإنتاج. من ناحية ، لسوء الحظ ، بسبب هذا ، لم يكن من الممكن ملائمة كل شيء ، لذلك تبين أن اللوحة ثنائية 86x80 مم ، دقيقة. عرض المسار 0.25mm ، حفرة قطرها دقيقة 0.6MM.
الإصدار الأول من تصميم ثنائي الفينيل متعدد الكلورفي وقت لاحق ، تم طلب عينات اختبار وتجميعها مع مجموعة كاملة من الأجهزة الطرفية للبحث. من أجل توفير المال ، تم صنع اللوحة بدون قناع وبالتالي فهي ذات لون غير معهود.

بمساعدة STM32CubeMX ، قمت برسم برنامج اختبار ثابت مع اختبار قابلية التشغيل للوحدات الطرفية الرئيسية للجهاز ، وكتقريب أولي ، نجح كل شيء ، باستثناء بدء تشغيل MC من الكوارتز الخارجي 8 MHz. اتضح ، بسبب خطأي في إعداد المواصفات ، أن لحام المكثفات الخاطئة كان ملحومًا. ولكن هذا لم يمنع STM32F407 من العمل مع مولد RC داخلي. عندما كنت قادراً على تنفيذ الأمر ping جهازي ، لم يكن هناك فرحة تقييد. لقد قضيت أطول وقت في تتبع PHY Ethernet. ثم في المتصفح ، رأيت صفحة http الخاصة بالاختبار وأهدرت الاختبار.
تم طلب إنتاج العينات الأولى للوحات في Zelenograd. وعلى الرغم من أن تكلفة "باستخدام" القناع و "بدون" كانت مختلفة مرتين تقريبًا ، لا أوصي بالقيام بذلك حتى في مرحلة النموذج الأولي ، لأنه كقاعدة عامة ، تظهر أخطاء التتبع في هذه المرحلة ويحدث شيء ما لحام. ولكن أن تكون في حالة سكر على المسارات "العارية" أمر مزعج للغاية ، يمكنك توفير المال ، ولكن لا يكاد أي أعصاب. نعم ، والتخمين إذا كان هناك استراحة قصيرة في مكان ما أو أن التتبع غير صحيح - مثل هذا السرور. بسبب قلة خبرتي في لحام مرنان الكوارتز ومكثفات الحمل ، قتلت عينة واحدة.
بحلول ذلك الوقت ، في العمل ، في الصناديق ، كان هناك قطعة حديد قادرة على حل مهمة التحويل في المشروع الحالي ، ولكن بالإضافة إلى الحجم والتكلفة الكبيرين ، بعد أن كتبت برنامجًا ثابتًا لذلك ، واجهت مشاكل متعلقة بحجم ذاكرة الوصول العشوائي والوظائف المقطوعة في مكدس TCP \ IP MK LPC2368. وبالتالي فإن الرغبة في جعل جهازك تكثف فقط.
بعد أن درست بعناية أوجه القصور في الإصدار الأول ، انتقلت إلى الإصدار الثاني ، دون التفكير مرتين. ومرة أخرى أردت أن أضيف "تراكم للمستقبل" ، ودمج المكونات التالية في عامل الشكل السابق:
- دعم RTC مع البطارية.
- RS-485.
- الصغير-SD.
- مكبر الصوت الطنان.
- القدرة على السلطة من USB.
- SPI إلى موصل خارجي.
- 5 فولت و 3.3 فولت السلطة إلى موصل خارجي.
من بين أمور أخرى ، تمت إضافة حماية الطاقة الحالية والثنائيات TVS على موصلات المستخدم.
والنتيجة هي نوع من لوحة dev مع إمكانية توصيل الوحدات الخارجية. هذه المرة طلبت لوحة في الصين. تم تنفيذ التجميع معنا.

النسخة الثانية من اللوحةفي الإصدار الثاني ، اكتشفت النمذجة ثلاثية الأبعاد في Altium Designer ، والتي ساعدت كثيرًا على تجنب الأخطاء في الموضع النسبي للمكونات من الجانبين (اتضح أن الإنترنت مليء بالفعل بنماذج جاهزة من مكونات SMD
[4] ). وهكذا ، تم إصلاح جميع أخطاء النسخة الأولى ، وأظهرت الابتكارات كفاءتها ، مما جعلني سعيدا للغاية.
البرامج الثابتة
وصف الكود خارج نطاق هذا الجزء ، ومع ذلك أود أن أقول بضع كلمات حول مكون البرنامج. في جهازي ، قررت استخدام مكدس FreeRTOS + LwIP. يوجد عدد كافٍ من المقالات حولها ، على سبيل المثال ،
[5] و
[6] ، لذلك يجب ألا يكون من الصعب ربطها بمشروعك. باختصار ، LwIP عبارة عن مكدس TCP \ IP للأنظمة المدمجة ، ويتميز بانخفاض استهلاك ذاكرة الوصول العشوائي وواجهة برمجة تطبيقات مريحة (حتى أن هناك غلاف مقبس BCD). لقد استخدمت واجهة برمجة تطبيقات netconn. عن طريق FreeRTOS ، يتم وضع كل عمل مكدس TCP \ IP في دفق منفصل عن التطبيق. بالإضافة إلى العمل الرئيسي (توصيل خادم TCP خارجي بحافلة CAN) ، يدور خادم ويب منفصل في دفق مستقل للوصول إلى إعدادات الجهاز. تهدف واجهة الويب هذه إلى مراقبة إعدادات الجهاز وتكوينها - إعداد أوضاع تشغيل مختلفة وسرعات نقل وعناوين وما إلى ذلك. لا أعرف حتى الآن ما إذا كان سيكون من الممكن إجراء تحديث للبرامج الثابتة من خلاله.
استنتاج
كان هذا هو أول مشروع لي (وأتمنى ألا يكون الأخير) بمثل هذا التعقيد ، وعلى الرغم من الأخطاء التي ارتكبت ، يمكن اعتبار الإصدار الثاني من اللوحة ناجحًا. في كل تكرار ، كان هناك الكثير من الشكوك ، لكن ، مرة أخرى ، أنا مقتنع بأنه إذا لم تحاول ، فلن يتحول شيء بالتأكيد.
المصادر المستخدمة
1.
ويكيبيديا / Controller_Area_Network2.
STM32F407VET6 ورقة البيانات3.
DP83848 ورقة البيانات4.
نماذج 3D5.
مقدمة إلى FreeRTOS6.
مقدمة ل LwIP