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

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


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

《相補PWM》

設定は、PSMCクロックソース=Fosc、プリスケーラ=1:8なので1カウントは250nsとなります。
(この設定で62Hz〜2MHzまで位なら出力出来そう。)
相補PWMは、2 つの波形を生成し、2つの波形は互いに反転した極性を持つ相補波形です。
PSMCモジュールはPSMC1として、PWM出力ピンは"主PWM信号"にRC0(PSMC1A)ピンとし、
"相補PWM信号(反転信号)"にRC1(PSMC1B)ピンと割り付けています。

相補PWM波形
データシートから拝借しました。
出力は10KHzでデュティ比は50%での内容です、
デッドバンドは立ち上げ/立ち下げ5us遅延で行います。

@ 使用するデバイスとモジュール(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です。

B 周期イベントの設定を行います。
  Toolのメイン画面表示から【Period Event】をク リックします。
PeriodEvent
・生成する周波数(Period Freq)を入力します、ここでは10KHz(Freq) と入力。
PSMCxPRH/PSMCxPRL=399と設定される、
(399+1)*250ns=100us」
100us毎に周期イベント発生します。
赤線枠内の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と設定される、
((399+1)*50%)/100=200
200*250ns=50us」
赤線枠内のXをクリックし配線します。
設定されるレジスタはPSMCxDCSです。
設定完了なら[Hide]ボタンをクリックします。

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

 デッドバンドについて

 相補PWMには立ち上げ/立ち下げ時のエッジに其々遅延を入れる事が出来ます。

上図画面の上側 [Deadband] をクリックすると立ち上げ時のデッドバンド設定画面です。
RisingDeadband
・ここでは立ち上げ時の遅延で5usを入力しています。
PSMCxDBR=20(0x14)と設定される、
20*250ns=5000ns」
PSMCxDBRレジスタは8ビットです。
赤線枠内のをクリックし配線します。
設定されるレジスタはPSMCxCONです。
設定完了なら[Hide]ボタンをクリックします。

下側 [Deadband] をクリックすると立ち下げ時のデッドバンド設定画面です。
FallingDeadband
立ち上げ時と同じに設定しています。
設定されるレジスタはPSMCxDBFです。

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

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

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

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

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

 サンプルプログラムは"SPWMC.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 = 0x00;
PSMC1DCL = 0xC8;
PSMC1PRH = 0x01;
PSMC1PRL = 0x8F;
PSMC1DBR = 0x14;
PSMC1DBF = 0x14;
PSMC1FFA = 0x00;
PSMC1BLKR = 0x00;
PSMC1BLKF = 0x00;
PSMC1STR0 = 0x03;
PSMC1STR1 = 0x00;
PSMC1INT = 0x00;
PSMC1OEN = 0x03;
PSMC1CON = 0xB1;
PIE4 &= 0xEE;
PIE4 |= 0x00;

(出力結果)

このページで設定した内容での出力結果をロジックアナライザで見てみます。

出力結果
メモリのスケールが5us単位です、各信号の立ち上がりで5us遅延していますね。
デッドバンドは各信号のON時(立ち上がり)のみ有効となります。
OFF時(立ち下がり)は遅延は反映されません。




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