Darkside(https対応しました)

2025年02月08日の記事

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)]

この記事へのトラックバックPingURL
Darkside(https対応しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4