PIC三昧(2) MCCでPIC16F1xxxx。TMR2+PWM6でPWM出力

Joseph Halfmoon

PIC16F1xxxの「諸機能」を端から動かしてみる第2回目はPWM(Pulse Width Modulation)出力。任意のデューティサイクルでデジタル出力をペコペコするあれです。Lチカからモータ制御などその利用範囲は広うござんす。しかしPICの場合PWMだけでは動きませぬ。その動作周期を与えるタイマも必要です。

※『PIC三昧』PIC関係の記事総目次はこちら

PIC16F18855のPWM

今回もターゲット機は、PIC16F18855 です。

PWMとアカラサマに銘打った周辺回路は2チャンネルしかないのですが、PIC16F1xxxの場合、CCP(Capture/Compare/Pwm)もPWM出力可能なので、合計7チャンネル可能ということになります。

    • PWM6/PWM7
    • CCP1/CCP2/CCP3/CCP4/CCP5

入力機能もあるCCPはまた後で練習することにして、今回はシンプルなPWM出力機能のみのPWM6を使用してみます。

PIC16F1xxxの場合、入力機能は端子が指定されるケースが多いですが、出力機能は任意のI/Oピンに割り当て可能な場合が多いみたいです。PWM出力についてはどこでもOKみたいっす。ピンの割付お楽。

他のマイコンであると高機能のタイマ1本に複数チャネルのPWMが付属しているケースや、PWMチャネル群に専用のタイマが設けられているケースなどありますが、PIC16F1xxxの場合、PWM機能とタイマは1対1ではなく紐づけは選択可能みたいです。ただし、PWMと紐づけられるタイマは8ビットタイマに限られるので

TMR2/4/6

の3本のうち1本ということになるみたいです。今回はTMR2を選択。

MCC ClassicによるDevice Resourcesの選択と設定

何も言わなくても、Interrupt、Pin、Systemの3モジュールは含まれているので、追加で選択しなければならないものは、PWM6とTMR2ということになります。以下画面の+アイコンをクリックするとDevice ResourcesウインドウからProject Resourcesウインドウに移動して設定できるようになります。

pwmDeviceResources

まずはクロックソースの大本を選んでおかねばなりませぬ。今回も前回につづき内蔵の高速発振器、HFINTOSCを使用してみます。しかし、折角なので前回使用していなかった 2xPLL を併用してみます。元発振8MHzで、2xPLLを通して(分周は1) Foscは16MHzとな。pwmInternalOSC

さて肝心のPWM6の設定は以下のようです。Timer2と紐づけ、アクティブハイでデューティサイクルを25%としてみました。

pwmPWM6

肝心のPWM周期はTMR2側で設定です。タイマの1クロックは1μs、最長256μsまで設定可能としたかったので、以下のように設定しました。ただし赤字のところは後で設定変更を迫られることになります。pwmTMR2

出力端子の設定は以下のようです。PWM6の出力はPortAの6番(RA6)としました。前回同様ソフトウエアによるBit Bangingも併用するのでそちらの出力はPortAの7番(RA7)です。pwmPins

さて、「Generate」ボタンを押すと以下のようなポップアップが現れました。なにか上記のMCC設定に問題があるみたいです。

MCC_Confirmation

警告が出ている箇所を見てみるとPWM6でした。どうもTMR2をFOSC/4 で設定しないとならんようです。MCC_WARNING

上記の警告を受けて、以下のTMR2のClock SourceをFOSC/4に変更しました。同時にプリスケーラを16分周から4分周に変更したので、PWM6へ行く周期そのものは変わりありません。pwmTMR2updated

再度 Generate すると以下のごとし。ソースコード一式生成に成功したようです。MCCgenerationComplete

実機動作確認

前回同様のソフトウエアによるビットバンギングをmainループ内に追加し、makeしたところが以下に。BUILD SUCCESSFULとな。pwmBuildSuccess

生成されたオブジェクトをPIC16F18855の実機に書き込み、RA6をオシロのC1(黄色)、RA7をオシロのC2(青色)で観察したものが以下に。pwmWaveForm

PWM出力を観察しているC1は、ほぼ10kHz(周期100μs)で25%デューティ。予定通りですな。ソフトウエアによるビットバンギングを観察しているC2は約800kHzです。今回のFOSC/4は16MHz/4=4MHz、この速さで5サイクルが1ループの実行時間であったので、800kHzも予定どおりと。よかった、ピッタンコで。

PIC三昧(1) PIC16F18855のCLKOUTとビットバンギングで周波数確認 へ戻る

PIC三昧(3) お手製書き込み治具で小ピンPIC書き込みOK, ダメなやつもあるけれど へ進む