Darkside(リンクエラー修正しました)

2019年02月03日の記事

2019年2月3日(日) 23:15

PWM割り込み

 コンデンサー充電器は、頻繁に停止させる。実はラジコンバッテリー使用の場合は電力に余裕があるため、停止させる必要性はない。しかしコイルガン・ストームタイガーでの使用を考えた場合、停止を配慮しておくべきだ。
 停止する場合、具体的にはゲートドライブ用PWM出力をL固定にする。

 それだけであれば、PWM出力を停止するだけで良い。ところが、PWM出力を停止すると、PWM割り込みも発生しなくなる。すると、サージを回避できない。かと言ってDUTYを0にしたのでは、再スタートの度にパラメーターを戻さねばならず煩雑だ。
 位相反転のため操作パラメーターが増えているため、パラメーターの退避と復活も面倒臭くなっている。コード量は大したことがないが、実行時間を食うのが気に入らない。スマートさにも欠ける。

 だが、PWMを停止すればサージを気にする必要もない。
 PWM停止中は、割り込みを無視してAD変換するようにすれば良いだろう。

 まずは、バッテリー電圧取得のAD変換だけを割り込みで実行してみる。

 PWM の Interrupt だが、Enable All Interrupt にチェックを入れただけでは使えないので要注意。更に、個別の割り込み4つのいずれかにもチェックを入れねばならない。
 Phase が0の PWM1 は、Period Interrupt で良い。位相反転している PWM2
の場合は、Phase Interrupt を使う必要がある。

 AD変換の前後に充電完了信号を操作し、それをオシロで読む。遅延は5μ秒ていどで、AD変換の所要時間はサージ間に収まりそうだ。これで、サージを回避したAD変換が可能になる。

 そう考えたのだが、見ていると時々PWM発振が止まる。PWM割り込みに関して試行錯誤したところ、割り込み処理に時間が掛かり過ぎた場合、次の割り込みが発生しないだけではなくPWM発振もろとも停止してしまうようだ。これは、非常にマズい。
 PWM発振が不安定になる現象がどうやっても解決できないので、PWM割り込み内でAD変換するのを諦めることにした。

 AD変換は、想定以上の時間を要することがあるようだ。更にPIC外部のAD変換を使用する場合、通信時間も加わる。
 これでは処理が間に合わない可能性が大きい。そうなると、肝心のPWM発振が止まるという本末転倒だ。
 そこで、割り込みルーチン内ではフラグ操作だけ行う。そして割り込みではない通常処理で、そのフラグをポーリング。サージ回避可能なタイミングでAD変換を開始すれば良い。

 PWM1 と PWM2 の両方で割り込みを発生させるが、両者とも実処理は何も行わない。5μ秒だけフラグを1にしてすぐ0に戻す。所要時間は確定しており、想定外に時間を要してPWMが止まることはない。
 フラグの代わりに充電完了信号を操作し、オシロで確認。2チャンネルしかないのでPWMは片側だけだが、結果は明白。
 綺麗に、サージ発生タイミングを回避してフラグが操作できている。

 主処理側でフラグをポーリングし、0から1に変化したタイミングでAD変換を開始する。AD変換は、

1)サンプルホールド
2)変換開始
3)結果通信

という順序を経る。バッテリー電圧のようにPIC内蔵AD変換で済ませる場合、3)は無い。
 重要なのは、サンプルホールドが最初だという点。2)や3)に時間を要しても、とにかく1)がサージを回避できれば良い。それが最初の処理なので、サージを回避するのは容易だ。フラグを確認したら、普通にそのまま即時にAD変換を開始すれば良い。

written by higashino [ラジコン用エアガン] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL
Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4