Helps on PWM output from K64F

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Helps on PWM output from K64F

1,879件の閲覧回数
linye
Contributor I


Hi All,

I am new to K64F. Recently,  I am trying to use K64F to output a PWM signal from an GPIO ( PTB 18) with KDS 3.2 and KSDK 2.0.

So far, I have no idea on how to FTM with KSDK 2.0 to generate PWM signal. I saw lots of demo applications from KSDS 2.0, those demo applications helps a lot. But I can not find any example or demo on how to use FTM to generate PWM output.

Is there any application note available on how to use FTM with KSDK 2.0 ?

Or any demo code? It really helps a lot!

Thank you so much for helping me,

タグ(3)
0 件の賞賛
2 返答(返信)

698件の閲覧回数
isaacavila
NXP Employee
NXP Employee

Hello,

If you download the SDK 2.0 package for MK64FN1M0xxx12, you can find an example for PWM implementation that is available for TWR-K64F120M board, this example is located at: <SDK_2.0_MK64FN1M0xxx12>\boards\twrk64f120m\driver_examples\ftm\pwm_twochannel.

Basically, FTM implementation is configured as follows:

void delay(void)

{

    volatile uint32_t i = 0U;

    for (i = 0U; i < 800000U; ++i)

    {

        __asm("NOP"); /* delay */

    }

}

/*!

* @brief Main function

*/

int main(void)

{

    bool brightnessUp = true; /* Indicate LEDs are brighter or dimmer */

    ftm_config_t ftmInfo;

    uint8_t updatedDutycycle = 0U;

    ftm_chnl_pwm_signal_param_t ftmParam[2];

    /* Configure ftm params with frequency 24kHZ */

    ftmParam[0].chnlNumber = (ftm_chnl_t)BOARD_FIRST_FTM_CHANNEL;

    ftmParam[0].level = kFTM_LowTrue;

    ftmParam[0].dutyCyclePercent = 0U;

    ftmParam[0].firstEdgeDelayPercent = 0U;

    ftmParam[1].chnlNumber = (ftm_chnl_t)BOARD_SECOND_FTM_CHANNEL;

    ftmParam[1].level = kFTM_LowTrue;

    ftmParam[1].dutyCyclePercent = 0U;

    ftmParam[1].firstEdgeDelayPercent = 0U;

    /* Board pin, clock, debug console init */

    BOARD_InitPins();

    BOARD_BootClockRUN();

    BOARD_InitDebugConsole();

    /* Print a note to terminal */

    PRINTF("\r\nFTM example to output PWM on 2 channels\r\n");

    PRINTF("\r\nYou will see a change in LED brightness if an LED is connected to the FTM pin");

    PRINTF("\r\nIf no LED is connected to the FTM pin, then probe the signal using an oscilloscope");

    /*

     * ftmInfo.prescale = kFTM_Prescale_Divide_1;

     * ftmInfo.bdmMode = kFTM_BdmMode_0;

     * ftmInfo.pwmSyncMode = kFTM_SoftwareTrigger;

     * ftmInfo.reloadPoints = 0;

     * ftmInfo.faultMode = kFTM_Fault_Disable;

     * ftmInfo.faultFilterValue = 0;

     * ftmInfo.deadTimePrescale = kFTM_Deadtime_Prescale_1;

     * ftmInfo.deadTimeValue = 0;

     * ftmInfo.extTriggers = 0;

     * ftmInfo.chnlInitState = 0;

     * ftmInfo.chnlPolarity = 0;

     * ftmInfo.useGlobalTimeBase = false;

     */

    FTM_GetDefaultConfig(&ftmInfo);

    /* Initialize FTM module */

    FTM_Init(BOARD_FTM_BASEADDR, &ftmInfo);

    FTM_SetupPwm(BOARD_FTM_BASEADDR, ftmParam, 2U, kFTM_EdgeAlignedPwm, 24000U, FTM_SOURCE_CLOCK);

    FTM_StartTimer(BOARD_FTM_BASEADDR, kFTM_SystemClock);

    while (1)

    {

        /* Delay to see the change of LEDs brightness */

        delay();

        if (brightnessUp)

        {

            /* Increase duty cycle until it reach limited value */

            if (++updatedDutycycle == 100U)

            {

                brightnessUp = false;

            }

        }

        else

        {

            /* Decrease duty cycle until it reach limited value */

            if (--updatedDutycycle == 0U)

            {

                brightnessUp = true;

            }

        }

        /* Start PWM mode with updated duty cycle */

        FTM_UpdatePwmDutycycle(BOARD_FTM_BASEADDR, (ftm_chnl_t)BOARD_FIRST_FTM_CHANNEL, kFTM_EdgeAlignedPwm,

                               updatedDutycycle);

        FTM_UpdatePwmDutycycle(BOARD_FTM_BASEADDR, (ftm_chnl_t)BOARD_SECOND_FTM_CHANNEL, kFTM_EdgeAlignedPwm,

                               updatedDutycycle);

        /* Software trigger to update registers */

        FTM_SetSoftwareTrigger(BOARD_FTM_BASEADDR, true);

    }

}

I hope this can help you!

Regards,

Isaac

0 件の賞賛

698件の閲覧回数
linye
Contributor I

Hi Isaac,

Thanks a lot!

0 件の賞賛