中華製の数百円のMCP2515 モジュールを2つ使おうと試したけど
SPIまでは2系統利用できるようになるが、肝心のMCP2515モジュールが2つ認識せず、、、
多分、やり方あると思うけど、時間もかけられず
ここのモジュールを使う事にした。
http://skpang.co.uk/catalog/pican2-duo-canbus-board-for-raspberry-pi-23-p-1480.html
ドキュメントはこちらも参照
https://copperhilltech.com/pican2-duo-can-bus-board-for-raspberry-pi-2-3-with-smps/
Raspberry Piもこれ専用になってしまうので、Raspberry Pi Zero Wを使う
1. Raspberry Pi 設定
1.1最初の設定
/boot/config.txt には次の行を追加dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25
dtoverlay=mcp2515-can1,oscillator=16000000,interrupt=24
dtoverlay=spi-bcm2835
rebootをして確認
can0 と can1 があればOK
ls -al /sys/class/net
total 0
drwxr-xr-x 2 root root 0 Mar 22 00:20 .
drwxr-xr-x 49 root root 0 Nov 4 2016 ..
lrwxrwxrwx 1 root root 0 Mar 21 21:16 can0 -> ../../devices/platform/soc/20204000.spi/spi_master/spi0/spi0.1/net/can0
lrwxrwxrwx 1 root root 0 Mar 21 21:16 can1 -> ../../devices/platform/soc/20204000.spi/spi_master/spi0/spi0.0/net/can1
lrwxrwxrwx 1 root root 0 Mar 21 21:16 lo -> ../../devices/virtual/net/lo
lrwxrwxrwx 1 root root 0 Mar 21 21:16 wlan0 -> ../../devices/platform/soc/20300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0
dmesg 下記は表示される一部
[ 16.752998] CAN device driver interface
[ 16.805527] mcp251x spi0.1 can0: MCP2515 successfully initialized.
[ 16.837173] mcp251x spi0.0 can1: MCP2515 successfully initialized.
[ 18.013248] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
[ 18.013313] brcmfmac: power management disabled
[ 19.588124] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready
[ 309.214257] can: controller area network core (rev 20170425 abi 9)
[ 309.214453] NET: Registered protocol family 29
[ 309.243944] can: raw protocol (rev 20170425)
開発元のHPにはいろいろ書いてあるし、開発元のURLからソフトのdownloadとなっていたけど、自分で判断して
sudo apt-get install autoconf git libtool
git clone https://github.com/linux-can/can-utils.git
cd can-utils
./autogen.sh
./configure
make
sudo make install
これで設定は完了
1.2 テスト
テストは、モジュール内で確認する。(写真のまんま)sudo /sbin/ip link set can0 up type can bitrate 500000 loopback on
sudo /sbin/ip link set can1 up type can bitrate 500000 loopback on
sudo ifconfig can0 up
sudo ifconfig can1 up
loopback onをつけているのは、モジュール内だけでチェックするため
実際に使うときは指定しない。
3つのターミナルを立ち上げて、確認。こんな感じ
candump でcan0 とcan1を監視して、cansend でそれぞれに送信する
以下の2枚の写真はサイトの説明から拝借
写真のようにループさせてテストする事もできる。
個の時は、ターミネータの120ΩをONにしている。
2 接続
2系統ののテスト。写真は全体像。
ブレッドボードで2つのバスを作っている。ターミネータには120Ωの抵抗が両端にある。
右端中にPiCAN DUO2を装着したRaspberry Pi。
右端下にRaspberry Pi Zero Wがあり、DUO2のCAN1とバスを共有
左端上にRaspberry Pi 3B+があり、DUO2のCAN0とバスを共有
3つのRaspberry Pi毎にCANの立上げを行い、DUO2以外の2つのRaspberry Piではcandumpで監視する。
DUO2からcansendでデータを送信する。
(1) PiCAN DUO2のCAN0とCAN1起動
sudo /sbin/ip link set can0 up type can bitrate 500000
sudo /sbin/ip link set can1 up type can bitrate 500000
sudo ifconfig can0 up // 192.168.11.170 のRaspberry Pi
sudo ifconfig can1 up // 192.168.11.162 のRaspberry Pi
(2) CAN0:CANB Raspberry Pi 3B+ (192.168.11.170)
sudo /sbin/ip link set can0 up type can bitrate 500000
sudo ifconfig can0 up
(3) CAN1:CANA Raspberry Pi Zero W (192.168.11.162)
sudo /sbin/ip link set can0 up type can bitrate 500000
sudo ifconfig can0 up
(4) テスト
こんな感じのテスト。
ただ、CAN0でcansendすると、2行になって表示される。原因不明。
今度は、DUO2以外からDUO2にcansend。これはOK
3.その他
3.1 ターミネータ
CANの仕様は両端に120Ωの抵抗をターミネータとするとなっている。このボードは、120Ωの抵抗がreadyになっていて、ジャンパーで繋げば良いようになっている。
今回は、can0 をクローラのcanネットワークに接続し、またcan1は同時のCANネットワークとし、そちらにターミネータをつけるので、このモジュールの120Ωは使わない
プログラムはいろいろ考えないとならないけど、
繋がる事が確認できたので
0 件のコメント:
コメントを投稿