2025年2月8日(土) 21:27
MCCでコードを Generate すると、システム初期設定のためのコードが自動生成される。
このとき、PWMの初期化はどんなコードになっているのか?
MCCでPWMの設定を変更すると、出力されるコードはどう変わるのか?
それらを確認するという突破口に気付いた。
PTCONbits.PTEN = 0;
__builtin_write_PWMSFR(&IOCON1, 0xC100, &PWMKEY);
__builtin_write_PWMSFR(&IOCON2, 0xC100, &PWMKEY);
__builtin_write_PWMSFR(&IOCON3, 0xC100, &PWMKEY);
PTCONbits.PTEN = 1;
レジスター設定が直接代入ではなく、専用関数経由で行われている。マネしてやると、あっさりモーターの回転を止めることができた。どうも通常 IOCONx への書き込みは禁止されていて、特殊な解除手順が必要らしい。
続いて、矩形波駆動できるか試す。
・・・回転しない。
遂に切り替え実現!と喜んだのも束の間、たぶんオーバーライドはできているが肝心のオーバーライド値が反映されていない?
訳わからなくなり、これは特定機種のローカル仕様かもしれないと考える。dsPIC33EVXXXGM00X の英文データーシートでPWMを確認。ローカル仕様っぽいものは発見できないながら、普通に IOCONx の PENL を0にするだけでローサイドをGPIOで制御できるかのような文面に気づく。以前このビットを操作してもGPIOで制御できなかったが、そのときは IOCONx 書き込み禁止の解除手順を踏んでいなかったはず。
試したところ、あっさりGPIOが効いた。これで、矩形波駆動との切り替えが可能になるし、処理のオーバーヘッドも小さい。
written by higashino [エアガン機動戦闘車] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]
Generated by MySketch GE 1.4.1
Remodelling origin is MySketch 2.7.4