Interfacing PWM with LPC2148 ARM

advertisement
ARM HOW-TO GUIDE
Interfacing PWM with
LPC2148 ARM
Contents at a Glance
ARM7 LPC2148 Primer Board ...........................................3
PWM (Pulse Width Modulation) ......................................3
Interfacing PWM .............................................................4
Interfacing PWM with LPC2148 ........................................5
Pin Assignment with LPC2148 ..........................................5
Circuit Diagram to Interface PWM with LPC2148 ..............6
Source Code ....................................................................6
C Program to generate PWM in LPC2148 ..........................7
Testing the PWM with LPC2148 .......................................9
General Information ...................................................... 10
Join the Technical Community Today!
http://www.pantechsolutions.net
ARM7 LPC2148 Primer Board
The ARM7 LPC2148 Primer board is specifically
designed to help students to master the required skills in
the area of embedded systems. The kit is designed in such
way that all the possible features of the microcontroller will
be easily used by the students. The kit supports in system
programming (ISP) which is done through serial port.
NXP’s ARM7 (LPC2148), ARM Primer Kit is proposed to
smooth the progress of developing and debugging of
various designs encompassing of High speed 32-bit
Microcontrollers.
PWM (Pulse Width Modulation)
Pulse width modulation (PWM) is a powerful technique
for controlling analog circuits with a processor's digital
outputs. PWM is employed in a wide variety of applications,
ranging from measurement and communications to power
control and conversion.
Join the Technical Community Today!
http://www.pantechsolutions.net
Interfacing PWM
Figure 1 shows four different PWM signals. One is PWM
output at a 25% duty cycle. That is, the signal is on for 25%
of the period and off the other 75%. Next shows PWM
output at 50%, 75% and 100% duty cycles, respectively.
These three PWM outputs encode three different analog
signal values, at 10%, 50%, and 90% of the full strength.
Fig. 1 PWM Outputs
Join the Technical Community Today!
http://www.pantechsolutions.net
Interfacing PWM with LPC2148
We now want to generate a PWM in LPC2148 Primer
Board at a particular frequency. Pulse Width Modulation is
a technique for getting analog results with digital means.
Digital control is used to create a square wave, a signal
switched between on and off. This on-off pattern can
simulate voltages in between full on (5 Volts) and off (0
Volts) by changing the portion of the time the signal spends
on versus the time that the signal spends off. The duration
of "on time" is called the pulse width. To get varying analog
values, you change, or modulate, that pulse width.
OUTPUTS
Pin Assignment with LPC2148
PWMs
LPC2148 Lines
PWM1
P0.0
PWM3
P0.1
Join the Technical Community Today!
http://www.pantechsolutions.net
Circuit Diagram to Interface PWM with LPC2148
U16
6
18
25
42
50
59
VSS1
VSS2
VSS3
VSS4
VSS5
VSSA
VREF
VDD1
VDD2
VDD3
VDDA
63
51
43
23
7
3.3V
TP4
P0.1
21
1
PWM3
PWM3
1
LPC2148
TP3
XTAL1
TP5
1
PWM1
62
61
XTAL2
P0.0
19
12MHz
C64
22pf
X27
C65
22pf
Source Code
The Interfacing PWM with LPC2148 program is very
simple and straight forward, which generates a pulse
pattern in a particular frequency. An ADC signal is used to
varying the duty cycle of PWM signal. The C program is
written in Keil software.
Join the Technical Community Today!
http://www.pantechsolutions.net
C Program to generate PWM in LPC2148
***************************************************************************************
Title
: Program to generate PWM
***************************************************************************************
#include<LPC214x.h>
#include <stdio.h>
// Define LPC2148 Header File
void PWM0_isr(void) __irq
{
PWMIR
|= 0x00000001; // Clear match0 interrupt
VICVectAddr = 0x00000000;
}
int main (void)
{
unsigned long val;
unsigned long oldval = 0;
VPBDIV
=
0x02;
PINSEL0
|=
0x00050000;
PINSEL1
=
0x15400000;
init_PWM();
U1LCR
=
0x83;
U1DLL
=
0xC3;
U1LCR
=
0x03;
AD0CR
= 0x00230608; // Setup A/D: 10-bit AIN0 @3MHz
AD0CR |= 0x01000000; // Start A/D Conversion
while (1)
{
// Loop forever
do
{
val = AD0GDR;
/* Read A/D Data Register */
}
while ((val & 0x80000000) == 0);
val = ((val >> 6) & 0x3FF); // Extract AIN0 Value
Join the Technical Community Today!
http://www.pantechsolutions.net
Delay (); Delay();
if (val != oldval)
{
PWMMR2
=
val;
PWMLER
=
0xF;
oldval
=
val;
printf ("Val : %4d \n\r", val);
}
}
}
void init_PWM (void)
{
VICVectAddr8 = (unsigned)PWM0_isr; //PWM ISR vec.addr
VICVectCntl8 = 0x00000028;
// Set channel
VICIntEnable = 0x00000100;
// Enable the interrupt
PINSEL0 |= 0x00008008;
// Enable P0.7&P0.1-PWM
PWMPR
= 0x00000000;
// Load prescaler
PWMPCR = 0x00000C0C;
/* PWM channel 2 & 3 double edge control */
PWMMCR = 0x00000003; // reset the counter
PWMMR0 = 0x400;
// set dutycycle is sixteen ticks
PWMMR1 = 0;
// rising edge of PWM2– 100 tricks
PWMMR2 = 0x200; // falling edge of PWM2- 200 ticks
PWMMR3 = 0x100; // rising edge of PWM2– 100 tricks
PWMLER = 0xF;
// shadow latch for match 1 – 3
PWMTCR = 0x00000002; // Reset counter and prescaler
PWMTCR = 0x00000009; // release counter from reset
}
void Delay ()
{
unsigned int i,j;
for (i=0;i<250;i++)
for (j=0;j<700;j++);
}
Join the Technical Community Today!
http://www.pantechsolutions.net
To compile the above C code you need the KEIL
software. They must be properly set up and a project with
correct settings must be created in order to compile the
code. To compile the above code, the C file must be added
to the project.
In Keil, you want to develop or debug the project
without any hardware setup. You must compile the code for
generating HEX file. In debugging Mode, you want to check
the port output without LPC2148 Primer Board.
The Flash Magic software is used to download the hex
file into your microcontroller IC LPC2148 through UART0.
Testing the PWM with LPC2148
Give +3.3V power supply to LPC2148 Primer Board; the
PWM port line is connected in LPC2148 Primer Board.
When the program is downloading into LPC2148 in Primer
Board, the PWM output is generating at a particular
frequency.
Join the Technical Community Today!
http://www.pantechsolutions.net
If you are not reading any PWM output, then you just
check the jumper connections. Otherwise you just check it
with debugging mode in Keil. If you want to see more
details about debugging just see the videos in below link.
 How to Create & Debug a Project in Keil.
General Information
For proper working use the components of exact values
as shown in Circuit file. Wherever possible use new
components.
Solder everything in a clean way. A major problem
arises due to improper soldering, solder jumps and
loose joints.
Use the exact value crystal shown in schematic.
More instructions are available in following articles,
 User Manual of LPC2148 Primer Board.
 Tutorial of how to create & Debug a project in Keil.
Join the Technical Community Today!
http://www.pantechsolutions.net
Did you enjoy the read?
Pantech solutions creates information packed technical
documents like this one every month. And our website is a rich
and trusted resource used by a vibrant online community of
more than 1,00,000 members from organization of all shapes
and sizes.
Join the Technical Community Today!
http://www.pantechsolutions.net
What do we sell?
Our products range from Various Microcontroller
development boards, DSP Boards, FPGA/CPLD boards,
Communication Kits, Power electronics, Basic electronics,
Robotics, Sensors, Electronic components and much more . Our
goal is to make finding the parts and information you need
easier and affordable so you can create awesome projects and
training from Basic to Cutting edge technology.
Join the Technical Community Today!
http://www.pantechsolutions.net
Download