ホーム フォーラム Texas Instruments マイコン C2000 F2837xD コア2でのPWM

このトピックには12件の返信が含まれ、2人の参加者がいます。4 年、 6 ヶ月前Yojiro Yojiro さんが最後の更新を行いました。

14件の投稿を表示中 - 1 - 14件目 (全14件中)
  • 投稿者
    投稿
  • #10221 返信

    ttkkttkk
    参加者

    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;

    #10224 返信
    Yojiro
    Yojiro
    従業員

    ttkkttkkさん

    お問い合わせありがとうございます。

    GPIO設定において、GPIOのCPU使用権(GPACSELx)をCPU2へ設定されたあとに、GPIOのMUX設定が行われております。

    そのため、設定内容が反映されていないものと推測いたします。

    MUX設定の後、GPIOのCPU使用権を設定いただくように順番を入れ替えてお試しいただけますでしょうか。

     

    ご確認のほど、よろしくお願いいたします。

    #10225 返信

    ttkkttkk
    参加者

    回答ありがとうございます。
    MUX設定とCSEL設定を入れ替えてみましたが
    出力されませんでした

    PWM4~6の設定はCPU2側で行っておりますが
    何か関係してますでしょうか

    #10231 返信
    Yojiro
    Yojiro
    従業員

    ttkkttkkさん

    GPIOのMUX設定はCPU1で設定いただければ、CPU使用権をCPU2へ設定しなくても、EPWM機能として使用可能です。
    設定の最初に、EPWM4-6のCPU使用権をCPU2へ設定されていますので、使用権が設定されていれば、CPU2から設定されたEPWM設定は実行されます。

    EPWMのCPU使用権のレジスタ(DevCfg.CPUSEL0)はEALLOW命令で保護の解除が必要ですが、実行されておりますでしょうか。

    また、CPU2で設定されているEPWM設定内容ですが、CPU1単体で動作させても動作する設定内容となっておりますでしょうか。

    ご確認のほど、よろしくお願いいたします。

    #10233 返信

    ttkkttkk
    参加者

    回答ありがとうございます

    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_DEBUG

    CPU2_FLASH
    CPU2_RAM_DEBUG

    デバッガ接続状態で、CPU1_RAM_DEBUG,CPU2_RAM_DEBUGでConfigurationを設定したところPWMが動きましたが、
    デバッガ未接続の場合は動かなかったため質問した次第で、すみませんが回答よろしくお願いします

    #10234 返信
    Yojiro
    Yojiro
    従業員

    ttkkttkkさん

    デバッガなしで起動する場合、CPU1は”CPU1_FLASH_STANDALONE”、CPU2は”CPU2_FLASH”をご利用ください。

    ”CPUx_RAM_DEBUG”を選択されますと、プログラムもRAMへ配置され、FlashROMには何も書かれません。

    デバッガなしで起動すると、FlashROMのプログラムを起動しようとしますので、正しく動作することはできません。

    ご確認のほど、よろしくお願いします。

    #10235 返信

    ttkkttkk
    参加者

    CPU1_FLASH_STANDALONE
    CPU2_FLASHをControlCARDにダウンロードしてデバッガなしで起動させたのですが
    PWMが動きませんでした

    上記のadc_epwm_cpu01, cpu02は必ず
    CPU01側から先に起動させる必要があるのでしょうか

    #10240 返信
    Yojiro
    Yojiro
    従業員

    ttkkttkkさん

    はい、誤認識の通り、CPU1から先に起動(初期設定)を行って頂く必要があります。

    CPU1の初期設定により、EPWMのCPU使用権をCPU2へ変更しますので、この設定より前にCPU2が実行すると、EPWM設定が反映されません。

    サンプルプロジェクトには、立ち上げシーケンスは含まれておりません。IPCのサンプルをご参照いただき、CPU1の初期設定が終わるまで、CPU2はWaitいただく処理を追加ください。

    ご確認のほど、よろしくお願いします。

    #10242 返信

    ttkkttkk
    参加者

    回答ありがとうございます。

    何度も申し訳ないのですが、
    上記、
    「CPU1の初期設定が終わるまで、CPU2はwhileで待つ」というサンプルプログラムは
    cpu01_to_cpu02_ipcdrivers_cpu01、cpu01_to_cpu02_ipcdrivers_cpu02に
    なりますか?

    #10243 返信

    ttkkttkk
    参加者

    追加ですみません
    CPU1_FLASH_STANDALONE、CPU2_FLASHの組み合わせでデバッガなしでの
    PWMが動作しなかった件は何か原因が考えられませんでしょうか

    #10244 返信

    ttkkttkk
    参加者

    連投ですみません。
    IPCのフラグを使い、CPU1の初期化が終わるまでCPU2を初期化させないように変更しました。

    CPU2をデバッガで追っかけるとPWMの初期設定時に
    PWM4のレジスタが0のまま更新されていないことが分かりました
    Global Shared Memoryの設定が足りていないのでしょうか

    #10245 返信

    ttkkttkk
    参加者

    何度もすみません
    上記は、
    PLLCKR2.EPWM4=1
    PLLCKR2.EPWM5=1
    PLLCKR2.EPWM6=1
    の前にEALLOWがなかったことが原因でした
    ありがとうございました

    ただまだ一点うまくいっていない箇所があり
    PWM6の動きがおかしく、デバッガでCPU2にブレークポイントをはって止めると
    動くのですが、止めずに実行すると出力がされない現象がおこっております

    またCPU1からIPCの割込みをかけており、
    デバッガで動かすとIPC割込みがかからず、止めずに実行するとIPC割込みがかかる
    ような現象が起きております

    何か現象について考えられる点はありませんでしょうか

    #10246 返信

    ttkkttkk
    参加者

    上記、原因が分かりました
    PWMのセットする値(CMPA)の値がTBPRDを超えた値をセットしておりました

    解決済みとさせていただきます
    ありがとうございました

    #10250 返信
    Yojiro
    Yojiro
    従業員

    ttkkttkkさん

    自己解決のご連絡、ありがとうございます。

    今後もご不明な点などございましたら、お気軽にご投稿いただければと存じます。

14件の投稿を表示中 - 1 - 14件目 (全14件中)