Proyek yang bagus. Berikut adalah beberapa petunjuk, tetapi akan sulit untuk menggeneralisasi ini untuk setiap proyek.
Mulai dengan persyaratan komputasi
Inilah yang akan memberi tahu Anda inti seperti apa yang Anda butuhkan dan penampilan umum MCU. Saya sarankan Anda mulai dengan ini, karena jelas tidak dapat diperpanjang menggunakan komponen eksternal, tidak seperti periferal.
Pertama, tampaknya Anda menggunakan operasi matematika yang berat dengan bilangan bulat besar dalam loop. Jadi, seperti yang Anda sarankan, 32 bit akan berguna di sini, jadi ARM datang sebagai kandidat yang ideal. Adapun frekuensi operasi: saat ini, Anda menggunakan Arduino MEGA2560 (berjalan pada 16MHz, saya asumsikan) dan Anda dapat membuat 10 loop / s. Jika Anda ingin mencapai 100 loop / s, Anda harus baik-baik saja dengan Cortex-M3 / M4 di kisaran 100MHz atau lebih (perkiraan kasar). Perhatikan bahwa Cortex-M4F memiliki unit floating point.
Kami sudah mempersempit pilihan.
Persyaratan memori
Yang ini mudah: pilih MCU yang memiliki RAM / Flash paling banyak untuk prototipe. Setelah Anda memvalidasi prototipe, beralihlah ke MCU dari rentang yang sama yang hanya memiliki cukup RAM / Flash, sekarang Anda tahu persyaratan yang tepat.
Perhatikan bahwa saya tidak berpikir aplikasi Anda membutuhkan jumlah memori yang luar biasa.
Sekarang, peripheral
Anda benar-benar membutuhkan ADC. Semua MCU dari rentang yang kami lihat memiliki beberapa, jadi itu bukan kriteria yang berguna. Tidak pula input / output digital, kecuali jika Anda membutuhkan jumlah yang sangat besar (yang tampaknya tidak menjadi kasus Anda).
Anda tampaknya membutuhkan DAC. Namun, ini adalah sesuatu yang tidak akan Anda temukan dengan mudah dan akan terlalu mempersempit kandidat. Jadi kami tidak memenuhi persyaratan itu dan kami akan tetap menggunakan PWM dan lowpass (yang tentu saja dapat diterima, sebenarnya).
Anda tidak menyebutkan antarmuka komunikasi apa pun, kecuali LCD (nantinya). Bagaimanapun, semua MCU memiliki I2C / SPI / UART / ... jika Anda memerlukannya.
LCD
Yang ini lebih sulit, karena ada banyak solusi berbeda yang memberikan persyaratan yang sama sekali berbeda pada MCU. Tetapi jangan memilih LCD tergantung pada MCU. Pilih LCD yang Anda inginkan untuk produk Anda dan kemudian pilih MCU yang akan mendorongnya secara efisien.
- Jika Anda menginginkan LCD karakter: maka MCU termudah dan paling tidak adalah berbicara dengannya melalui beberapa antarmuka serial (sering SPI). Dengan cara ini tidak akan menggunakan terlalu banyak PIN, Anda dapat menggunakan MCU yang lebih kecil / lebih murah dan kecepatan tidak menjadi masalah.
- Jika Anda menginginkan LCD grafis TFT: jika ukurannya kecil, tautan serialnya masih sesuai. Namun, untuk 320x200 atau lebih besar dan jika Anda ingin memiliki antarmuka grafis yang bagus, Anda akan mulai ingin berkomunikasi dengan antarmuka paralel. Dalam hal ini, apakah Anda menggunakan beberapa GPIO (tapi itu akan menempatkan lebih banyak beban pada MCU karena Anda harus menggigit garis kontrol) atau Anda memilih MCU yang memiliki antarmuka LCD khusus (yang sering sama dengan antarmuka memori eksternal). Yang terakhir ini menempatkan kendala kuat pilihan MCU, tetapi Anda tidak memiliki kendala kuat lainnya, jadi ...
Sekarang kamu pilih
Buka situs web ST Micro / NXP / Atmel dan gunakan alat bantu seleksi MCU mereka. Anda juga akan menghabiskan banyak waktu membaca lembar data. Ambil waktu ini. Itu tidak sia-sia. Apa pun yang akan Anda pelajari di sini, bahkan jika Anda tidak menggunakannya secara khusus untuk proyek ini, dapat bermanfaat.
Pada titik ini, Anda juga perlu melihat jumlah PIN yang sebenarnya Anda perlukan dan memeriksa skema multiplexing dari calon MCU yang dipilih untuk memverifikasi bahwa Anda dapat menggunakan semua fungsi PIN yang Anda butuhkan. Karena jelas, Anda ingin mengambil MCU dengan jumlah pin terendah yang memenuhi persyaratan Anda (untuk alasan real estat biaya / PCB).
Periksa harga / ketersediaan di Mouser / Digikey. Tetapi Anda tidak perlu membutuhkan sesuatu yang mahal di sini. Mungkin 5 € atau lebih.
Hal terakhir tentang kontrol LCD
Sepertinya pembaruan LCD adalah bagian dari loop utama Anda. Seharusnya tidak. Terutama jika Anda mengulang 100 kali per detik, itu tidak berguna. Buat loop kontrol menghitung semuanya dan sesuaikan perintah motor pada setiap iterasi, tetapi perbarui saja nilai-nilai untuk ditampilkan di suatu tempat di memori. Kemudian, minta lingkaran lain dengan prioritas lebih rendah menampilkan informasi ini kepada pengguna ketika tidak ada yang lebih penting untuk dilakukan.
Ya, idealnya, itu membutuhkan beberapa pengalihan tugas dan lainnya. OS yang sebenarnya, sebenarnya (lihat FreeRTOS, Coocox OS, Nuttx, ... mereka sangat kecil, sebagian besar digunakan pada Cortex-M, dan menyediakan mekanisme multitasking yang diperlukan).