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!
sumber
Jawaban:
(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.
sumber
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.
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).
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber