CCS-CによるPIC-CANのコントロール

 PIC・CCS-Cを使いCANをコントロールする方法については、中尾司さんの『動かして学ぶ CAN通信』などに詳しく解説してあります。これは、CANコントローラのMCP2515、トランシーバのMCP2551などについても詳しく解説してある力作です。これだけにまとめるには大変なご苦労であったと思います。そういう意味では、この本は手元にあると大変有用だと思います。
ただ、WIZ-C、C18、WinAVRなどとの移植の容易さを重視してあるために、単にCCS-Cでプログラムするには、やや複雑な構成となっており、C言語をそれほど深く使い込んでいない方にとっては、理解が容易とは言え難い部分もあります。

 それで、できるだけこれまでのCCS-Cでのプログラミングスタイルにそのまま当てはめて使えるように若干再構成し、できるだけシフト演算を用いないようにしてみました。
また、パソコンからCAN-BUSをアクセスするためのブリッジをRS232CではなくUSBダイレクトに変更し、さらにパソコン側のプログラム言語は、従来から使い続けている VB6/VB.NETを使ったものにする予定で作業中です。

 移植を優先した場合、SPI(Serial Peripheral Interface)通信はソフトウェアで構成すると便利です。ただ、ご承知のように多くのPICは、SPI通信をハードウェアで実現する機能を内蔵しています。PICとMCP2515は基板上すぐ側に在り、同期通信で高速にコントロールできるはずです。それでどの程度の速度差がでるのかを確認をした結果を下に示します。

【 事例1 】
 node1は、18F4580(20M)でSPI通信不要のものにしました。node2は、16F886(20M)でMCP2515を搭載し、SPI通信をソフトウェアで行ったりハードウェアで行ったりして比較して見ました。この構成で、node1の送信開始から、node2で受信して応答し、さらにnode1でそれを受信して結果をLEDに表示するまでの時間(往復)が、約1.6msから約1.0msとなり、約37.5%くらい短縮されています。ちなみに、CANのビットレートは、125KHzです。

【 事例2 】
 node1は、18F2550(48M)でMCP2515を搭載し、ここではソフトSPI 固定で動かします。node2は、16F886(20M)でMCP2515を搭載し、SPI通信をソフトウェアで行ったりハードウェアで行ったりして比較して見ました。この構成で、node1の送信開始から、node2で受信して応答し、さらにnode1でそれを受信して結果をLEDに表示するまでの時間(往復)が、約2.02msから約1.4msとなり、約29.7%くらい短縮されています。ちなみに、CANのビットレートは、ここでも125KHzです。node1はソフトSPI 固定ですので、上のnode1が18F4580を使ったものに比べると往復時間がのびています。18F2550をハードウェアSPI にしたり、CANのビットレートを500KHzにしたりのテストも行ってみたいと思っています。




 CANは、比較的長距離(MAX:1000m)の通信が可能ですが、実際にそのテストを長時間実行してみたいと思っています。CANの専用ケーブルは、たとえば http://www.nihondensen.co.jp/products/pdf/7canc.pdf#search='CAN にあるような本格的なものを使用すれば完璧ですが、このテストのためのみに専用ケーブルを 1000m も購入するするのもモッタイナイので、フラット・ケーブルを一巻きそのままを始端と終端で折り返してテストすることにします。(下図) CANにとってはインピーダンス無視の劣悪な環境だと思いますが、逆にこの劣悪な環境で、どれくらいの実用性があるかのテストにもなるかもしれません。
現時点の簡易テストでは、125Kbpsで 244m、50Kbpsで 549mの確認が取れています。(始端-終端が61mですので、この倍数でのテストとなっています)
これらの作業は進行中です。


さて、全くCANとは関係の無い余談です。
接点復活スプレーで、パソコンが復活しました。以前から時々、パソコンが固まるとか突然シャットダウンするということが起きていました(Windows7)。何が悪いのか・・・? パソコンを開けて、コネクタを再接続したり、RAMを一旦抜いてカードエッジコネクタ部をティッシュで磨いたりなどして、症状が少なくなることは分かったのですが、それでも時々出ていました。それで、『接点復活スプレー(CRC FOR-PRO No.1424) Amazonで\928』 をRAMのカードエッジコネクタに吹き付けて、余分な液をティッシュでふき取って装着したところ、以降は全く症状が出なくなりました。これは良いですね、新しいRAMを買うよりメチャ安いです。同様なことで悩んである方、自己責任で試されると良いと思いますよ。

Reported by TokioYamada@ADK


暁電子工房のTOPに戻る      高速フーリエ変換(dsPIC-FFT)へ        USB-IOのページに戻 る