日記；回すだけⅣ ③ ラズパイ＋EPOS4、C++でプログラミング＜モータのチューニング＞

### 接続
　Windows10 PCからUSBケーブルでEPOS4（ID5、今まで使ってきたコントローラ）につなぎます。下記の経路です。EPOS4には24V電源をつないでいます。

![EPOS4-raspai01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/2bfea715-86b6-2eea-40a8-a29879a6eefc.png)

### maxon EPOS Studio 3.7
　たとえば、maxonのWebで、「EPOS4 Compact 24/1.5 CAN」を検索して、見つかった製品のページを表示し、ダウンロードのタブの中にSetup EPOS, IDX - Studio 3.7 が見つかります。ダウンロードし、zipファイルを解凍しインストールします。Windows用のEPOS Studio 3.7です。
　
　プロジェクトの選択画面が立ち上がるので、EPOS4Projectを選んで次へをクリックします。
![2022-06-03 (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/4d208035-6f3c-3dc2-2131-caf0cf1a7f4d.png)

　このまま完了をクリックします。
![2022-06-03 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/4f0a1508-872b-a5f6-bfa3-74e0b8e6b0dd.png)

　プロジェクトが作られました。

![2022-06-03 (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/f7a46fb9-cacd-b9af-5c2f-b1dcfc389808.png)

左のメニューから、USBを右クリックして、Scanします。
　EPOS4(Node5)を見つけてきます。これをマウスで選択し、OKをクリックします。

![2022-06-03 (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/dd84f55b-dfba-fea6-aa8c-957a1178dbc6.png)

### 初期設定
　WizardsのStartupを選択します。初期設定が始まります。
　モータは[このスペック](https://www.maxongroup.co.jp/maxon/view/product/motor/ecmotor/EC-i/496661)だと思われます。
　モータの流せる電流は2.72Aですが、コントローラが最大1500mAなので、最初、1000mAを入力しました。モータのスペックは、maxonをアメリカに変更すると、英語でモータの諸元を表示してくれるので、なるべくよく似た単語を探します。でも、ない場合もあります。どうして、入力すべきパラメタが諸元にないのでしょうね。私にはわかりません。そういう時は、適当な数値を入れるのですが、場合によっては、xxx以下だというメッセージが出るときは、その上限の値を入力しました。
　Nextをクリックします。
![2022-06-03 (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/69a5f4da-eadc-476d-04e5-f591e4afbbd7.png)
　Gearの設定ですが、ないので、Nextをクリックします。
　Sensorの設定です。エンコーダのパルス数をカタログ通り1024にしました。
　Nextをクリックします。
![2022-06-03 (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/1f895b00-0708-3647-f387-537e4673dc44.png)
　Commutationの設定です。次のように設定しました。
　Nextをクリックします。

![2022-06-03 (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/b4118a8f-0de7-2133-39c2-e23517f6653f.png)

　Regulationの設定です。Currentはトルクを管理します。この後、オートチューニングでPI/PIDのパラメタの設定が行われます。
　Nextをクリックします。

![2022-06-03 (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/f738f3ea-04d7-6f3d-5756-139816ddc649.png)

　単位系の設定ですが、何も変更しません。
![2022-06-03 (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/8601e91b-a265-8bc6-2ff1-86e3da790a26.png)

　Limitの値は、正しくないと思います。まだモータのスペックを理解できていません。


![2022-06-03 (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/1953b4a8-dee0-4668-9517-69d5bd808b21.png)

　Device Controlの設定です。正しいかどうかわかりません。

![2022-06-03 (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/1f835fcb-bab6-cf78-57a8-4fca46814c1b.png)

　Windowsの設定です。機能を理解できていません。C++のライブラリに少し解説があります。

![2022-06-03 (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/406f56bb-da49-a460-53e7-6830ee13c5ec.png)

　次のTouch Probeは機能が不明なので、何も初期値から変更していません。

　Input/Outputsは、コントローラのボード上にあるI/Oの設定です。当初使いません。デフォルト値にいろいろ設定されていますが、そのままでFinishします。Finishすると、設定したパラメタは、コントローラのEEPROMに書き込まれるようです。

### Regulation Tuning
　モータに合わせて、PIDなどのパラメタの設定が自動で行われます。


![2022-06-03 (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/ee9c08cf-59ef-d97a-93a6-3933ca83c31f.png)

　Currentです。電流は1000mAに設定して実行しました。

![2022-06-03 (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/6aa269b9-ffd5-5140-7fac-c0b689783e67.png)

　Velocityです。1000incに設定して実行しました。加速と減速はすごく遅い設定です。

![2022-06-03 (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/1f65d4f0-b9b1-3874-a730-3dff22575824.png)
　Positionです。

![2022-06-03 (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/5ef5ca18-05ea-5ed1-66c2-26def49bbec9.png)

　エラーで止まることもあります。最初の電流を低い値500mAにすると、すべての項目が実行できる場合もあります。モータのスペックの読み方が未熟だと、失敗しやすいです。正しいだろう数値を入れられると、だんだんうまくチューニングができるようになります。

### PDOマッピングの修正
　左のメニューのCANopenをクリックし、Receive-PDOの画面を出します。
　COB-IDは0x200＋Node-IDなので、0x00000205、0x00000305、0x00000405、0x00000505に変更します。asyncronousは全部synchronousに変更します。
![2022-06-03 (37).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/bd474043-b14d-8a40-422e-de88263eb043.png)


　Transmit-PDO画面を出します。
　COB-IDは0x180＋Node-IDなので、0x00000185、0x00000285、0x00000385、0x00000485に変更します。asyncronousは全部synchronousに変更します。
　RTRのチェックを外し、Finishして再度開くと、COB-IDは0x40000xxxxに変更されています。
![2022-06-03 (39).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/b74bb088-9619-10d3-08f8-726f9745f508.png)

　Finishで終了します。


　PDOマッピングは、[IDX Application Notes](https://maxonjapan.com/wp-content/uploads/manual/IDX/IDX-Application-Notes-Collection-En.pdf)の4.5.2 PDO Mappingに解説があります。

　ここで、一度、Fileメニューのsaveを実行します。

　　Parameter Export/Importから、Export Parameter to Fileの保存を選びます。DCFファイルで保存されます。22-6-3.dcfという日付の名前で保存しました。


![2022-06-03 (41).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/a50f0af1-4afb-c0b7-e965-c4b47a25f419.png)


### PDO
　CANopenでは、型番やバージョン情報から今回のチューニングした結果を保存する数百項目に及ぶオブジェクト・ディクショナリを持っています。各社同じような項目名を持っている千番台や、独自なパラメタを設定しておく３千番台など、モータのコントローラによって様々です。
　この内容を読んだり書いたりするのがSDOです。そして、現在位置など、リアルタイムに必要な情報はPDOで読み書きします。PDOはある程度限定した項目なので、たくさんあって必要なオブジェクト・ディクショナリから、割り当てるのがPDOマッピングと呼ばれます。
　EPOS4はデフォルトでいくつかの項目がマッピングされています。変更もできるし、追加もできます。追加できる項目は、Receive-PDOの画面やTransmit-PDO画面やの画面で、「＜」の右側に列挙されているオブジェクト・ディクショナリの項目です。
　CANopenはSYNCという定義で、たとえば100msごとにPDOのデータがCANバスに読み書きできます。<-すごいはしょった表現なので正確ではありません。
　COB-IDはコミュニケーション・オブジェクトIDです。決められたIDに個々のノードIDを組み合わせて、通信時のヘッダーに使われます。

### 資料
　日本語になっている書籍は1冊だけです。検索してCANopenの規格はどこどこにあると書かれていますが、英語ですし、規格書を読むとすべてが書いてありますが、動作を理解するのはかなり面倒です。

(1) CANおよびCANopenによる組み込みネットワーク；ISBN4-381-08858-1
　しかし、モーション（モータ）に関しては何も書かれていません。
(2) 検索して見つかる産業機器のマニュアル
　EtherCATを含めて５，６件、見つかると思います。日本語は貴重なので、読みます。操作手順が中心ですが、すごく役に立ちます。原点復帰homeの動作など、図が書かれていたりしてわかりやすいです。EtherCATは、CANopenの規格そのものが使われ、SYNCが2ms程度と高速な部分が異なります。
(3) maxonのWebで、「EPOS4 Compact 24/1.5 CAN」を検索して、見つかった製品のページを表示し、ダウンロードのタブから取扱説明書を全部ダウンロードします。英語しかありません。重複している解説もあります。
![maxon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/ae7f1ee1-e80e-d060-156d-2d58c8d7d9a7.png)


　プログラミングのデバッグで必要なのは、スキャナ（ソフト）です。実際にCANopenのコマンドがどのように流れるかを知るためです。しかし、たくさんの会社、特にドイツではたくさん出ていますが、数十万円と高価です。業務なら入手すべきです。CAN-BUSに流れているデータをロギングできるだけでもデバッグに役立ちます。人が、オブジェクト・ディクショナリに従って、翻訳すればよいです。パケット・キャプチャWiresharkでも可能です。

###### 2022/06/05追加　モータのパラメタ
　maxonの資料に次の解説があります。原文；https://www.maxongroup.co.uk/maxon/view/news/How-to-configure-an-EPOS4-Positioning-Controller-using-EPOS-Studio


モーターデータ

これらの値はすべて、maxon Webサイトにあります。

（ www.maxongroup.co.uk/maxon/view/content/overview-dc-motor）またはカタログ（ www.maxongroup.co.uk/maxon/view/content/catalog_request）。不明な点がある場合は、お問い合わせください。+ 44（0）1189733337でサポートいたします。

入力した情報が正しいことを確認することが重要です。公称電流および熱時定数巻線が正しくなく、過大評価されている場合、モーターは過負荷のリスクがあります。モーターが長時間過負荷になると、内部巻線に不可逆的な損傷が発生します。

最高速度は、モーターデータシートの23行目に記載されています。これは、公称電圧がモーターに印加されていると仮定して定義されているため、公称速度または無負荷速度と混同しないでください。EPOS4は、電源からの制限がないと仮定して、必要な速度と加えられているトルクに基づいてモーターに必要な電圧を供給します。

EPOS4から得られる最高速度が、モーターの極ペアの数によってどのように変化するかを理解することが重要です。標準として、すべてのEPOS4モデルは、正弦波転流で実行する場合は50000 rpm、ブロック転流で実行する場合は100000 rpmの最大速度を提供します。これは、1極ペアのモーター用です。極ペアの数が増えると、最大速度は同じ速度で減少し、最大速度（使用する転流方法に基づく）を極ペアの数で割って、モーターの最大速度を計算します。たとえば、ブロック転流を使用して4極ペアのモーターを実行すると、最高速度は25000rpmになります。



##### 目次
- [① ラズパイ＋EPOS4、C++でプログラミング＜準備＞](https://qiita.com/jamjam/items/f6acf1128c6020b27059)
- [② ラズパイ＋EPOS4、C++でプログラミング＜車体の用意＞](https://qiita.com/jamjam/items/a9d400baaa5909bb0885)
- [③ ラズパイ＋EPOS4、C++でプログラミング＜モータのチューニング＞](https://qiita.com/jamjam/items/9266eb684d8a2bec7ac6)
- [④ ラズパイ＋EPOS4、C++でプログラミング＜モータのチューニング2＞](https://qiita.com/jamjam/items/93a57e9356bb1f9d1e6a)
- [⑤ ラズパイ＋EPOS4、C++でプログラミング＜ライブラリの準備＞](https://qiita.com/jamjam/items/be97d25e90c7aa9b92c5)
- [⑥ ラズパイ＋EPOS4、C++でプログラミング＜オブジェクト・ディクショナリを読み出す＞](https://qiita.com/jamjam/items/0cd6c5363c851c3c0e3c)
- [⑦ ラズパイ＋EPOS4、C++でプログラミング＜モータの回転 PPM＞](https://qiita.com/jamjam/items/725047121f582bb30937)
- [⑧ ラズパイ＋EPOS4、C++でプログラミング＜モータの回転 CSP その1＞ベータ版](https://qiita.com/jamjam/items/d58bf9affbd980e1735b)
- [⑨ ラズパイ＋EPOS4、C++でプログラミング＜モータの回転 CSP その2＞ベータ版](https://qiita.com/jamjam/items/ea611e552c5787ed5de0)