PSMC機能を動作させて見ます(単相PWM)

〔基本編〕   〔相補PWM〕 〔相補PWM-同期〕 〔可変周波数PWM〕 〔PICの動かせ方入門に戻る〕


"PSMC Designer Tool"の話とPSMC関連ピン構成にレジスタ説明は基本編にて記載しました。
このページでは、"PSMC Designer Tool"を使った単相PWMの生成方法を説明します。

《単相PWM》

設定は、PSMCクロックソース=Fosc、プリスケーラ=1:8なので1カウントは250nsとなります。
(この設定で62Hz〜2MHzまで位なら出力出来そう。)
PSMCモジュールはPSMC1と して、PWM出力ピンはRC3(PSMC1D)ピンとしました。

単相PWM波形
データシートから拝借しました。
出力は1KHzでデュティ比は50%での内容です。

@ 使用するデバイスとモジュール(PSMC1)を選択します。
Toolのデバイス設定

PSMC-EnablePSMCモジュールの "Enable"にチェックを入れます。


A PSMCクロックのソースを設定します。
  Toolのメイン画面表示から【Clock】をクリックします。
ClockClockSource=Fosc、 Prescale=1:8
"Fosc"と"外部ピン"は周波数を入力
高速PWMの場合は"64MHz"を選ぶ
Fosc32MHz/8 設定で1カウント250ns
Fosc32MHz/1 設定で1カウント31ns

設定完了なら[Hide]ボタンをクリック

1カウントの計算
(1/PSMCクロックソースの周波数) x プリスケーラ設定値
  (1/32MHz)*8=0.25us(250ns)

※ 外部ピン(PSMCxCLK)から入力可能最高周波数は20MHzまでらしい。
※ 設定されるレジスタはPSMCxCLKです。
※ ClockSource=Fosc(16MHz)、Prescale=1:8に設定すれば、35Hz位までは出力出来そうです。
  (勿論16MHzより低くすればモットぉ低い周波数が出せます。)
※ ClockSource=64MHz、Prescale=1:1に設定すれば、最高8MHzまでは出力出来そうです。
    (但し、周波数が高くなるとカウント値が少なくなるので微調整とかは無理ですよ)

B 周期イベントの設定を行います。
  Toolのメイン画面表示から【Period Event】をク リックします。
PeriodEvent
・生成する周波数(Period Freq)を入力します、ここでは1KHz(Freq) と入力。
PSMCxPRH/PSMCxPRL=3999と設定される、
(3999+1)*250ns=1ms」
1ms毎に周期イベント発生します。
赤線枠内のXをクリックし配線します。
設定されるレジスタはPSMCxPRSです。
設定完了なら[Hide]ボタンをクリックします。
※ 周波数を入力して[Enter]を押すと設定出来なければ、近場の周波数で表示される。

C 立ち上がりイベントの設定(位相)を行います。
  Toolのメイン画面表示から【Rising Event】をク リックします。
RisingEvent
・パルスの立上げエッジタイミング時間(Time from period)を入力します。
周期イベント発生と同時に立上げたいので0us(Time)としま す。
設定されるレジスタはPSMCxPHH/PSMCxPHLです。
赤線枠内のXをクリックし配線します。
設定されるレジスタはPSMCxPHSです。
設定完了なら[Hide]ボタンをクリックします。

D 立ち下がりイベントの設定(デュティ 比)を行います。
  Toolのメイン画面表示から【Falling Event】を ク リックします。
FallingEvent
・パルスの立下げエッジタイミング時間(Duty Cycle)を入力します。
ここではデュティ比は50%(Percent)としました。
PSMCxDCH/PSMCxDCL=2000と設定される、
((3999+1)*50%)/100=2000
2000*250ns=500us(0.5ms)」
赤線枠内のXをクリックし配線します。
設定されるレジスタはPSMCxDCSです。
設定完了なら[Hide]ボタンをクリックします。

E PSMCの使用するモード(単相PWM)を選択します。
  Toolのメイン画面表示から【Mode Control】をク リックします。
ModeControl
SPWM」のタブを選択して[Hide]ボタンをク リックします。
設定されるレジスタはPSMCxCONです。
単相PWMは6チャンネル全てに同じPWMが出力されます。
(PSMC2/3モジュールはチャンネルAとBのみです)

F 出力ピンの設定を行います。
  Toolのメイン画面表示から【Output Control】 をク リックします。
OutputControl
今回はRC3ピンから出力を行いたいので、PSMC1Dを利用する事になります。
青枠線内のをクリックしPSMC用ピンに割り当てます。
  設定されるレジスタはPSMCxOENです。
赤線枠のXをクリックしてチャンネルDを配線します。
設定されるレジスタはPSMCxSTR0です。
設定完了なら[Hide]ボタンをクリックします。

これで単相PWMにおける設定は完了です。

設定情報の収得G 設定した情報を得ます。

 Toolのメイン画面表示の右側に有る[Copy and Show]ボタンを
 クリックします。
 下に各レジスタの設定内容が表示され、
 クリップボードにもコピーされています。
 なのでぇ、後はプログラムにペーストしましょ う。

 単相PWMで使用しないレジスタも設定されているので見通しが
 良くないです。

 サンプルプログラムは"SPWM.c"を参照 下さい。

下記内容がペーストした結果です。(単相PWMではオレンジ色の レジスタが必要です)
	PSMC1CON  = 0x00;
PSMC1MDL = 0x00;
PSMC1SYNC = 0x00;
PSMC1CLK = 0x30;
PSMC1POL = 0x00;
PSMC1BLNK = 0x00;
PSMC1REBS = 0x00;
PSMC1FEBS = 0x00;
PSMC1PHS = 0x01;
PSMC1DCS = 0x01;
PSMC1PRS = 0x01;
PSMC1ASDC = 0x00;
PSMC1ASDL = 0x00;
PSMC1ASDS = 0x00;
PSMC1PHH = 0x00;
PSMC1PHL = 0x00;
PSMC1DCH = 0x07;
PSMC1DCL = 0xD0;
PSMC1PRH = 0x0F;
PSMC1PRL = 0x9F;
PSMC1DBR = 0x00;
PSMC1DBF = 0x00;
PSMC1FFA = 0x00;
PSMC1BLKR = 0x00;
PSMC1BLKF = 0x00;
PSMC1STR0 = 0x08;
PSMC1STR1 = 0x00;
PSMC1INT = 0x00;
PSMC1OEN = 0x08;
PSMC1CON = 0x80;
PIE4 &= 0xEE;
PIE4 |= 0x00;
(CLKR)

このPICには、CLKOUTとは別に"CLKR(REFERENCE CLOCK MODULE)"モジュールが有ります。
これはCLKOUTの様にシステムクロックを分周して出力してくれる機能です。
CLKOUTは外部のHSオシレーターモードではOSC2ピンとして使用する為に出力出来ませんでしたが、
CLKRは"CLKR"ピン(RB2)が別に有るので、全てのオシレーターモードで出力可能です。

デューティ比は、0%/25%/50%/75% から選択出来ます。
分周比は、1:1/1:2/1:4/1:8/1:16/1:32/1:64/1:128 から選択出来ます。
又、スルーレート制限の有効/無効も選択出来ます。
Fosc=32MHzで 1:1 なら32MHzが出力される、微調整を必要ないなら意外と使い勝手が良いかもね。
CLKRのレジスタ設定の話はこちらを参照下さい。




【きむ茶工房ガレージハウス】
Copyright (C) 2006-2018 Shigehiro Kimura All Rights Reserved.