<?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 Having problem using PWM to control a servo motor. in S12 / MagniV Microcontrollers</title>
    <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199253#M8010</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am using a MC9S12DT256 with an E-clock of 8MHz, 8bit PWM.&lt;/P&gt;&lt;P&gt;the servo motor requires a period of 20ms with a minimum pulse of 0.7ms and a max pulse of 2.5ms.&lt;/P&gt;&lt;P&gt;The problem is that when I hook it up to the motor it just rotate left a little. (same rotation at 0.7ms and 2.5ms)&lt;/P&gt;&lt;P&gt;I can't seem to see where my code or calculations went wrong.&lt;BR /&gt;&lt;BR /&gt;I divided the 8Mhz clock by 10 to&amp;nbsp;get 0.8MHz(Scaled A), then divided that by 64 to get 12500HZ.&lt;/P&gt;&lt;P&gt;I want a 20ms period for the motor so my period register will be:&lt;BR /&gt;0.020=(1/12500)*PWMPERx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; which gives PWMPERx=250&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Then for the duty register I want 0.8ms out of 20 ms period which is a duty of&amp;nbsp; 4%&lt;BR /&gt;so 0.04=(250-PWMDTY0)/250&lt;BR /&gt;PWMDTY=240&lt;BR /&gt;&lt;BR /&gt;Any help is much appreciated.&lt;BR /&gt;&lt;BR /&gt;Here is my code:&lt;/P&gt;&lt;P&gt;================================================&lt;/P&gt;&lt;P&gt;#include &amp;lt;hidef.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include "derivative.h"&lt;/P&gt;&lt;P&gt;#include &amp;lt;mc9s12dt256.h&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void main(void) {&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;PWMCTL=0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 8bit pwm&lt;BR /&gt;&amp;nbsp;PWMSCLA=0x05;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp; A/(2*5) =SA&lt;BR /&gt;&amp;nbsp;PWMSCLB=0x05;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp; B/(2*5) =SB&lt;BR /&gt;&amp;nbsp;PWMCLK=0xff;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; // select scaled clock&lt;BR /&gt;&amp;nbsp;PWMPOL=0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start low&lt;BR /&gt;&amp;nbsp;PWMPRCLK=0x06;&amp;nbsp; &amp;nbsp;//&amp;nbsp; SA/64 = clock&lt;BR /&gt;&amp;nbsp;PWMCAE=0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // left aligned&lt;BR /&gt;&amp;nbsp;PWME=0xff;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// PWM enabled&lt;BR /&gt;&amp;nbsp;PWMPER0=0xfa;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 20ms=250/12500&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;PWMDTY0=0xf0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;EnableInterrupts;&lt;/P&gt;&lt;P&gt;&amp;nbsp;for(;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt;{&lt;/P&gt;&lt;P&gt;_FEED_COP();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;================================================&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 12 May 2010 01:06:40 GMT</pubDate>
    <dc:creator>sir_hs</dc:creator>
    <dc:date>2010-05-12T01:06:40Z</dc:date>
    <item>
      <title>Having problem using PWM to control a servo motor.</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199253#M8010</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I am using a MC9S12DT256 with an E-clock of 8MHz, 8bit PWM.&lt;/P&gt;&lt;P&gt;the servo motor requires a period of 20ms with a minimum pulse of 0.7ms and a max pulse of 2.5ms.&lt;/P&gt;&lt;P&gt;The problem is that when I hook it up to the motor it just rotate left a little. (same rotation at 0.7ms and 2.5ms)&lt;/P&gt;&lt;P&gt;I can't seem to see where my code or calculations went wrong.&lt;BR /&gt;&lt;BR /&gt;I divided the 8Mhz clock by 10 to&amp;nbsp;get 0.8MHz(Scaled A), then divided that by 64 to get 12500HZ.&lt;/P&gt;&lt;P&gt;I want a 20ms period for the motor so my period register will be:&lt;BR /&gt;0.020=(1/12500)*PWMPERx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; which gives PWMPERx=250&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Then for the duty register I want 0.8ms out of 20 ms period which is a duty of&amp;nbsp; 4%&lt;BR /&gt;so 0.04=(250-PWMDTY0)/250&lt;BR /&gt;PWMDTY=240&lt;BR /&gt;&lt;BR /&gt;Any help is much appreciated.&lt;BR /&gt;&lt;BR /&gt;Here is my code:&lt;/P&gt;&lt;P&gt;================================================&lt;/P&gt;&lt;P&gt;#include &amp;lt;hidef.h&amp;gt;&lt;/P&gt;&lt;P&gt;#include "derivative.h"&lt;/P&gt;&lt;P&gt;#include &amp;lt;mc9s12dt256.h&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;void main(void) {&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;PWMCTL=0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 8bit pwm&lt;BR /&gt;&amp;nbsp;PWMSCLA=0x05;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp; A/(2*5) =SA&lt;BR /&gt;&amp;nbsp;PWMSCLB=0x05;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;//&amp;nbsp; B/(2*5) =SB&lt;BR /&gt;&amp;nbsp;PWMCLK=0xff;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; // select scaled clock&lt;BR /&gt;&amp;nbsp;PWMPOL=0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // start low&lt;BR /&gt;&amp;nbsp;PWMPRCLK=0x06;&amp;nbsp; &amp;nbsp;//&amp;nbsp; SA/64 = clock&lt;BR /&gt;&amp;nbsp;PWMCAE=0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // left aligned&lt;BR /&gt;&amp;nbsp;PWME=0xff;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// PWM enabled&lt;BR /&gt;&amp;nbsp;PWMPER0=0xfa;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 20ms=250/12500&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;PWMDTY0=0xf0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;EnableInterrupts;&lt;/P&gt;&lt;P&gt;&amp;nbsp;for(;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt;{&lt;/P&gt;&lt;P&gt;_FEED_COP();&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;================================================&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 May 2010 01:06:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199253#M8010</guid>
      <dc:creator>sir_hs</dc:creator>
      <dc:date>2010-05-12T01:06:40Z</dc:date>
    </item>
    <item>
      <title>Re: Having problem using PWM to control a servo motor.</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199254#M8011</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello, and welcome to the forum.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My understanding of the servo device that you are using is that the pulse repetition interval is non-critical, but the rotation position of the servo is determined by the absolute period of the each pulse (between the limits 700 - 2500 microseconds).&amp;nbsp; This means that the PWM duty cycle will&amp;nbsp;fall within the range 3.5 - 12.5 percent.&amp;nbsp; If using the PWM module in 8-bit mode this will severely limit the servo position resolution to about 23 steps.&amp;nbsp; To achieve reasonable resolution will require that pairs of PWM channels will need to be configured to operate in 16-bit mode.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Aternatively, you might consider using the ECT module to generate the accurately timed pulses, with the pulse repetition rate perhaps determined by a periodic counter overflow&amp;nbsp;condition.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 May 2010 12:10:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199254#M8011</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2010-05-12T12:10:21Z</dc:date>
    </item>
    <item>
      <title>Re: Having problem using PWM to control a servo motor.</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199255#M8012</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for your help.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This time, I make another source by using 16-bit PWM. But still doesn't working.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is my new code. I can't find any wrong part.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;=========================&lt;/P&gt;&lt;P&gt;&amp;nbsp;PWMCTL=0x10;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 16-bit (ch0 &amp;amp; ch1)&lt;BR /&gt;&amp;nbsp;PWMCLK=0x00; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // select clk A&lt;BR /&gt;&amp;nbsp;PWMPOL=0x02;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;Polarity&lt;BR /&gt;&amp;nbsp;PWMPRCLK=0x06;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&amp;nbsp;8MHz / 64 = 125000Hz&lt;BR /&gt;&amp;nbsp;PWMCAE=0x00;&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;PWMSCLA=0x00;&lt;BR /&gt;&amp;nbsp;PWME=0x02;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // PWM Enabled&lt;BR /&gt;&amp;nbsp;PWMPER0=0x09;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// PWM period = 2500&lt;BR /&gt;&amp;nbsp;PWMPER1=0xc3;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;PWMDTY0=0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // PWM&amp;nbsp;duty=63&amp;nbsp;&amp;nbsp; (&amp;nbsp;for&amp;nbsp;2.5% duty cycle)&lt;BR /&gt;&amp;nbsp;PWMDTY1=0x3f;&lt;/P&gt;&lt;P&gt;========================&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 12 May 2010 17:28:32 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199255#M8012</guid>
      <dc:creator>sir_hs</dc:creator>
      <dc:date>2010-05-12T17:28:32Z</dc:date>
    </item>
    <item>
      <title>Re: Having problem using PWM to control a servo motor.</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199256#M8013</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Do you have any output pulses at all?&amp;nbsp; If so, I suggest that you check the pulse timing using an oscilloscope.&amp;nbsp; This may better reveal why the servo is not operating correctly.&amp;nbsp; Also is the output pulse of the correct polarity required by the servo?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I notice that you have setup a pulse width of 500 microseconds.&amp;nbsp; This is somewhat below the lower limit of the servo that you previously stated.&amp;nbsp; I might suggest that you start off with a mid-range value, such as 1500 microseconds.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It may also be useful to increase the clock frequency, by reducing the prescale divider.&amp;nbsp; This would further increase the resolution.&amp;nbsp; Perhaps a clock frequency of 1 MHz so that all period values are expressed directly in microseconds.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Mac&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 13 May 2010 20:21:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199256#M8013</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2010-05-13T20:21:59Z</dc:date>
    </item>
    <item>
      <title>Re: Having problem using PWM to control a servo motor.</title>
      <link>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199257#M8014</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN class="fnt_e09"&gt;&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="fnt_e09"&gt;&lt;EM&gt;The problem get solved.&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="fnt_e09"&gt;&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="fnt_e09"&gt;&lt;EM&gt;I certainly appreciate your helping me out. : )&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="fnt_e09"&gt;&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="fnt_e09"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="fnt_e09"&gt;&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN class="fnt_e09"&gt;&lt;EM&gt;&amp;nbsp;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 14 May 2010 17:12:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/S12-MagniV-Microcontrollers/Having-problem-using-PWM-to-control-a-servo-motor/m-p/199257#M8014</guid>
      <dc:creator>sir_hs</dc:creator>
      <dc:date>2010-05-14T17:12:04Z</dc:date>
    </item>
  </channel>
</rss>

