【Arduino CAN】(LIN)

 Arduino Unoを使って LIN-USB(シリアル)コンバータ を作りました。
           (※LIN:Local Interconnect Network)

【回路的】
 回路的には、LINトランシーバ+プルアップ抵抗1本を追加したのみです。

【実装】
 余っていたボードの再利用なので、少し雑です。



【ソフトウェア】
 ArduinoのLINライブラリ等をネット検索して参考にしました。
但し、今回はUSBシリアルへのコンバータですが、Arduino Unoのマイコンには、シリアルが1回線しか無いので、SoftwareSerialライブラリを改造する形で、SoftwareLINライブラリを作成しました。
 今回は、スレーブデバイスからデータを読み出すマスター側を作成しました。マスター側からスレーブ側へ[ヘッダパケット]として、Breakフィールド、Syncフィールド、IDフィールドをパケット的にデバイス側へ送ってやると、デバイス側からResponseパケットが返ってきます。Breakフィールドは、13bitのLow信号ですので、SoftwareSerialライブラリの改造するアプローチは、ビット操作が柔軟にできて都合が良かったです。

【PC側ソフトウェア(ドライバ)】
 今回、PC側は、Qt Quickを使ってプログラムを作りました。ここで一つ問題が発生しました。Qtプログラム側(C++)からは、QSerialPortクラスを使ってポート操作を行いますが、Arduinoのシリアルモニタからは、ポートが開けるのに、QSerialPortからはポートが開けないという問題です。(一度開いてしまえば通信可能なのですが・・・)
 結果としては、Arduinoを使う場合は、DTR(Data Terminal Ready)の操作が必要で、ポートをOpen/Connectした後に、setDataTerminalReady(true)を加える必要がありました。


コメント

  1. Hello, could you share with me the Arduino code used in this project? I'm working with this composition Arduino+mcp2004 but without success with message transmition after the MCP. Thanks

    返信削除

コメントを投稿

人気の投稿