ラズパイ5 +Python+CANopenでモータを回す ④ CANopenのベーシックな規格とSDO/PDO、オブジェクト・ディクショナリ<前編>
CANバスは、すでに、初期の規格に比べてCAN FDなどバスのデータレート速度が伸びていますが、CANopenの物理層/データ・リンク層に相当します。
その上に、
- アプリケーション層と通信プロファイルがCiA 301
- CANopenマネージャとプログラマブルCANopenデバイスをCiA 302
の二つ(以上)の規格があり、CANopenのベーシックな部分になります。
この部分は、日本語で読める書籍が入手できます。
デバイス・プロファイルやアプリケーション・プロファイル類の規格書番号は400番台になり、モーション・コントロール(サーボ、ステッッピング・モータ、周波数インバータ)がCiA 402です。
本連載でメインとなるモータを回すCiA 402の日本語資料は、下記のものが参考になります。
EPOS2 Positioning Controller Application Note "デバイス・プログラミング"
●CANopenの要 オブジェクト・ディクショナリ
オブジェクト・ディクショナリは、標準オブジェクトとメーカ独自のオブジェクトをすべて記載した、いわば「デバイスの機能仕様書」になります。メーカのWebページからedsファイルとしてダウンロードできます。今回利用したオリエンタルモーターのedsファイルは、ドライバのBLVD-KRDページ、
https://www.orientalmotor.co.jp/ja/products/detail?hinmei=BLVD-KRD
EDSファイル(CANopen) BLVD-KRD_CANopen_V200.eds
を利用します。初期、V100でした。その後、400Wモデルなどが追加され、更新されたようです。
●SDO(Service Data Object)
第6回で後述するNMT(Network Management )がPre-operationalのときとOperationalのときに、オブジェクト・ディクショナリを読み書きできます。この操作をSDOの読み書きと言います。
オブジェクト・ディクショナリを、ざっくりと、番号で説明します。
1000番から始まるCommunication Objects、最初のあたりは、デバイス・タイプやメーカのバージョン情報とかが記載されています。
下記の七つは必須です。
- 1000 デバイス・タイプ情報
- 1001 エラー・レジスタ
- 1017 ハートビート・タイム
- 1008 0:4(サブの数)
- 1:ベンダID
- 2:製品コード
- 3:リビジョン番号
- 4:シリアル番号
2000番の手前にあるPDOマッピング関係の領域です。
- 1400番からPDOの受信communication parameter
- 1600番台からPDOの受信mapping parameter
- 1800番からPDOの送信communication parameter
- 1a00番台からPDOの受信mapping parameter
この後、2000番台、3000番台、4000番台がありますが、後述します。
6000番台(6000~9FFF)は、標準化されたデバイス・プロファイル領域=Device Profile Objects(モータではCiA 402)で、各メーカ共よく似た項目(index)があります。ドライブ・プロファイルの動作モードは各社いろいろな対応があり、下記の三つはほぼどこも実装しています。
- Profile Position Mode (位置制御モード)
- Profile Velocity Mode (速度制御モード)
- Homing Mode (原点復帰モード)
最近のロボット・アームのような用途に適した、
- サイクリック同期位置モード(CSP)
- サイクリック同期速度モード(CSV)
- サイクリック同期トルクモード(CST)
などを実装したコントローラも出てきています。それにともなって、indexの数も増加しているようです。これらのオブジェクトを全部理解して、プログラムで使うわけではありません。
極端に言えば、一つの動作モードで3~5のオブジェクトを触って、ほかはデフォルトのままでも支障がない場合が多いです。
MaxonのEPOS4と比較しました。
index (16進) |
名 称 | BLVD-KRD (オリエンタルモーター) |
EPOS4 (Maxon) |
---|---|---|---|
603Fh | Error code | 〇 | - |
6040h | Controlword | 〇 | 〇 |
6041h | Statusword | 〇 | 〇 |
605Ah | Quick stop option | 〇 | - |
605Bh | Shutdown option | 〇 | - |
605Ch | Disable operation | 〇 | - |
605Dh | Halt option code | 〇 | - |
605Eh | Fault reaction | 〇 | - |
6060h | Modes of operation | 〇 | 〇 |
6061h | Modes of operation display | 〇 | 〇 |
6062h | Position demand value | 〇 | 〇 |
6064h | Position actual value | 〇 | 〇 |
6065h | Following error window | 〇 | 〇 |
6067h | Position window | 〇 | 〇 |
6068h | Position Window Time | - | 〇 |
6069h | Velocity Sensor Actual Value | - | 〇 |
606Bh | Velocity demand value | 〇 | 〇 |
606Ch | Velocity actual value | 〇 | 〇 |
606Dh | Velocity window | 〇 | - |
606Fh | Velocity threshold | 〇 | - |
6071h | Target torque | 〇 | - |
6072h | Max torque | 〇 | - |
6074h | Torque demand | 〇 | - |
6077h | Torque actual value | 〇 | - |
6078h | Current Actual Value | - | 〇 |
607Ah | Target position | 〇 | 〇 |
607Bh | Position range limit | 〇 | - |
607Ch | Home offset | 〇 | 〇 |
607Dh | Software position limit | 〇 | 〇 |
607Fh | Max Profile Velocity' | - | 〇 |
6081h | Profile velocity | 〇 | 〇 |
6082h | End velocity | 〇 | 〇 |
6083h | Profile acceleration | 〇 | 〇 |
6084h | Profile deceleration | 〇 | 〇 |
6085h | Quick stop deceleration | 〇 | 〇 |
6086h | Motion ProfileType | - | 〇 |
6087h | Torque slope | 〇 | - |
6089h | Position Notation Index | - | 〇 |
608Ah | Position Dimension Index | - | 〇 |
608Bh | Velocity Notation Index | - | 〇 |
608Ch | Velocity Dimension Index | - | 〇 |
608Dh | Acceleration Notation Index | - | 〇 |
608Eh | Acceleration Dimension Index | - | 〇 |
6091h | Gear ratio | 〇 | - |
6098h | Homing method | 〇 | 〇 |
6099h | Homing speeds | 〇 | 〇 |
609Ah | Homing acceleration | 〇 | 〇 |
60A8h | SI unit position | 〇 | 〇 |
60A9h | SI unit velocity | 〇 | 〇 |
60B8h | Touch probe function | 〇 | 〇 |
60B9h | Touch probe status | 〇 | 〇 |
60BAh | Touch probe 1 positive edge | 〇 | 〇 |
60BBh | Touch probe 1 negative edge | 〇 | 〇 |
60BCh | Touch probe 2 positive edge | 〇 | 〇 |
60BDh | Touch probe 2 negative edge | 〇 | 〇 |
60D5h | Touch probe 1 positive edge counter | 〇 | 〇 |
60E3h | Supported homing methods | 〇 | 〇 |
60F2h | Positioning option code | 〇 | 〇 |
60F4h | Following error actual value | 〇 | 〇 |
60F6h | Current Control Parameter | - | 〇 |
60F9h | Speed Control Parameter | - | 〇 |
60FBh | Position Control Parameter | - | 〇 |
60FDh | Digital inputs | 〇 | - |
60FEh | Digital output | 〇 | - |
60FFh | Target velocity (pv) | 〇 | 〇 |
6402h | MotorType | - | 〇 |
6410h | Motor Data | - | 〇 |
6502h | Supported drive modes | 〇 | 〇 |
67FEh | Version number | 〇 | 〇 |
67FFh | Single device type | 〇 | 〇 |
なお、各indexにはsubが存在するものがあります。表では省略しています。edsファイルでは、元のindexのパラメタにSubNumber=3と、subの存在数が書かれています。Position range limit(607Bh)の例では'3'です。
[607B] [607Bsub0] [607Bsub1] [607Bsub2] |
サポート・ソフトのMEXE02の(m14) CANopenオブジェクトディクショナリの表示は、次のように三つsubがあります。
ドライブ・プロファイルの動作は、いくつかのindex(オブジェクト)を設定し、動作をスタートさせると、コントローラが自動で必要な計算を行って、回転制御をする、優れものです。
例えば、Profile Position Mode (位置制御モード)であれば、目標位置(Target Position)を指定すれば、徐々に加速し、一定の速度で回転を続け、目標位置に近づくと減速を始めるという台形駆動が行われます。この時、加速(Profile acceleration)と減速(Profile deceleration)は、利用者が設定ができます。
速度やトルクはコントローラによってPID制御されているので、途中で負荷が変わったとしても自動的に補正がかかり、正しい目標位置まで回転します。
2000~5FFFは、メーカ固有のプロファイル領域です。
●2000番台
BLVD-KRDには存在しません。
EPOS4では、0x2001 (CAN bit rate)、0x2002 (RS232 bit rate)、0x2005 (RS232 frame timeout)、0x2006 (USB frame timeout)、0x200A (CAN bit rate display)、0x2010 (Active fieldbus)、0x2100 (Additional identity)、0x2101 (Extension 1 identity)、0x210C (Custom persistent memory)、0x2200 (Power supply)などのオブジェクトがあります(EPOS4 Firmware Specification)。
●3000番台
BLVD-KRDには存在しません。
EPOS4では、チューニング・ツールを使った結果のPIDのパラメタが読み書きできます(EPOS4 Application Notes)。
また、ディジタル入出力、アナログ入出力などの値も見れます(EPOS4 Firmware Specification)。
●4000番台
このモータ専用のオブジェクトです。解説はどこにもないので、「BLV series R type Driver CANopen communication profile」を読むしかないです。
例えば、四つある入力端子が反映されるオブジェクトが見つかりません。
端子番号 | 端子名 | 初期値 |
---|---|---|
16 | DIN0 | ID-SEL0 |
17 | DIN1 | ID-SEL1 |
18 | DIN2 | STOP |
19 | DIN3 | FREE |
MEXE02 の(m12)ゲインチューニングで変更されたPIDのゲインが保存される場所が見つかりません。
4000番台のオブジェクト一覧です。
Manufacturer Specific Objects |
●資料
モータを回すCiA 402の日本語資料は、
- Profile Position Mode (位置制御モード)
- Profile Velocity Mode (速度制御モード)
- Homing Mode (原点復帰モード)
などで検索すると、モータ関連のマニュアルが見つかります。多くはEtherCAT用ですが、CANopenと同じ仕様なので、モータの制御には役に立ちます。
●混乱のもと
列挙された項目が、0オリジンと1オリジンの両方があるようです。
16進表記で、YYYYhと0xYYYYが、この連載では混在しています。
もとのCANopen用語がわからない変な日本語が散見されます。