2025年2月7日(金) 21:44
久しぶりに正弦波駆動でモーターを低速回転させてみる。
矩形波駆動で無理に中間状態を作った回転させるのに比べて、比較するのもバカバカしいほどスムーズだ。モーター自体ほとんど振動しない。
何とかして矩形波駆動と切り替えできないか?
本当に可能性がないのか再確認するため、MCCを立ち上げてレジスター設定値を徹底比較してみる。
その結果、IOCONx の PENL だけしか異ならないと判明。すなわち、GPIO割り当てはレジスターではなく8ビットPICでもそうだったようにプログラム書き込み時の静的設定になっているようだ。これでは、PWMとGPIOの動的切り替えは不可能。かなり高い確率で不可能。ならば、オーバーライドするかどうかを動的に切り替えるか、もしくは正弦波駆動で何とか高速回転を安定させるしかない。
まずはオーバーライドの動的切り替えは本当に無理なのかどうか、再度調べてみよう。
PTCONbits.PTEN = 0;
IOCON1bits.OVRDAT0 = 0;
IOCON2bits.OVRDAT0 = 0;
IOCON3bits.OVRDAT0 = 0;
IOCON1bits.OVRENL = 1;
IOCON2bits.OVRENL = 1;
IOCON3bits.OVRENL = 1;
IOCON1bits.PENL = 0;
IOCON2bits.PENL = 0;
IOCON3bits.PENL = 0;
PTCONbits.PTEN = 1;
低速定速正弦波駆動処理の直前に、ローサイドをオーバーライドするコードを挿入。
PTEN=0 でPWMを無効にし、その間にレジスターを書き換える。これで実行すると、普通にモーターは回転した。つまり、オーバーライドされていない。
試しに最後の行を削除してPWMを有効に戻さなかったら、モーターは動かない。よって、PTEN
に関しては効いている。
PTEN=0 の直後に1ミリ秒のウエイトを入れてみたが、モーターは回転してしまう。PWMを無効化してもPWM境界までは無効にならずレジスターも書き換えできない、という訳ではなさそうだ。
written by higashino [エアガン機動戦闘車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4