<?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>LPC MicrocontrollersのトピックRe: PWM question on LPC12xx</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/PWM-question-on-LPC12xx/m-p/526305#M8935</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by gclaudiu on Sat Sep 21 19:10:27 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Ok, the solution that works is pretty simple:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
if(speed &amp;lt; 0){
LPC_CT32B0-&amp;gt;MCR = 1&amp;lt;&amp;lt;10;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // use MR3 to reset TC

LPC_CT32B0-&amp;gt;MR2 = MAXSPEED + speed;

LPC_CT32B0-&amp;gt;MR3 = MAXSPEED;
} else {
LPC_CT32B0-&amp;gt;MCR = 1&amp;lt;&amp;lt;7;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // use MR2 to reset TC

LPC_CT32B0-&amp;gt;MR3 = MAXSPEED - speed;

LPC_CT32B0-&amp;gt;MR2 = MAXSPEED;
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there any other option like using all 4 pins for PWM? Any suggestion?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:01:39 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:01:39Z</dc:date>
    <item>
      <title>PWM question on LPC12xx</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/PWM-question-on-LPC12xx/m-p/526304#M8934</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by gclaudiu on Fri Sep 20 10:30:16 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi there, &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am working on a small project and I need to control 2 motors using PWM. My question is if I can use 4 PWM outputs on the same timer (CT32B1)?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using PIO0_6 (MAT0 )and PIO0_7 (MAT1) for 1 motor and PIO0_8 (MAT2) and PIO0_9 (MAT3) for another motor.&amp;nbsp; My initialisation code looks like:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Power on 32-bit timers
LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL |= (1&amp;lt;&amp;lt;10);

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;= ~0x07;
LPC_IOCON-&amp;gt;PIO0_6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |=&amp;nbsp; 0x04;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //C32B1_MAT0

LPC_IOCON-&amp;gt;PIO0_7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;= ~0x07;
LPC_IOCON-&amp;gt;PIO0_7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |=&amp;nbsp; 0x04;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //C32B1_MAT1

LPC_IOCON-&amp;gt;PIO0_8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;= ~0x07;
LPC_IOCON-&amp;gt;PIO0_8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |=&amp;nbsp; 0x04;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //C32B1_MAT2

LPC_IOCON-&amp;gt;PIO0_9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;= ~0x07;
LPC_IOCON-&amp;gt;PIO0_9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |=&amp;nbsp; 0x04;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //C32B1_MAT3

/// Setup the external match register
LPC_CT32B0-&amp;gt;EMR = (1&amp;lt;&amp;lt;EMC0) | MATCH0 | (1&amp;lt;&amp;lt;EMC1) | MATCH1 | (1&amp;lt;&amp;lt;EMC2) | MATCH2 | (1&amp;lt;&amp;lt;EMC3) | MATCH3;


/// Set prescaler
LPC_CT32B0-&amp;gt;PR&amp;nbsp; = ((SystemCoreClock/PWM_FREQUENCY)/1024)-1;

/* Enable the selected PWMs */
LPC_CT32B0-&amp;gt;PWMC = MATCH3 | MATCH0 | MATCH1 | MATCH2;

/// Set PWM period on MATCH3
LPC_CT32B0-&amp;gt;MR3 = MAXSPEED;

LPC_CT32B0-&amp;gt;MR0 = 0x00;

/// Set match control register
LPC_CT32B0-&amp;gt;MCR = 1&amp;lt;&amp;lt;10;

/// Reset pwm
LPC_CT32B0-&amp;gt;TCR = 0x02;

/// Enable pwm
LPC_CT32B0-&amp;gt;TCR = 0x01;
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Code to control 1 motor is working fine:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
if(speed &amp;lt; 0){
LPC_CT32B0-&amp;gt;MR0 = -speed;

LPC_CT32B0-&amp;gt;MR1 = 0;&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; // can be either "1" or "0"
} else {
LPC_CT32B0-&amp;gt;MR1 = speed;

LPC_CT32B0-&amp;gt;MR0 = 0;&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; // can be either "1" or "0"
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can't use the same code on the second motor because I do not know how to control the MAT3 output. I thought of using MCR and and use MR2 to reset TC and free up the MAT3 when changing the direction as MAT2 can be either "1" or "0" when I have PWM on MAT3. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;May be a silly question, but I did try to look for a solution and I am stuck. Unfortunately I can not change the board to use other timers.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any suggestion will really be appreciated!&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thankks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Claudiu&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:01:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/PWM-question-on-LPC12xx/m-p/526304#M8934</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:01:38Z</dc:date>
    </item>
    <item>
      <title>Re: PWM question on LPC12xx</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/PWM-question-on-LPC12xx/m-p/526305#M8935</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by gclaudiu on Sat Sep 21 19:10:27 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Ok, the solution that works is pretty simple:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
if(speed &amp;lt; 0){
LPC_CT32B0-&amp;gt;MCR = 1&amp;lt;&amp;lt;10;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // use MR3 to reset TC

LPC_CT32B0-&amp;gt;MR2 = MAXSPEED + speed;

LPC_CT32B0-&amp;gt;MR3 = MAXSPEED;
} else {
LPC_CT32B0-&amp;gt;MCR = 1&amp;lt;&amp;lt;7;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // use MR2 to reset TC

LPC_CT32B0-&amp;gt;MR3 = MAXSPEED - speed;

LPC_CT32B0-&amp;gt;MR2 = MAXSPEED;
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there any other option like using all 4 pins for PWM? Any suggestion?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:01:39 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/PWM-question-on-LPC12xx/m-p/526305#M8935</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:01:39Z</dc:date>
    </item>
  </channel>
</rss>

