いよいよ実用的なプログラム?? |
2チャンネルプロポを使って戦車を旋回させようとすると、左・右のモーターにそれぞれアンプを繋いで、2つのアンプをコントロールするのが理想だけど、左右のスティック1本で2つのアンプをコントロールするのは不可能。 せいぜい、片側のモーターをON・OFFさせて旋回する信地旋回か、複雑なスイッチを自作したとしても、超信地旋回が精一杯....ゆっくり旋回は不可能! 結局リアルに旋回させようとすると、2モーターをコントロールする戦車専用DMDアンプが必要になる。 今回は、そのDMDアンプと同じ動きをPICを使ってやってみよう! |
左右スティックの動き |
受信機から前進・後進のスティックの動きと、左右旋回スティックの動きの2chをPICに入力して、左右のモーターをコントロールするアンプに出力する。 単に、前進・後進だけなら、前進・後進のスティックの値(位置)をそのまま2つのアンプに渡せばOKだけど、当然左右スティックが倒された時は、左右スティックの値(位置)によって、片側のアンプを減速しなくては行けない。 ついでに、左右スティックがある程度たおされたら信地旋回(片側停止)、いっぱいまで倒された時は超信地旋回(片側逆転)もやりたい! |
スティックの値(位置)と動作 |
左右スティックの値と、戦車(アンプ)の動きを図にしました。 メモリは、前回までのPICの25サイクルを1カウントとした値を使ってます。 受信機の1ch目(左右旋回スティック)の信号が、150カウントが中間で、100に近づくと右旋回・200に近づくと左旋回(左右はプロポのリバース設定で変わります) |
どうやって減速値を出すか? |
片側のアンプを減速するには、左右スティックの値に合わせて、片側のアンブの信号を停止の150カウントに近づけないといけない。 左右スティックの値が同じでも、前進・後進スピードによって減速値も変わってくるので、前進後進のスピードと左右スティックの値で、片側アンプの減速した値を計算で求めないといけない。 減速の幅は? 左右スティックが中間の150から115(または185)までの35カウントが減速の幅。 左右スティックが1カウント傾いた時の減速値は? 「現在のスピード」÷35カウント=1カウント分の減速値 例えば、 前進スピード(2chの値)が180カウントの時は、 (180−150)÷35=0.857 さらに、左右スティックの傾き(1chの値)が130カウントの時のアンプの減速値は、 (150−130)×0.857=17.14 片側アンプの値は、前進スピードから減速値を引いて、 180−17.14=162.86 |
プログラミングできない!? |
減速の計算方法が出たので、これを使ってプログラミングを......と、思ったら... アセンブラに割り算が無い!.....と、言う事は、引き算を繰り返して、何回引けたかをカウントしなければ...(^^;; さらに、小数点以下の数値が計算できない!.....と、言う事は×100して、整数値に直して計算しないと....(^^;; 面倒だぁ.....せっかく、100〜200と言う1バイトで扱える数値にしたのにぃぃ.... ...................手抜しよっ(ボソッ) |
減速段階を減らしてしまえ!! |
上の計算で問題なのは、1カウント当たりの減速幅を計算してる部分で、これだとどうしても小数点以下が出てします。 仮に、×10にして、小数点以下無しで、計算したとしても、今度は左右の値に掛けると値が255を越えてしまって、処理が面倒..(^^ゞ と言う訳で、考えたのが、手抜(間引き?)5カウント減速処理!! 左右スティック値を5カウント単位に減速すると考えると、中心の150から115(185)までは、7段階になります。 この方法で計算すると、 1段階当たりの減速の幅は? 「現在のスピード」÷6=1段階の減速値 例えば、 前進スピード(2chの値)が180カウントの時は、 (180−150)÷6=5(もちろん小数点以下が出ても無視(笑)) さらに、左右スティックの傾き(1chの値)が130カウントの時のアンプの減速値は、 (150−130)÷5=4(4段階目) 4×5=20 片側アンプの値は、前進スピードから減速値を引いて、 180−20=160 これで、プログラミングできる!(笑) |
プログラミング開始! |
さすがに、プログラムは複雑になるなぁ.....作った本人しかわからないかも(笑) |
ヤークトタイガーに搭載! |
作ったプログラムをコンパイルして、PICに焼いて、実験基板にセット! テストに使ったキットは、ドラゴンのヤークトタイガーで、もともと森本さんの自作のDMDアンプを積んでいました。 モーターとアンプは2000円以下の安売りサーボをばらした物を使ってます。 |
実際に動かしてみると.. |
ちょっとスティックを曲げたくらいでは、旋回しない...(^^;; サーボバラシのアンプは中低速のコントロール幅があまり無いのと、片側のモーターのスピードを多少落しても、ギア比のせいで、実際のスピードには変化がほとんど無い...(^^;; さらに、テストしたヤークトタイガー自体が、キャタの幅が広く接地面積も広いので、旋回し難い.....(^^;; 上のスティックの図で、−3X(3段階目)くらいまでは、ほとんど曲ってない......(^^;; |
ヤークトタイガーの補正 |
と、言う訳で、プログラムをヤークトタイガー用(サーボバラシのアンプ用?)に修正しよう!! プログラム的に簡単なのは、段階をシフト(ずらす)してしまう.... (左右の値を5で割った後、1を足す...(^^ゞ) 今まで、−3で減速してたものが一段減速幅が増えて−4に、−4は−5に....と、スティックの角度は同じでも、減速幅は1段ずつ増える。 ただ、この方法で、減速幅を増やして行くと、左右スティックが120以下の時と、180以上の時で停止の150よりもさらに減速してしまい、モーターが逆転する....(^^;;; そのため、計算値が停止値(中心値)の150を以下(後進の時は150以上)の時は、微速値148(後進は152)を直接設定してます。 実際に作ったプログラムはこれ→「savo3b.asm」 キットに合わせて、プログラムを変更できるのが、PICの魅力の1つですね! 今回は、左右旋回を5カウント単位でやってみましたが、これを4カウント・3カウント単位にすると、より細かな制御が出来ます。 実際に動かしてみて、どのくらい変わるかもテストしてみると面白いです。 |
更新日2000.7.19