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

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


"PSMC Designer Tool"の話とPSMC関連ピン構成にレジスタ説明は基本編にて記載しました。
この頁では"PSMC Designer Tool"を使って、ステッピングモータの2相励磁方式波形を生成して見ます。
又、こちらで実際にステッピングモータを動作させています。

2相励磁方式波形左図が2相励磁方式波形です。

PSMCモジュールを2個使い、相補PWM波形を生成
同期操作でPSMC2がマスターでPSMC3がスレーブとし
PSMC3をPSMC2に同期させます、
PSMC3の波形立上げ(位相)を25%遅くします。

同期操作以外は”相補PWM”と同じなので先ずは、
そちらから読みましょう。

尚、左の線色と下図の線色は異なります、注意。


《相補PWM-同期》

ステッピングモータの制御出力は最高200Hz辺りまでなので、システムクロックは8MHzとしました。
設定は、PSMCクロックソース=Fosc、プリスケーラ=1:8なので1カントは1usとなります。

2相励磁方式波形の出力図(正転)
実際に出力した波形(正転)です、周波数は50Hz。
デッドバンドは無しです。

2相励磁方式波形の出力図(逆転)
こちらの波形は逆転です。

操作は”相補PWM”と同じなので端折ります。
又、PSMC2/PSMC3と2個作成します、"PSMC DesignerTool"は2個起動できるので其々起動させましょう

@ 使用するデバイスとモジュール(PSMC2/PSMC3)を選択します。

A PSMCクロックのソースを設定します。
  Toolのメイン画面表示から【Clock】をクリックします。
    [ Clock Control ] 画面で"Fosc"と選び、8MHzを入力し、Prescaleは""を選択します。

B 周期イベントの設定を行います。
  Toolのメイン画面表示から【Period Event】をク リックします。
    周波数は50Hzを 設定します。

C 立ち上がりイベントの設定(位相)を行います。
  Toolのメイン画面表示から【Rising Event】をク リックします。
    [ period event ] の設定は、"Percent(パーセント)"で入力しましょう。
    正転設定(右回り)
    PSMC2=0% PSMC3=25%
    逆転設定(左回り)
    PSMC2=25% PSMC3=0%

D 立ち下がりイベントの設定(デュティ 比)を行います。
  Toolのメイン画面表示から【Falling Event】を ク リックします。
    50%と入力しましょう。

    ※ 実際の立下げ時間は、位相を25%遅延させた場合は、その分立下げ時間が延びる事になります。

E PSMCの使用するモード(相補PWM)を選択します。
  Toolのメイン画面表示から【Mode Control】をク リックします。
    [ SPWMC ] のタブを選びます。
    デッドバンドは入力しません。

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

G 同期の操作を行います。
   PSMC3を同期させたいので、PSMC3のみ操作します。

 Toolのメイン画面表示から【Timer】 をク リックします。
Timer
PSMC3をPSMC2に同期させたいので
[ Sync Source ] を"PSMC2"と選択します。
設定されるレジスタはPSMCxSYNC.PxSYNC(下記参照)です。
設定完了なら[Hide]ボタンをクリックします。

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

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

下記内容がPSMC2をペーストした結果です。(相補PWMではオレンジ色の レジスタが必要です)
	PSMC2CON  = 0x00;
PSMC2MDL = 0x00;
PSMC2SYNC = 0x00;
PSMC2CLK = 0x30;
PSMC2POL = 0x00;
PSMC2BLNK = 0x00;
PSMC2REBS = 0x00;
PSMC2FEBS = 0x00;
PSMC2PHS = 0x01;
PSMC2DCS = 0x01;
PSMC2PRS = 0x01;
PSMC2ASDC = 0x00;
PSMC2ASDL = 0x00;
PSMC2ASDS = 0x00;
PSMC2PHH = 0x00;
PSMC2PHL = 0x00;
PSMC2DCH = 0x27;
PSMC2DCL = 0x10;
PSMC2PRH = 0x4E;
PSMC2PRL = 0x1F;
PSMC2DBR = 0x00;
PSMC2DBF = 0x00;
PSMC2FFA = 0x00;
PSMC2BLKR = 0x00;
PSMC2BLKF = 0x00;
PSMC2STR0 = 0x03;
PSMC2STR1 = 0x00;
PSMC2INT = 0x00;
PSMC2OEN = 0x03;
PSMC2CON = 0x81;
PIE4 &= 0xDD;
PIE4 |= 0x00;
下記内容がPSMC3をペーストした結果です。(相補PWM-同期ではオレンジ色のレジスタが必要です)
	PSMC3CON  = 0x00;
PSMC3MDL = 0x00;
PSMC3SYNC = 0x02;
PSMC3CLK = 0x30;
PSMC3POL = 0x00;
PSMC3BLNK = 0x00;
PSMC3REBS = 0x00;
PSMC3FEBS = 0x00;
PSMC3PHS = 0x01;
PSMC3DCS = 0x01;
PSMC3PRS = 0x01;
PSMC3ASDC = 0x00;
PSMC3ASDL = 0x00;
PSMC3ASDS = 0x00;
PSMC3PHH = 0x13;
PSMC3PHL = 0x88;
PSMC3DCH = 0x3A;
PSMC3DCL = 0x98;
PSMC3PRH = 0x4E;
PSMC3PRL = 0x1F;
PSMC3DBR = 0x00;
PSMC3DBF = 0x00;
PSMC3FFA = 0x00;
PSMC3BLKR = 0x00;
PSMC3BLKF = 0x00;
PSMC3STR0 = 0x03;
PSMC3STR1 = 0x00;
PSMC3INT = 0x00;
PSMC3OEN = 0x03;
PSMC3CON = 0x81;
PIE4 &= 0xBB;
PIE4 |= 0x40;

《レジスタ》

同期操作に関するレジスタをここで説明して置きます。

PSMCxSYNCレジスタ構成
ビット








機能
PxPOFST
PxPRPOL
PxDCPOL



PxSYNC
PxPOFST[7]  :PSMCx位相オフセット制御ビット
                           1 = sync_outソースは位相(Risihg)イベントで、ラッチセットソースは周期イベントです
                      0 = sync_outソースは周期(Period)イベントで、ラッチセットソースは位相イベントです
SyncOutput
Toolのメイン画面表示から【Sync】 をク リックします。
赤線枠内をクリックして切り替えます。(図は"0"での設定例)

PxPRPOL
[6]   :PSMCx周期イベント極性制御ビット
                           1 = 選択された非同期周期イベント入力が反転される
                      0 = 選択された非同期周期イベント入力は反転されません
PeriodEvent
Toolのメイン画面表示から【Period Event】 をク リックします。
赤線枠内の何れかをクリックして切り替えます。(図は"1"での設定例)
図ではRB0_Bの非同期入力信号(ブランキング信号)を配線しています。

PxDCPOL
[5]  :PSMCxデューティサイクル(立ち下げ)イベント極性制御ビット
                           1 = 選択された非同期デューティサイクルイベント入力が反転されます
                      0 = 選択された非同期デューティサイクルイベント入力は反転されません
FallingEvent
Toolのメイン画面表示から【Falling Event】 をク リックします。
赤線枠内の何れかをクリックして切り替えます。(図は"1"での設定例)
図ではRB0_Bの非同期入力信号(ブランキング信号)を配線しています。

PSMC3SYNC時

P3SYNC
[1:0]:PSMC3周期同期制御モードビット
                     11 =予約済み - 使用しないで下さい
                 10 = PSMC3はPSMC2モジュールと同期する(sync_inはPSMC2のsync_outから来る)
                 01 = PSMC3はPSMC1モジュールと同期する(sync_inはPSMC1のsync_outから来る)
                 00 = PSMC3は周期イベントと同期する
PSMC2SYNC時
P2SYNC[1:0]:PSMC2周期同期制御モードビット
                     11 =PSMC2はPSMC3モジュールと同期する(sync_inはPSMC3のsync_outから来る)
                 10 = 予約済み - 使用しないで下さい
                 01 = PSMC2はPSMC1モジュールと同期する(sync_inはPSMC1のsync_outから来る)
                 00 = PSMC2は周期イベントと同期する
PSMC1SYNC時
P1SYNC[1:0]:PSMC1周期同期制御モードビット
                     11 =PSMC1はPSMC3モジュールと同期する(sync_inはPSMC3のsync_outから来る)
                 10 =PSMC1はPSMC2モジュールと同期する(sync_inはPSMC2のsync_outから来る)
                 01 = 予約済み - 使用しないで下さい
                 00 = PSMC1は周期イベントと同期する







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