Mikrokontroler apa yang harus saya gunakan?

10

Saya mencoba menemukan paket pengontrol mikro terbaik untuk program komputer saya untuk berkomunikasi dengan dunia nyata. Saya berharap untuk sejumlah besar pin I / O (sejauh ini 64 digital adalah semua yang saya butuhkan, tidak ada yang mewah seperti analog dan PWM) yang saya dapat membaca dan menulis secara langsung dengan memanggil fungsi dari program saya yang berjalan pada CPU saya.

Saya tidak ingin mengunduh program ke pengontrol mikro itu sendiri untuk dijalankan, tetapi saya ingin sesuatu yang cukup tancapkan ke USB saya dan memberi saya banyak pin I / O yang dikendalikan CPU yang dapat saya kontrol dari program C ++ saya.

Apa yang akan menjadi paket pengontrol mikro terbaik untuk saya? Saya berharap untuk sesuatu yang cukup murah tapi bukti di masa depan, seperti di dalamnya berjalan dari USB dan memiliki driver 64-bit untuk OS modern seperti Windows 7. Mampu antarmuka lebih dari satu pengontrol mikro dengan program komputer yang sama akan menjadi bonus besar juga (ekspansi masa depan).

Sunting: Saya tidak perlu laju sampling tinggi (mungkin 10 Hz untuk membaca input, 1 kHz untuk sinyal output) dan sebagian besar pin digunakan untuk output saja. Saya bekerja dengan komputer baru (core i7 860) sehingga walaupun pengambilan sampelnya sedikit tidak efisien atau lambat, seharusnya masih ok (hanya ada satu utas yang didedikasikan untuk I / O dan mintalah program utama berkomunikasi dengannya).

Saya juga tidak memerlukan semua 64 I / O pin pada satu paket pengontrol mikro. Jika saya bisa antarmuka banyak paket kontroler mikro pada saat yang sama, itu akan bekerja juga (sebenarnya itu akan ideal untuk dapat antarmuka banyak paket kontroler mikro yang lebih kecil, itu berarti mudah untuk diperluas).

Saya telah melihat ini: http://www.schmalzhaus.com/UBW32/index.html

Adakah yang punya pengalaman dengan hal seperti ini? Adakah yang tahu apakah itu akan berhasil atau tidak? Perhatian utama adalah bahwa itu adalah pengontrol mikro yang menjalankan program, bukan CPU saya.

Faken
sumber
1
Berapa kecepatan data yang Anda butuhkan?
Kevin Vermeer
@reemrevnivek: Saya memperkirakan saya akan memerlukan sekitar 10 Hz sampling rate untuk input dan 1 kHz untuk output, I / O sangat lambat.
Faken
Dalam kasus Anda, proyek yang Anda temukan mungkin akan bekerja dengan cukup baik. Ini adalah sistem yang sudah disatukan (tidak diperlukan solder selalu bagus) dan tampaknya memiliki firmware yang sangat mendasar untuk memberi Anda akses ke semua port yang Anda butuhkan. Tingkat pengambilan sampel yang rendah berarti koneksi serial akan bekerja dengan cukup baik. 40 $ tidak akan membuatmu bangkrut, kan? Jika demikian, coba saja sebelum Anda melihat solusi yang lebih mahal.
Wouter Simons

Jawaban:

4

Faken,

UBW32 adalah cara yang sangat baik untuk dilakukan, dari apa yang dapat saya katakan tentang kebutuhan Anda. Ini akan mendukung apa yang Anda butuhkan, asalkan Anda baik-baik saja dengan 3.3VI / O (ada yang 5V toleran, tetapi tidak semua.) Itu murah ($ 40) dan sangat mudah untuk berbicara menggunakan bahasa apa pun yang dapat mendukung port serial (yang hampir semuanya - Basic, C, C #, Processing, dll.)

Anda dapat menggunakan salah satu dari 76 pin I / O sebagai input atau output. Firmware stok yang dikirimkan akan memungkinkan Anda melakukan apa yang ingin Anda lakukan, tanpa pemrograman yang diperlukan pada sisi yang disematkan. Mendapatkan data hingga PC melalui USB (hanya 10Hz) tidak akan menjadi masalah. Memperoleh output 1KHz mungkin akan bekerja dengan baik juga.

Jika Anda memiliki pertanyaan, harap beri tahu saya. Saya senang membantu Anda.

* Brian Schmalz pencipta UBW32

EmbeddedMan
sumber
Papan yang bagus, mr. Schmalz
Wouter Simons
Yah ini menantang menghibur. Menjadi insinyur mesin untuk memulai dan mengetahui sedikit tentang pemrograman dan bahkan lebih sedikit tentang elektronik; platform prebuilt yang berinteraksi dengan C / C ++ adalah persis apa yang saya butuhkan untuk mengendalikan aspek pemrograman elektronik dan mikrokontroler. Terima kasih atas bantuan Anda!
Faken
9

Saya merekomendasikan Teensy ++ 2.0 (atau papan pengembangan AT90USB1286 lainnya)

128KB Flash, 8KB RAM, 46 I / O pin, 8 input analog

$ 24

Papan Teensy bertenaga USB dan dapat menyediakan port COM virtual (Kelas Perangkat Komunikasi USB). Anda dapat menggunakan tautan serial ini untuk protokol kontrol pin Anda. Ini berfungsi tanpa driver khusus pada Windows, OSX dan Linux.

Untuk membuat firmware kendali pin, ada TeensyDuino atau C.

Ketika menggedor, bottleneck akan menjadi antarmuka USB mikrokontroler. Jadi, Anda mungkin ingin memindahkan protokol seperti I2C dan SPI ke mikrokontroler. Untuk ini, Anda bisa menggunakan Bus Ninja saya .

Menambahkan Teensi tambahan ke pengaturan Anda sederhana, Anda hanya perlu satu port USB per perangkat, menghadirkan satu port COM virtual per perangkat.

(Catatan. Pendekatan ini akan bekerja sama baiknya dengan seluruh jajaran prosesor ARM dan lainnya, saya hanya tidak tahu adanya papan pengembangan murah dengan perangkat lunak yang tersedia).

Cara lain bisa dengan menggunakan Arduino dan Caterpillar Shield untuk memperluas I / O. Pada papan kustom saya membangun sekitar I / O expander yang sama saya bisa memperbarui 256 output pada lebih dari 1KHz.

Toby Jaffey
sumber
4

Saya pikir yang Anda inginkan bukan mikrokontroler, tetapi sesuatu seperti National Instruments PCI-6509 I / O card . Anda bisa mendapatkan versi USB juga, tetapi mereka memiliki I / O lebih sedikit daripada PCI-6509. National Instruments juga akan menjual driver C ++ kepada Anda.

Jika itu terlihat terlalu mahal, Anda bisa mencoba sesuatu seperti Labjack U3 .

pingswept
sumber
Saya telah menggunakan labjack, itu benar-benar memperlambat komputer Anda jika Anda melakukan sesuatu yang lebih serius (sampling rate lebih tinggi), tetapi sangat bagus untuk logika sampel sederhana laju sampel lambat. Sistem NI luar biasa, tetapi paket perangkat lunaknya terlalu mahal untuk digunakan di rumah. (Setidaknya untuk digunakan di rumah.)
Wouter Simons
4

Solusi yang Anda jelaskan tidak ada untuk harga yang lebih rendah. Masalahnya adalah Anda ingin menjalankan perangkat lunak kontrol pada sistem yang tidak dirancang untuk itu. Melakukan serialisasi 64 port dan mendorongnya melalui USB dengan kecepatan sampling tinggi sangat memperlambat komputer host.

Ada solusi yang berfungsi untuk aplikasi berkinerja rendah seperti yang disebutkan dalam labjack. Tetapi solusi nyata yang Anda butuhkan untuk menangani tingkat IO tinggi akan melibatkan sistem yang diprogram. Pertanyaannya adalah pemrograman apa yang harus Anda gunakan untuk mengimplementasikan sistem.

LabView adalah perangkat lunak yang sangat mahal (yang bekerja sangat baik, jangan salah paham). Ini menggunakan bahasa grafis untuk merancang perangkat lunak dan mengkompilasi untuk menjalankan kode pada sistem FPGA atau ARM. Semua komponen terlalu mahal untuk aplikasi tertanam volume tinggi, tetapi benar-benar luar biasa dalam lingkungan pengujian karena pengembangan cepat, kinerja tinggi yang ditawarkan.

Solusi yang lebih murah adalah menemukan sistem yang menjalankan linux dengan banyak I / O. EmbeddedARM.com adalah situs yang menawarkan banyak jenis produk untuk ini. Kode yang dapat Anda tulis mungkin dalam skrip shell, java, C, dll.

Sistem Arduino menyediakan mikrokontroler yang dapat dikembangkan dengan lingkungan pengembangan yang lebih sederhana. Sifat open source mereka berarti sudah ada banyak proyek untuk dipelajari.

Wouter Simons
sumber
3

saya tidak tahu ada dengan 64 pin GPIO, itu banyak, Anda mungkin harus membangun itu sendiri.

Saya menggunakan ini untuk menguji antarmuka serial tetapi juga memiliki 23 pin GPIO.

Jika Anda hanya google untuk 'USB to GPIO' ada banyak proyek di luar sana yang telah melakukan ini, saya tidak melihat ada di halaman pasangan pertama dengan 64 GPIO ini adalah yang terdekat yang saya temukan, dengan 32 pin.

Membangun satu tidak akan terlalu sulit, saya mungkin hanya akan menggunakan 100pin pic18 dengan built-in USB PHY (tergantung pada kebutuhan kecepatan Anda, cpu yang lebih kuat mungkin dalam urutan)

Anda tidak perlu melakukan terlalu banyak pengkodean untuk membuatnya berfungsi selama vendor UC Anda menawarkan kerangka driver USB.

Anda harus membuat PCB untuk itu kemungkinan besar karena chip yang cukup besar untuk memiliki 64 pin GPIO umumnya tidak datang melalui paket lubang. Anda juga bisa menggunakan mikrokontroler yang lebih kecil dan menggunakan IC port expander eksternal untuk GPIO Anda, tetapi itu akan menjadi desain yang lebih kompleks dan lebih kompleks untuk diprogram.

Anda juga bisa melihat papan dev yang merutekan semua pin I / O ke header dan memiliki USB. Ini mungkin akan jauh lebih mahal karena mereka mungkin akan memiliki banyak barang yang tidak Anda butuhkan.

Satu tip terakhir, jika Anda menemukan papan dengan RS232 tetapi dengan 64 pin GPIO tersedia, Anda dapat menggunakan RS232 ke adaptor USB, saya punya beberapa di antaranya yang telah bekerja dengan baik untuk saya. Namun ini membatasi Anda pada kecepatan antarmuka RS232.

Mark
sumber
3

Lingkungan NI Labview mahal, tetapi akan melakukan apa yang Anda butuhkan (Lebih dari USB, Ethernet, atau PCI tergantung pada apa yang Anda dapatkan.)

Arduino Mega memiliki 54 pin, yang membuat Anda dekat, seharga $ 60. Namun, itu bukan alat analisis logika; Anda harus menulis atau menemukan sketsa untuk melakukan ini. Mungkin ada satu yang tersedia, saya tidak tahu. Ini harus cukup sederhana dengan tarif bus rendah. Setiap instruksi pada Mega terjadi pada 16MHz, sehingga Anda akan memiliki baud rate yang cukup lambat, Anda akan beruntung atau sangat pintar jika Anda bisa mendapatkan sinyal baud 115200.

Pada akhirnya, ini adalah proyek yang sangat berbeda jika Anda mencoba 9600 baud atau 50MHz. Ingat, USB berjalan pada 480 MHz (Secara teori; kecepatan data aktual Anda akan lebih rendah karena latensi dan overhead) sehingga Anda tidak dapat melakukan yang lebih baik daripada 480/64 = 7.5MHz tanpa buffering. Dengan buffering dan jumlah uang tidak senonoh (Lebih dari mobil Anda), penganalisa logika bisa memberi Anda 68, 102, atau 136 saluran dengan kecepatan data gigahertz.

Saya menyarankan agar Anda dengan serius mencoba mencari tahu apakah Anda dapat menggunakan alat yang memberi Anda 8 saluran atau lebih, dan mencoba menganalisisnya secara terpisah.

EDIT: Aargh, apa yang saya pikirkan? Jika Anda menggunakan kecepatan lambat seperti itu, maka memperbaiki tautan serial jelas merupakan cara yang tepat. Saya menggunakan sistem modul ADAM 4000 dari Advantech sepanjang waktu di tempat kerja; mereka kuat, mudah digunakan (mudah dihubungkan dengan protokol ASCII melalui port COM, atau menggunakan perangkat lunak GUI yang disertakan), dapat diperluas, dan didukung dengan baik. Dapatkan sendiri 4500 (RS-232, gunakan konverter USB atau port COM di komputer Anda (jika masih punya satu)) atau 4501 (Ethernet dengan server web tertanam), tautan di banyak modul 4053, 4055, dan 4056, dan kamu baik untuk pergi.

Kevin Vermeer
sumber
Oh tetapi mereka cukup mahal .... seperti $ 100 hingga $ 150 untuk 16 saluran.
Kevin Vermeer
Saya memiliki penganalisis logika port 34 intronix untuk menguji perangkat lunak saya (yaitu menghubungkan input ke output dari pin yang dikendalikan mikrokontroler). Ini sekitar $ 500 saya pikir, tetapi juga bukan benar-benar digital I / O kan? Ini tidak dimaksudkan untuk memprogram logika khusus, hanya untuk menganalisis saluran. Milik saya dapat bekerja pada kecepatan pengambilan sampel 500Mhz, tetapi saya biasanya tidak membutuhkan kecepatan itu, kecuali jika perangkat saya ingin mikrokontroler untuk mengontrol kecepatan dukungan hingga 200Mhz atau lebih (yang biasanya tidak mereka lakukan). - Ngomong-ngomong, cerita panjangnya pendek. Saya percaya bahwa penganalisa logika bukanlah apa yang dibutuhkan orang yang mengajukan pertanyaan.
Wouter Simons
Sudah pasti saya, tetapi bukan O. Tidak, saya akan setuju bahwa penganalisa logika bukanlah yang dibutuhkan orang itu, mengingat informasi baru.
Kevin Vermeer
2

Benda ini punya 70 GPIO dan antarmuka USB seharga $ 50.

endolit
sumber
Bisakah Anda menggunakan fungsi panggilan untuk membaca dan menulis data pin langsung dari program C ++ yang berjalan pada CPU Anda?
Faken
Saya akan menyarankan bahwa NXP akan memiliki sesuatu berbasis ARM dengan beberapa I / O, dan jika Anda tidak bisa mendapatkan cukup dari mereka untuk hanya menampar I2C IO ekspander. Anda tidak bisa mengalahkan harga benda itu, dan itu plug 'n play. Kerja bagus.
akohlsmith
Saya tidak punya ide. Saya baru saja melihatnya di postingan produk baru Sparkfun.
endolith
2

Ya, sepertinya UBW32 akan bekerja dengan baik untuk Anda, dan firmware default memungkinkan Anda mengontrol pin I / O dari perangkat lunak Anda pada PC Anda.

Menurut "cara menggigit bang SPI dan antarmuka paralel pada FT232R" , Anda dapat menggigit 8 pin digital (mungkin lebih banyak?) Pada FT232R yang dikendalikan oleh perangkat lunak pada PC Anda.

Breakout Board $ 15 untuk FT232RL

Kedengarannya seperti apa yang Anda inginkan adalah antarmuka I / O digital; Anda tidak perlu atau menginginkan mikrokontroler yang dapat diprogram. Jika Anda hanya ingin 16 bit, saya akan pergi dengan beberapa papan FT232RL. Namun, sepertinya satu $ 40 UBW32 sepertinya akan memberi Anda 64 I / O yang Anda inginkan dengan biaya kurang dari 8 dari papan FT232RL yang dibutuhkan untuk mendapatkan 64 I / O.

Saya menemukan bahwa ini menjadi semakin umum - kadang-kadang lebih murah untuk membuang seluruh mikrokontroler pada suatu masalah, walaupun ia memiliki sejuta transistor "ekstra" yang tidak akan pernah saya gunakan, daripada menggunakan solusi kabel.

davidcary
sumber