1. 概要
CAN IFを使った開発時、通信が正常にできなかった場合、その要因の切り分けの際によくCANの物理波形を測定することがある。また、CANの使用環境においてノード間の距離が長くなることもあり、その場合信号の反射や減衰などから通信の安定性マージンを確認するためにも波形そのものを確認しておくことが重要となる。ただ、世の中にあるCAN IFアダプタは波形そのものを観測するいわば「簡易オシロ」の機能はほぼ搭載しておらず、波形の品質を確認するためには別途オシロスコープなどの測定器を準備する必要がある。本装置では、CAN通信データ内容を確認しつつ同時にその時のCANの物理波形の確認も行えるという優れた機能を搭載することを特徴としている。
<特徴>
- 簡易オシロスコープ機能を実装したので、通信時の物理波形を観測することが可能。
- (これはどこのCanalyzerにも搭載されていない機能!)
- teratermでログ見ることができる
- windows11対応のGUIアプリを使用して簡単設定
- 標準フォーマット、拡張フォーマットどちらにも対応!
- 通信速度は250kbps,500kbps,1Mbpsから選択。(Low speedは対応しない)
- LCD表示機搭載しており本機のみでID,DLC,データを確認することが可能。
- 各CANエラーを検出します。
- LAWICEL社製 CAN通信 アダプタ「CANUSB」と互換通信モードを搭載しました。
- Active Terminator機能搭載。CAN通信波形キャプチャ機能と併用することでターミネータのON/OFFの最適な状態を実現できます。
- あらかじめ使用する通信条件(通信速度、bit timing、通信IDおよびMASK設定、終端設定)などをユニット内の不揮発メモリに保存できるため、PCを使用することなくターミナルモニタ動作可能。
👆 LAWICEL社製 CAN通信 アダプタ「CANUSB」(参考)
全長:55mm、全幅:36mm、全高:16mm、重量:70グラム。 FTDI USBドライバを使用して標準COMポート(仮想シリアルRS232ポート)としてソフトウェアで扱うことができる
2.仕様
項目 | Standard (黒ラベル) | Lite (白ラベル) |
---|---|---|
ポート数 | 1ch | 1ch |
対応速度 | 250kbps,500kbps,1Mbps | ← |
使用プロセッサ | CY8C5868AXI | CY8C3866AXI |
ログ記録 | Terawtermなどでログ記録 | ← |
H/W mailbox | 受信:16ch 送信:8ch | ← |
受信フィルタ | チャネル毎にデータIDおよびMASK機能設定可能 | ← |
Bit Timing | 調整可能。サンプリングポイントを約60%~80%の間で設定可能 | ← |
CAN物理波形 キャプチャ機能 | 入力ポート:3種類 CAN_H, CAN_L, Differential トリガレベル:0V~5V設定可能 トリガモード:シングル、連続 データサンプル数:200point サンプル周期: 0.56usec(1.785MHz) | なし |
PC間インタフェース[1] | USB-HID:制御コマンド関連 データログ:USB-CDC(COM) 波形データキャプチャ: USB-CDC(COM) | USB-HID:制御コマンド関連 データログ:USB-CDC(COM) |
Active Terminator | あり(120Ω) アプリで設定 | なし |
ターミナルモード | Normal / CANUSB 切り替え | ← |
CANエラー検出 | オーバーロードエラー ビット エラー スタッフエラー Ack エラー フォーム エラー CRC エラー バスオフ状態 Rx メッセージ損失 RX FIFO over flow | ← |
[1] USB複合デバイスとして認識するため、物理USBケーブルは一本で接続
3.機能ブロック図
CortexM3ベースのMCU(CY8C5868AXI)ではSAR ADが2つ搭載しており、波形のADサンプルキャプチャが可能となっている。
PCとのIFはUSBで、複合デバイスとして構成しているので、PC上ではteratermなどのターミナルソフトと、波形観測やMASK設定などを行うアプリケーションSWを同時に使用することが可能。
4. D-SUBコネクタピアサイン
5. Easy CAN Monitor F/W
5.1. データフロー
EasyCANMonitorのメインマイコンはPSoC5LPおよびPSoC3である。PCとの通信はコンソールベースのターミナル操作主体のCOMポート(CDC)とwindows GUI APPでCANキャプチャ波形および「HIDコンポーネントとCANコンポーネントの送受信データを相互に変換して外部と通信することでCANアダプタとしての機能を実現している。
5.2 PSoC内の各機能ブロック
以下にEasy CAN Monitorの基本機能コンポーネントを示す。 I2Cは本機LCD表示器用のIFである。「LCD Char」コンポーネントは使用していない。
CY8C5868AXI(黒ラベル)版のみ実装される機能ブロックとなる。ここではSAR ADを2基使用し、タイミングをずらして等価的に2倍のサンプリングレートでCANの波形を取得している。またトリガ電圧レベルの設定やタイミグ発生器を備える。取得したADデータはDMAを用い、メモリに転送される。
6. CANデータ処理
6.1 CANフレームフォーマットのおさらい
詳細なCANの説明はいろんなところで行われているのでここあたりを参考にしてください。
以下ではCANのフォーマット示すだけにしておきます。
拡張フォーマットは、標準フォーマットとはID からRTR の部分が異なります。主にバスやトラックなどの大型車のCAN 通信で使用されるフォーマットです。
6.2 CANデータ受信
PSoCのCANコンポーネントはCAN2.0AおよびCAN2.0Bプロトコル(ISO 11898‑1)に準拠しており、15個の受信メールBOXを備える。
- 初期設定:
デバイス起動時に内部の不揮発メモリから受信メールBOXの受け入れID,MASK ID,IDEやビットタイミングなどの諸設定パラメータをロードし、ペリフェラルレジスタにパラメータ書き込みを行う。
- 受信メールボックス設定:
起動の初期化時およびPCからのコマンドにて受信メールBOXの受け入れID,MASK ID,IDEを各受信メールボックス設定レジスタに設定を行う。
- 受信の各メールBOXはそれぞれ受信受け入れIDとIDMASKを設定できるようになっており、受信メールBOXになんらかデータが格納されると受信データは割り込みが発生する。
- 受信割り込みハンドラの中で受信したID、IDE,DLC,および最大8byteのデータを取り出し、CAN受信FIFOバッファに格納する。FIFOの深さはCY8C5868AXIでは1200Buffer, CY8C3866AXIでは100bufferである。これはマイコンに搭載されているメモリサイズに依存する。
- CAN受信データはコンソール出力向けにフォーマット変換・整形を行う。この時、データ間は適度なスペースを入れて見やすくしたEasy CAN Monitor の「標準フォーマット」と巷では比較的よく使用されてる「CANUSB」形式をどちらかを選択することができる。
- 整形されたCAN受信データはデータ転送FIFO経由USB(CDC-COM)を用いてPCに送る。
受信メールボックスでは、IDのフィルタが00011001111b、マスクが00110000000bに設定されている。このとき、受信CANデータに対するフィルタは00xx1001111bとなる(xはdon’t care)。結果、このメールボックスは00001001111b、 00011001111b、 00101001111b、 00111001111bの4種類のIDを受信してS/Wに渡す。マスク機能を利用することにより、多数のCANデータを処理することが可能になる。例えばマスクの全ビットを1に設定すると、メールボックスはすべてのCANデータを受信可能となる。ただし、この場合パフォーマンスは保証されないため、マスクの範囲を適度に抑えることが望ましい。
6.3 CANデータ送信
CANコンポーネントはプログラム可能な送信優先度を持つ最大8つの送信メッセージメールボックス持っている。
ユーザーからは送信メッセージメールボックスを特に意識する必要はなく、送信API(ライブラリ)では「空(カラ)」の送信メッセージボックスを使い順次CANデータを送信する。なお、本機では年のCAN通信ではrtrは使われなくなっているためリモートフレーム(rtr)には対応していない。
6.4 ビットタイミグ
デバイス間の距離が長い場合、データの伝搬に時間的な遅延が発生する。CANではビットサンプリングのタイミングを調整することで上記問題を解決する。ビットサンプリングのタイミングを示している。CAN_HIDは、同期セグメント(同期に必要な時間)からビットサンプリングまでの時間tSEG1とビットサンプリング後から通信完了までの時間tSEG2を調整することでタイミング調整が可能である。以下にCANビットタイミグの表現を示します。
提供されているCANコンポーネントの⼊⼒ボックスに、Tseg1、Tseg2、SJW、BRP の値を⼿動で⼊⼒することもできます。PSoCではバスクロックと内部分周カウンタの関係で自由にビットタイミングを設定することができない。設定が正しくないと、CAN コントローラがエラー状態のままになる可能性があります。そのため、⼿動で⼊⼒した値が表に⽰された値のいずれとも一致しない場合、コンポーネントは警告メッセージ「BRP/Tseg1/Tseg2/SJW の無効なセットが⼊⼒されました」を表⽰します。
ビット タイミングは ISO 仕様に従って計算され、時間セグメント (BRP、Tseg1、Tseg2、および SJW) の推奨レジスタ設定がパラメータ テーブルに表⽰されます。適切な⾏をダブルクリックすると、ロードする値を選択できます。選択した値は、設定⼊⼒ボックスに表⽰されます。
CANコンポーネントの可能なビットタイミグ値はその設定に必要な内部のプリスケーラーの値などが表示されます。
一般的にCANのビットタイミグは約75%ポイントをよく使用されるので、このテーブルもその前後を中心にパラメータテーブル値が表示されていると思われます。
CPUが「CY8C5868AXI(BuSClock33MHz)」の時「CY8C3866AXI (BuSClock66MHz) 」の時、それぞれのCANビットタイミングテーブルを準備しておきます。例として「CY8C5868AXI」のbusclock = 33MHz,ビットレート500kbps時のビットタイミグテーブルを以下に示します。
上記の内容をCコードで表現する。↓
const CanBitrateParamSet bps500kTimparam[RATE500KCOUNT] = { {81.8, 5, 8, 2, 2, CAN_ONE_SAMPLE_POINT}, // 0 {77.3, 2, 15, 5, 4, CAN_ONE_SAMPLE_POINT}, // 1 {72.7, 5, 7, 3, 3, CAN_ONE_SAMPLE_POINT}, // 2 {72.7, 2, 15, 6, 4, CAN_ONE_SAMPLE_POINT}, // 3 {68.2, 2, 14, 7, 4, CAN_ONE_SAMPLE_POINT}, // 4 {63.6, 2, 13, 8, 4, CAN_ONE_SAMPLE_POINT}, // 5 {63.6, 5, 6, 4, 4, CAN_ONE_SAMPLE_POINT}}; // 6
6.5 CAN通信動作検証
(1) 高速連続データ取り込みパフォーマンス
CANUSBと性能的な互換を満足するために、100msec期間で約500IDパケットIDを受信する必要がありそう。この受信レートはかなり高速であり、受信専用のFIFOメモリ構造を作って対応することする。CAN受信FIFOにデータがあるとメイン処理側でCOMポート(USB-CDC)経由PCに送るようにしている。
(2) 高速CANデータ受信時、データの取りこぼしについて
上記のタイミグでデータを取り込むと、例えば500IDパケットを連続して送ると498個になったいたりしていた。この原因はCANの受信割り込み時に専用のリングバッファに格納するのですが、これは割り込みハンドラの中で行われる。
一方メイン関数の中ではCANの受信リングバッファにデータあると、USBにデータを送ろうとするためCANリングバッファからCANデータを取り出す。この取り出している最中にCANの割り込みが入るとリングバッファのread, writeポインタの不整合が生じ、正常なデータの取り出しができなくなっていたと思われる。そこで以下のようにCanRingBuf_GetBuf()関数でCANリングバッファからデータを取り出すときにはCANの受信割り込みを一時的に無効にすることでread, writeポインタの操作不整合を防いだ。要するにリングバッファへ書き込み、読み出しはどちらかの作業が終了するまでお互いに排他的に動作するようにしたカタチとなる。
enableInterrupts = CyEnterCriticalSection(); rxmsg = CanRingBuf_GetBuf(&receivedCanBuffer); CyExitCriticalSection(enableInterrupts);
7. CAN 波形取り込み(AD変換部)
7.1 AD変換部目標仕様
項目 | 内容 | 備考 |
---|---|---|
入力切替 | CANH,CANL,差動 の切替 | 差動入力時はOPAMPで差動→シングルエンド処理を行う |
AD分解能 | 8bit | AD変換の速度を優先した |
サンプルレート | 当初の目標2Msps以上だったが 1.785MHzに落とした。 | 1Mbpsの信号波形をとるための下限 2つのADをインターリーブ動作させることで実現する |
サンプル数 | 200 points | PCへのIFを考慮 |
測定電圧レンジ | 0V~5V | 約19.5mV/LSB |
トリガ | 0~5Vで可変設定 両エッジ対応 | PCから設定できるようにする |
PC IF | USB Full Speed CDCを使用 | CDCプロトコル使用。内部的にはUSB Bulk転送 PSoC5LPではエンドポイントは64byte |
7.2 動作概要
過去から一般的に使用されているレガシーCANのMAX速度は1Mbpsである。つまり1MHz相当の差動HIGH/LOW波形が見られる。PSoC5LP(Cy8C5868AXI-LP035)を使用してこの波形を観測する場合、逐次変換型のSAR ADの最高サンプリングレートは約1MHzであり、2MHzの約半分である。そこで、SAR ADを2個インターリーブでサンプリングすることで2MHz相当のADサンプリングしてみる。まずはADのインターリーブ動作できるかという視点に絞ってH/Wブロックを設計する。S/WトリガでAD変換動作ができるようにした。[Control_Reg_AD]ブロックでレジスタEnableしたレベル信号を[EdgeDetect]でエッジパルスに変換して[TriggerPWM]ブロックのトリガにする。[TriggerPWM]では後段の2つのSAR ADのトリガを生成する。
ただ、実際にAD一つ当たりのサンプル周期を1MHzにすると不安定動作になることが分かったので、最終的に2基のSAR ADを使って1.785MHzになった。(ちょっと残念・・・)
7.3 AD変換インターリーブ動作とトリガ回路試験
PSoC内部に「WaveDAC8」のテスト信号波形生成用ブロックを設置する。ここから2.463kHz、4Vppの正弦波を出力する。「VDAC_TrgLevel」ではAD変換を開始するアナログ入力電圧を設定する。ここでは仮に2Vと設定している。次段のコンパレータ「Comp」ではこの2Vを超えるとコンパレータ出力がHighとなり「EdgeDectector」でトリガ波形に整形を行い、AD変換のタイミグ管理を行う「TriggerPWM」の開始トリガに入力される。トリガはアナログ入力の立ち上がりエッジのみ有効。これは一般的なオシロスコープと同等の機能相当となる。
7.3 DAM転送
各AD変換CHに対して100データ(1データは2byteで構成されている)をSRAM上に確保し、2CH分のデータ(100ポイント×2byte×2ch = 400byte)のデータ転送を行う。Figure 7-2は2つのトランザクションを用意して転送している構成だが、今回はTD0のみをループして使用することにする。
<<DMA1の設定内容(DMA2も”1”→”2”なる程度で内容としては同様)>> /* DMA configuration constants for DMA_1 */ #define DMA_1_BYTES_PER_BURST (2u) #define DMA_1_REQUEST_PER_BURST (1u) #define DMA_1_SRC_BASE (CYDEV_PERIPH_BASE) #define DMA_1_DST_BASE (CYDEV_SRAM_BASE) ---------------------------------------- void DMA1_Config() { /* Variable declarations for DMA_1 */ /* Move these variable declarations to the top of the function */ /* DMA WizardのLengthはbyte数指定なので16bit転送する場合は2倍の値になる。 */ uint8 DMA_1_Chan; uint8 DMA_1_TD[1]; /* DMA Configuration for DMA_1 */ DMA_1_Chan = DMA_1_DmaInitialize(DMA_1_BYTES_PER_BURST,DMA_1_REQUEST_PER_BURST, HI16(DMA_1_SRC_BASE), HI16(DMA_1_DST_BASE)); DMA_1_TD[0] = CyDmaTdAllocate(); CyDmaTdSetConfiguration(DMA_1_TD[0], 2u * SAMPLENUM, DMA_1_TD[0], DMA_1__TD_TERMOUT_EN | CY_DMA_TD_INC_DST_ADR); CyDmaTdSetAddress(DMA_1_TD[0], LO16((uint32)ADC_SAR_1_SAR_WRK0_PTR), LO16((uint32)ADresult1)); CyDmaChSetInitialTd(DMA_1_Chan, DMA_1_TD[0]); CyDmaChEnable(DMA_1_Chan, 1); }
8. アナログフロントエンド
8.1 CANの物理信号波形
CANの通信は250kbps以上の通信速度時、2.5Vを中心としてCAN_H,CAN_Lの差動通信レベルになっている。
今回PSOCではADのサンプリングレートなるべく確保するため2つのADコンバータをインターリーブサンプルしている。そのため、PSoCのADのモジュールリソースは一つの波形を測定しか行えない。したがって、入力ポートをマルチプレクサで切り替えることによりCAN_H,CAN_L,差動入力の2種類を選択する手段を用いる。
この時特に重要なのは「差動入力」のポートである。CANは差動信号を用いて通信をおこなうが、シングルエンドで見た場合ノイズが重畳してしまうことがよくある。その例として後の章で実際の環境下でのサンプル波形を列挙するが、CANは差動で通信することでノイズに対する耐性を高めているのが特徴でもある。したがって最終的にCANで扱う差動信号の品質が重要となってくる。
8.1 差動入力回路(内部OPMAP活用編)
せっかくのPSoCデバイスなので、内部にあるOPAMPを差動回路にできないか考えてみる。PSoC1デバイスの時は「差動増幅」可能なインスツルメンツアンプとしてモジュールが存在していたが、PSoC3,5ではインスツルメンツアンプのような差動アンプが最初から構成されているものはなく、汎用的にOPAMPを使う思想になっているようです。その中で「PGA」というOPAMPモジュールがあり、負帰還側はなんとなく差動アンプ的な抵抗の接続になっているので、足りない部分をデバイスの外側で補うことにします。今回対象となるPGAはデータシートから必要なデータ項目を確認してみると、PGAにはFigure 8‑3に示すように2種類の構成が可能となっている。差動増幅回路として使用するので「Vref = External」の構成に設定する。ただ、差動増幅回路として使用するには①PGA内部の抵抗値および②+の入力側の抵抗が必要になってくる。
①まず差動増幅回路にするにはFigure 8-3のPGA1の構成「Vref=External」にする必要がある。また差動増幅回路のGainを1倍にするにはまずRa=Rbにして、さらに+入力部に外付けの抵抗が追加する必要がある。
②上記条件を満たすにはこのPGA単独GAIN設定をData Sheet, Figure 8-4からGain=2にするとRa=Rb=40kΩになることがわかった。OPAMPの+入力側がポートの入力のところで分圧抵抗を構成して入力することにする。40kΩはE24系列では存在しないので、とりあえず39kΩにする。
GAIN=2した場合、周波数と特性は左に示すような形になるらしい。
なるべく上の周波数まで伸びるようにPower=Highの設定にする。
datasheet上、GBWは3MHz以上となっているようだ。
SoCに入れているOPAMにしては割と周波数特性的な仕様は高いと思う。
PSoCの内部PGAを使用した
CANの差動入力アナログフロントエンドはFigure 8 6のようになる。
後段にある「Can_inportSel」のマルチプレクサによってAD変換に入力する信号としてシングルエンドのCANL,CANHと差動入力を選択できるようにする。
8.2 差動入力の周波数特性をシミュレーション(PSoC内部OPAMP)
CANの信号はCAN FDではないレガシーCANの場合1Mbpsが最大であるが、一般的に500kbpsで使用されることが多い。CANH,CANLのシングルエンド入力部分はダイレクトにAD変換に入力されるので問題ないが、差動入力においてはOPAMPの周波数特性が影響する。今回PSoC内部のOPAMそのものSPICEモデルはないが、それに近いGBWのOPAMP(OP283)で周波数特性を検証してみる。
OP283は一般的にGBW=5MHzであり高速OPAMPの部類に入るが、500kbps差動信号を通すとそれなりの丸くなってしまう。PSoC内部のOPAMはこれよりも周波数特性が低い。
8.3 差動入力の周波数特性をシミュレーション(外部OPAMP)
今回の使用する周波数をカバーできそうなOPAMPを用いて差動入力処理することを検討してみる。在庫あるOPAMPでOP2350といものがあった。GBWは38 MHzのものだ。
OPA2350の基本スペック • Rail-to-Rail Input • Rail-to-Rail Output (Within 10 mV) • Wide Bandwidth: 38 MHz • High Slew Rate: 22 V/μs • Low Noise: 5 nV/√Hz • Low THD+Noise: 0.0006%
やはりGBWの高いOPAMPはいい感じである。これを使用して実際に評価してみる。
9. 現物で評価してみる
9.1 観測ポイント
Easy CAN Monitor 試作機のCAN信号波形をアナログキャプチャする主要な要素の検討ブロックをFigure 9-1に示す測定ポイントで実際に「相手ノード」からCANデータを流してどのように波形が観測されるかを見てみる。(測定の様子はPhoto 9-1)
9.2 観測波形
「相手ノード」から流すデータ:標準フォーマット,500kbps, ID 1, DLC 5, Data [10][55][55][52][11]GND Point ⑤接続。※CAN通信の場合必ずしもGNDを接続する必要はない。
この測定結果からOPA2350で差動アンプを構成することでも忠実な波形をキャプチャすることができた。PSoC内部のOPAMPも健闘しているほうだとは思う。
9.3 シングルエンドと差動の話
これは今回のCAN波形キャプチャ機能とは直接関係ないが、Gnd Point⑤を切り離すと、基準の電位がわかなくなるため、自分のGNDで測定しても正しくは測定できない。
【アナログフロントエンド回路の結論】
- 差動OPAMPにGBW が大きなOP2350を用いることで、忠実な差動信号をとらえることができる。
- 500kbpsの波形をキャプチャするには若干サンプリングレートが低いかもしれない。
- 波形が変化しているか否かを判断することはできるので終端抵抗を装着するかどうかは実際の波形形状を見て判断しやすくなる。
10. windows Utility Application
Easy CAN Monitor III設定はwindowsアプリを使用して設定する。
またCAN波形キャプチャはこのwindowsアプリをして観測することができる。
対応はwindows11 以降
10.1 ポートの設定
Easy Can MonitorユニットをUSBでPCと接続するとCOMポートが2つ現れる。一つは「コンソール用」テキストベースでteratermなどのターミナルソフトから操作するためのもので、もう一つは「windowsのCAN Monitorアプリケーションソフト」で波形データや受信データなどをバイナリデータとしてやり取りする。ただし、上記のデバイス表示ではどちらが「コンソール用」なのかが判断できない。そこでとりあえずターミナルソフトを起動してみる。ターミナルの受信改行コードは「CR+LF」にする。
各ターミナルコンソール上で
“V[CR]”
と入力して
“Can Monitor 3.0.1”
というようにテキストでバージョン情報が返ってくるほうが「テキストコンソール用」で
“V”とそのまま返ってくる?のが「バイナリデータ通信用」でwindwos アプリで使用する。
COM4はターミナルソフトでは使用できないので閉じる。
10.1 起動
起動に必要なファイルはEasyCanMonitor.exeとCanMoni.iniの2つだけ。
特にランタイムライブラリ(DLL)などは必要としない。従って、適当にショートカットを作って自分の好きなように管理してください。削除するときは上記のファイルを消すだけ。
HID,CDC-COMドライバーはwindows標準のものを使用する
起動したら、Easy Can Monitorデバイスに接続する前にバイナリデータをやり取りするポートを指定する。ここではメニューの「Port」の選択するとシリアルポートの設定ウィンドウが開くので、先ほどコンソール用COMポートではない「バイナリデータをやり取りするポート」を指定する。
そして [💡]ボタンを押して接続する。
10.3 設定画面
【各設定項目の詳細】
(1) ID MASKの設定
(2) [Read Parameter]ボタン
Easy Can Monitorユニット内の情報を読み出す。
ビットタイミングの設定パラメータはユニットにCPUによって異なるので、最初に読み込んだほうが無難。正常に読み込めるとバージョン情報が表示される。
(3)[ide]チェック
[ide]は「IDE(Identifier Extension Bit)」のことで、標準フォーマットは”0”,拡張フォーマットは”1”になります。したがって、これ☑することでIDは29bitの拡張フォーマットとして扱われます。
10.4 [TXSetタブ]
10.5 Receiveタブ
受信したデータはS/Wアプリでは以下のように表示する。同じデータIDであれば最新に上書きされる。つまり行ごとにすべてユニークなデータIDとして表示する。
10.6 Waveタブ
(注意)この機能はマイコンがCY8C5868AXI(黒ラベル)のみ有効
10.7 LCD表示内容
終端が有効な時(Active Terminator回路が実装されている場合のみ)右上の丸いピクトが表示される。
コンソール表示が「CAN-USB」モードの時[▲]ピクトが表示される。
コンソール表示が「Normalモード」時の表示起動時は左にあるようにコンソール表示モードとビットレート、ビットタイミングが表示される。 [▲]ピクトが表示 は消える。
ID:1 DLC:5でデータ10h,55h,55h,52h,11hを受信した場合LCDにも最後に受信しデータ内容が表示される。
11. コンソール操作と表示
11.1 CANデータ受信
[経過時間10msec]
[t/T][id][dlc][d1][d2][d3][d4][d5][d6][d7][d8][CR]
☜で[277320]は受信した時刻 を示す。
[t]は標準IDフォーマット、
[T]は拡張IDフォーマット
[001]は受信したデータID(16進数)
[5]はデータの長さ[dlc]
そのあとの5個のデータは受信したデータを16進表示したものである。
データの間はスーペースで区切る。
経過時間以外16進
同じデータを「CAN-USB」モードで受信した場合。
tiiildd…[CR]
Transmit a standard (11bit) CAN frame.
iii Identifier in hex (000-7FF)
l Data length (0-8)
dd Byte value in hex (00-FF). Numbers of dd pairs must match the data length, otherwise an error occur.
本Easy Can Monitor IIIのコンソール受信したデータの表示形式にはLAWICEL社製 CAN通信 アダプタ「CANUSB」と互換のある形式と、ユーザーが見やすい「Normal Mode」形式がある。
一方送信形式はCANUSB形式のみとなっている 。特に今現在対応必須の送信形式がないのでこのフォーマットにしている。今後必要に応じて変更可能。
「エラー表示」は基本「Normal Mode」の書式となる。
CANUSB Mode | Normal Mode |
---|---|
t00151055555211 t0033112255 t60340d0d0d0d t002111 t002111 t0033112255 | 1464252 t 001 5 10 55 55 52 11 1464253 t 003 3 11 22 55 1464255 t 603 4 0d 0d 0d 0d 1464257 t 002 1 11 1464258 t 002 1 11 1464260 t 003 3 11 22 55 |
11.2 CANデータ送信
送信は受信の「CAN-USB」形式そのまま使用する。
CANUSBとの互換もあります。
送信例として☜のデータを用意する。
このテキストデータを全部選択してコピーする。
☜では標準フォーマットで準備しているが、拡張フォーマットを混在することも可能
ターミナルのところで上記でコピーした内容をペーストする。
一行でいいけど、最後に改行を忘れないように。
またEasy CAN Monitorからはエコーバックしないので、「ローカルエコー」しておくと分かりやすいかも。エコーバックしないのは正規CANUSBの仕様らしいのでそれに合わせた。
COM5(Easy Can Monitor)で張り付けて「OK」をすると、接続している相手、今回の場合は正規CANUSBで受信するとFigure 11-5のようになる。Easy CAN Monitor側で正常に送信できると”z”が表示される。これはCANUSBの仕様と同じである。
なお、CANUSB受信データの語尾4桁は受信した時刻を示しているので、受信データそのものは正しくやり取りされている。
11.3 エラー表示
bittimingをずらしたり、ターミネータの有無を切り替えることで故意にエラーを発生してみる 。割と終端の有無で通信状態が変わることがある。エラー表示形式は「Normal Mode」表示となる。
検出できるエラー内容は「Easy Can Monitor IIIの仕様」に記載します。
また検出したCANの詳細内容はここで解説されています。
12. 実際の使用例
実際の有効な活用例として「終端抵抗の有無によるエラー」を見てみよう!
【命題】
CANUSB対抗で通信をおこなったとき、終端がない場合「FROM ERROR!」となった。
波形をキャプチャすると差動出力で以下のような波形となった。
そこで終端抵抗をONにして再度データを流してみる。CAN通信波形が明らかにきれいになった。通信エラーも起こっていない。
これ、もし、2-3万でstandardが入手できるのであれば、欲しいかも、です。
↑facebookの「おとなの電子工作」から知りました。メールアドレスはfacebookのとは別のアカウントのものを入れました。
お問い合わせありがとうございます。ちなみにこの装置を開発した背景は、とある車載装置の開発をしていまして、それを遠く離れたところのお客さんにデモするときに別の担当者がセッティングすることがあり、「CANがつながらない!」って言いだしたのでその原因の切り分けをしやすいようにしました。その現場ではオシロのような気の利いたものもあるわけではなく、設置担当者がCANについて詳しくない中で適切に指示を出すにはその原因を正しく把握できないと効率悪いですからね。
CANはバス結線タイプなので、配線長やターミネーターなど適切に設置してやる必要があります。