TOPに戻る

ラズパイ5 +Python+CANopenでモータを回す ① 構成と環境(オリエンタルモーター の「BLMR5100K-A-B」 + 「BLVD-KRD」)

 ラズパイを利用してCANopen対応BLDCモータをpythonのプログラミングで回します。ラズパイだけではツール類が足りないので、Arduino、Windows10の環境も利用します。

環境

  • ハードウェア Raspberry Pi 5(4GBモデル)
  • OS Raspberry Pi OS (64ビット)、リリース日December 5th 2023
  • ラズパイ環境 Python 3.11.2
  • Windows10 22H2にて、ssh(OpenSSH_9.2p1 Debian-2+deb12u2, OpenSSL 3.0.11 19 Sep 2023)および、VNC Viewerを動作させている
  • Windows環境 Python 3.10.5
  • Arduino 2.x

使用したモータ

 オリエンタルモーター のブラシレス・モータBLVシリーズ Rタイプを使います。2021年購入時には品種はほとんどなかったのですが、現在(2024年4月)、ギアの有無、出力が60~400Wと各種用意されています。400Wの一部を除き、コントローラのBLVD-KRDは、共通部品です。

  「BLMR5100K-A-B」 + 「BLVD-KRD」

モータBLMR5100K-A-B

定格出力(連続) 100 W
電源入力 定格電圧 DC24~48V(動作可能電圧  DC15~55 V)
電源入力 定格入力電流 2.6(48 V)~5.1 A(24 V)
定格トルク(モータ軸) 0.319 N・m
速度制御範囲 1~4000 r/min
許容慣性モーメントJ 23×10-4kg・m2
モータ部 質量 1.1 kg
ロータリ・エンコーダ 内蔵(分解能  0.01°(1回転:36000パルス))

コントローラBLVD-KRD

PCとの接続 USBマイクロコネクタ
上位接続 Modbus(RS-485)、CANopen

サポート・ソフト(無償) BLST01(初期)、現在MEXE02

  https://www.orientalmotor.co.jp/ja/download/software/mexe02

使用した電源

 DINレール用の、モータBLMR5100K-A-B用には24V 2.5A、コントローラBLVD-KRD用には24V 1.7Aを使いました。モータの電源は、専用のLC03D06Aケーブルを使いました。

接続

 モータとコントローラは専用のケーブルでつなぎます。UVWの電源と、エンコーダ/電磁ブレーキのコネクタが用意されています。延長用が「接続ケーブル」で、交換用が「可動接続ケーブル」と呼ばれているようです。近距離ならば、別途購入は不要です。
 マニュアルHP-5139J.pdfの6項に従ってコネクタを差し込みます。
 28ピンのCN4コネクタは、5ピンがCAN_L、6ピンがCAN_H、7ピンがCAN_GND、20ピンNET-VIN(コントローラ24V)、21ピンNET-GND(コントローラGND)をつなぎます。

構成

 初期段階、ユーティリティなどはWindowsとUSB経由で動かします。最終的には、ラズパイ+CANインターフェースでCANバス経由で命令を実行します。

 CANバスへの接続は、D-SUB9ピンのコネクタを利用しました。ほかにも規定されているようなので、自分の環境にあったもので接続しましょう。

 WindowsマシンをCANバスにつなげているのは、IXXATのUSB-to_CAN V2 Compactです。5万円以下でマルツで入手しました。使ったことはありませんが、アナログ・デバイセズのUSB-2-RTMIが2万円以下です。別の記事で紹介する TCML-IDEでは利用できるようですが、canopenライブラリでは不明です。

 ラズパイでは、mcp2515コントローラを搭載したWaveshare製CAN HATボードを、アマゾンで購入しました。GPIBコネクタに挿すだけで接続は完了します。ただ、純正のFANを利用した場合は、ぶつかってしまうので、コネクタに約10mmの下駄をはかせています。

 mcp2515は、ラズパイにデバイス・ドライバが用意されているので、利用は簡単です。クロックは16MHzがデフォルトのようですが、このボードは12MHzです。昔試したとき、ほかのボードで8MHzクロックでは利用できませんでした。

 組み込みが成功したなら、

  $ sudo ip link set can0 up type can bitrate 1000000

で、ネットワーク・デバイスとして利用ができるようにしておきます。

CANopenのサポート

 コントローラBLVD-KRDのマニュアル類は、下記のWebからダウンロードできます。 

  https://www.orientalmotor.co.jp/ja/products/detail?hinmei=BLVD-KRD

 コントローラBLVD-KRDのModbusでは、運転などの日本のマニュアルがあります。CANopen用はありません。用意されているのは、

   英語版のBLV Series R Type Driver CANopen Communication Profile

だけです。したがって、CANopenの規格でモータを回すための方法は、別途どこかで学習しなければなりません。

 また、Python用ライブラリ、C++用ライブラリやAPIはなにも用意されていません。

 本連載では、canopenライブラリを利用します。

  https://github.com/christiansandberg/canopen/tree/master

実現できること

 マブチモータにHブリッジのドライバ回路をつないで、Arduinoもしくはラズパイで制御するのと同じことができます。

 たとえば、ベルトコンベアで、一定の速度でベルトを動かそうとします。モータは、停止状態から徐々に速度を上げ、設定した目標速度に達したら、その速度を維持します。ベルトの上に、様々な重さの荷物が載ったり、降ろされたりします。でも、速度を一定に保ちたいです。

 CANopenのモータ制御の機能を利用すると、加速や減速時の速度、目標速度を設定すれば、それだけで、実現できます。

 Arduinoやラズパイのシステムで直接モータを駆動している場合は、速度計を別途用意し、それが一定になるようなプログラムを開発しなければなりません。もちろん、定格の大きなモータを使えば、負荷の変動をほぼ無視できますが、省エネではありません。

連載 ラズパイ5 +Python+CANopenでモータを回す

(1) 構成と環境(オリエンタルモーター の「BLMR5100K-A-B」 + 「BLVD-KRD」)

(2) サポート・ソフト MEXE02

(3) PythonでSDOの読み出し(仮)caninfo.py

(4) CANopenのベーシックな規格とSDO/PDO、オブジェクト・ディクショナリ<前編>

(5) CANopenのベーシックな規格とSDO/PDO、オブジェクト・ディクショナリ<後編>

(6) 二つの状態遷移(NMTとStatus Machine)

(7) CANバス信号を見る<前編>canreset.py candump0.py

(8) CANバス信号を見る<中編>Arduino

(9) CANバス信号を見る<後編>CANopenのデコードができ無償で使えるツールAnalog Devices TMCL-IDE

(10) モーション CiA 402の規格<Homing mode> canHome.py

(11) モーション CiA 402の規格<Profile Position Mode (PPM)-前編> canPPMread.py

(12) モーション CiA 402の規格<Profile Position Mode (PPM)-中編> caninfo2.py canppm.py

(13) モーション CiA 402の規格<Profile Position Mode (PPM)-後編> canppm2.py