<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic TPM PWM Noise in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/TPM-PWM-Noise/m-p/903886#M53116</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have modified the TPM_PWM example to use freeRTOS and drive a motor.&lt;/P&gt;&lt;P&gt;The PWM signal was very noisy when I checked with an oscilloscope and also with a motor&amp;nbsp;controller as shown below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="PWM_reading.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/75330i67CD631A08C0760B/image-size/large?v=v2&amp;amp;px=999" role="button" title="PWM_reading.png" alt="PWM_reading.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I changed the PWM frequency and for some reasons, it seemed to work better with higher frequency then stopped working after some value.&lt;/P&gt;&lt;P&gt;When I was checking with the oscilloscope, the measuring frequency was also changing. I assume there might be something wrong with the TPM source clock?&lt;/P&gt;&lt;P&gt;Here is the code I used and the TPM1_CH0 pin was used to send PWM out.&amp;nbsp;&lt;/P&gt;&lt;P&gt;What the code does is, once the SW3 button is pressed and Motor_Switch is true, the sinusoidal duty cycle of PWM is sent out.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Interrupt to enable and flag to read; depends on the TPM channel used */&lt;BR /&gt;#define TPM_CHANNEL_INTERRUPT_ENABLE kTPM_Chnl1InterruptEnable&lt;BR /&gt;#define TPM_CHANNEL_FLAG kTPM_Chnl1Flag&lt;/P&gt;&lt;P&gt;/* Get source clock for TPM driver */&lt;BR /&gt;#define TPM_SOURCE_CLOCK CLOCK_GetFreq(kCLOCK_PllFllSelClk)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void vMotor_Control_Task(void)&lt;BR /&gt;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;volatile uint16_t updatedDutycycle=0;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TickType_t xLastWakeTime;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tpm_config_t tpmInfo;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;tpm_chnl_pwm_signal_param_t tpmParam;&lt;/P&gt;&lt;P&gt;#ifndef TPM_LED_ON_LEVEL&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;#define TPM_LED_ON_LEVEL kTPM_HighTrue&lt;BR /&gt;#endif&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;tpmParam.chnlNumber = (tpm_chnl_t)TPM_CHANNEL;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;tpmParam.level = TPM_LED_ON_LEVEL;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;tpmParam.dutyCyclePercent = 100U;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* TPM known issue of KL81, enable clock of TPM0 to use other TPM module */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;CLOCK_EnableClock(kCLOCK_Tpm1);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;/* Select the clock source for the TPM counter as kCLOCK_PllFllSelClk */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;CLOCK_SetTpmClock(1U);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_GetDefaultConfig(&amp;amp;tpmInfo);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;/* Initialize TPM module */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_Init(TPM_BASEADDR, &amp;amp;tpmInfo);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_SetupPwm(TPM_BASEADDR, &amp;amp;tpmParam, 1U, kTPM_EdgeAlignedPwm, 5000U, TPM_SOURCE_CLOCK);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_StartTimer(TPM_BASEADDR, kTPM_SystemClock);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_EnableInterrupts(TPM_BASEADDR,TPM_CHANNEL_INTERRUPT_ENABLE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Disable channel output before updating the dutycycle */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, 0U);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int Motor_Switch = -1;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;uint16_t Sin_time = 0;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;while (1)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xLastWakeTime = xTaskGetTickCount();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (g_ButtonPress)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRINTF(" %s is pressed \r\n", BOARD_SW_NAME);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GPIO_PortToggle(BOARD_LED_GPIO, 1U &amp;lt;&amp;lt; BOARD_LED_GPIO_PIN);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GPIO_PortToggle(EDO_GPIO, 1U &amp;lt;&amp;lt; EDO_PIN);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Motor_Switch *= -1;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g_ButtonPress = false;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(Motor_Switch==1)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRINTF("Duty Cycle is on \r\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRINTF("Duty Cycle is off \r\n");&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sin_time = 0;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;updatedDutycycle = 100;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (Motor_Switch==1)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;updatedDutycycle = (uint16_t) 450 + 350*sin(2*PI*Sin_time/1000-PI/2);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Disable channel output before updating the dutycycle */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, 0U);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Update PWM duty cycle */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdatePwmDutycycle(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, kTPM_EdgeAlignedPwm,&amp;nbsp;updatedDutycycle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Start channel output with updated dutycycle */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, TPM_LED_ON_LEVEL);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sin_time++;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, 0U);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdatePwmDutycycle(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, kTPM_EdgeAlignedPwm, 100U);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, TPM_LED_ON_LEVEL);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vTaskDelayUntil(&amp;amp;xLastWakeTime, 1);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 07 May 2019 12:50:25 GMT</pubDate>
    <dc:creator>songja</dc:creator>
    <dc:date>2019-05-07T12:50:25Z</dc:date>
    <item>
      <title>TPM PWM Noise</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/TPM-PWM-Noise/m-p/903886#M53116</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have modified the TPM_PWM example to use freeRTOS and drive a motor.&lt;/P&gt;&lt;P&gt;The PWM signal was very noisy when I checked with an oscilloscope and also with a motor&amp;nbsp;controller as shown below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper" image-alt="PWM_reading.png"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/75330i67CD631A08C0760B/image-size/large?v=v2&amp;amp;px=999" role="button" title="PWM_reading.png" alt="PWM_reading.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I changed the PWM frequency and for some reasons, it seemed to work better with higher frequency then stopped working after some value.&lt;/P&gt;&lt;P&gt;When I was checking with the oscilloscope, the measuring frequency was also changing. I assume there might be something wrong with the TPM source clock?&lt;/P&gt;&lt;P&gt;Here is the code I used and the TPM1_CH0 pin was used to send PWM out.&amp;nbsp;&lt;/P&gt;&lt;P&gt;What the code does is, once the SW3 button is pressed and Motor_Switch is true, the sinusoidal duty cycle of PWM is sent out.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* Interrupt to enable and flag to read; depends on the TPM channel used */&lt;BR /&gt;#define TPM_CHANNEL_INTERRUPT_ENABLE kTPM_Chnl1InterruptEnable&lt;BR /&gt;#define TPM_CHANNEL_FLAG kTPM_Chnl1Flag&lt;/P&gt;&lt;P&gt;/* Get source clock for TPM driver */&lt;BR /&gt;#define TPM_SOURCE_CLOCK CLOCK_GetFreq(kCLOCK_PllFllSelClk)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void vMotor_Control_Task(void)&lt;BR /&gt;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;volatile uint16_t updatedDutycycle=0;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TickType_t xLastWakeTime;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tpm_config_t tpmInfo;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;tpm_chnl_pwm_signal_param_t tpmParam;&lt;/P&gt;&lt;P&gt;#ifndef TPM_LED_ON_LEVEL&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;#define TPM_LED_ON_LEVEL kTPM_HighTrue&lt;BR /&gt;#endif&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;tpmParam.chnlNumber = (tpm_chnl_t)TPM_CHANNEL;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;tpmParam.level = TPM_LED_ON_LEVEL;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;tpmParam.dutyCyclePercent = 100U;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* TPM known issue of KL81, enable clock of TPM0 to use other TPM module */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;CLOCK_EnableClock(kCLOCK_Tpm1);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;/* Select the clock source for the TPM counter as kCLOCK_PllFllSelClk */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;CLOCK_SetTpmClock(1U);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_GetDefaultConfig(&amp;amp;tpmInfo);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;/* Initialize TPM module */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_Init(TPM_BASEADDR, &amp;amp;tpmInfo);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_SetupPwm(TPM_BASEADDR, &amp;amp;tpmParam, 1U, kTPM_EdgeAlignedPwm, 5000U, TPM_SOURCE_CLOCK);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_StartTimer(TPM_BASEADDR, kTPM_SystemClock);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_EnableInterrupts(TPM_BASEADDR,TPM_CHANNEL_INTERRUPT_ENABLE);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Disable channel output before updating the dutycycle */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, 0U);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;int Motor_Switch = -1;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;uint16_t Sin_time = 0;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;while (1)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;xLastWakeTime = xTaskGetTickCount();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (g_ButtonPress)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRINTF(" %s is pressed \r\n", BOARD_SW_NAME);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GPIO_PortToggle(BOARD_LED_GPIO, 1U &amp;lt;&amp;lt; BOARD_LED_GPIO_PIN);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;GPIO_PortToggle(EDO_GPIO, 1U &amp;lt;&amp;lt; EDO_PIN);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Motor_Switch *= -1;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;g_ButtonPress = false;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(Motor_Switch==1)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRINTF("Duty Cycle is on \r\n");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;PRINTF("Duty Cycle is off \r\n");&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sin_time = 0;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;updatedDutycycle = 100;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (Motor_Switch==1)&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;updatedDutycycle = (uint16_t) 450 + 350*sin(2*PI*Sin_time/1000-PI/2);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Disable channel output before updating the dutycycle */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, 0U);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Update PWM duty cycle */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdatePwmDutycycle(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, kTPM_EdgeAlignedPwm,&amp;nbsp;updatedDutycycle);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Start channel output with updated dutycycle */&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, TPM_LED_ON_LEVEL);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Sin_time++;&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;else&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, 0U);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdatePwmDutycycle(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, kTPM_EdgeAlignedPwm, 100U);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect(TPM_BASEADDR, (tpm_chnl_t)TPM_CHANNEL, TPM_LED_ON_LEVEL);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;vTaskDelayUntil(&amp;amp;xLastWakeTime, 1);&lt;BR /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 07 May 2019 12:50:25 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/TPM-PWM-Noise/m-p/903886#M53116</guid>
      <dc:creator>songja</dc:creator>
      <dc:date>2019-05-07T12:50:25Z</dc:date>
    </item>
    <item>
      <title>Re: TPM PWM Noise</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/TPM-PWM-Noise/m-p/903887#M53117</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Yaeyong,&lt;/P&gt;&lt;P&gt;If you want PWM change continuously, you can't call TPM_UpdateChnlEdgeLevelSelect() before and after TPM_UpdatePwmDutycycle().&lt;/P&gt;&lt;P&gt;If you call TPM_UpdateChnlEdgeLevelSelect() and then TPM_UpdatePwmDutycycle, register TPM.C0V will update immediately. Current PWM waveform will be incomplete.&lt;/P&gt;&lt;P&gt;&amp;nbsp;Another problem in your code is &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; updatedDutycycle = (uint16_t) 450 + 350*sin(2*PI*Sin_time/1000-PI/2);&lt;/P&gt;&lt;P&gt;updatedDutycycle is a uint8_t type. But your expression show that updatedDutycycle's value is from 100~800.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Jing&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 09 May 2019 08:08:17 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/TPM-PWM-Noise/m-p/903887#M53117</guid>
      <dc:creator>jingpan</dc:creator>
      <dc:date>2019-05-09T08:08:17Z</dc:date>
    </item>
    <item>
      <title>Re: TPM PWM Noise</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/TPM-PWM-Noise/m-p/903888#M53118</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Jing,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Removing&amp;nbsp;TPM_UpdateChnlEdgeLevelSelect() worked.&amp;nbsp;&lt;/P&gt;&lt;P&gt;And I actually set updatedDutycycle to uint16_t before the attached code. Thanks for pointing it out though.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks!.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Jay&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 10 May 2019 09:42:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/TPM-PWM-Noise/m-p/903888#M53118</guid>
      <dc:creator>songja</dc:creator>
      <dc:date>2019-05-10T09:42:23Z</dc:date>
    </item>
  </channel>
</rss>

