9 Replies Latest reply on Oct 29, 2017 2:42 PM by frederic.chasse_1669321

    PWM delay needed after waking up?

    frederic.chasse_1669321

      Hi,

       

      I'm using the CYBLE-014008-00 and I've had some problems using a PWM module (UDB). I want to use the PWM as a single shot triggered by a Control Register module (i.e. triggered by firmware), and the clock used is LFCLK at 32.768 kHz.

       

      Everything was working fine in active mode and sleep mode, unless I used the functions PWM_Sleep() and PWM_Wakeup(). Then the PWM stopped working.

       

      I tried adding a 30us delay after PWM_Wakeup() and then it works! I can go to sleep and deepsleep with my system without problems.

       

      My question is: is this normal? Do the UDB modules (specifically the PWM) require a delay after waking up? If so, where can I see the specs? By trial and error, I found that I need ~6 microseconds delay after waking up from sleep, and ~40 microseconds after waking up from deep sleep.

       

      Thank you,

       

      Fred

        • 1. Re: PWM delay needed after waking up?
          ntan

          I assumed that your schematic is as follows.

           

          GS003334.png

           

          Please let me ask some questions.

           

          1) What is the output mode of the Control Register?  If Pulse mode is used, what is provided to the clock input?

          2) Control Register component has _Sleep/_Wakeup methods.  Did you use these APIs?  If you used, what is the calling order of these APIs?

           

          Regards,

          Noriaki

          • 2. Re: PWM delay needed after waking up?
            frederic.chasse_1669321

            Hi,

             

            You're right for the schematic, except the PWM is in 16 bits with only one output, and the reset input is forced at zero.

             

            The Control Reg mode is Sync mode, and the clock is HFCLK/2. The reset input is the TC output of the PWM.

             

            The order is as follows:

             

            // Wake up with WDT

            PWM_Wakeup();

            CR1_Wakeup();

            CyDelayUs(30);

            CR1_Write(1);

             

            // Do something, now ready to sleep

            CR1_Sleep();

            PWM_Sleep();

            CySysPmDeepSleep();

             

            I didn't think about it, but it's right that the Control Reg could be the culprit. However, when I was testing with only Sleep (not deep sleep), I used the API Sleep and Wakeup functions of the Control Reg, and the system worked well.

             

            Thank you for your time,

             

            Fred

            • 3. Re: PWM delay needed after waking up?
              ntan

              Thank you for clarification.  It seems that the PWM component does not accept a trigger until the first clock edge is provided.  If the problem is that the Control Register component is faster than the PWM component, please try to use same clock for the Control Register and the PWM components.  Following figure is my solution.  But I didn't try if the schematic works well because I have no hardware right now.

              GS003336.png

              The LFCLK is synchronized with the 24MHz (HFCLK/2) clock and drives both components.  The Control Register is configured as the Pulse mode to generate a one-shot pulse.

               

              Regards,

              Noriaki

              • 4. Re: PWM delay needed after waking up?
                e.pratt_1639216

                I believe the sleep/deep sleep modes also turn off the clocks to save power (depending on your firmware/code). Potentially, the clocks aren't quite ready for use/stable?

                I'm probably wrong with this, but I figured it was something worth thinking about.

                • 5. Re: PWM delay needed after waking up?
                  frederic.chasse_1669321

                  Thanks for the answer,

                   

                  That definitely is possible, I will try that next week! But won't it result in the same result as just adding a delay in firmware, just more precise?

                   

                  Also, does adding the Sync block consume more current?

                   

                  Fred

                  • 6. Re: PWM delay needed after waking up?
                    frederic.chasse_1669321

                    The sleep mode doesn't, but deep sleep does turn off the high frequency clocks. However, I didn't have problems with a timer that uses the same clock as the PWM, so I don't think the problem is the clock. Also, I use Clock_Disable() and Clock_Enable() when entering and exiting deep sleep, and I think there's code in those functions that ensures that the clock is stable.

                     

                    Thanks,

                     

                    Fred

                    • 7. Re: PWM delay needed after waking up?
                      e.pratt_1639216

                      Yeah, waiting for the clock to stabilize would be the same thing as a delay in firmware. If the timing varies, then you would  need to make a longer delay that isn't always necessary, but that depends on if and how much the timing varies

                      The Sync block might consume some power, but I would think it would be very small; A single AND gate at the transistor level would achieve the sync effect and would only use miniscule amounts of power.

                      (The documentation for the sync module should give you more direct information on the power consumption and specifications; Right-click on the module and select the open datasheets selection)

                      • 8. Re: PWM delay needed after waking up?
                        e.pratt_1639216

                        Have you tried putting the same clock for both the PWM and the Control_Reg as Noriaki suggested?

                        • 9. Re: PWM delay needed after waking up?
                          frederic.chasse_1669321

                          Not yet, I'll do it on Monday.