<?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中的主题 change PWM frequency</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/change-PWM-frequency/m-p/518283#M2600</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by juergen.zach@pentair.com on Fri Jul 26 17:56:58 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The code below sets up a simple 2-edged PWM signal. In my application, I need to change the frequency occasionally, which is what I THINK I am doing in the main loop, but the only change is the duty cycle. That is, the frequency always remains to what it was set at the beginning (1kHz), and only the "on" duty cycle is commensurate with the 2kHz I'm switching it to. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any ideas, anything I'm obviously forgetting here?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;--J.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
#include "LPC17xx.h"

float duty; 
int PWMclock; 
int PWMrate; 
float frequency; 

 
int main() 
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; int PWMwidth, PWMhalf, PWMrising, PWMfalling;&amp;nbsp;&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp; duty = 50.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency = 1000.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMclock = SystemCoreClock / 4;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrate = PWMclock / frequency; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PINCON-&amp;gt;PINSEL4 |= 0x00000040;&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; // Set P2.3 for PWM1.4
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MCR |= 0x00000002; // Reset PWM0 on match

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set up match registers
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR0 = PWMrate; // Set MR0 (PWM rate)

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;PCR |= 0x00000010; // Select double edge PWM for PWM4

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;PCR |= 0x00001000; // Enable PWM4

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;TCR |= 0x08; // Enable PWM mode
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;TCR |= 0x01; // Enable counter
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //pwmChg.attach_us(&amp;amp;pwmupdate, 100000);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency = 1000.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrate = PWMclock / frequency; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR0 = PWMrate; // Set MR0 (PWM rate)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMwidth = (duty * PWMrate) / 100;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMhalf = PWMwidth / 2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWMrising = PWMrate - PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWMfalling = PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMfalling = PWMrate - PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrising = PWMhalf;&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; LPC_PWM1-&amp;gt;MR3 = PWMrising; // Set rising edge
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR4 = PWMfalling; // Set falling edge
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;LER |= 0x18; // Enable PWM Match 3 &amp;amp; 4 latch
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i; i&amp;lt;10000000;i++){}
&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; frequency = 2000.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrate = PWMclock / frequency; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR0 = PWMrate; // Set MR0 (PWM rate)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMwidth = (duty * PWMrate) / 100;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMhalf = PWMwidth / 2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWMrising = PWMrate - PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWMfalling = PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMfalling = PWMrate - PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrising = PWMhalf;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR3 = PWMrising; // Set rising edge
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR4 = PWMfalling; // Set falling edge
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;LER |= 0x18; // Enable PWM Match 3 &amp;amp; 4 latch
&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; for (int i; i&amp;lt;10000000;i++){}&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; }
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 17:33:20 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T17:33:20Z</dc:date>
    <item>
      <title>change PWM frequency</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/change-PWM-frequency/m-p/518283#M2600</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by juergen.zach@pentair.com on Fri Jul 26 17:56:58 MST 2013&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;The code below sets up a simple 2-edged PWM signal. In my application, I need to change the frequency occasionally, which is what I THINK I am doing in the main loop, but the only change is the duty cycle. That is, the frequency always remains to what it was set at the beginning (1kHz), and only the "on" duty cycle is commensurate with the 2kHz I'm switching it to. &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Any ideas, anything I'm obviously forgetting here?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;--J.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV class="j-rte-table"&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca" style="border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;background-color:#cacaca;border:1px solid black;"&gt; &lt;PRE&gt;
#include "LPC17xx.h"

float duty; 
int PWMclock; 
int PWMrate; 
float frequency; 

 
int main() 
{
&amp;nbsp;&amp;nbsp;&amp;nbsp; int PWMwidth, PWMhalf, PWMrising, PWMfalling;&amp;nbsp;&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp; duty = 50.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency = 1000.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMclock = SystemCoreClock / 4;
&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrate = PWMclock / frequency; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PINCON-&amp;gt;PINSEL4 |= 0x00000040;&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; // Set P2.3 for PWM1.4
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MCR |= 0x00000002; // Reset PWM0 on match

&amp;nbsp;&amp;nbsp;&amp;nbsp; // Set up match registers
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR0 = PWMrate; // Set MR0 (PWM rate)

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;PCR |= 0x00000010; // Select double edge PWM for PWM4

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;PCR |= 0x00001000; // Enable PWM4

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;TCR |= 0x08; // Enable PWM mode
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;TCR |= 0x01; // Enable counter
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; //pwmChg.attach_us(&amp;amp;pwmupdate, 100000);
 
&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; frequency = 1000.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrate = PWMclock / frequency; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR0 = PWMrate; // Set MR0 (PWM rate)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMwidth = (duty * PWMrate) / 100;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMhalf = PWMwidth / 2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWMrising = PWMrate - PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWMfalling = PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMfalling = PWMrate - PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrising = PWMhalf;&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; LPC_PWM1-&amp;gt;MR3 = PWMrising; // Set rising edge
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR4 = PWMfalling; // Set falling edge
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;LER |= 0x18; // Enable PWM Match 3 &amp;amp; 4 latch
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (int i; i&amp;lt;10000000;i++){}
&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; frequency = 2000.0;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrate = PWMclock / frequency; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR0 = PWMrate; // Set MR0 (PWM rate)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMwidth = (duty * PWMrate) / 100;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMhalf = PWMwidth / 2;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWMrising = PWMrate - PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //PWMfalling = PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMfalling = PWMrate - PWMhalf;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PWMrising = PWMhalf;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR3 = PWMrising; // Set rising edge
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;MR4 = PWMfalling; // Set falling edge
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_PWM1-&amp;gt;LER |= 0x18; // Enable PWM Match 3 &amp;amp; 4 latch
&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; for (int i; i&amp;lt;10000000;i++){}&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; }
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 17:33:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/change-PWM-frequency/m-p/518283#M2600</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T17:33:20Z</dc:date>
    </item>
  </channel>
</rss>

