15.2アンプコントロールプログラムの改造
左右緩旋回とギア比とアンプ いろんなキットにPICを組み込むと、同じプログラムでも同じ動きをするとは限らない。
例えば、ギア比の高い(スピードの遅い)タイガー1やヤークトタイガーでは、片側のモーターを多少弱めたぐらいでは、なかなか緩旋回しない。
車で言えば、思いっきりオーバーステア...
こういうキットでは、左右旋回スティックを倒した幅以上にアンプのスピードを落としてやる方が、小回りが効く旋回になる。

1号F型のように、ギア比の低い(スピードの速い)キットでは逆の傾向になる。
それに、低速から高速までスピードに幅があるので、低速時の緩旋回と、高速時の緩旋回で、アンプのコントロールに変化を持たせると面白い!

旋回プログラムの変更 これまでのプログラムでは、前進・後進スティックと左右旋回スティックの動作幅で、片側のアンプの減速値を計算していたが、この方法だとキットに合わせて減速値を変更するのが大変!

もっと簡単に変更できる様にならないかと色々考えたけど、最終的にはあらかじめスティックの動き(動作幅)に対応した減速値をプログラム上に書き込んでしまうのが一番..と...(原始的だけど...(^^ゞ)

タイガー1用旋回値 プログラム上に減速値を直接書き込むとなると

縦のX軸が、前進・後進スティックの増加量
横のY軸が、左右旋回スティックの増加量

前進・後進を5段階に分けて、それぞれの段階ごとに左右旋回の値を決めています。
左右旋回は10段階だけど、最後の3段階は新地旋回・超新地旋回に固定されているので、緩旋回は7段階になります。

表の黄色い部分の数値に150(停止の値)を足した(引いた)値が、アンプに送られるます。

例えば、前進スティックが185で、左右旋回スティックが172の時は、Xは3段階目・Yは4段階目になり、値は「9」で、アンプに送るときは、150+9で、159を送ります。

実際のプログラム→t1h.asm
1号F型用

タイガー1に比べてギア比の低い1号F型では、低速から高速までスピードに幅がり、Xが5段階では物足りないので、倍の10段階にしてみました。

実際のプログラム→t1h2.asm
プログラムの説明 実際のプログラムでは、(X,Y)の値を下から順番に、ずら〜っと並べています。(笑)
前進・後進スティックと左右旋回のスティックの値から、何番目のデータかを計算して、その値を取り出しています。
BR>
走行用アンプのセンター位置設定 上のプログラムでは、さらに走行用アンプのセンター位置(停止位置)を左右別々に設定・登録できるようになっています。

サーボバラシのアンプは小型で便利なんですが、アンプの中間(停止)位置を設定するポテンショメーターが結構邪魔になる...(特に小さいキットに組み込もうとすると)
どうせ、中間(停止)位置は、固定でしか使わないのだから、ポテンショメーターの代わりに固定抵抗をつければ、さらに小さく、組み込みやすくなる!!


ただ、このセンター固定にしたアンプの欠点はセンター位置が丁度150にならず、多少ずれてしまうことです。
しかも、同じアンプに同じ抵抗を取り付けても、モーターの個体差等で、センター位置はばらばらになる。

まぁ、左右のアンプのセンターが多少ずれていても、停止中はパルスを送らないので、ピタッと止まらない....と言う事はないが...
前進と後進でスピードがずれたり、左右のアンプのスピードが違うため少しずつ旋回したり、新地旋回時に片側のキャタがピタッと止まっていなかったり.....
と、微妙な(?)問題があります。

そこで今回、左右のアンプのセンター位置を設定(測定)し、記憶できるようにプログラムを変更しました。

プログラムの変更 砲塔旋回サーボのセンター位置と同様に、左右のアンプのセンター位置を調整(測定)し、PICのEEPROMに書き込んで記憶します。
電源を入れた時は、EEPROMから、砲塔旋回サーボのセンター位置と、左右アンプのセンター位置を取り出します。

アンプのセンター設定方法 プロポの前進・後進スティックを目一杯上(又は下)に倒した状態でPICの電源を入れると設定モードになります。
(設定モード中は、LEDも点灯します。)

プロポの左右の上下スティック(トリム)で、左右のアンプに繋がったモーターが停止するように合わせます。
左右のモーターが停止した時点で、プロポの右スティックの左右を右(機関銃音の方向)に倒すと、その時のアンプのセンター位置を記憶し、設定モードを終了します。
(終了時に、右スティックが上下にぶれない様に倒さないといけない....(^^;;)

設定モード中は、今まで同様に、砲塔旋回サーボのセンター位置も設定できます。(左スティックの左右で調整)

旋回時の片側補正 緩旋回・新地旋回時に、片側の回転を遅くしると、もう一方のキャタに負荷がかかり、直進時よりスピードがガクッと落ちる。
特に、サーボバラシの弱いモーターを使った重戦車は顕著に表れる現象で、これを補正するように変更しています。

原理は簡単で、旋回時にスピードを緩める方と反対側のスピードを多少UPさせています。
どれだけUPするかは、当然スピードによって変えたいので、これもあらかじめ決めた値をプログラム中に直接書き込んでいます。

最高速UP!? いろんな制御を増やせば増やすほど、プログラムは長くなってしまって.....問題発生!?

アンプに信号(パルス)を送る間隔がだんだん長くなって、とうとうモーターのスピードにまで影響でてきてしまった....(^^;;

<アンプに信号を送る>→<いろんな処理>→<アンプに信号を送る>→<いろんな処理>→・・

アンプは、信号が来ないと勝手に停止してしまうので、信号の間隔が長くなるとその間一瞬止まってしまう。
実際には、モーターの回転がぎこちなくガクガクした動きになり、当然スピードも落ちる...(^^;

と、言うわけで<アンプに信号を送る>処理を増やして、信号の間隔を縮めました。
プログラム上は、<アンプに信号を送る>処理をサブルーチンにして、<いろんな処理>の途中でもサブルーチンを呼び出し(CALL)しています。

これが、以外に効果があって、最高速が10%から20%もUPしました!!
...逆に言うと、今までもロスが..??...(^^ゞ

機関銃LEDの点滅間隔 ついでに(?)、機関銃LEDの点滅間隔も簡単に変更可能にしました。

「COUNT8」と言う変数が「1」の時だけ発光します。
発光後に、「COUNT8」に1-10の数値を代入して、発光間隔を決めています。
(数値が大きいほど、ゆっくり点滅する)


戻る

更新日2001.4.26