2019年3月22日金曜日

An installation of PICAN DUO2

CAN network制御を2系統実施する必要があり、、、、

中華製の数百円の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Ωは使わない


プログラムはいろいろ考えないとならないけど、
繋がる事が確認できたので

Peace!!

0 件のコメント:

コメントを投稿