Bagaimana cara saya membuat daftar persyaratan untuk mikrokontroler untuk proyek saya? Bagaimana saya dapat menemukan mikrokontroler yang sesuai?

20

Saya telah mengerjakan proyek kontrol eBike di Arduino MEGA2560. Program ini menjalankan loop kontrol PID 3x, satu loop kontrol kapasitas baterai (interpolasi berdasarkan tabel pencarian), speedometer (sampel berdasarkan reed switch) serta layar LCD untuk menampilkan informasi. Inputnya adalah 3 sinyal analog: tegangan baterai, input throttle saat ini dan pengguna serta input digital: speedometer (saklar buluh) sinyal on / off. Saat ini, dengan semua ini berjalan pada aritmatika "panjang" Arduino berhasil menyelesaikan 10 loop per detik. Karena layar LCD TFT membutuhkan daya komputasi yang luar biasa, saya berpikir untuk menggantinya dengan layar alfanumerik.

Keluaran terdiri dari sinyal throttle analog yang menuju ke pengontrol motor, layar LCD dan beberapa perangkat lain yang membutuhkan sinyal analog. Jadi, konverter ADC sangat penting dan DAC akan sangat berguna walaupun saya saat ini menggunakan output Arduino PWM dengan filter low pass RC. Demikian pula, kapasitas untuk membaca sinyal digital dan analog tanpa mengganggu prosesor akan lebih baik.

Saya ingin berpotensi membuat produk konsumen dari ini, maka saya ingin membangun platform saya sendiri dari bawah ke atas dengan mikrokontroler yang berbeda yang dapat memberi saya setidaknya 100 sampel per detik (10 kali lipat apa yang dicapai Arduino). Juga, untuk menghindari floating point, perhitungan saya menggunakan variabel panjang dan akibatnya angka lebih besar dari 16 bit, jadi saya mengasumsikan MCU 32bit akan menjadi ide yang bagus. Juga, seorang MCU yang mampu melakukan perhitungan floating point bisa menarik untuk menyederhanakan matematika dalam kode.

Pada akhirnya saya tidak yakin bagaimana memulai mencari MCU yang akan memenuhi persyaratan ini dan memungkinkan transisi cepat dari lingkungan Arduino. Setiap panduan tentang cara mencari MCU seperti itu akan sangat dihargai!

Eliott W
sumber
1
Saya tidak perlu ingin menjadi bagian yang direkomendasikan tetapi hanya metode atau platform atau panduan tentang cara menemukan platform yang saya butuhkan.
Eliott W
5
Ini jauh lebih baik daripada pertanyaan Anda sebelumnya, tetapi masih sangat luas, dan beberapa poin dalam persyaratan Anda tidak jelas. Misalnya, apa maksud Anda, "tanpa mengganggu prosesor"? Saya menduga Anda juga tidak benar-benar ingin melakukan polling I / O. Anda juga perlu mendapatkan penanganan yang lebih baik tentang berapa banyak komputasi yang perlu dilakukan pada setiap set sampel.
Dave Tweed
1
Anda harus mempertimbangkan menggunakan bilangan bulat matematika. Itu hal yang benar untuk dilakukan.
Scott Seidman
4
terkait: Bagaimana memilih platform MCU?
Nick Alexeev
4
Matematika integer, panjang atau pendek, jauh lebih cepat daripada floating point; dan bilangan bulat matematika yang lebih panjang dari kedalaman "asli" prosesor juga akan lambat. Jadi 32-bit terdengar seperti ide yang sangat bagus, mungkin salah satu dari perangkat tipe "DSP".
pjc50

Jawaban:

18

(Ini adalah panduan umum. Saya kira Anda juga bisa mendapat manfaat dari optimasi kode, tapi itu di luar cakupan situs web ini.)

Langkah 1: Ukuran kasar, anggaran, vendor

Pilih salah satu dari:

  • Komputer (Raspberry Pi, Beagleboard, papan PC104, Intel Edison, dll). Boot sebuah sistem operasi serba guna dan memiliki banyak kekuatan pemrosesan. Lebih mahal dan haus kekuasaan. $ 10- $ 100.

  • MCU besar. ARM Cortex-A / PIC32 / dsPIC / AVR32 / TI C seri DSP dll. Daya komputasi yang layak, OS opsional. ~ $ 5.

  • MCU kecil. Cortex-M / PIC16. Tidak cukup ruang untuk OS yang sebenarnya, mungkin hanya penjadwal tugas yang ringan. ~ $ 2.

  • MCU kecil. Hanya benar-benar untuk aplikasi di mana Anda peduli tentang setiap konsumsi daya microamp terakhir. ~ $ 1 atau kurang.

Anda juga harus mempertimbangkan pada tahap ini vendor mana dan peralatan yang Anda sukai dan tidak suka. Lihatlah biaya hal-hal seperti in-circuit debugging devices dan IDEs.

Langkah 2: Periferal Minimum

Apakah Anda memerlukan hal-hal seperti USB? PCI? HDMI? SATA? ADC atau DAC yang luar biasa cepat? Hampir semua kategori "kecil" atau "kecil" tidak memilikinya, walaupun USB tersedia cukup luas.

Langkah 3: Prototipe

Pilih sesuatu yang memenuhi kriteria di atas, secara acak jika perlu, buat permulaan, cari tahu seberapa layaknya itu dan berapa banyak ruang / kekuatan pemrosesan yang Anda butuhkan. Anda sudah melakukan ini. Menulis dalam C harus membuat banyak logika portabel.

Setelah Anda memiliki prototipe, Anda dapat mengatakan kepada diri sendiri, "Saya butuh yang seperti ini, tetapi dengan lebih banyak X" dan biarkan itu memandu keputusan Anda.

Langkah 4: Kecilkan

Secara umum lebih mudah untuk memulai dengan anggota terbesar (paling banyak Flash dan RAM) dari keluarga CPU, menulis v1 aplikasi Anda, dan kemudian memilih yang lebih kecil, lebih murah agar sesuai. Anda juga dapat menghabiskan waktu pada seni pemasangan perangkat lunak menjadi sumber daya yang lebih sedikit. Apa yang berharga tergantung pada berapa banyak unit yang akan Anda buat.

pjc50
sumber
14
Langkah 0: Rantai alat (lingkungan pengembangan firmware). Temukan lingkungan pengembangan yang dapat membuat Anda berhasil. Di sinilah menang atau kalah. Bahkan jika Anda memiliki silikon yang sangat pas, tetapi Anda tidak dapat membuat lingkungan pengembangan firmware berfungsi (untuk alasan apa pun), maka proyek Anda tidak akan lepas landas. (Contoh kasus: IDE Arduino telah membuat prototipe berbasis Arduino Anda.)
Nick Alexeev
8
Mengkategorisasi Cortex-M sebagai "MCU Kecil", dan PIC32 / AVR32 sebagai "MCU Besar" tampaknya agak disayangkan. Saya belum pernah menggunakan PIC32 / AVR32, secara pribadi, tetapi berdasarkan sekilas rentang spesifikasi, saya akan mengatakan mereka semua harus berada di braket yang sama. (Ada MCU Cortex-M yang beroperasi pada> 200MHz, memiliki banyak megabita flash dan lebih dari setengah megabita RAM)
Aleksi Torhamo
13

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).

redup
sumber
Terima kasih banyak atas jawaban komprehensif Anda! Saya memperhatikan bahwa MCU ARM Cortex semuanya berfungsi pada 3.3V. Sinyal throttle saya perlu skala antara 1 dan 5V. Saya menduga bahwa jika saya ingin menggunakan pengontrol ARM saya harus menemukan cara untuk meningkatkan tegangan karena akan dibatasi pada 3.3V dari MCU?
Eliott W
Iya nih. Sinyal throttle adalah output analog, kan? Dalam hal ini Anda bisa menggunakan opamp untuk memperbesarnya.
redup
Saya tidak yakin saya setuju dengan kalimat terakhir tentang membutuhkan "OS nyata". Saya kira itu tergantung pada seberapa banyak dalam hal solusi siap pakai yang Anda inginkan. Jika Anda menginginkan sesuatu di mana Anda bisa memasukkan logika bisnis Anda dan mulai mengeluarkan unit, ya, OS yang lengkap (perhatikan bahwa ini tidak harus berarti sesuatu seperti Windows atau bahkan Linux!) Tentu saja berguna.
CVn
1
@ MichaelKjörling tentu saja, saya tidak bermaksud sesuatu yang jauh seperti Linux. Melainkan sesuatu seperti FreeRTOS, Coocox OS, atau Nuttx, misalnya. Inilah yang saya anggap OS nyata , meski sangat kecil. Saya menulis bahwa karena memang, melakukan ini pada bare-metal akan membutuhkan lebih banyak waktu, menyulitkan untuk debug dan kurang fleksibel. Dan lingkungan Arduino (walaupun saya jauh dari ahli dalam hal ini) tampaknya tidak menyediakan mekanisme penugasan (dan, dengan demikian, saya tidak menganggapnya sebagai OS nyata ).
redup
1
Ah. Ya, saya salah membaca bagian "asli". Hanya untuk kepentingan kami orang luar yang kadang-kadang berakhir di sini, Anda mungkin ingin mempertimbangkan untuk memperjelas bagian itu dalam jawaban Anda.
CVn
4

Perhatikan bahwa ini adalah subjek luas yang dapat dijawab dengan benar menggunakan beberapa pendekatan (subyektif).

Juga, format stackexchange tidak bagus dalam merancang solusi untuk masalah. Misalnya, Anda jarang membuat orang merancang perangkat keras untuk Anda. Alih-alih Anda mengusulkan desain perangkat keras dan mengajukan pertanyaan tentang hal itu.

Yang mengatakan ...

Mulailah dengan fitur prosesor yang tidak dapat Anda ubah. Seperti kecepatan dan ukuran memori (jika ada). Selidiki apakah Anda perlu interupsi dan seberapa rumit penanganan interupsi perlu.

Jika Anda memerlukan dukungan periferal seperti ADC atau DAC, situasinya lebih kompleks. Haruskah fitur-fitur ini dibangun ke dalam prosesor atau eksternal dari prosesor. Harga, akurasi dan bahkan kebisingan adalah faktor dalam keputusan ini.

Jika periferal eksternal harus didukung pertimbangkan jenis komunikasi serial yang diperlukan. Perangkat keras eksternal mungkin memerlukan SPI, I2C atau jenis UART lainnya. Jika kecepatan data tinggi, mungkin yang terbaik untuk menemukan prosesor dengan fitur DMA yang terkait dengan port komunikasi serial.

Akhirnya, jika ini adalah aplikasi prosesor tertanam (yang biasanya berarti prosesor yang didedikasikan untuk suatu tugas), pertimbangkan memecah persyaratan menjadi beberapa kelompok dan menugaskan prosesor untuk masing-masing. Misalnya, prosesor tampilan GUI kemungkinan tidak memerlukan fitur ADC. Pendekatan obyektif untuk memecahkan masalah ini telah terbukti berhasil dalam perangkat lunak dan dengan menjatuhkan harga prosesor juga dapat diterapkan pada perangkat keras.

Di dunia nyata, pendekatan ini berulang. Yaitu, banyak proyek dimulai dengan satu prosesor dan menukar prosesor yang berbeda ketika masalah perangkat keras dan / atau perangkat lunak terjadi atau cakupan proyek berubah.

st2000
sumber
Anda adalah juri yang lebih baik dari tipe angka apa yang diharapkan daripada kompiler. Saya akan menghindari pendekatan umum menggunakan pelampung. Misalnya, mungkin hasil float tidak sama di berbagai platform! Saya akan menggunakan bilangan bulat aritmatika dan menyesuaikan solusi untuk kebutuhan Anda.
st2000
3

Saya tidak melihat ada yang menyebutkan biaya alat. Perusahaan saya memilih TI CC2541 dan mendapati bahwa itu hanya dikompilasi dengan kompiler IAR $ 4k, jelas merupakan penghenti acara bagi seorang hobiis. Juga programmer. Ini bisa menjadi $ 20 atau lebih. Alat yang lebih murah tampaknya lebih menjadi norma sekarang, jadi mungkin ini akan menjadi hal di masa lalu segera.

Juga, jika Anda merefleksikannya sendiri, paket seperti TQFP lebih mudah daripada, katakanlah, BGA. BGA besar sulit diperbaiki, berdasarkan pengalaman pribadi.

BSEE
sumber
2

Jika produk tersebut relatif sensitif terhadap harga dan Anda memiliki dana pengembangan yang layak, Anda dapat membeli banyak papan evaluasi dan membuat kode untuk masing-masingnya untuk mendapatkan ide. Itu harus cukup mudah jika kode Anda ditulis dalam portable C. Selain dari mikro Anda akan mengevaluasi toolchains dengan versi demo sebelum menghabiskan biaya IDE full-blown seperti IAR atau Keil. Dalam beberapa kasus, Anda dapat membuat profil kode bottleneck langsung pada IDE tanpa perangkat keras.

Jika Anda sangat dibatasi pada biaya pengembangan, Anda mungkin harus berkompromi untuk menemukan sesuatu yang tidak terlalu mahal untuk pengaturan pengembangan.

Sebagai contoh, ST memiliki papan eval ARM Cortex M7 dengan tampilan warna yang bagus untuk <$ 100. Ini memiliki FPU dengan fitur DSP sehingga Anda dapat melakukan apa pun yang Anda bicarakan dengan mudah - mungkin menjalankan PID loop pada 100kHZ daripada hanya 100Hz. Ini mungkin berlebihan kecuali tampilan itu adalah prioritas.

Jika Anda menginginkan prosesor yang lebih murah tanpa FPU maka Anda mungkin ingin membuat profil kode PID dalam bentuk yang sudah jadi. Pastikan semua faktor penskalaan dan linierisasi dan kalibrasi disertakan, karena mereka dapat bertambah dalam hal waktu pemrosesan.

Seringkali periferal dan kualitas serta ketersediaan middleware terkait (dan ketentuan lisensi) akan sangat memengaruhi pilihan Anda. Jika Anda memerlukan BT atau Wifi atau mode host USB dan file FAT untuk disimpan pada thumb drive, atau antarmuka SD yang cepat, semua ini akan menjadi faktor penting. Beberapa chip memiliki pengontrol LCD on-board dan pengontrol digitizer yang memungkinkan penggunaan panel TFT yang relatif murah. Jangan mengabaikan biaya lisensi yang terkadang tinggi.

Jika Anda memiliki gagasan tentang memori program yang diperlukan, kecepatan pemrosesan, dan periferal (termasuk FPU dalam hal ini), Anda dapat melakukan pencarian parametrik di distributor sebelum menelusuri lembar data. Beberapa hal yang terlalu membatasi mungkin - paket through-hole, internal DAC, internal Ethernet PHY, FPU. Tidak satu pun dari ini mungkin diperlukan dan mereka mungkin terlalu membatasi pilihan Anda sebelum waktunya.

Semoga berhasil, banyak pekerjaan yang harus dilakukan dengan benar. Dalam pengalaman saya itu adalah ekonomi palsu untuk memotongnya terlalu dekat pada produk baru karena pelanggan (s) pasti akan meminta hal-hal yang tidak Anda antisipasi dan Anda ingin memiliki kapasitas cadangan untuk memasok tanpa memulai dari awal. Di sisi lain, jika produk terlalu mahal Anda tidak akan dapat menjual cukup dengan margin yang memadai untuk menopang bisnis.

Spehro Pefhany
sumber
1

Ada beberapa platform berbeda yang bisa Anda mulai lihat seperti Arduinos, PIC mikrokontroler, FPGA, dan banyak lagi. Saya bekerja dengan Arduinos di masa lalu dan memiliki port ADC yang mampu mencapai 74kS / s. 100 sampel per detik sangat lambat dan saya bertanya-tanya bagaimana Anda mengetahui itu? Di sisi lain, Anda ingin bertanya pada diri sendiri apakah Anda akan memerlukan segala jenis antarmuka seperti SPI, CAN, I2C, atau UARTs. Mereka semua dapat memiliki manfaatnya sendiri dan Anda sendiri yang mempertimbangkan apakah Anda akan berbicara dengan satu atau lebih budak. Langkah terakhir tapi mungkin yang paling penting adalah menebak berapa banyak pin pada mikrokontroler yang perlu Anda gunakan.

"Kapasitas untuk membaca sinyal analog ke digital tanpa mengganggu prosesor akan menjadi luar biasa." Saya bisa menebak dengan mengatakan bahwa Anda tidak ingin berurusan dengan buffer eksternal atau internal yang akan mengedarkan data Anda dan berpotensi memperlambat pemrosesan data Anda. Apakah itu benar? Jika demikian, itu lebih banyak pemrograman untuk Anda lakukan tetapi prosesor biasanya mampu menangani kecepatan 100 sampel per detik. Terserah pada Anda untuk memprogram jam, laju sampling, dan sisanya.

Juga, pertimbangkan interupsi dalam program Anda jika Anda ingin menyimpan sampel data terus menerus dan melakukan tugas lain ketika bendera dinaikkan.

12Lappie
sumber
2
Saya pikir Anda telah melewatkan intinya. Dia memiliki prototipe yang dibangun di atas Arduino. Pengambilan sampel tidak lambat. Kontrol loop lambat. Dia punya tiga pengendali PID yang dihitung menggunakan titik apung di Arduino, jadi mereka lebih lambat daripada molase di musim dingin antartika. Jadi, pengambilan sampel bukanlah masalahnya. Kode tidak efisien.
JRE
Anda benar tentang itu.
Lappie
Ya, masalahnya adalah meskipun loop saya menggunakan aritmatika panjang dan bukan titik mengambang, ada begitu banyak perhitungan yang harus dilakukan sehingga Arduino mengambil sampel sekali per loop, tingkat sampel saya sangat kecil (saat ini 20 sampel per detik) .
Eliott W