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.
sumber
Jawaban:
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
sumber
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.
sumber
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 .
sumber
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.
sumber
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.
sumber
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.
sumber
Benda ini punya 70 GPIO dan antarmuka USB seharga $ 50.
sumber
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.
sumber