ご無沙汰しております。
すっかり涼しくなってきました。
秋と言えば、過ごしやすいことを口実に〇〇の秋と、ほとんどなんでも有りの秋が大量発生して騒々しいことこの上無いので、何かと流行に歯向かいがちな年頃の私としては「逆張りの秋」を標語に、世間への反発を強めていこうと決意しました。
実に9ヶ月ぶりくらいの更新です。
久しぶりに記事書くやつ(意味不明)立ち上げたらなんかUIが変わってて困惑しました。画像の左揃えがうまくできん。
さて、ヤフオクで衝動買いしたACサーボが部屋で眠っていたので、ちょっとモータ制御でもしてみようと思いたち、まずは搭載されているエンコーダを解析してみることにしました。
50Wなのでとても小柄です。
モータの型式は「GYS500DC1-C8B」で、カタログ(記事の後ろにURL貼っときます)によると、16bitのインクリメンタルエンコーダを搭載しているらしいです。インクリメンタルとアブソリュートの違いは「多回転データの有無」で、前者が無し、後者が有りです。アブソリュートでは大抵多回転データ保持用のバッテリが接続され、それを用いて回転量のメモリが消えないようにしている仕組みのようです。
カタログやサーボアンプ側の資料を読み漁りましたが、ピン配置以上のデータが見つかりませんでした。ピン配置はメーカの製品情報に書いてあり、この情報から半二重の差動シリアル信号なんだろうというのは予想が付きます。
取り敢えず電源に5Vを供給し、差動ペアの信号をオシロで見てみましたが何も信号の変化がなかったのでなんからのリクエストに対してエンコーダがデータを返すような仕組みのようです。なんらかのデータを送ってやるにしろどういう信号レベルなのかもわからないので分解してみました。
既に外して線が引っ張り出してありますが、1段目の基板(写真左)にRS-485のトランシーバが載っていたのでこれを外し、送信信号と受信信号を別々に取り出してみました。制御してそうな部分はASICのようで当然データシートも出てきませんでしたので通信プロトコルについては不明です。他社と共用してそうな製品もないようなのでこのメーカ独自のものなのでしょう。
取り敢えず適当な周波数のパルスを送ってみるとラッキーなことになんかデータを返してきました。8パルス送ると以下のようなデータがエンコーダから送信されてきます。
4MHzのパルスがしばらく続いて、あるところでオフ期間が1周期分(250ns)あるパルスが出てきます。
この後からはなんか意味がありそうなパルスの変化が現れてきます。
エンコーダの軸を回すと後半部分の波形が変化しました。また、電源を入れ直すとかならず同じような波形となる部分があったのでそこにインクリメンタル角度データがありそうです。
波形を見る感じUARTでは無さそうです。波形の変化の仕方からマンチェスター(バイフェーズ)っぽいので取り敢えずデコーダを作って読み出してみることにしました。
波形の最初の方に同じような波形が続くのは、恐らくここでデコーダがクロックの同期をとるためのプリアンブル期間と思われます。この期間でPLL等を用いてクロックを復元してやればいい感じにデータが読み出せるんじゃないでしょうか。
考えたデコーダの構成は以下の感じです。
デコードすると単なるクロック同期のシリアル信号(SPIで読める)になるので適当なマイコンにでも入力したらいいかと思ったのですが、クロック4MHzのSPIを数バイト高速で処理しなければなりませんので少々オーバスペックですがdsPICを使ってみました。
マイコンでやってることは非常に単純で、エンコーダへの送信データとしてIO叩きで8パルス作って、エンコーダからデータが出てきたらPLLのロック信号を監視して、ロックしたらSPIの受信バッファを読み、1が含まれたデータが検出されたらそっからは順番にメモリにデータを格納していくということをやっています。Cで書いても余裕の速度なのでdsPICすごいですね、というかもったいない。
読み出せたデータを眺めながらモータの軸を動かしていると以下のようにデータが格納されていることがわかりました。
ステータスフラグのようなものは内容は不明です。パッと思いつくのはバックアップ用バッテリの電圧監視とか温度監視とかでしょうか。確かめてないのでわかりません。
その次の16bitが1回転の位置データです。電源を切っても軸位置を変えなければ同じデータが読み出せます。インクリメンタルエンコーダでも1回転のアブソリュートデータは取れるのですね。知りませんでした。
その次に8bitの90度ごとのデータがあります。軸を90度回転させるごとに255→0に戻ることから判明しました。電源を切っても保持されます。何に使っているのかはわかりませんが、もしかしたらモータが4極なのでモータ駆動用の位置データ(ホールセンサの変わりのようなもの?)かもしれません。
そしてその次の16bitにインクリメンタルな位置データが続きます。電源を入れると0からのカウントになります。
次は16bit分0が続くようです。同じシリーズのACサーボには16bit回転量を持ったアブソリュート型もあるようなのでその場合に多回転データが入るのかもしれません。
最後に16bitのチェックサムないしCRC等の検査データと思われる部分があります。インクリメンタルデータとアブソリュートデータ両方に影響を受けて変化するためです。計算式までは不明です。
アブソリュート16bitデータを360度換算にして表示させてみた動画です。
軸の回転に応じて角度が変化しているのが確認できます。
ちょっと疑問なんですが、モータ軸に高分解能なエンコーダを付けた角度制御ってどういうアルゴリズムになっているんでしょうか。いくらエンコーダの分解能が高くても、正弦波駆動の分解能はたかだか知れているはずで、同期モータですので単純に考えるとそれ以上の角度分解能は無いはずです。指令値に近づくと相ごとに位相の進み、遅れ等を意図的に作ったりするのでしょうか。気になります…。
今回はエンコーダの解析ができたので、気が向いたらACサーボの制御でもチャレンジしようかなと思っています。または一年放置している焼き芋機。
それでは
資料
1. モータのカタログ
2. インバータの詳細(エンコーダのピン配置等)
3. マンチェスタ(バイフェーズ)デコード