Latar Belakang
Saya sedang mengembangkan sebuah proyek yang membutuhkan spesifikasi mikrokontroler sederhana:
- 8 12-bit, 10kHz ADC
- RAM 1kB
- 48-QFN atau lebih kecil
- 20kbps protokol komunikasi tahan-bising daisy-chainable dan mengoreksi kesalahan
Persyaratan pemrosesan sinyal cukup rendah, dan sebagian besar dapat diekspor ke prosesor utama dalam sistem. Tiga spesifikasi pertama mudah dipenuhi, dan dapat dilakukan dengan jumlah kurang dari $ 2. Namun, komunikasi akan terjadi di lingkungan yang sangat bising secara elektrik, sehingga jaringan yang rentan kebisingan seperti LIN dan I2C keluar. Argumen tambahan terhadap LIN adalah bahwa saya ingin menjalankan semuanya pada 5V atau 3.3V, dan transceiver LIN memerlukan 12V, dan karenanya akan membutuhkan regulator tambahan atau kawat per papan sensor. Awalnya saya memilih BISA untuk tugas ini. Namun, pengendali CAN dapat menambahkan biaya yang cukup besar, dan saya ingin tahu apakah ini dapat dilakukan dalam perangkat lunak.
BISA Lapisan Fisik
Spesifikasi CAN mendefinisikan Data Link dan lapisan Fisik model referensi jaringan OSI. Banyak IC 8-pin yang murah, seperti NXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551 , dan TI SN65HVD1050 ada untuk mengimplementasikan lapisan fisik. Menerapkan lapisan fisik dengan konverter D / A atau op-amp akan sulit, jika bukan tidak mungkin, sehingga IC ini bernilai $ 1 atau lebih sehingga harganya.
BISA Tautan Data / Lapisan Protokol
Untuk lapisan Data Link, beberapa mikrokontroler menambahkan modul protokol CAN ke lapisan komunikasi UART, I2C, dan SPI dasar. Namun, ini jauh lebih mahal daripada chip dasar.
Investigasi biaya modul protokol CAN
Untuk memperkuat klaim ini, berikut adalah beberapa micros populer dalam versi CAN dan non-CAN, dari:
- ATmega16 - ATMEGA16M1 (dengan CAN): $ 3,87, ATMEGA168A (no CAN): $ 3,23
- dsPIC - DSPIC33FJ64MC802 (dengan CAN): $ 6,14, DSPIC33FJ64GP202 (tanpa CAN): $ 5,48
- PIC18 - PIC18F2480 (dengan CAN): $ 6,80, PIC18F24J10 (tanpa CAN): $ 2,10
- Cortex-M3 - STM32F103C4T6A (dengan CAN): $ 6,50, STM32F100C4T6B (tanpa CAN): $ 2,73
Agar adil, saya hanya membandingkan mikrokontroler dengan ukuran memori yang setara, namun, banyak versi non-CAN tersedia dengan ukuran memori lebih kecil dengan harga lebih murah. Pengontrol CAN eksternal, seperti Microchip MCP2515 , hampir $ 2, jadi jelas lebih hemat biaya untuk mengintegrasikan CAN ke dalam mikrokontroler jika Anda memiliki pilihan.
Menariknya, bagian ATmega sejauh ini merupakan bagian termurah yang dilengkapi BISA dalam inventaris Digikey.
Fungsi lapisan protokol CAN
Modul CAN yang ditemukan dalam mikrokontroler dsPIC melakukan hal berikut:
Modul bus CAN terdiri dari mesin protokol dan penyangga / kontrol pesan. Mesin protokol CAN menangani semua fungsi untuk menerima dan mengirim pesan pada bus CAN. Pesan dikirimkan dengan terlebih dahulu memuat register data yang sesuai. Status dan kesalahan dapat diperiksa dengan membaca register yang sesuai. Setiap pesan yang terdeteksi pada bus CAN diperiksa untuk kesalahan dan kemudian dicocokkan dengan filter untuk melihat apakah itu harus diterima dan disimpan di salah satu register yang diterima.
Ini tampaknya cukup bisa dilakukan dalam perangkat lunak.
Pertanyaan
Dapatkah lapisan protokol perangkat lunak digunakan mengimplementasikan spesifikasi CAN hanya dengan mikrokontroler yang dilengkapi UART dan transceiver CAN? Jika demikian, apakah ada implementasi open-source?
Atau, bisakah transceiver BISA digunakan dengan UART untuk mengimplementasikan protokol khusus? Saya setuju dengan topologi master tunggal; Saya memahami bahwa arbitrase mungkin sulit dilakukan dengan benar pada protokol khusus.