Proyek terbuka modul kontrol motor listrik. Teknologi pengembangan perangkat lunak


Menulis firmware untuk interior elektronik tertanam modern secara praktis tidak mungkin untuk ditulis dari awal. Mereka hanya tidak memberi waktu untuk ini. Oleh karena itu, perangkat lunak untuk sistem tertanam didasarkan pada
platform perangkat lunak siap pakai - kerangka kerja. Semakin banyak dikembangkan kerangka kerja, semakin cepat perkembangannya. Di sini kita akan berbicara tentang kerangka kerja yang saya buat khusus untuk modul kontrol motor dan telah berhasil digunakan untuk beberapa waktu sekarang.

Arsitektur kerangka kerja.


Kerangka kerja ini dirancang untuk bekerja pada platform terbuka dari modul kontrol motor universal DMC v2.0 .

Arsitektur logis dari kerangka kerja dapat digambarkan sebagai diagram blok, yang ditunjukkan di bawah ini. Dalam diagram alur, daftar lengkap semua komponen kerangka dihilangkan, karena ini akan merusak kejelasan, tetapi untuk ide umum, saya pikir, rincian sudah cukup.


(Klik untuk memperbesar)

Kerangka kerja ini tidak memiliki versi, sedang dalam pengembangan konstan, dan di sini saya hanya mencoba untuk memperbaiki keadaan saat ini, yang diposting di GitHub.

Dari sudut pandang modul perangkat lunak, kerangka kerja berisi bagian-bagian utama berikut:

- Satu set modul dukungan tingkat aplikasi
- Sistem operasi MQX waktu-nyata.
- Middleware: sistem file, shell perintah, tumpukan protokol komunikasi , dll.
- Paket dukungan papan tingkat rendah (BSP), yang mencakup akses ke periferal papan modul BLEZ66V1 dan modul daya.
- Paket perangkat lunak untuk pemantauan, debugging, dan diagnostik - FreeMaster .
- Alat debug termasuk RTT , penelusuran alat ITM , penebang, terminal VT100 .
- Modul untuk menghasilkan file parameter.
- Modul kode sumber yang dihasilkan berdasarkan algoritma di Matlab .

Mengapa MQX dipilih?


Sistem operasi waktu nyata (RTOS) MQX telah lama dikenal, tetapi
muncul di domain publik beberapa tahun yang lalu. Sistem operasi ini diunggah oleh Freescal sebelum NXP membelinya. RTOS awalnya memiliki lisensi hanya untuk digunakan dalam mikrokontroler Freescale, sekarang lisensi juga meluas ke produk NXP. RTOS selamat dari ledakan popularitas, melalui beberapa upgrade ke versi 4.2, setelah itu Freescale memutuskan untuk membuat versi berikutnya komersial lagi. Jadi ternyata dua versi, satu terbuka dan beku dalam pengembangan yang disebut MQX Classic (alias MQX v4.2) dan komersial MQX 5.0 tertutup.

Dalam kerangka yang dijelaskan, cabang MQX Classic v4.2 digunakan. Ini adalah versi stabil dan teruji. Lisensi memungkinkan pengembang untuk memodifikasi kode sumber MQX Classic dan menggunakannya dalam produk komersial, namun, itu tidak memungkinkan publikasi MQX Classic dalam bentuk sumber. Tetapi ini seharusnya tidak menjadi masalah, karena MQX Classic tersedia untuk diunduh gratis.

Struktur RTOS secara umum terlihat seperti ini:



Mengapa saya perlu RTOS?


Sebuah aplikasi yang kompleks di mana, khususnya, kontrol motor diperlukan cukup kompleks dan terdiri dari banyak tugas asinkron, masing-masing dengan siklus pengulangan sendiri dan peristiwa pengaktifan dan penghentiannya. Jika kita melakukan semua tugas ini dalam satu supercycle, maka kita pasti akan menghadapi masalah menunda eksekusi beberapa tugas oleh tugas lain.
Menggunakan RTOS, seperti MQX, adalah mungkin untuk menghilangkan saling ketergantungan tugas-tugas individu pada sumbu waktu tanpa menulis ulang atau bahkan melihat kode sumber mereka.

Sebagai contoh, tugas logger kami dapat mencoba untuk menulis pesan selama yang diinginkan pada kartu SD menunggu jawabannya, tugas USB semua dapat masuk ke mentransfer sejumlah besar data ke komputer, tetapi pada saat yang sama tugas PID dari algoritma motor akan dilakukan secara ketat pada interval yang ditentukan, dan tugas pengukuran kecepatan rotasi tidak akan melewatkan acara perubahan sinyal encoder tunggal.

Meskipun harus saya akui, ada cara lain yang semakin populer untuk menghilangkan kompleksitas pada satu chip - beralih ke multi-pemrosesan, tetapi dalam hal ini, RTOS akan memberikan layanan yang baik.

Keuntungan utama dari RTOS MQX.

- Kernel sistem dilengkapi dengan berbagai middleware termasuk sistem file, tumpukan TCP / IP, tumpukan USB, shell perintah, dll. Semuanya ada dalam kode sumber.

- Set BSP siap pakai untuk papan yang berbeda, menghilangkan kebutuhan untuk menulis perpustakaan kerja periferal Anda sendiri.
- Dokumentasi terperinci dalam file pdf dengan navigasi yang mudah.
- Kehadiran plug-in untuk IDE IAR tertanam meja kerja dengan informasi yang sangat rinci tentang struktur internal RTOS, jauh lebih rinci daripada untuk RTOS terkenal lainnya - uCOS dan FreeRTOS.
- Banyak contoh aplikasi RTOS dan kasus uji.

Ketika berbicara tentang RTOS, mereka selalu menekankan kemampuan mereka untuk menyelesaikan tugas tepat waktu, tetapi perkiraan kuantitatif paling sering tidak diberikan atau diberikan untuk beberapa platform pihak ketiga yang dipilih secara terpisah. Ini jelas tidak cukup untuk menerapkan kontrol real-time yang sulit menggunakan RTOS. Dan untuk mengendalikan mesin, Anda membutuhkan waktu nyata yang sulit.

MQX memiliki test case yang luar biasa dalam hal ini, yang memungkinkan Anda untuk mendapatkan tabel terperinci dari waktu eksekusi semua layanan pada platform tempat Anda meluncurkan tes.

Di bawah ini adalah tabel waktu eksekusi layanan pada mikrokontroler modul kontrol motor kami, dengan optimisasi maksimum untuk kecepatan eksekusi kode yang termasuk dalam kompiler.

Waktu Pelaksanaan Layanan RTOS MQX Classic




Tabel ini juga memberikan gambaran tentang layanan mana yang didukung oleh RTOS dan opsi kernel apa yang tersedia. Proyek uji dalam IDE IAR termasuk dalam kerangka kerja yang diterbitkan.

Komposisi Direktori Proyek


Direktori root dari kerangka kerja terlihat seperti ini:


APP_SRC - direktori yang berisi semua sumber kecuali yang milik distribusi MQX.
FreeMaster_apps - memproyeksikan file untuk dieksekusi di lingkungan FreeMaster .
IAR_proj - ruang kerja dan file proyek untuk workbench tertanam IAR untuk lingkungan ARM v7.70.2. Dalam lingkungan ini, aplikasi final dikompilasi dan didebug.
MQX_SRC adalah direktori yang berisi semua sumber MQX dan middleware yang disertakan dengan MQX. Karena lisensi tidak mengizinkan penerbitan sumber terbuka dari distribusi MQX, tidak ada file ' .s' dan ' .s' di direktori ini. Tetapi mereka yang menyetujui persyaratan lisensi NXP dapat dikirim file yang hilang.
ParametersManager - direktori program manajer parameter. Dengan menggunakan program ini, daftar parameter aplikasi dibuat dan file ' .s' dan ' .h' dihasilkan dengan deklarasi parameter untuk disematkan dalam aplikasi.
TEST - direktori dengan proyek uji kerangka kerja. Berikut adalah proyek MQX_benchmark untuk menghasilkan laporan dengan timing MQX.

File MQX_LIBRARY_O0.a dan MQX_LIBRARY_O3.a adalah isi dari direktori MQX_SRC yang dikompilasi menjadi perpustakaan dengan masing-masing optimasi minimal dan optimalisasi maksimum.

Isi direktori IAR_proj



File U3HB_full.eww dan U3HB_MQXLib.eww adalah file ruang kerja IAR .
Selama tidak ada sumber di direktori MQX, hanya file U3HB_MQXLib.eww yang akan berfungsi . Ruang kerja ini menggunakan pustaka MQX yang dikompilasi. Di ruang kerja U3HB_full.eww, sumber MQX lengkap dikompilasi. Direktori OUT berfungsi sebagai tempat di mana IAR menempatkan produk kerjanya, dalam file peta dan hex tertentu.

Direktori pengaturan secara otomatis dibuat oleh IAR. Ini secara khusus menyimpan pengaturan debugger. Jika sesuatu tidak dapat dikonfigurasi selama debugging di IAR, maka kadang-kadang ada baiknya menghapus direktori ini.

File INT_FLASH_MK66FX1M0LVQ18.icf adalah file konfigurasi IAR linker. Ini menentukan alamat wilayah memori di mana linker menempatkan kode, data, vektor interupsi, tumpukan, dll.

Isi direktori MQX_SRC



File workspace MQX_LIBRARY.eww digunakan untuk membuat pustaka MQX. Sampai file ' .s ' dan ' .s' ditempatkan di direktori, proyek ini tidak akan dikompilasi.
config - direktori dengan file konfigurasi MQX. Komposisi layanan dan driver MQX ditentukan dalam file konfigurasi user_config.h .
mfs - sistem file MQX, termasuk FAT32 dan RAM FS
mqx - inti MQX mencakup subdirektori berikut:


rtcs - TCP / IP stack. Ini termasuk subdirektori berikut:


shell - direktori dengan file shell.
usb - direktori dengan file tumpukan USB

Fungsi setiap modul perangkat lunak MQX didokumentasikan dengan baik oleh pabrikan. Sebagai contoh, saya akan memberikan tautan ke dua dokumen:

Petunjuk untuk menggunakan MQX .
Panduan Referensi MQX.
Sisanya harus dicari dalam distribusi, yang tersedia di situs web NXP .

Kerangka itu sendiri ada di repositori di sini .

Penjelasan lebih lanjut tentang bekerja dengan perangkat lunak dan contoh aplikasi dapat ditemukan di artikel berikut.

Source: https://habr.com/ru/post/id403525/


All Articles