免責事項

注意、免責事項について
・高電圧、大電流その他高エネルギを扱う実験を行う際にはくれぐれも安全に配慮し、細心の注意を払って行うようにしてください。
・当ブログの記事を参考にして発生した損害についてFEL研究室はいかなる責任も負えませんでご了承ください。

2020年10月11日日曜日

ACサーボモータのエンコーダ解析

ご無沙汰しております。
すっかり涼しくなってきました。
秋と言えば、過ごしやすいことを口実に〇〇の秋と、ほとんどなんでも有りの秋が大量発生して騒々しいことこの上無いので、何かと流行に歯向かいがちな年頃の私としては「逆張りの秋」を標語に、世間への反発を強めていこうと決意しました。
 
実に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. マンチェスタ(バイフェーズ)デコード

2020年5月24日日曜日

素人がorange piでロボットを作る その3

なかたです。好物はOrange Pi。

お久しぶりです。
久々に記事を書きました。

ロボットについての記事です。





とりあえず完成しました。
BBT(Blue Body Tank)くんです。

顔を認識して目を合わせてくれたり音声を認識してくれたりします。
その他機能をつけてから記事を書こうと思ってたのですが、またサボりそうなのでとりあえず投稿しときます。

構成部品は全て3Dプリンタ出力物と既製品でできているので誰でも作ることができます。

希望が多ければ完成後BBTくんのレシピを公開する予定です。

早めに完成させて早いうちに記事書きます。

2020年1月15日水曜日

おいしい焼き芋が食べたい 3

新年明けましておめでとうございます。
相変わらず外は寒いので体調には気をつけましょう。
てか冬長くないか?何ヶ月も寒いんだよ。

さて、前回の記事でとりあえず芋を焼いてみた訳ですが、意外といい感じになりました。
体感60℃(誤差±20℃)で3時間ほど焼きました。
蜜が溢れているのがわかります。

味はというと、甘いんは甘いんですけどおいしいかと言われると微妙。果たしてこれが芋のせいなのか焼き方のせいなのかはよくわかりません。
近いうちに温度制御を行っていい感じのプロファイルも探してみないといけませんね。


ここからは本編とは関係無いおまけです。


Amazonで売ってるAVR ISP mk2の偽物買ってみました。お値段\2499-
AmazonでAVR ISP mk2とググると出てきます。
ちゃんと認識しました。認識しても本体の赤色LEDがピコピコ点滅するのがちょっと不安です。
Atmel Studio 7でも問題無く認識しました。すごい。
何回かマイコンに書き込みもしてみましたが普通に使えるみたいです。ヒューズビットも書き換えできました。プログラマなのでデバッグ機能はないですがIDEから直接触れるツールがあるといいですね。

さらにおまけが続きます。

みなさんはポケモンパン、ご存知でしょうか。
僕は子供のころ大好きでした。
ポケモンパンの中でも特に好きなのがこのチョコクランチ入りチョコクリーム入りです。
もう10年以上食べてないので曖昧な記憶ですが、チョコクリームにサクサクとしたチョコチップみたいなのが入っていてそれがおいしかったはずです。

ところで、このポケモンパンが年に何回か急激に食べたくなるんですが、周りであまりそういう話を聞きません。そこで、人間がポケモンパンを食べたくなる現象について調べてみました。以下のグラフを御覧ください。
ポケモンパンが食べたいという欲求はすべての人間に存在しています。しかし普通は幼少期を過ぎればまず「ポケモンパンが食べたい」という欲求を知覚することはなくなってしまいます。
人間の欲求には知覚するしないに関わらず、その欲求の強さの度合いが存在します。例えば、食事の欲求がある一定以上高まると「お腹空いた」という感情を知覚する人が多いでしょう。もちろん常に「どれくらいお腹が空いたか」という度合いは存在していますが、人に聞かれる等、意識しない限りはその度合に気づくことはありません。
グラフで緑色で書かれたプロットはポケモンパンを食べたいという欲求の強さを示しています。ポケモンパンを全く食べたく無いことはありえないので、無にはなりません。
ポケモンパンに対する欲求レベルは常に変動していて、最低レベルと最高レベルの間を数ヶ月の周期で行ったり来たりしていると言われています。
前述の通りポケモンパンについて意識して考えない限りは、このポケモンパン食べたい欲求レベルに気づくことはありませんが、あるしきい値を超えると「ポケモンパンが食べたい」という感情が現れます。そのしきい値がグラフ中赤と青のプロットです。
これは諸説あるのですが、一般的な幼児以上の人間のしきい値(青)はポケモンパンを食べたい欲求レベルの最高レベルより上にあるためにポケモンパンが食べたくなることは無いと考えられています。
しかし私のしきい値(赤)が一般的なそれより低く、欲求レベルの最大値よりも低いと考えるとどうでしょうか。定期的にポケモンパンが食べたくなるのも納得できます。

ポケモンパンが食べたくなる理由もわかったところで実食といきましょうか。
なんと懐かしい…。現役で食べてた時は両手に溢れんばかりのサイズだったような気がしましたが今となっては4口でなくなってしまいそうなサイズです。これも時間の流れですねぇ…

ちょっと硬めのどらやきみたいな生地にチョコクリームが入っています。ちょっと偏ってて、はみ出しそうな部分も当時を思い出させます。

実はこのポケモンパン、一番近いスーパーには売っておらず、わざわざ2番目に近いところまで出向いて買ってきました。しかもこれが最後の一個でした。まるで私を待っててくれたみたいに
味はというと、想像していたのと寸分の狂いもなく同じでした。
値段なんか見ずに買いましたが、今レシート見たら128円(税別)でした。
みなさんも食べたくなったら食べてみてくださいね。

それでは、