LINを使ってみよう

複数機器を相互接続するための方法は多数有りますが、万能な物はありません。どんな物にも一長一短があります。今まで作った物に使用しているインターフェースをまとめると以下の通りです。
LAN:
  ケーブルがちょっと太すぎる。細いのもあるが...
  電気大食い(ENC28J60だけの問題かも)
  HUBが必要
  ソフトが若干大がかりになる
  パワフルすぎる
  長距離可能
I2C:
  ハードウェアーは2本の線を繋ぐだけなのでとても簡単
  ソフトもとても単純
  複数装置を相互接続するための物ではない(たぶん)ので長距離は不可
RS-232:
  複数の装置を相互接続できない
  ハード、ソフトはとても簡単
  10mくらいは大丈夫らしい
USB:
  ソフトを書くのがとても面倒
  最大距離は3m程度

遅くてもいいので、長距離(20~30m)伝送可能な相互接続方式のネットワークが無いか探してみると以下の2つがありました

RS-485
  ソフトはRS-232と同じやりかたでいいみたい
  2線式(シールド付きのツイストペア線が必要)
  速度は1Mbpsくらい可能
  秋月電子にインターフェースICが売っている(¥300)
  プロトコルの規定は無いような...???
LIN
  車載コンピューター用の規格らしい
  1線式
  速度は19200bpsが最大
  インターフェースICはMicrochip社で作っている。もちろんMicrochipDIRECTで購入できる。
  プロトコルまで規定されている

RS-485は単にRS-232ドライバーICでおなじみのMAX232をRS-485用に変えるだけで動いてしまいそうなので面白くありません。そこでLINを試してみることにしました。


2008-07-27

Microchip社のLINドライバーICは3種しかありません。そのうちMCP201はLINの旧規格のV1.3用のようなので、実質2つだけです。実験用には高機能な方がいいのでMCP2022を購入して実験してみることにします。

PICT7496.jpg

2008-07-31

LINの仕様を調べてみると思った以上に大きな仕様になっていました、仕様を大きくしている原因は...

 ・車載用のネットワークなので、ネットワークに複数のメーカーの製品が繋がる可能性があり
  お互いが協調動作することが出来なければならないので装置のアドレス割り振りなどの
  方法が取り決められている
 ・装置を作るメーカー(自動車部品メーカー)と、開発ツールを作るメーカー(半導体メーカーや言語メーカー)は
  異なるので、その境界線の定義をC言語のLINライブラリーで定義している。
  つまりLINの仕様にはC言語のLINライブラリーリファレンスが含まれている。
 ・自動車部品メーカーの仕事はLINを使うことではなく、LINを使用した部品を作ることなので、
  LINのプロトコルについての内部仕様は興味対象ではない。そのためLINの仕様では低レベルのプロトコルに加えて
  更に上位のプロトコルの取り決めまでが含まれている。
  LANで言えば「IP」の上に「TCP」や「UDP」などの上位プロトコルが乗っかっている、LINも
  TCP/IP程大きくはないがOSIのネットワーク層構造を意識したプロトコルになっている。

こんなところだ。同じ車載ネットワークのCANに比べてかなりマイナー(?)なようで、書籍も殆どない。
また日本語の文献も殆どみつからない。規格自体は2003年に完成していて、もう5年以上経過している。

2008-08-05

LINの信号線の電圧は0V<->バッテリー電圧です。乗用車なら12Vということになります。マイクロコンピュータは5Vもしくは3.3V動作が一般的です。このMCP2022には電源ICが内蔵されていて最大100mAの電力を共有できます。電圧は可変ではなく、5V用と3.3V用の2種類があります。今回購入したのは5V用です。

PICT7505.jpg

Microchip社 MCP2022 LINドライバー。MAX232と同様でインテリジェントな機能は殆どなく電圧変換を主に担当します。

PICT7511.jpg

実験回路をEAGLEで書く。最終的には3つの装置で実験するのでプリント基板を作ります。

2008-08-08

LINについての書籍はこれだけしかないみたいです。内容はインターネットから得られる情報と殆ど変わりません。LIN以外にもCANとFlexRayについて書かれてあるので、とてもこの内容だけではプログラムを作れません。Microchip社がC言語で書かれたLINインターフェースのサンプルプログラムを公開しているので、それをmicroBASICに移植するのが近道のようです。

PICT7513.jpg

薄っぺらい割に高い本だ。デザインウェーブマガジンの連載をまとめた物らしい。

2008-08-09

シリーズレギュレターの機能のみを確認してみた、でも電圧が出てない。テスターで計測すると0.1V付近を指す。どうやら出力側にコンデンサが無いとダメなようだ。コンデンサを入れると5Vが出力されるようになった。

PICT7519.jpg

先ずはレギュレターとしての機能を確認。12Vの電源を繋いで5V出力が得られる。

PICT7520.jpg

左がPICで右がMCP2022。Cgとあるコンデンサが重要。これがないとレギュレターとして動かない。

電源回りがOKになったので、次は送信をテストします。LINのプロトコルを解釈するプログラムを作るのは大変ですが、単にLINのハードを動作させるのは非常に簡単です。EUSARTを初期化してRS-232Cのつもりでデータを送信すればいいだけです。

PICT7524.jpg

次は送信のテスト

送信実験のサンプルプログラム。送信方法はRS-232Cと全く同じです。
0001  '-------------------------------------------------------------------------------
0002 program LinTEST
0003 '-------------------------------------------------------------------------------
0004
0005 main:
0006 dim data as byte
0007
0008 PORTB = 0
0009 TRISB = 0
0010
0011 Usart_Init(9600) ' initialize Usart module
0012 Delay_ms(10)
0013
0014 PORTB.1 = 0 ' Rising edge on CS activates Transmitter
0015 PORTB.1 = 1
0016
0017 data = 0
0018 while TRUE
0019 PORTB = data ' Display data on PORTB
0020 Usart_Write(data) ' Send data to Receiver
0021 Inc(data) ' change data
0022 wend
0023
行番号
解説
11行目
EUSARTを初期化します。通信速度は9600bps
14、15行目
MCP2022を起動。実際はMCP2022から電源供給を受けているのでこの命令は意味がない。意味を持つのはPICがMCP2022とは独立した電源で動作しているとき
20行目
EUSARTにデータを書き込む(つまり送信)

送信データの波形です。LINに準拠せずプロトコルを自前で考えるなら、もうこれで終わったような物です。

PICT7521.jpg

こちらがPICの出力信号。0<->5V 2V/Dは2V/Divの意味

PICT7523.jpg

MCP2022の出力。0V<->12V 厳密には0Vではなく0.5V程度。

2008-08-15

LINはマスター、スレーブの関係があるのでマスターとスレーブは同じ回路ではない。マスター回路からいくつかの部品を取り去ればスレーブになるので、マスター基板を3枚レイアウトしてある。電源もマスターにだけ給電する。LINは1線式なのでGNDを含め2本あれば足りるが、電源用のため3ピンのターミナルブロックを使用している。一枚の基板に2個ターミナルブロックがあるのは、数珠つなぎにするためだ。1つのターミナルブロックに2本線を繋げばターミナルは1個でいいのだが、秋月電子で1個¥30しかしないので2個使用している。

PICT7565.jpg

片面基板 サイズ150×100

2008-09-07

サンハヤトの感光基板は新感光剤になってからエッチング不良が発生するようになった気がします。現像がうまくいったと思っていてもエッチングしてみると感光剤が落ちていない部分が発生してしまいます。基板の中央部分は良好なのですが、特に周囲に問題が発生します。マスクパターンの問題であれば中央部とか周囲とかいう問題にはならないはずなので、感光基板自体の不良の可能性が高いと思います。150×100の基板から3枚取れる予定でしたが、1枚はボツ基板になりました。LINのテスト回路は2枚あればいいので、とりあえず2枚で実験を進めます。

PICT7835.jpg

現像後の感光基板

PICT7838.jpg

感光不良によるエッチング失敗

2008-09-23

電源コネクターはマスター側だけに付けてあります。半固定抵抗はスレーブ側だけにつけました。これは抵抗値をA/Dコンバータで読み取ってその値をマスター側に送信するための物です。半固定抵抗はセンサーの代用品です。Lbusのプルアップ抵抗はマスター側だけにあります。それ以外は同じ構成です。

PICT7988.jpg

半田付け完了

2009-12-08

現時点の回路図添付しておきます
ファイル ファイルタイプ 添付ファイルの解説
lineagle.zip EAGLE EAGLE V4.15 回路図 & 基板パターン
LINsch.PNG PNG 回路は3つ有りますが全部同じ。3つあるのは基板に3面付するため。