ホーム › フォーラム › Texas Instruments › マイコン › C2000 › F2837xD コア2でのPWM
このトピックには12件の返信が含まれ、2人の参加者がいます。4 年、 8 ヶ月前に Yojiro さんが最後の更新を行いました。
-
投稿者投稿
-
F2837xD コア2でのPWM
デバイス型番:F2837xDコア2でPWM4~6を使おうとしていますが、
PWM波形が出力されません。(ずっとLOW出力)コア1側でCPU初期化時に以下の設定をしております
他に設定の必要な箇所があれば教えて頂けませんでしょうか
(PWMモジュールの設定は関係がなさそうなので省略しました)
g_stRegsDevCfg.uCPUSEL0.stBit.unEPWM4 = 1;
g_stRegsDevCfg.uCPUSEL0.stBit.unEPWM5 = 1;
g_stRegsDevCfg.uCPUSEL0.stBit.unEPWM6 = 1;/* EPWM4クロック許可設定:許可 */
g_stRegsCpuSys.uPCLKCR2.stBit.unEPWM4 = ( unsigned int )SET_BIT;
/* EPWM5クロック許可設定:許可 */
g_stRegsCpuSys.uPCLKCR2.stBit.unEPWM5 = ( unsigned int )SET_BIT;
/* EPWM6クロック許可設定:許可 */GPIO設定
/* GPIO06(PWM出力UH_2):コア2 */
g_stRegsGpioCtrl.uGPACSEL1.stBit.unGPIO6 = ( unsigned int )VALUE_GPIO_CSEL_CORE2;
/* GPIO07(PWM出力UL_2):コア2 */
g_stRegsGpioCtrl.uGPACSEL1.stBit.unGPIO7 = ( unsigned int )VALUE_GPIO_CSEL_CORE2;
/* GPIO08(PWM出力VH_2):コア2 */
g_stRegsGpioCtrl.uGPACSEL2.stBit.unGPIO8 = ( unsigned int )VALUE_GPIO_CSEL_CORE2;
/* GPIO09(PWM出力VL_2):コア2 */
g_stRegsGpioCtrl.uGPACSEL2.stBit.unGPIO9 = ( unsigned int )VALUE_GPIO_CSEL_CORE2;
/* GPIO10(PWM出力WH_2):コア2 */
g_stRegsGpioCtrl.uGPACSEL2.stBit.unGPIO10 = ( unsigned int )VALUE_GPIO_CSEL_CORE2;
/* GPIO11(PWM出力WL_2):コア2 */
g_stRegsGpioCtrl.uGPACSEL2.stBit.unGPIO11 = ( unsigned int )VALUE_GPIO_CSEL_CORE2;/* GPIO06設定(PWM出力UH_2):ペリフェラル1 */
g_stRegsGpioCtrl.uGPAMUX1.stBit.unGPIO6 = ( unsigned int )VALUE_GPIO_MUX_PR1;
/* GPIO07設定(PWM出力UL_2):ペリフェラル1 */
g_stRegsGpioCtrl.uGPAMUX1.stBit.unGPIO7 = ( unsigned int )VALUE_GPIO_MUX_PR1;
/* GPIO08設定(PWM出力VH_2):ペリフェラル1 */
g_stRegsGpioCtrl.uGPAMUX1.stBit.unGPIO8 = ( unsigned int )VALUE_GPIO_MUX_PR1;
/* GPIO09設定(PWM出力VL_2):ペリフェラル1 */
g_stRegsGpioCtrl.uGPAMUX1.stBit.unGPIO9 = ( unsigned int )VALUE_GPIO_MUX_PR1;
/* GPIO10設定(PWM出力WH_2):ペリフェラル1 */
g_stRegsGpioCtrl.uGPAMUX1.stBit.unGPIO10 = ( unsigned int )VALUE_GPIO_MUX_PR1;
/* GPIO11設定(PWM出力WL_2):ペリフェラル1 */
g_stRegsGpioCtrl.uGPAMUX1.stBit.unGPIO11 = ( unsigned int )VALUE_GPIO_MUX_PR1;g_stRegsCpuSys.uPCLKCR2.stBit.unEPWM6 = ( unsigned int )SET_BIT;
ttkkttkkさん
お問い合わせありがとうございます。
GPIO設定において、GPIOのCPU使用権(GPACSELx)をCPU2へ設定されたあとに、GPIOのMUX設定が行われております。
そのため、設定内容が反映されていないものと推測いたします。
MUX設定の後、GPIOのCPU使用権を設定いただくように順番を入れ替えてお試しいただけますでしょうか。
ご確認のほど、よろしくお願いいたします。
回答ありがとうございます。
MUX設定とCSEL設定を入れ替えてみましたが
出力されませんでしたPWM4~6の設定はCPU2側で行っておりますが
何か関係してますでしょうかttkkttkkさん
GPIOのMUX設定はCPU1で設定いただければ、CPU使用権をCPU2へ設定しなくても、EPWM機能として使用可能です。
設定の最初に、EPWM4-6のCPU使用権をCPU2へ設定されていますので、使用権が設定されていれば、CPU2から設定されたEPWM設定は実行されます。EPWMのCPU使用権のレジスタ(DevCfg.CPUSEL0)はEALLOW命令で保護の解除が必要ですが、実行されておりますでしょうか。
また、CPU2で設定されているEPWM設定内容ですが、CPU1単体で動作させても動作する設定内容となっておりますでしょうか。
ご確認のほど、よろしくお願いいたします。
回答ありがとうございます
CPU1側でEPWM設定し、動作することは確認しております
C2000サンプルにあるadc_epwm_cpu01, cpu02において、
cpu02側にPWM4~6の設定を追加、InitEPwm1Gpio()と同じように
InitEPwm4,5,6Gpio()を追加、DevCfgRegs.CPUSEL0.EPWM4,5,6=1
を追加し、実行すると
PWM4~6が動作しました質問の趣旨が変わって申し訳ないのですが
デバッガなしの単体で起動する場合、どの組合せで起動すればよいのでしょうか
CPU1_FLASH_DEBUG
CPU1_FLASH_STANDALONE
CPU1_RAM_DEBUGCPU2_FLASH
CPU2_RAM_DEBUGデバッガ接続状態で、CPU1_RAM_DEBUG,CPU2_RAM_DEBUGでConfigurationを設定したところPWMが動きましたが、
デバッガ未接続の場合は動かなかったため質問した次第で、すみませんが回答よろしくお願いしますttkkttkkさん
デバッガなしで起動する場合、CPU1は”CPU1_FLASH_STANDALONE”、CPU2は”CPU2_FLASH”をご利用ください。
”CPUx_RAM_DEBUG”を選択されますと、プログラムもRAMへ配置され、FlashROMには何も書かれません。
デバッガなしで起動すると、FlashROMのプログラムを起動しようとしますので、正しく動作することはできません。
ご確認のほど、よろしくお願いします。
CPU1_FLASH_STANDALONE
CPU2_FLASHをControlCARDにダウンロードしてデバッガなしで起動させたのですが
PWMが動きませんでした上記のadc_epwm_cpu01, cpu02は必ず
CPU01側から先に起動させる必要があるのでしょうかttkkttkkさん
はい、誤認識の通り、CPU1から先に起動(初期設定)を行って頂く必要があります。
CPU1の初期設定により、EPWMのCPU使用権をCPU2へ変更しますので、この設定より前にCPU2が実行すると、EPWM設定が反映されません。
サンプルプロジェクトには、立ち上げシーケンスは含まれておりません。IPCのサンプルをご参照いただき、CPU1の初期設定が終わるまで、CPU2はWaitいただく処理を追加ください。
ご確認のほど、よろしくお願いします。
回答ありがとうございます。
何度も申し訳ないのですが、
上記、
「CPU1の初期設定が終わるまで、CPU2はwhileで待つ」というサンプルプログラムは
cpu01_to_cpu02_ipcdrivers_cpu01、cpu01_to_cpu02_ipcdrivers_cpu02に
なりますか?追加ですみません
CPU1_FLASH_STANDALONE、CPU2_FLASHの組み合わせでデバッガなしでの
PWMが動作しなかった件は何か原因が考えられませんでしょうか連投ですみません。
IPCのフラグを使い、CPU1の初期化が終わるまでCPU2を初期化させないように変更しました。CPU2をデバッガで追っかけるとPWMの初期設定時に
PWM4のレジスタが0のまま更新されていないことが分かりました
Global Shared Memoryの設定が足りていないのでしょうか何度もすみません
上記は、
PLLCKR2.EPWM4=1
PLLCKR2.EPWM5=1
PLLCKR2.EPWM6=1
の前にEALLOWがなかったことが原因でした
ありがとうございましたただまだ一点うまくいっていない箇所があり
PWM6の動きがおかしく、デバッガでCPU2にブレークポイントをはって止めると
動くのですが、止めずに実行すると出力がされない現象がおこっておりますまたCPU1からIPCの割込みをかけており、
デバッガで動かすとIPC割込みがかからず、止めずに実行するとIPC割込みがかかる
ような現象が起きております何か現象について考えられる点はありませんでしょうか
上記、原因が分かりました
PWMのセットする値(CMPA)の値がTBPRDを超えた値をセットしておりました解決済みとさせていただきます
ありがとうございましたttkkttkkさん
自己解決のご連絡、ありがとうございます。
今後もご不明な点などございましたら、お気軽にご投稿いただければと存じます。
-
投稿者投稿