2019年11月13日水曜日

ワンペダルドライブ:arduinoがESCに出力するパルス幅について

さて。
とりあえず先日の仕組みはまた平べったくなるように新しく作り直すとして。

一つ一つ問題を地味に解決していこうかと。

まずはきちんとセットアップ出来ずにプロポ側で無理やり動くようにした件。

現地でのトラブルシューティング(という名の試行錯誤)の結果、
arduinoのサーボライブラリが吐くパルスに問題がありそう
という事からプロポのデュアルレートを設定して回避した件。

実際はどうなのかを見てみたら…
パルス幅を別のarduinoを用いて測定

  • サンワRX-481の場合(実測)
    後進最大:≒1038μs ニュートラル:≒1333μs 前進最大:≒1822μs
  • arduinoのサーボライブラリ(実測)
    後進最大:≒540μs ニュートラル:≒1450μs 前進最大:≒2371μs
  • KO MR-8の場合(説明書より)
    後進最大:890μs ニュートラル:1496μs 前進最大:2100μs


なんだこりゃ?
サンワの後進側が異様に狭い。
arduinoやKOと違い、スロットルが前進:後進=7:3で物理的に偏ってる影響なのかな?
ニュートラルを1400ぐらいと仮定したら振れ幅はプラス方向もマイナス方向も大体400になるし。

とりあえずarduinoのサーボライブラリが吐く値をそのままESCに放り込んだら駄目というのはよくわかった。
デュアルレートで合わせた85%はまだ甘い方でまぁ7~8割程度に絞って出力した方がよさそう。

ここで問題になるのはservo.write()関数。
太陽光のリセット装置がwrite関数を使ってわかりやすくしていたためその流れでそのまま使っていたものの、前進後退を90を中心にして前後90ステップ(0~90~180)で制御してる都合、コレをそのまま8掛けするとそれぞれ70ステップでしか制御出来なくなる。

いくらスロットルがステアリングに比べておざなりでも気にならないとは言え流石にねぇな感があるのでコレに関してはservo.writeMicroseconds()関数で直接パルス幅を指定した方がよさそう。

って事は現状の
こんな風に別関数化してわかりやすく操作量を-100~100にせずにそのままパルス幅の状態で取り扱った方が楽ということか。

ただそうしたら今度は操作量に応じたRPM数をどうやって取り扱うかという問題に化けるだけので…とりあえず単純にインライン化してブレーキの必要が無かったら受信機の出力パルス幅をそのままESCに丸投げするのが一番単純か。
もう週の半ばだし。

それで問題なさそうなら操作量を%であつかってるのをパルス幅の変化量に置き換えていくのがいいかな。

それにしても…ホビーウィングの安物アンプはパルス幅540μs~2371μsで問題無かったのに対してLRPのハイエンド(古いけど)で問題が起きるとか…

0 件のコメント:

コメントを投稿