0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Can Shieldを使ってみました。

Posted at

はじめに

STM32でCANを使用することになったので、その準備のためにCAN-BUS Shieldを使用してCAN通信を行うための環境を整えました。自分自身の忘備のためにやったことをまとめました。
確認不足だったのですがCAN-BUS ShieldとはSPI通信でデータの受け渡しをするものでした。

使用機器

下表の機器を使用しました。

メーカ 型格
STマイクロエレクトロニクス NUCLEO-L476RG
STマイクロエレクトロニクス STM32CubeIDE
SeeedStudio CAN-BUSシールドV2

接続

NUCLEO-L476RGとCAN-BUS ShieldはSPI通信でデータのやり取りをします。
STM32L476RGはSPI通信のために下表の端子を使用します。

ピン番号 端子名 Arduino 機能 備考
21 PA5 D13 SPI1_SCK -
22 PA6 D12 SPI1_MISO -
23 PA7 D11 SPI1_MOSI -
38 PC7 D9 CS チップセレクト(アクティブLOW)
43 PA10 D2 INT 外部割り込み信号(falling edge)

CAN-BUS ShieldのSPI信号はデフォルトでISCPに接続されています。
そのためNUCLEO-L476RGとSPI通信するためには接続を変更する必要があります。
接続の変更は下図のようにジャンパで接続するのが簡単です。
ジャンパを使用する
下図のようにCAN-BUS Shieldの裏面にあるランドの赤線部分のパターンをカットして、灰色線のようにハンダ付けすることによっても動作すると思わます。ジャンパを使用したためこちらの方法は試していません。動作未確認となります。
基板を改修する
またDub9ピンの信号を出力を変更しました。
基板の改修をしましたがTerminalからCANHとCANLが出力されているので、このコネクタを使用してDsub9ピンに接続すれば良かったと思います。

信号 デフォルト 変更後
CANH 3 7
CANL 5 2
GND 2 3

Dsub9ピンの出力ピンを変更するには、下図のようにCAN-BUS Shieldの裏面にあるランドの赤線部分のパターンをカットして、灰色線のようにハンダ付けすることによって出力先を変更しています。

DSUB9_solid.png

SPIの設定

通信速度:10MHz
MSBファースト
Full-Duplex Master(全二重マスター)

起動処理

CAN-BUS Shieldの初期化処理のフローになります。
初期化.png

コマンドの送信

CAN-BUS ShieldではMCP2515というCANコントローラを使用しています。CANコントローラとはMCP2515で決められたコマンドを使用してデータをやり取りします。

  • コマンドを送信する前にチップセレクト(CS)をLOWとする必要があります。
  • コマンドの送信が完了したらチップセレクト(CS)をHIGHにします。
  • データはシーケンシャル(オートインクリメント)に送信することができます。
  • Bit Modifyコマンドは許可されたレジスタに対してのみ使用できます。
CANコントローラをリセットする
コマンド
0xC0
CAN通信のボーレートを設定する(250kbpsの場合)
コマンド レジスタ CNF3 CNF2 CNF1
0x02 0x28 0x85 0xF1 0x41
送信バッファを初期化する

送信バッファとしてTX0からTX2の計3個を所持しています。それら全てを初期化します。

コマンド レジスタ データ データ データ データ データ データ データ データ データ データ データ データ データ
0x02 0x30 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
コマンド レジスタ データ データ データ データ データ データ データ データ データ データ データ データ データ
0x02 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
コマンド レジスタ データ データ データ データ データ データ データ データ データ データ データ データ データ
0x02 0x50 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
受信バッファを初期化する

受信バッファとしてRX0とRX1の計2個を所持しています。それら全てを初期化します。

コマンド レジスタ データ データ データ データ データ データ データ データ データ データ データ データ データ
0x02 0x60 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
コマンド レジスタ データ データ データ データ データ データ データ データ データ データ データ データ データ
0x02 0x70 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
受信ルールを設定する

受信ルールを設定します。CANIDのフィルタを使用せず、全てのデータを受信するように設定しています。

RX0

コマンド レジスタ データ データ
0x05 0x60 0x64 0x64

RX1

コマンド レジスタ マスク データ
0x05 0x70 0x60 0x60
割り込みを設定する

データを受信したときに割り込みを発生させるように設定しています。

コマンド レジスタ データ
0x02 0x2B 0x03
Normalモードに設定する
コマンド レジスタ マスク データ
0x05 0x0F 0xE0 0x00

今後の対応

今後はRaspberry Piを使用してCAN通信を行います。

参考サイト

CAN-BUS Shield V2.0

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?