●スピコン(2チャンネル受信機用)試行プログラム
【C型】試行プログラム − 電圧6V出力化の対応 −
B型プログラムで、6Vモータ用を作ろうとしましたが(A型系は出力不足)、プログラム 内の遅延処理のみでは、セッテイングが難しいそうな感じでしたので、B型プログラムの3 Vモータ用(SPCB3000)を基本プログラムとして、新たに、出力パルス幅値の算出 処理でのセッテイングで、PIC出力ピンへのパルス幅出力の調整に伴う、プログラム修正 を手探りで行いながら、6Vモータ専用としてC型プログラムを作る事にしました。 出力パルス幅の知識がなく、適当な感覚でのセッテイングとなりましたが、自分なりに解釈 しての仮説を立てた状況下でのプログラミング対応にも興味がありますので・・・(^^;
・ ・ ・ ・ ・
●(従来版)出力パルス幅値の推移イメージ図 自分なりの解釈では(^^;・・・ A型とB型系のプログラムは、こんな感じで推移します。
入力パルス幅値に対して、算出基準係数(50)により、出力パルス幅値を算出しています。
・ ・ ・ ・ ・
●(最大6V出力化対応版)出力パルス幅値の推移イメージ図 A型とB型系のプログラムでのセッティングでは、プログラム内の空処理(おおまかなタイ マー処理)を用いて、最大出力電圧に近づける調整方法により、単独パターンで決まる感じ ですが、この出力パルス幅値でのセッティングでは、求める最大出力電圧に近似するケース が複数パターンで特定できました。これらの複数候補から選出となりましたので、セッティ ングとしての選択肢が、新たに、増えた事になります。 また、特定の複数パターンは、個々に特性(クセ)がありますので、この特性(クセ)傾向 を意識しながらの選択が行なえました。これにより、プロポのスティックによるアクセル操 作に反応するモーター回転の強弱動作が、自分好みのセッティングに仕上がった感じです。
算出基準係数(前進:29,後進:30)での設定となり、出力パルス幅値は低値からの開始です。 → 計算ものは、とても苦手ですので・・・ 結果オ〜ライですね (^^;
・ ・ ・ ・ ・
●ニュートラル設定の手動操作・・・ 'うっかり'忘れ対応です。(^^; スピコンのセッティングに伴い、幾度も新しいプログラムを用いてテスト実施を繰り返しま すが、その際に、PICに組み込んだプログラム(未使用)を最初に使用する場合に・・・ 'うっかり'とニュートラル設定を忘れてしまって、起動後、勝手に、後進動作して暴走的な 事象が起こって慌てます。手動操作でのニュートラル設定は必須なのですが、この状況を回 避する為に、ニュートラルの省略値(152)をプログラム内で設定するようにしました。
●PIC内部(EEPROM)のデータ内容です。 このプログラムでは、簡略化により入力パルス幅値を1バイト(8ビット)で、取り扱ってい ますので、これに伴い、ニュートラル値も同様に1バイト(8ビット)での使用になります。 ニュートラル値(設定後)の保存場所は・・・ EEPROMの先頭1バイト目(ADDRESS:0)に、最大値(255)内で格納されてます。 ---------------------------------------------------------------------------------- ■PICに組み込んだ直後の初期状態です。
→ 値は、最大値の255(Dec:10進数)です。 ---------------------------------------------------------------------------------- ■送信機(手動操作)でのニュートラル設定後の状態です。 ・ニュートラル位置は・・・【 ステイック:センター 】【 トリム:センター 】です。
→ ニュートラル設定された値は、152(Dec:10進数)です。
●ニュートラル(省略値)設定のフロー図です。
(処理概要) この処理は、ニュートラル設定の入力が、1回も無かった場合(PIC書込み時の初期状態 255=X'FF')に限り、ニュートラル中立位置の省略値(D'152')を使用させる。 ■要否係数の設定 @この時点でのWレジスタには、EEPROMから読込まれた値(設定済ニュートラル値) が格納されていて、この値をNEUT(設定済ニュートラル値)に格納する。 APIC書込み時の初期状態値(255=X'FF')を基準にして、Wレジスタに格納され ている値(EEPROMからの)で引き算して、この演算結果のステータスレジスタ(Z ビット)の値により、省略値適用の要否を判断させる。 ■省略値適用の要否判断 ・ステータスレジスタ(Zビット)= 0・・・ 演算結果:ゼロでないので → 要否係数項目が、等しく無い事になるので、何もせずに、次の処理へジャンプする。 ・ステータスレジスタ(Zビット)= 1・・・ 演算結果:ゼロである → 要否係数項目が、等しい事になるので、省略値の設定を行う。 ■省略値の設定 BWレジスタに、ニュートラル中立位置の省略値(D'152')を格納する。 CNEUT(設定済ニュートラル値)に、Wレジスタの値(上記B)を格納する。 ・次の処理へジャンプする。
●追記したプログラムステップです。 MOVWF NEUT ;NEUT ← Wレジスタ ;---ニュートラル値(NEUT)の省略値(152)をセットする SUBLW D'255' ;Wレジスタ = 255(H'FF')− Wレジスタ BTFSS STATUS,Z ;ステータスレジスタ(Z)=1(演算結果:ゼロである) ;次の命令をスキップする GOTO INT_STOP ;ステータスレジスタ(Z)=0(演算結果:ゼロでないので) ;INT_STOPへ ジャンプする MOVLW D'152' ;Wレジスタ ← 152(省略値) MOVWF NEUT ;NEUT ← Wレジスタ GOTO INT_STOP ;INT_STOPへ ジャンプする
ちょっと、手抜き対応な感じがしますが・・・ (^^;
・ ・ ・ ・ ・
●スピードコントローラー MP4212搭載 【C型】試行プログラムです。 ■ニュートラル位置・・・【 ステイック:センター 】【 トリム:センター 】 ------------------------------------------------------------------------------ ・SPCC6000( VER C60.0 ) 6.0Vモータ用 基本版 ( 最大出力電圧 ・前進時:6.0V ・後進時:−6.0V ) ------------------------------------------------------------------------------ モーターコントロールICは、4V駆動対応だが・・・ 6V出力でも大丈夫かしら(^^?
他モーター用のプログラムにも、ニュートラルの省略値を設定するようにしました。 ------------------------------------------------------------------------------ ・SPCC1500( VER C15.0 ) 1.5Vモータ用 基本版 ( 最大出力電圧 ・前進時:1.5V ・後進時:−1.5V ) ------------------------------------------------------------------------------ ・SPCC3000( VER C30.0 ) 3.0Vモータ用 基本版 ( 最大出力電圧 ・前進時:3.0V ・後進時:−3.0V ) ------------------------------------------------------------------------------ ・SPCC4500( VER C45.0 ) 4.5Vモータ用 基本版 ( 最大出力電圧 ・前進時:4.4V ・後進時:−4.4V ) ------------------------------------------------------------------------------ ・SPCC5000( VER C50.0 ) 5.0Vモータ用 基本版 ( 最大出力電圧 ・前進時:5.0V ・後進時:−5.0V ) ------------------------------------------------------------------------------
・ ・ ・ ・ ・