2017-06-19 08:57 | カテゴリ:PIC応用回路
手持ちの自作コントローラを利用して、PICのソフトを書き替え、常点灯の実現と、前回うまくいった、低周波パルス駆動による超低速運転と、そして、クローズドループ制御の勉強とテストを行ってみました。

(NCL01)
NCL01.jpg



続きはこちらで、、、




常時点灯用PWMの調整

いわゆる「常点灯」です。
モーターが回転する前の電力を与えて、照明のみを点灯させる仕組みですが、今回のPFM制御では、パルスの周期が随時変更されますので、常点灯用には別途PWMで高周波パルスを生成し、PFMパルスと重畳して出力することにしました。
いろいろ事前にPWMの周期やDutyを検討して、とりあえずこの設定に落ち着きました。

PIC(20MHz駆動)のPWM回路
周期レジスタPR2には、0xFF
Duty設定は、レジスタにカウント値=50

の設定で、

周期が約51マイクロ秒、パルス幅が460ナノ秒のパルス

となりました。
これで、KATOの旧C11の前照灯、後進灯が点灯し、かつ、始動しない状態でした。
欲を言えばもう少し明るく点灯してほしいのですが、周波数とDutyの最適化が必要かも知れません。

(NCL02)
NCL02.jpg

(NCL03)
NCL03.jpg



超低速始動の調整

前回調整できたパルス駆動(PFM)の超低速運転時のパラメータを参考に、PICでソフトを組んで、VR(可変抵抗)で0-5Vの電圧をPICのAD変換に与えて、その電圧に応じて、PFMのパルス間隔を変化させるようにしてみました。
パルスの幅は、前回いろいろテストした結果、今のところ、320マイクロ秒位が良さそうでしたが、いちおう、DIPスイッチで、電源ON時に切り替えて、

106ナノ秒から1.6ミリ秒程度

が選択できるようにしました。


(NCL00)
NCL00.jpg

また、繰り返し周波数は、割り込みが102マイクロ秒ごとにかかるように設定して、それをカウントして、出力のON/OFFをする設計で、最大の周期は

1024 x 102マイクロ秒 = 約104ミリ秒

となっています。
実際には、最大周期では始動しません。
約、200から300x102マイクロ秒となります。(モーター自身はもう少し長い周期で動き出しますが、車両の重量などの影響で、もう少し短い周期で始動します)
下記の動画は、フィードバック制御の無い状態です。

(NCL04)




自動定速運転の試み。原理


さて、一番の課題の「定速度運転」の検討です。
じつは、以前に製作した、コントローラに、この定速度運転のソフトを組み入れていました。
しかし、今回、プログラムを見直したところ、「ちょんぼ」を発見。
ちゃんと制御が出来ていないことがわかりました(笑)

今回は、基本の各種計測値をもう一度検討し、基礎を固めてから、プログラミングに移ることとしました。

原理は、モーターを駆動して、電流を遮断しても、慣性でモーターが回転をし続け、その際に発電をする為、その起電力をコントローラ側で計測し、フィードバック制御に利用しようというものです。

この起電力は、モーターを発電機とした際に発電されるわけですが、駆動パルスのOFFの期間に、モーターの回転子が「ちょろっと」回る時間に出力されるので、一体、どれほどの電圧が、どの様に出力されるかもわかりません。

そこでどの様な出力かを観察してみました。
メインのパルスは、大きすぎで見えていません。
BEMFの部分のみの波形例です。

(NCL05)
NCL05.jpg

BEMFの値の例
低速=0.5-0.1V

(NCL06)
NCL06.jpg

中速=1-1.5V

(NCL07)
NCL07.jpg

高速=2-3.5V


モーターの回転数に応じて、パルス終了後に電圧が観察されます。
Nゲージは、12Vでモーターを駆動していますので、おおむね、0.数Vから、3V程度の起電圧が生じています。
この電圧をパルス周期毎に計測し、指定速度制御電圧と比較して、パルス周期を制御すれば、定速度運転制御が出来そうです。
うまくいけば、坂道でも、貨物をけん引しても指定速度で走行できるかもしれません。


BEMF計測のアルゴリズム

具体的にプログラミングする際の基本的なアルゴリズムを検討します。
PICのPWMは、周期やDutyの設定に若干の制限があり、今回は、常点灯の部分に使用します。(後述)
メインの駆動用のパルスは、ソフトで制御することにします。
周期が長く、途中で色々演算処理が出来るように、割り込みも使用します。

(NCL08)
NCL08.jpg

上記のチャートを見ればお分かりと思います。

周期を与える変数Freqをセットし、割り込み(TMR0)が発生するごとにカウントダウンして、それぞれのタイミングにあった時点で、必要な処理をしていきます。

はじめは、パルスを立ち上げるタイミング(カウント)。次にパルスを断ち下げるポイント。
BEMFの計測を開始するポイント(BS)。
BEMFの計測を終了し、平均して、次の周期(Freq)を決定するポイント。(BE)

です。

(BE)のポイントでは、計測したBEMFと速度指定値(Speed)を比較し、BEMF値が大きければ車速が早いと判断し、周期を長くし、逆の場合は周期を短くします。

この様に連続してBEMFを計測し、それに応じて周期(Freq)を変化させ、一定速度を維持できるように制御する仕組みです。

実際の制御の様子を撮影しました。
周期を伸ばす(低速にする)際には、赤のLED、縮める(高速にする)際には、緑のLEDを点滅させるようにプログラムして、観測できるようにしました。

始動直後のかなりの低速の場合です。

(Slow1)


少し回転が上がった場合です。

(Slow2)


どちらの場合もBEMFと指定速度の比較に基づいて、赤、緑が点滅し、減速、加速の制御がされていると思われます。
また、前者と後者では、点滅の頻度が上がって、周期が短くなっている(速度がアップ)こともわかります。

ここまでで、少なくとも速度指定のVRの電圧に追従する様に制御されていることが確認できました。
実際の走行動画はこちらです。
撮影時にバックに置いた厚紙のせいで、結構大きな「ジージー音」がしますが、実際はほとんど気になりません(笑)


(C11_Start)


実は、この動画は加減速のパラメータを色々調整しているときのものです。
加速するなら、パルス周期を短く、減速するなら長くという、しごく当然の調整をするのですが、そこがフィードバック制御の肝で、

「どの様に加減速のパラメータを変更するか?」

が、とても結果に影響します。

加減速の変化値を小さくすれば「カクカク感」が少ないスムースな制御になりますが、半面レスポンスが悪くなります。
大きくすれば、逆になり、折り合いをつけるのが難しいところです。


さて、ここまで来て最大の問題は、どれ程のフィードバックがかかって制御されるかと言う事です。
つまり、何らかの理由(坂道など)で速度が低下した際にそれを補正する様にフィードバックがかかるかと言う事です。
このあたりの検証をこれから進めてみます。


管理者のみに表示する