PIC16F18325を使ってみた

DCモーターとRCサーボをコントロールするために、PIC16F1503を試してマイコンの勉強をしてみたのだが、ある程度なれたので別の石もと買ってみたのが16F18325。DIPの14pinというのが、ブレッドボードですぐに試せるのでありがたい。この石、同じ16Fシリーズでも1503とは全くの別物。メモリはでかいし、内臓オシレーターで32MHz駆動、タイマ等の機能がグレードアップしている。多機能な分、MPLAB XのプラグインMCCをうまく使う必要がある。

嬉しい発見があった。CLCを使うことで、意外と扱いが難しいRCサーボを内蔵PWMを使い、200~550程度の約350段階でデューティを制御できた。方法は、拡張されたタイマ0とタイマ2,CLCを使う。

まず、16MHzで駆動する。タイマ0は8ビットモードとし1:512のプリスケーラー、20480usでオーバーフローする設定にする。タイマ2は1:64のプリスケーラー、PR2の値はタイマ0と合わせる。すると、プリスケーラーに8倍の差があるので、同時スタートさせると、タイマ0が1回OFするときに、タイマ2は8回OFする。このタイマ2を発信源にPWMを動かす。

CLCで入力にTimer0overflowを選ぶと、overflowのタイミングでHighとなり、次のカウントでLowとなる。今回1:512のPSを設定しているので、128usHighが続きその後Lowとなる。

一方Timer2matchも同様だが、こちらは1:64のPSなので、High時間は16us。普通のSRラッチでも同時発生すれば必ずTimer0が勝つ。

 

MCCのデザイナを使い、CLCにT0overflowとT2matchを入力源として、図のようにする。

次に、このCLC1の出力とPWMの出力をCLC2でANDとれば出来上がり。

CLC2の出力は、PWM5を一回出力したら7回休み。20480us秒の最初2560us秒だけがduty変更の対象となる。RCサーボはおおむね800us~2200usが操作範囲だから、dutyは200~550が有効範囲となる。

 

 

 

このロジアナの表示は、D0がCLC0の出力、D1が、PWM5の出力、D2が最終の出力。これで割り込みを使わずハードウェア制御でRCサーボを滑らかにコントロール可能。ただし、CLCの数-1台までに限る。

ちなみに、eepromに書き込もうと思ったら、MCC3.36が吐き出すコードでは、ダメだったので注意。

さらに、simulatorのロジアナではCLCはうまく表示されないので、これも要注意。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)