PSMC機能を動作させて見ます(相補PWM-同期)
〔基本編〕
〔単相PWM〕
〔相補PWM〕
〔可変周波数PWM〕
〔PICの動かせ方入門に戻る〕
"PSMC Designer Tool"の話とPSMC関連ピン構成にレジスタ説明は基本編にて記載しました。
この頁では"PSMC Designer Tool"を使って、ステッピングモータの2相励磁方式波形を生成して見ます。
又、こちらで実際にステッピングモータを動作させています。
左図が2相励磁方式波形です。
PSMCモジュールを2個使い、相補PWM波形を生成。
同期操作でPSMC2がマスターでPSMC3がスレーブとし
PSMC3をPSMC2に同期させます、
PSMC3の波形立上げ(位相)を25%遅くします。
同期操作以外は”相補PWM”と同じなので先ずは、
そちらから読みましょう。
尚、左の線色と下図の線色は異なります、注意。
《相補PWM-同期》
ステッピングモータの制御出力は最高200Hz辺りまでなので、システムクロックは8MHzとしました。
設定は、PSMCクロックソース=Fosc、プリスケーラ=1:8なので1カントは1usとなります。
実際に出力した波形(
正転)です、周波数は50Hz。
デッドバンドは無しです。
こちらの波形は
逆転です。
操作は”相補PWM”と同じなので端折ります。
又、PSMC2/PSMC3と2個作成します、"PSMC
DesignerTool"は2個起動できるので其々起動させましょう
@ 使用するデバイスとモジュール(PSMC2/PSMC3)を選択します。
A PSMCクロックのソースを設定します。
Toolのメイン画面表示から【Clock】をクリックします。
[ Clock Control ] 画面で"Fosc"と選び、8MHzを入力し、Prescaleは"8"を選択します。
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】
をク
リックします。
この図はPSMC2ですがPSMC3も同じ操作です。
赤線枠其々A/Bの
XをクリックしてチャンネルA/Bを配線します。
設定されるレジスタは
PSMCxSTR0です。
青枠線内其々A/Bの
〇をクリックしPSMC用ピンに割り当てます。
設定されるレジスタは
PSMCxOENです。
設定完了なら[
Hide]ボタンをクリックします。
G 同期の操作を行います。
PSMC3を同期させたいので、PSMC3のみ操作します。
Toolのメイン画面表示から【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レジスタ構成
ビット
|
7
|
6
|
5
|
4
|
3
|
2
|
1
|
0
|
機能
|
PxPOFST
|
PxPRPOL
|
PxDCPOL
|
|
|
|
PxSYNC
|
PxPOFST[7] :PSMCx位相オフセット制御ビット
1 = sync_outソースは位相(Risihg)イベントで、ラッチセットソースは周期イベントです
0 = sync_outソースは周期(Period)イベントで、ラッチセットソースは位相イベントです
Toolのメイン画面表示から【
Sync】
をク
リックします。
赤線枠内をクリックして切り替えます。(図は"0"での設定例)
PxPRPOL[6] :PSMCx周期イベント極性制御ビット
1 = 選択された非同期周期イベント入力が反転される
0 = 選択された非同期周期イベント入力は反転されません
Toolのメイン画面表示から【
Period Event】
をク
リックします。
赤線枠内の何れかをクリックして切り替えます。(図は"1"での設定例)
図ではRB0_Bの非同期入力信号(ブランキング信号)を配線しています。
PxDCPOL[5] :PSMCxデューティサイクル(立ち下げ)イベント極性制御ビット
1 = 選択された非同期デューティサイクルイベント入力が反転されます
0 = 選択された非同期デューティサイクルイベント入力は反転されません
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.