バックグラウンド
私は、以下の控えめなマイクロコントローラー仕様を必要とするプロジェクトを開発しています。
- 8個の12ビット、10kHz ADC
- 1kBのRAM
- 48-QFN以下のフットプリント
- 20kbpsのデイジーチェーン可能な耐ノイズおよびエラー修正通信プロトコル
信号処理の要件はかなり低く、ほとんどはシステムのマスタープロセッサにエクスポートできます。最初の3つの仕様は簡単に満たすことができ、2ドル未満で行うことができます。ただし、通信は非常に電気的にノイズの多い環境で行われるため、LINやI2Cなどのノイズの影響を受けやすいネットワークは存在しません。LINに対するもう1つの議論は、5Vまたは3.3Vですべてを実行したいということです。LINトランシーバーには12Vが必要なので、センサーボードごとに追加のレギュレーターまたはワイヤが必要になります。私は最初にこのタスクにCANを選択しました。ただし、CANコントローラーにはかなりのコストがかかるため、これをソフトウェアで実行できるかどうか興味があります。
CAN物理層
CAN仕様は、OSIネットワーク参照モデルのデータリンク層と物理層を定義しています。NXP TJA1040 / 50、Maxim MAX3058 / 59、Microchip MCP2551、TI SN65HVD1050などの多くの安価な8ピンIC が物理層を実装するために存在します。D / Aコンバーターまたはオペアンプで物理層を実装することは、不可能ではないにしても困難であるため、これらのICは1ドル程度の価値があり、コストがかかります。
CANデータリンク/プロトコルレイヤー
データリンクレイヤーの場合、一部のマイクロコントローラーは、基本的なUART、I2C、およびSPI通信レイヤーにCANプロトコルモジュールを追加します。ただし、これらは基本的なチップよりもかなり高価です。
CANプロトコルモジュールのコストの調査
この主張を実証するために、CANバージョンと非CANバージョンの人気のあるマイクロをいくつか紹介します。
- ATmega16-ATMEGA16M1(CAN付き):$ 3.87、ATMEGA168A(CANなし):$ 3.23
- dsPIC-DSPIC33FJ64MC802(CAN付き):6.14ドル、DSPIC33FJ64GP202(CANなし):$ 5.48
- PIC18-PIC18F2480(CAN付き):6.80ドル、PIC18F24J10(CANなし):2.10ドル
- Cortex-M3-STM32F103C4T6A(CAN付き):$ 6.50、STM32F100C4T6B(CANなし):$ 2.73
公平を期すために、同等のメモリサイズのマイクロコントローラのみを比較しましたが、多くの非CANバージョンは、より少ないメモリサイズでより少ないコストで利用できます。Microchip MCP2515のような外部CANコントローラーはほぼ2ドルなので、オプションがあればCANをマイクロコントローラーに統合する方が明らかに費用対効果が高くなります。
興味深いことに、ATmegaパーツは、Digikeyの在庫の中で最も安いCAN装備パーツです。
CANプロトコル層の機能
dsPICマイクロコントローラーにあるCANモジュールは次のことを行います。
CANバスモジュールは、プロトコルエンジンとメッセージのバッファリング/制御で構成されています。CANプロトコルエンジンは、CANバスでメッセージを送受信するためのすべての機能を処理します。メッセージは、最初に適切なデータレジスタをロードすることにより送信されます。ステータスとエラーは、適切なレジスタを読み取ることで確認できます。CANバスで検出されたメッセージはエラーがチェックされ、フィルターと照合されて受信レジスタの1つに受信および保存されるかどうかが確認されます。
これはソフトウェアでかなり実行可能と思われます。
質問
ソフトウェアプロトコルレイヤーを使用して、安価なUARTを備えたマイクロコントローラーとCANトランシーバーのみでCAN仕様を実装できますか?もしそうなら、オープンソースの実装は存在しますか?
または、CANトランシーバーをUARTで使用してカスタムプロトコルを実装できますか?シングルマスタートポロジでも構いません。カスタムプロトコルでは、調停を正しく行うことが難しいことを理解しています。