ম্যানুফ্যাকচারিং ও অটোমেশনের জন্য ESP32 ফার্মওয়্যার
ফ্যাক্টরি ফ্লোরে একটি মিসড ডেডলাইন বা হ্যাং হওয়া টাস্ক শুধু একটি হারানো স্যাম্পল নয়, এটি একটি চলমান অক্ষ যা থামে না। মেশিন কন্ট্রোলের জন্য ESP32 ফার্মওয়্যারকে আমরা সবার আগে একটি সেফটি ও টাইমিং সমস্যা হিসেবে দেখি: সীমাবদ্ধ লুপ, watchdog দিয়ে প্রয়োগ করা ফেল-স্টেট এবং এমন আইসোলেশন যা একটি brownout-ও টিকে থাকে। ফলাফল হলো এমন ফার্মওয়্যার যা র্যান্ডম অবস্থার বদলে একটি পরিচিত-নিরাপদ অবস্থায় ডিগ্রেড হয়।
Challenges specific to Manufacturing & Automation
ফার্মওয়্যার ফল্টের সময় PWM গ্লিচ
ক্র্যাশ বা রিবুট হওয়া একটি ESP32 LEDC/MCPWM আউটপুটকে ফ্লোটিং বা স্টাক-হাই রেখে দিতে পারে, যা সেফ স্টপে কোস্ট করার বদলে একটি VFD বা servo-কে ফুল কমান্ডে ঠেলে দেয়।
E-stop শুধু সফটওয়্যারে হ্যান্ডল করা
যখন স্টপ সার্কিট একটি GPIO ISR-এর মধ্য দিয়ে চলে, তখন একটি watchdog reset বা stack overflow স্টপকে বিলম্বিত বা গ্রাস করতে পারে, যা সবচেয়ে মৌলিক মেশিন-সেফটি প্রত্যাশা লঙ্ঘন করে।
লোডের অধীনে এনকোডার কাউন্ট হারানো
শেয়ার্ড GPIO-তে সফটওয়্যার এজ-কাউন্টিং Wi-Fi বার্স্ট বা interrupt storm-এর সময় পালস মিস করে, তাই পজিশন ড্রিফট করে এবং মেশিন ভুল স্টেশনে ইনডেক্স করে।
গ্রাউন্ড লুপ 24V I/O নষ্ট করছে
ESP32 গ্রাউন্ডকে VFD ও contactor পাওয়ারের সাথে শেয়ার করলে সুইচিং নয়েজ ও inrush ট্রান্সিয়েন্ট ইনজেক্ট হয়, যা MCU রিসেট করে বা contactor ইনপুটকে ভুলভাবে ট্রিগার করে।
নন-ডিটারমিনিস্টিক লুপ টাইমিং
কন্ট্রোল পাথের ভেতরে ব্লকিং MQTT, NVS রাইট বা লগিং একটি 1 ms লুপকে কয়েক দশ মিলিসেকেন্ডে প্রসারিত করে, যা ক্লোজড-লুপ মোশনকে jittery ও অপুনরাবৃত্তিযোগ্য করে তোলে।
পাওয়ার ব্লিপের পরে অনিরাপদ অবস্থা
রাইট চলাকালীন brownout আউটপুট ও NVS-কে একটি অসংজ্ঞায়িত অবস্থায় ফেলে রাখে, তাই মেশিন রিলে এনার্জাইজড অবস্থায় এবং অপারেটরের কোনো স্বীকৃতি ছাড়াই সাইকেলের মাঝপথে রিস্টার্ট হয়।
How GizanTech solves them
- হার্ডওয়্যার-ফোর্সড সেফ আউটপুট. মোটর কমান্ড MCPWM-এর মাধ্যমে চালান, যেখানে fault ইনপুট আউটপুটকে low-এ ফোর্স করার জন্য ওয়্যার্ড থাকে, সাথে এক্সটার্নাল পুল-ডাউন থাকে যাতে একটি হ্যাং বা রিসেট হওয়া ESP32 ফুল স্পিডে নয়, জিরো কমান্ডে পৌঁছায়।
- সফটওয়্যার ইকোসহ হার্ডওয়্যার্ড E-stop. E-stop-কে একটি হার্ডওয়্যার সেফটি রিলের (Category 1/PLd ধরনের) মাধ্যমে রুট করুন যা MCU থেকে স্বাধীনভাবে contactor ড্রপ করে; ফার্মওয়্যার শুধু ল্যাচড অবস্থা পর্যবেক্ষণ করে এবং বাসের মাধ্যমে রিপোর্ট করে।
- হার্ডওয়্যার quadrature ডিকোডিং. গ্লিচ-ফিল্টার্ড quadrature কাউন্টিংয়ের জন্য ESP32 PCNT পেরিফেরাল ব্যবহার করুন যাতে CPU contention-এর কারণে পালস না হারিয়ে এনকোডার পজিশন Wi-Fi বার্স্ট ও ISR লোড টিকে থাকে।
- গ্যালভানিক I/O আইসোলেশন. অপ্টো-আইসোলেটেড 24V ইনপুট এবং MCU রেলের জন্য আইসোলেটেড DC-DC নির্দিষ্ট করুন, যা IEC 61131-2 ইনপুট থ্রেশহোল্ড অনুযায়ী লজিক ও contactor/VFD পাওয়ারের মধ্যে গ্রাউন্ড লুপ ভেঙে দেয়।
- কোর-পিনড ডিটারমিনিস্টিক লুপ. কন্ট্রোল টাস্ককে একটি FreeRTOS কোরে পিন করুন এবং নেটওয়ার্ক/টেলিমেট্রি স্ট্যাক অন্যটিতে রাখুন, NVS ও MQTT-কে হট পাথ থেকে দূরে রাখুন যাতে লুপ jitter একটি সীমাবদ্ধ বাজেটের মধ্যে থাকে।
- Watchdog-প্রয়োগকৃত ফেল-স্টেট. task watchdog ও brownout detector আর্ম করুন যাতে যেকোনো হ্যাং বা পাওয়ার ডিপ একটি সংজ্ঞায়িত reset-to-safe সিকোয়েন্স চালায়: আউটপুট ডি-এনার্জাইজড, contactor ওপেন, এবং অপারেটর রিসেটের জন্য fault ফ্ল্যাগ স্থায়ীভাবে সংরক্ষিত।
| I/O টাইপ | কন্ট্রোল-লুপ latency প্রয়োজনীয়তা | ফার্মওয়্যার ক্র্যাশে ফেল-সেফ আচরণ | আইসোলেশন প্রয়োজন |
|---|---|---|---|
| মোটর ড্রাইভ (VFD/servo) | ≤ 1 ms PWM আপডেট, ডিটারমিনিস্টিক | MCPWM fault আউটপুট low-এ ফোর্স করে → ড্রাইভ কোস্ট/ramp করে স্টপে | ড্রাইভ গ্রাউন্ডে আইসোলেটেড PWM/analog ref |
| রিলে / contactor | ≤ 10 ms অ্যাকচুয়েশন, debounced | রিসেটে coil ডি-এনার্জাইজ হয় → contactor ওপেন (normally-open) | 24V coil রেল থেকে অপ্টো/রিলে আইসোলেশন |
| এনকোডার / কাউন্টার | হার্ডওয়্যার PCNT, কোনো মিসড এজ নেই | পেরিফেরালে কাউন্ট ল্যাচড, রিস্টার্টে re-homed | দীর্ঘ ক্যাবল রানের জন্য ডিফারেনশিয়াল/আইসোলেটেড |
| E-stop / interlock | হার্ডওয়্যার-ল্যাচড, ওপেন হতে < 1 ms | সেফটি রিলে MCU থেকে স্বাধীনভাবে ড্রপ করে; ফার্মওয়্যার শুধু echo করে | সম্পূর্ণ আইসোলেটেড dual-channel সেফটি লুপ |
Go deeper
ESP32 Firmware & IoT Development for other industries
Frequently asked questions
ESP32 নিজেই কি একটি E-stop-এর জন্য সেফটি কন্ট্রোলার হতে পারে?
না। আমরা E-stop-কে একটি হার্ডওয়্যার্ড সেফটি রিলেতে রাখি যাতে ফার্মওয়্যার হ্যাং করলেও মেশিন থামে; ESP32 শুধু ল্যাচড অবস্থা মনিটর করে এবং ডায়াগনস্টিকস ও HMI-এর জন্য রিপোর্ট করে।
Wi-Fi-সংযুক্ত ফার্মওয়্যারে আপনি কীভাবে একটি ডিটারমিনিস্টিক কন্ট্রোল লুপের নিশ্চয়তা দেন?
আমরা কন্ট্রোল টাস্ককে একটি FreeRTOS কোরে পিন করি এবং নেটওয়ার্কিং স্ট্যাক অন্যটিতে আইসোলেট করি, NVS রাইট ও MQTT-কে হট পাথ থেকে দূরে রাখি, এবং নেটওয়ার্ক লোডের অধীনে logic-analyzer ট্রেস দিয়ে worst-case লুপ jitter যাচাই করি।
ফার্মওয়্যার ক্র্যাশ বা brownout হলে আউটপুটের কী হয়?
প্রতিটি আউটপুট একটি ডি-এনার্জাইজড অবস্থায় ফেল করার জন্য ডিজাইন করা: MCPWM fault ইনপুট PWM-কে low-এ ফোর্স করে, রিসেটে contactor coil ড্রপ করে, এবং রিকভারির আগে brownout detector একটি সংজ্ঞায়িত reset-to-safe সিকোয়েন্স ট্রিগার করে।
ফার্মওয়্যার কি আমাদের বিদ্যমান PLC ও VFD-এর সাথে কাজ করবে?
হ্যাঁ। আমরা Modbus RTU/TCP, analog 0-10V বা 4-20mA রেফারেন্স এবং IEC 61131-2 থ্রেশহোল্ডে ডিজিটাল 24V I/O-এর মাধ্যমে ইন্টিগ্রেট করি, তাই ESP32 নোড আপনার সেফটি চেইন প্রতিস্থাপন না করে PLC-এর পাশে বসে।
VFD ও contactor সুইচিং নয়েজ থেকে আপনি কীভাবে ESP32-কে সুরক্ষিত রাখেন?
আমরা opto দিয়ে 24V ইনপুট গ্যালভানিকভাবে আইসোলেট করি, একটি আইসোলেটেড DC-DC থেকে MCU-কে পাওয়ার দিই, এবং লজিক ও পাওয়ার গ্রাউন্ড আলাদা করি, যা spurious রিসেট ও ভুল ইনপুট ট্রিগারের কারণ হওয়া গ্রাউন্ড লুপ ভেঙে দেয়।
যে মেশিন থামানো যায় না, সেগুলোতে কি আপনি OTA আপডেট দেন?
হ্যাঁ, A/B পার্টিশন ও rollback সহ, এবং আমরা আপডেট গেট করি যাতে মেশিন একটি idle/safe অবস্থা রিপোর্ট করলেই কেবল সেগুলো প্রয়োগ হয়, কখনো সাইকেলের মাঝপথে নয়, এবং নতুন ইমেজ তার post-boot self-check-এ ব্যর্থ হলে স্বয়ংক্রিয় revert সহ।