Search This Blog

Thursday, June 5, 2025

Exploring Edge AI with NXP's FRDM-MCXN947

Read this article in English

Auckland မှာ တလောက ကျင်းပတဲ့ NXP ရဲ့ NXP technology day ကို သွားဖြစ် လိုက်သေးတယ်။ သူတို့ရဲ့ နောက်ဆုံးပေါ် microcontroller တွေ၊ i.MX microprocessor တွေနဲ့ semiconductor technologies တွေ အဓိက ပြတာ။ NXP က ထိပ်သီး Dutch semiconductor ကုမ္ပဏီ တစ်ခု။ ပြီးတော့ automotive ၊ industrial ၊ IoT applications နဲ့ ဆိုင်တာတွေ အများဆုံး ထုတ်တယ်။ လက်ဟောင်း Philips နဲ့ Freescale ရဲ့ Kinetis MCU architecture တွေကို ပေါင်းစပ် လိုက်တဲ့ သူ့ ရဲ့ နောက်ဆုံးထွက် MCX microcontroller တွေထဲက MCXN947 ကိုတော့ တော်တော် သဘောကျတယ်။ ပါဝါ အစားနည်းပြီး၊ လုပ်ဆောင်မှု မြင့်မားတယ်။ နောက်ပြီး NPU ဆိုတဲ့ neural processing unit ပါတော့ on-device AI processing တွေ လုပ်ဆောင်နိုင် တယ်တဲ့။ Edge computing တွေ ပို ခေတ်စား လာတဲ့ အချိန်၊ ဒီလို energy-efficient ဖြစ်ပြီး၊ real-time AI ရတဲ့ hardware သေးသေး တွေက တော် တော် စိတ်ဝင်စား ဖို့ ကောင်းတယ်။


Hardware လိုအပ်ချက်

  • FRDM-MCXN947 - MCX N94/N54 MCU အတွက် development board။ I/O access နဲ့ serial interfaces တွေ အတွက် header တွေပါတယ်။ onboard flash memory နဲ့ integrated MCU-Link debugger တွေလည်းပါတဲ့ အပြင် ဆော့ဖ်ဝဲ နမူနာ တွေလည်း ပေးထားတယ်။
  • Accel 4 Click by Mikroe - Mikroe ရဲ့ three-axis acceleration sensor add-on board ။ သူ့ရဲ့ FXLS8974CF accelerometer က ±2g က နေ ±16g ထိ range တွေ ချိန်လို့ရပြီး SPI နဲ့ I2C communication တွေ သုံးလို့ရတယ်။


MCXN947 development board equipped with the Accel 4 Click add-on board.
Figure 1. FRDM-MCXN947 ဘုတ် နဲ့ သူပေါ် တပ်ထားတဲ့ Accel 4 Click ဘုတ်။


Software လိုအပ်ချက်

  • MCUXpresso IDE v24.12 နဲ့ နောက်ပိုင်း - Eclipse အခြေခံ တဲ့ IDE ဖြစ် ပြီး NXP MCU တွေ အတွက် အထူးပြု ပြင် ထားတာ။
    ဒီမှာ Download လုပ်ပါ။
  • eIQ Toolkit 1.14 - NXP processor တွေ အတွက် AI/ML development suite ပါ။ Install လုပ်တဲ့ အခါ မြန် အောင် optional add-ons တွေ မထည့် ပါနဲ့။
    Toolkit ကို ဒီမှာ Download လုပ်ပါ။
  • SDK 24.12 for FRDM-MCXN947 - Drivers တွေ middleware တွေ နဲ့ နမူနာ တွေ ပါတယ်။
    NXP ရဲ့ MCUXpresso Github repository ဒါမှမဟုတ် MCUXpresso SDK portal မှာ ရယူ နိုင်ပါတယ်။
MCUXpresso IDE ရဲ့ အောက်နားက "Installed SDKs" ဆိုတဲ့ tab ထဲ့ကို ZIP ဖိုင် drag and drop လုပ်ပြီး import လုပ်ပါ။

Classification ပရောဂျက် တစ်ခု တည်ဆောက်ခြင်း


1. Time Series Studio (TSS) ကို ဖွင့်ခြင်း

ပထမ eIQ Toolkit ကို ဖွင့်ပြီး "TIME SERIES" ခလုပ်ကို နှိပ်ရင် Time Series Studio (TSS) ပွင့်လာပါမယ်။ နောက် အဆင့် တွေ မှာ error မတက်အောင် eIQ Portal ကို ပိတ် မပစ်ပဲ၊ ဒီအတိုင်း ဆက်ဖွင့်ထားပါ။ TSS home screen မှာ နမူနာ applications တွေ တွေ့ ရပါလိမ့်မယ်။ 'Classification' ဆိုတဲ့ tab ကို ရွေးပါ။ "Fan State Monitoring Application" အောက်က "More" ကို နှိပ်ရင် သူနဲ့ ပတ်သက်တဲ့ အချက်အလက် အထောက်အကူ တွေ တွေ့ ရပါမယ်။


Figure 2. TSS ထဲမှာ တွေ့ ရတဲ့ Fan State Monitoring နမူနာ။



2. Sample Dataset ရယူခြင်း

အဲဒီ Fan State Monitoring ထဲကပဲ Dataset ခလုပ်ကို နှိပ်ပြီး Sample Dataset ကို ရယူနိုင်ပါတယ်။ ပုံမှန်အားဖြင့် အောက်က နေ ရာ မှာ သွားပြီး extract လုပ်ယူဖို့ လိုပါတယ်။
C:\Users\[username]\AppData\Roaming\time_series_studio\sample_dataset 

3. Project ဖန်တီးခြင်း

ဘယ်ဘက်က "Classification" ကို ရွေးပြီး၊ project tab ထဲက "Create New Project" ကို နှိပ်ပါ။


Figure 3. TSS ထဲ Classification project တစ်ခု ဖန်တီးခြင်း။


Default project name ကို သုံး ရင်သုံး၊ ဒါမှမဟုတ် စိတ်ကြိုက် project name တစ်ခု ကိုယ်ဟာကိုယ် ပေးပါ။ Target board အတွက် FRDM-MCXN947 ကို သုံးပါ။ Channel အရေ အတွက် က 3-axis accelerometer မို့ 3 ဖြည့် ပါမယ်။ Training data အတွက် က classes အရေ အတွက် က on, off, clog, နဲ့ friction အတွက် လေးမျိုး ဖြစ် တာကြောင့် 4 သုံးပါ။ ရလာမယ့် library က ပုံမှန် အားဖြင့် သေးတာကြောင့် ကန့်သတ်ချက် ပေးဖို့ မလို တဲ့ အတွက် max RAM နဲ့ max Flash ကို default values တွေ အတိုင်း ထားလိုက် ပါမယ်။ ပြီးရင် "Confirm and Create" ဆိုတဲ့ ခလုပ် ကို နှိပ်လိုက်ပါ။


Figure 4. Classification project တည်ဆောက်ခြင်း။



4. Train နဲ့ Validate လုပ်ခြင်း

အပေါ်က "Dataset" tab ကို ‌ရွေးပြီး ပထမ class အတွက် '+' သင်္ကေတ ကို နှိပ်ပြီး training data ကို import လုပ်ပါမယ်။ ခုနက extract လုပ်ထားတဲ့ ထဲက CSV file တစ်ခု ကို ရွေးပါမယ်။ delimiter အတွက် 'Space' ကို ရွေးပါ။ ပြီးရင် Class name အတွက် လည်း ရွေးတဲ့ CSV ဖိုင် အ လိုက် edit လုပ်ပေး နိုင် ပါတယ်။


Figure 5. Loading dataset.


အခြား class ၃ ခု အတွက်လည်း အဲလို ထပ်လုပ်ပါမယ်။ ပြီးတဲ့ အခါ sample chart မှာ ပုံပါ အတိုင်း even distribution ဖြစ် နေတာ မြင်ရ ပါမယ်။


Figure 6. Class ၄ ခုလုံး ထည့်ပြီး တဲ့ အခါ တွေ့ မြင် ရပုံ။


အပေါ် ဘက်က training tab ကို ရွေးပြီး၊ "Start New Training" ခလုပ်ကို နှိပ်ပါမယ်။ မြန်အောင် တက်လာတဲ့ dialog မှာ "Quick Search" ကို on ပေးပါမယ်။ ပြီးရင် train/validation ratio ကို သူ့ အတိုင်းပဲ ထားပြီး "Start" ကို နှိပ်နိုင်ပါတယ်။ Training လုပ်ပြီး သွားတဲ့ အခါ မှာ RAM နဲ့ flash အသုံးပြုမှု၊ confusion matrix စတာ တွေကို စစ်နိုင် ပါတယ်။


Figure 7. Training ရလဒ်။


ပြီးတဲ့ အခါမှာတော့ ရလာတဲ့ model ကို test dataset တွေ သုံးပြီး ပြန် validate လုပ်ပါမယ်။ "Emulation" tab ကို ရွေး၊ '37 RForest' စတဲ့ model တစ်ခု ကို ရွေး ပြီး new emulation ကို နှိပ်ပါမယ်။ တက်လာတဲ့ pop up window မှာ select ကို နှိပ်၊ သက်ဆိုင်ရာ test dataset ဖိုင် တွေကို ရွေး ပေး ပြီးရင် "start" နှိပ် ပေးရုံပါပဲ။


Figure 8. Test data များ ဖြင့် Emulation လုပ်ခြင်း။


ရရှိတဲ့ accuracy စတာ တွေကို ခွဲခြမ်း စိတ်ဖြာပြီး၊ report ကို download လုပ်လို့ လည်း ရပါတယ်။


Figure 9. Emulation ရလဒ် တင်ပြ မှု။



Model ကို အသုံးချခြင်း

အပေါ်နားက "Deployment" tab ကို သွားပြီး model နဲ့ toolchain ကို ‌ရွေးပါမယ်။ Library မလုပ်ပဲ MCUXpresso IDE project လိုချင်တာ ဖြစ် တဲ့ အတွက် "Library/Project" မှာ "Project" ကို ရွေးထားဖို့ လိုပါတယ်။ ပြီးတော့ "Generate" ကို နှိပ်လိုက်ရင် project ကို ZIP ဖိုင် အနေနဲ့ ရလာမှာ ဖြစ် ပါတယ်။


Figure 10. MCUXpresso IDE project ဖန်တီး ရယူခြင်း။



MCUXpresso IDE အသုံးပြု ခြင်း

MCUXpresso IDE ကို ဖွင့်ပြီး workspace ကို ‌သတ်မှတ် ပါမယ်။ ပေါ်လာတဲ့ welcome screen panel ကို ပိတ်မယ်။ ရှေ့ အဆင့်က ပြောထားတဲ့ အတိုင်း MCXN947 SDK က installed လုပ်ထားရပါမယ်။ ဘယ်ဘက် အောက်နားက Quickstart Panel ထဲက 'Import project(s) from file system...' ကို နှိပ်ပြီး ခုနက generate လုပ်ထားတဲ့ zip file ကို ရွေးပေးလိုက်ပါ။ ပြီးရင် 'Next' နဲ့ 'Finish'နှိပ်ပါ။


Figure 11. Project ကို MCUXpresso IDE သို့ Import လုပ်ခြင်း။


SDK version သတိပေးချက် ပေါ်လာရင် OK ပဲ နှိပ် ပေး လိုက်လို့ ရပါတယ်။ ညာဘက် အ ပေါ် နားက project tab ထဲမှာ project ပေါ် right click နှိပ်ပြီး ပုံမှာ ပြ ထား သလို 'rename' လုပ်ပါမယ်။


Figure 12. Project ကို နာမည် ပြောင်း ခြင်း။


Quickstart panel ထဲက 'Build' ကို နှိပ်ပြီး project ကို build လုပ်ကြည့် ပါမယ်.


Figure 13. Project ကို build လုပ်ကြည့် ခြင်း။


ကွန်ပျူတာ နဲ့ MCXN947 ဘုတ် ကို USB-C ကြိုးနဲ့ ဆက်လိုက်ပါမယ် (reset button SW1 နားက J17 အပေါက်ကိုပါ။) Windows device manager ထဲမှာ virtual com port တစ်ခု ပေါ် လာတာ တွေ့ နိုင် ပါတယ်။ အဲဒါ ကို serial terminal တစ်ခု ခု သုံးပြီး ဆက်လို့ ရပါတယ်။ ဒီ နမူနာ မှာတော့ MCUXpresso နဲ့ အတူပါတဲ့ built-in serial terminal ကို သုံးလိုက်ပါမယ်။ အောက်နားက "Terminal" tab ကို သွားပြီး သူ့ရဲ့ ညာဘက် အပေါ် နားက terminal icon လေးကို နှိပ်လိုက်ပါ။ Serial port ကို ရွေးပြီး baud rate ကို 115200 ထားပြီး ရင် OK နှိပ်ပြီး ဖွင့်လိုက်ပါ။ အားလုံး အဆင်ပြေ တာ သေချာပြီးတဲ့ အခါ အနီ ရောင် N ပုံစံ "Disconnect Terminal Connection" icon လေးနှိပ်ပြီး ပြန် ပိတ်ထားလိုက်ပါမယ်။


Figure 14. VCOM ကို ချိတ်ဆက် ကြည့် ခြင်း။


Quickstart panel ထဲက "Debug" ကို နှိပ် ပြီး hardware အတွက် pop up dialog ပေါ် လာရင် OK နှိပ် ပေး လိုက်ပါမယ်။ ဒါဆို MCUXpresso က board ထဲကို firmware download လုပ်ထည့်ပါလိမ့် မယ်။ အကယ်၍ primary core ကို သတ်မှတ် ရွေးချယ်ဖို့ dialog ပေါ် လာရင် default device 0 ကို ပဲ ရွေးပေးလိုက်ပါ။ ပြီးတဲ့ အခါ "Resume" (play button) ကို နှိပ်လိုက်ရင် program ကို run ပါလိမ့်မယ်။


Figure 15. Program ကို run ခြင်း။


Program ကို run ထားရင်း terminal tab ကို သုံးပြီး virtual com port ကို ဆက်လိုက်ပါမယ်။ အဲဒီ tab ပေါ် double click နှိပ်ပြီး maximize လုပ်ချင်ရင် လုပ်လို့ ရပါတယ်။ ပြီးရင် 'help' လို့ ရိုက်ထည့် လိုက်မယ် ဆိုရင် သုံးလို့ ရတဲ့ commands တွေ စာရင်း ပေါ် လာပါမယ်။ လော လော ဆယ် တော့ debugging ရပ်ဖို့ ခုနက play ရဲ့ ဘေးနား က 'Stop' icon ကို နှိပ်ပြီး ရပ် လိုက် ပါမယ်။


Figure 16. Serial terminal ကို အသုံးပြု ခြင်း။


Default project က simulated sensor data တွေ ကို သုံးတာ ဖြစ် တဲ့ အတွက် တပ်ထားတဲ့ ACCEL_4_CLICK board က hardware accelerometer ရဲ့တကယ့် data တွေ ကို သုံးဖို့ ပြု ပြင် မှု အနည်းငယ် လုပ်ပါမယ်။ hardware.c ဆိုတဲ့ ဖိုင် ကို ဖွင့် ပြီး reigster_sensor_hal_dummy lines (line 75 ~ 76) ကို comment လုပ်လိုက်ပါမယ်။ ပြီးရင် register_sensor_hal_FXLS8974 section (line 66 ~ 73) ကို uncomment လုပ်ပြီး save လိုက်ပါ။ ကိုယ့် sensor ကို HAL မှာ ဘယ်လို ထည့်ရလဲ ဆိုတဲ့ အသေးစိတ်ကို project ထဲက README.pdf ထဲမှာ ဖတ်လို့ ရပါတယ်။


Figure 17. Real hardware accelerometer ကို အသုံးပြု ခြင်း။


ပြီးတဲ့ အခါ project ကို ပြန် Build လုပ် ပြီး debugging ကို ပြန်စ လိုက်ပါမယ်။ နောက် ပြီး terminal ကို ပြန် ဆက် 'start pre' လို့ရိုက် ထည့် လိုက်ရင် classification result ကို prediction စလုပ်ပါလိမ့်မယ်။ အဲဒါကို ရပ်ချင်ရင် 'stop' လို့ ရိုက်ထည့် နိုင်ပါတယ်။


Data Logging


သုံးတဲ့ sensor နဲ့ output data rate (ODR), sample count (SC) စတာ တွေကို ကြည့် ချင်ရင် 'get info' ဆိုတဲ့ command ကို terminal မှာ ရိုက်ထည့် ပြီး စစ်လို့ ရပါတယ်။


Figure 18. အချက်အလက် ရယူ စစ်ဆေးခြင်း။


ဒီအထိ က TSS က sample dataset တွေ နဲ့ ပဲ သုံးနေ တာ။ ဒါကြောင့် ကိုယ့် ဟာကိုယ် training data set တွေ ဘယ်လို ရယူ မလဲ ဆက်ကြည့် ရအောင်။ Terminal ထဲမှာ 'start log' ကို ရိုက်ထည့် လိုက်ရင် sensor data တွေ ထုတ်ပေး တာကို terminal မှာ တွေ့ ရပါလိမ့်မယ်။ ဘုတ် ပေါ်က အပြာရောင် LED ကလည်း မှိတ်တုပ် မှိတ်တုပ် ဖြစ်နေ တာ တွေ့ရ မှာပါ။ အဲလို data တွေ printing ဖြစ် နေ တာ သေ ချာပြီ ဆို ဘုတ်ကို ဒီ အတိုင်းထားပြီး terminal ကို disconnect လုပ်လိုက်ပါ။


Figure 19. Data logging function ကို Confirm လုပ်ခြင်း။


TSS ကို ပြန်သွားပြီး "Data Logging" ကို သွားပါ။ မှန်ကန်တဲ့ com port နဲ့ baud rate ကို ရွေးပြီး connect ကို နှိပ်နိုင် ပါတယ်။ ပြီးရင် accelerometer ရဲ့ x,y, နဲ့ z axis သုံးခု အတွက် channel ကို 3 လို့ ထားပါ။ ပြီးရင် abnormality project အသစ် လုပ်မှာမို့ normal နဲ့ abnormal အတွက် classes ကို 2 လို့ ထားပါမယ်။ ညာဘက်က check mark ကို နှိပ်ထားပါမယ်။ normal condition အတွက် class 1 ဆိုပြီး စဖို့ ဖိုင်နာမည် ကို 'Normal_train.csv' လို့ ပေးနိုင် ပါတယ်။ ပြီးရင် training data အတွက် line 100 ကောက်မယ် လို့ ထားလိုက်ပါမယ်။ ဘုတ်ကို ငြိမ် ငြိမ် ထားပြီးရင် start ကို နှိပ်ပြီး normal training data စကောက် လိုက်ပါ။


Figure 19. Data ကောက်ခြင်း။


ပြီးသွားရင် 'open saved data set' ခလုပ်ကို နှိပ်ပြီး csv file ကို ကြည့် နိုင်ပါတယ်။ ပြီးရင် full path ကို ပြန်ရှာရ လွယ်အောင် Windows explorer ကို မပိတ်ပဲ ထားထားပါ။ နောက် test data အတွက် လည်း 50 lines စာ 'normal_test.csv' ဆိုတဲ့ ဖိုင်နာမည်နဲ့ ပြန် ထပ်ကောက် ပါ။

ပြီးရင် ခုနက အတိုင်း abnormal condition အတွက် လည်း ပြန် လုပ်ပါမယ်။ abnormal condition အတွက် ဒေတာ ကောက် တဲ့ အချိန်မှာ တော့ ဘုတ်ကို လက်ချောင်းလေးနဲ့ အသာအယာ ထိထိပြီး တုန်ခါမှု ဖြစ် အောင် လုပ်ပေး ထားလိုက်ပါ။ ပုံမှာလို ဒေတာ မှာ vibration ဖြစ် နေတာကို မြင် နေရ ပါလိမ့်မယ်။ ခုနက လို 'abnormal_train.csv' အတွက် 100 lines နဲ့ 'abnormal_test.csv' အတွက် 50 lines ကောက်လိုက် ပါမယ်။


Figure 20. Abnormal dataset အတွက် ဒေတာ ကောက်ခြင်း။



Anomaly Detection

TSS မှာ "Amonaly Detection" ကို နှိပ်ပါ။ ပြီးရင် Create new project လုပ်ပြီး project name ထည့်ပါ။ ထုံးစံ အတိုင်း target ကို MCXN947 ၊ နောက် number of channel ကို 3 ထား ပြီး confirm and create နှိပ်ပါမယ်။


Figure 21. Amonaly Detection project ဖန်တီးခြင်း။


"Dataset" tab ကို ဆက်သွား ပြီးရင် ခုနက ကောက် ထားတဲ့ normal နဲ့ abnormal training datasets တွေကို import လုပ်ပါ။


Figure 22. Datasets များကို import လုပ်ခြင်း။


ပြီးရင် Training tab ကို သွားပြီး new training ကို quick search enabled လုပ်ပြီး စတင်လိုက်ပါ။


Figure 23. Amonaly Detection model တစ်ခုကို Train လုပ်ခြင်း။


Train လုပ်ပြီး သွားတာနဲ့ emulation tab ကို သွား၊ normal နဲ့ abnormal test data တွေ ကို import လုပ်ပြီး PCA model ကို ရွေး၊ "New Emulation" ကို စတင်လိုက်ပါ။


Figure 24. Amonaly detection model ကို Emulation လုပ်ပြီး ပြန် စစ်ခြင်း။


အကယ်၍ model က OK တယ်ဆိုရင် "Deployment" tab ကို နှိပ်ပြီး project ကို generate လုပ်ဖို့ project option checkbox ကို ရွေးထားလိုက်ပါမယ်။ ပြီးရင် အရင် နမူနာ ကလိုပဲ generate လုပ်လိုက်ပါ။


Figure 25. Amonaly detection model ကို Deploy လုပ်ခြင်း။


MCUXpresso IDE ကို ပြန် ဖွင့် Quickstart panel tab ထဲက 'Import prorject form file system' ကို နှိပ်ပြီး ခုနက generate လုပ်ထားတဲ့ project ကို import လုပ်လိုက်ပါမယ်။ ခုနက project ကို နာမည် ပြောင်းမထားရင် နာမည်တူ project ဖြစ် နေတဲ့ အတွက် import လုပ်မရပဲ ပြဿနာတက်နိုင် ပါတယ်။ အဲဒါဆို ရှိပြီးသားဟာကို နာမည် ပြောင်း၊ ဒါမှမဟုတ် Delete လုပ်ပေးဖို့ လိုပါလိမ့်မယ်။ အဲဒီ generated zip file ကို MCUXpresso IDE ထဲ import လုပ်ပြီးရင် project နာမည်ကို MCXN947_anomaly_fan1 လို့ ပြောင်းလိုက်ပါမယ်။ ပြီးရင် hardware.c ကို ပြီးခဲ့ တဲ့ နမူနာ မှာ ဖော်ပြ ထားတဲ့ အတိုင်း real hardware accelerometer ကို သုံးဖို့ ပြင် လိုက်ပါမယ်။ နောက် project ကို build လုပ်၊ board ကို USB C cable နဲ့ ဆက်ထားပြီး debug ကို နှိပ်လိုက်ရင် firmware ကို ဒေါင်းလုပ် လုပ်ပြီး program ကို run ပါလိမ့်မယ်။ ခုနက လိုပဲ terminal ကို သွား virtual com port ကို ဆက်လိုက် ပြီး "get info" command နဲ့ sensor information ကို ပြန် စစ်ပါမယ်။ ပြီးတာနဲ့ "start pre" ကို ရိုက်ထည့်ပြီး prediction စတင်နိုင်ပါပြီ။ ဘုတ်က ငြိမ် နေရင် normal label ကို print လုပ်ပေးပြီး၊ လက်ချောင်းနဲ့ အသာအယာ ပုတ်ပေးရင်တော့ abnormal ပြ တာကို တွေ့ ရမှာပါ။


Figure 26. Amonaly detection model ကို Run ခြင်း။





Figure 27. Auckland မှာ ကျင်းပတဲ့ NXP technology day မှာ။


No comments:

Post a Comment