1
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 3 years have passed since last update.

日記;回すだけIII ⑯ ラズパイ、C++でプログラミング<その2 サンプルを動かす(EPOS4)>ベータ版

Last updated at Posted at 2022-05-01

ラズパイにEPOS4のライブラリをインストール

 EPOS Command Library Documentationの「9.2 Linux」からの記述に従って、ライブラリとサンプル・プログラムをインストールします。
 maxonからダウンロードすればいいのですが、Webブラウザが固まって動かなかったので、WindowsPCでダウンロードし、解凍したのをUSBメモリでラズパイのデスクトップにEPOS-Linux-Libraryフォルダごとコピーします。
 cd EPOS_Linux_Library
 でディレクトリに入り、
 sudo bash ./install.sh
でインストールします。
 プログラミングの作業は、worksフォルダを作ってその中で行おうと思います。デスクトップに置いてあるサンプルHelloEposCmdフォルダの中身(四つある)をworksへコピーします。
  home/xxx/Desktop/EPOS-Linux-Library/EPOS_Linux_Library/examples/HelloEposCmd
 Definitions.hはヘッダ・ファイルです。HelloEposCmd.cppはサンプルのソースです。Makefileはmakeの時に使うファイルです。CMakeLists.txtは使いません。
 ターミナルで、worksフォルダに入り、
 make
でコンパイルとリンクすると、実行ファイルHelloEposCmdができます。ヘルプを実行します。
 ./HelloEposCmd -h

-----------------------------------------------------------------
Epos Command Library Example Program, (c) maxonmotor ag 2014-2019
-----------------------------------------------------------------
Usage: HelloEposCmd
        -h : this help
        -n : node id (default 1)
        -d   : device name (EPOS2, EPOS4, default - EPOS4)
        -s   : protocol stack name (MAXON_RS232, CANopen, MAXON SERIAL V2, default - MAXON SERIAL V2)
        -i   : interface name (RS232, USB, CAN_ixx_usb 0, CAN_kvaser_usb 0,... default - USB)
        -p   : port name (COM1, USB0, CAN0,... default - USB0)
        -b   : baudrate (115200, 1000000,... default - 1000000)
        -l   : list available interfaces (valid device name and protocol stack required)
        -r   : list supported protocols (valid device name required)
        -v   : display device version

PiCAN2のデバイス・ドライバのインストール

 CANバスの用意をします。
 PiCAN2の製品説明のページ https://copperhilltech.com/pican-2-can-bus-interface-for-raspberry-pi/
 Driver Installationの解説 https://copperhilltech.com/blog/pican2-pican3-and-picanm-driver-installation-for-raspberry-pi/

sudo nano /boot/config.txt
でエディタを起動します。
 次の2行を最後に記述します。
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25

 dtparam=spi=onは、メニューのPreferances-Raspberry Pi Configurationからインターフェースでspiを有効にしたら、すでに入っていると思います。上記の解説のページにはもう1行dtoverlay=spi-bcm2835ありますが、現時点では不要です。たぶんラズパイ4が出たころから、システムに組み込まれてしまい、添付されなくなっています。追加しても、組み込み時に見つからないとしてはねられるだけです。
 16000000は水晶発振子の周波数です。8MHz、20MHzがあるようです。25はGPIO25ピンで、int信号で使われます。物理的には22番ピンです。mcp2515-can0は、SPIバスのピンの接続指定です。CE0(チップ・セレクト信号で物理ピンでは24番)を使います。残りは標準的に使われる、MOSI;19番ピン、MISO;21番ピン、SCK;23番ピンです。

 CTRL+Oで上書き、CTRL-Xでエディタを抜けます。rebootします。
 dmesg | egrep "can|spi"
を実行して、

mcp251x spi0.0 can0: MCP2515 successfully initialized.

だと、ドライバが組み込まれています。

mcp251x spi0.0: MCP251x didn't enter in conf mode after reset
mcp251x spi0.0: Probe failed, err=110
mcp251x: probe of spi0.0 failed with error -110

とかだと、ハードを認識していません。err=110はタイムアウトです。

番外

sudo nano /boot/config.txtでエディタを起動します。最後に、
dtdebug=1
を追加して、CTRL+Oで上書き、CTRL-Xでエディタを抜けます。rebootします。
 sudo vcdbg log msg
でデバイス・ドライバの組み込み途中の経過記録を読み出せます。上記のように、組み込みが成功しても失敗しても内容は同じでした。

番外終わり

 正常にデバイス・ドライバがインストールできたら、
sudo /sbin/ip link set can0 up type can bitrate 500000
ネットワーク・デバイスとして機能させます。500000である理由は不明です。
ifconfig
を実行すると、イーサネットやWi-Fiと同じように情報が表示されます。
2022-04-27 (4).png

Visual Studio Codeのインストール

 不要な人は読み飛ばしてください。
 メニューからRecommended Softwareを立ち上げます。Visual Studioで検索し、でてきたVisual Studio Codeにチェックを入れ、Applyをクリックすると、インストールが始まります。

101.png

 メニューのProgrammingに登録されています。

接続①

 EPOS4のマイクロUSBとラズパイのUSBコネクタをつなぎます。EPOS4はCANバスへのブリッジ(ゲートウェイ)になります。
EPOS4-raspi1.png
 PiCAN2の情報を調べるので、PiCAN2もつないでおきます。

サンプルのコンパイル

 サンプルではnodeIdが1ですが、今回のEPOS4では5に設定しているので変更します。
 makeでコンパイルします。以下、手順です。

 cd worksで作業用ディレクトリに移り、HelloEposCmd.cppをオープンします。メニューのTerminalから新規を選びます。数分(理由は不明)経って、画面下にターミナルにプロンプトが出てきます。
 makeはすんでいるので、./HelloEposCmdで実行します。モータが動きます。

2022-04-27 (2).png

 最終的にはCANバス経由でモータを制御したいのですが、CANバスを使用するときのinterface nameはどこにも書かれていませんし、/sys/busなどのディレクトリのファイルを全部開いても記述されていません。下記のパラメータを引っ付けて実行します。maxonのサポートに聞いたパラメタです。

$ ./HelloEposCmd -l -s "CANopen"
-----------------------------------------------------------------
Epos Command Library Example Program, (c) maxonmotor ag 2014-2019
-----------------------------------------------------------------
default settings:
node id             = 5
device name         = 'EPOS4'
protocal stack name = 'MAXON SERIAL V2'
interface name      = 'USB'
port name           = 'USB0'
baudrate            = 1000000
-----------------------------------------------------------------
interface = CAN_mcp251x 0
            port = CAN0
-----------------------------------------------------------------

 interface nameがCAN_mcp251x 0であることがわかりました。

接続②

 PiCAN2ボードのCAN_HとCAN_L端子を、EPOS4のCANバスにつなぎます。USBケーブルはつないだままでかまいません。終端抵抗はEPOS4の1か所だけで動かしています。1mほどの距離だと、1個でも通信できます。本来CANバスの両端に入れるものですが。
EPOS4-raspi2.png

CANバス対応にプログラムを変更

 MakefileのTARGETの記述を、TARGET = epos_bに変更します。
 HelloEposCmd.cppをepos_b.cppにコピペします。次の部分を変更、保存します。

void SetDefaultParameters()
{
	//USB
	g_usNodeId = 5;
	g_deviceName = "EPOS4"; 
	g_protocolStackName = "CANopen"; 
	g_interfaceName = "CAN_mcp251x 0"; 
	g_portName = "CAN0"; 
	g_baudrate = 1000000; 
}
make clean
make
./epos_b

で実行します。CANバス経由でサンプルのHelloEposCmd.cppを変更したepos_b.cppが実行され、モータが動きます。

(※)このサンプル・プログラムは、ステータスやエラー・フラグをしっかりチェックしてプログラムが組まれています。C++の記述なので、Cだけを学んだ筆者には少し難解です。
 モータは、PPM(Profile Position Mode)でCW;5000、CCW;10000、CW;5000の3回回転します。PVM(Profile Velocity Mode)では、100、500、1000と速度を変化させます。エラー処理も含まれているので、実際の応用プログラムに必要な処理が学べます。

1
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
1
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?