Falconの思うままに

PASCAL好きが、気ままにマニアックなネタを

MG90DでのVarSpeedServoのTIPS

さてMG90DでVarSpeedServoを便利に使わせてもらっています。

 

このライブラリですが、実際に使ってみて気づいた点の回避方法を

書いておきます。

 

sv.attach(3);

などと書いてPWMのピンと割り当てます。

その後

sv.write(130,30,true);

などとするとスピード30で130°まで動いてくれます。

 

大変お手軽に使えていいのですが、電源投入時に

変な動きに見える動作をします。

意図しない位置に動いてから上記でいえば130°へ動いている感じです。

この現象の理由がわからなかったのですが、オシロをつないで

PWMの波形を見てやっと理解しました。

たぶんですが、90°相当のPWM波形がattach時にでています。

これはなんだというとsv.attach(3);をしたときに

もうPWM波形がでることがわかりました。

その初期値が90°ということみたいです。

私の感覚とすれば write命令を実行するまで何も信号はでないと考えて

いました。

なので

sv.attach(3);

sv.write(130,30,true);

と書くと、一回attachで90°へ指令して、その後130°へ動くという

動作をします。連続で命令を書くとほんの瞬間90°の場面が発生します。

attachで動きだすのは意外でして、ちょっと困った動作なので

直したいと思ってソースを読んでいたのですが、私は素人なので

追えません。

それで発想の転換をして試してみたらうまくいきましたので書いておきます。

attachで接続した時の角度をattach前に

sv.write(130,30,true);

sv.attach(3);

とすれば、sv.attach(3);で130°位置へ動きます。

attach前に指令するなんて作法としてどうよと思っていたので、

なかなかこの発想に至りませんでした。

デフォルト値を書き換えてからattachを呼ぶイメージになると

思います。

 

ただし、速度は指定できません。

初回だけなので、ここは我慢です。実用上問題あるとなると

この手も使えませんね。

 

電源OFF時はプロペラは手で回せるので、電源投入前の

位置を知ることはできませんのでしょうがないですね。

 

私の場合、この使い方で問題ないので、これで対処完了となりました。

素人考えですが、attachで割り込みハンドラが登録されて

動き出すので、何かしらのPWM信号を出さないといけないという

都合かと解釈しています。

 

どうしても都合の悪い人は何かしらソース改造するんでしょうね。

私はライブラリを改変せずの対策をしたかったので、上記工夫に

行きつきました。

 

初期挙動で悩んでいる人はお試しください。

 

ではでは。