Application Notes

AN10661
Brushless DC motor control using the LPC2141
Rev. 01 — 17 October 2007
Application note
Document information
Info
Content
Keywords
LPC2148, ARM7, Brushless DC motor control
Abstract
This application note demonstrates the use of a low cost ARM7 based
LPC2141 microcontroller for sensored brushless DC motor control.
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
Revision history
Rev
Date
Description
01
20071017
Initial version.
Contact information
For additional information, please visit: http://www.nxp.com
For sales office addresses, please send an email to: [email protected]
AN10661_1
Application note
© NXP B.V. 2007. All rights reserved.
Rev. 01 — 17 October 2007
2 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
1. Introduction
This application note demonstrates the use of a low cost NXP Semiconductors LPC2141
microcontroller for brushless DC motor control. It may be used as a starting point for
motor control system designers using an NXP LPC2000 microcontroller.
The LPC2141 is based on a 16/32-bit ARM7 CPU combined with embedded high-speed
flash memory. A superior performance as well as their tiny size, low power consumption
and a blend of on-chip peripherals make these devices ideal for a wide range of
applications. Various 32-bit timers, 10-bit ADC and PWM features through output match
on all timers, make them particularly suitable for industrial control. Main reason to use the
LPC2141 for this reference design (see Fig 1) is the on-chip USB interface, which is used
to communicate with a PC GUI (Graphical User Interface) controlling the motor.
Besides the use of an LPC2141, the reference design in this application note shows a
complete motor control system solution from NXP Semiconductors in terms of NXP
Microcontroller – NXP MOSFET driver – NXP MOSFET.
Brushless DC (Direct Current) motors are most commonly used in easy to drive, variable
speed and long life applications. They have become widespread and are available in all
shapes and sizes from large-scale industrial models to small motors for light applications
(such as 12 V BLDC motors).
Applications:
Air conditioners, electric pumps, fans, printers, robots, electric bikes, -doors, -windows, sun roofs, -seats, mixers, food processors, blenders, vacuum cleaners, toothbrushes,
razors, coffee grinders, etc.
Gate driver
PWM
Signals
Speed
Command
MOSFET
driver
Control uC
Motor
Sensors
• Speed
• Current
• Position
Fig 1. Controller (green) and Power (blue) demo boards for BLDC motor application
AN10661_1
Application note
© NXP B.V.2007. All rights reserved.
Rev. 01 — 17 October 2007
3 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
2. Brushless DC motor fundamentals
Brushless DC motors consist of a permanent magnet rotor with a three-phase stator
winding. As the name implies, BLDC motors do not use brushes for commutation;
instead, they are electronically commutated. Typically three Hall sensors (see Fig 2) are
used to detect the rotor position and commutation is based on these sensor inputs.
Brushless DC (BLDC) motors are rapidly gaining popularity. They offer longer life and
less maintenance than conventional brushed DC motors. Some other advantages over
brushed DC motors and induction motors are: better speed versus torque characteristics,
noiseless operation and higher speed ranges. And in addition, the ratio of torque
delivered to the size of the motor is higher, making them useful in applications where
space and weight are critical factors.
In a brushless DC motor, the electromagnets do not move; instead, the permanent
magnets rotate and the three-phase stator windings remain static (see Fig 2). This gets
around the problem of how to transfer current to a moving rotor. In order to do this, the
brush-commutator assembly is replaced by an intelligent electronic “controller”. The
controller performs the same power distribution as found in a brushed DC motor, but is
using a solid-state circuit rather than a commutator/brush system.
The speed and torque of the motor depend on the strength of the magnetic field
generated by the energized windings of the motor, which depend on the current through
them. Therefore adjusting the rotor voltage (and current) will change the motor speed.
Fig 2. Brushless DC motor
AN10661_1
Application note
© NXP B.V.2007. All rights reserved.
Rev. 01 — 17 October 2007
4 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
3. How to control a brushless DC motor
3.1 Rotation
A BLDC motor is driven by voltage strokes coupled with the given rotor position. These
voltage strokes must be properly applied to the active phases of the three-phase winding
system so that the angle between the stator flux and the rotor flux is kept close to 90° to
get the maximum generated torque. Therefore, the controller needs some means of
determining the rotor's orientation/position (relative to the stator coils.)
In our design we use Hall effect sensors (some use a rotary encoder, others sense the
back EMF in the un-driven coils) to directly measure the rotor's position. Each sensor
element outputs a high level for 180° of an electrical rotation, and a low level for the other
180°. The three sensors have a 60° relative offset from each other. This divides a
rotation into six phases (3-bit code). Fig 3 and Fig 4 show the relationship between the
Hall sensor input code and the required active motor windings.
Commutator
Armature Windings
Q1
Q2
Hall Sensor code
Phase #
101
1
Q1 (PWM1)
Q6 (PWM6)
100
2
Q1 (PWM1)
Q5 (PWM5)
110
3
Q3 (PWM3)
Q5 (PWM5)
010
4
Q3 (PWM3)
Q4 (PWM4)
011
5
Q2 (PWM2)
Q4 (PWM4)
001
6
Q2 (PWM2)
Q6 (PWM6)
Q3
Three phase
bridge
Q4
Q5
Active drive
Q6
Fig 3. Three phase bridge and sensor input by active switch table
Vm
Vm
Vm
PWM1
Q1
OFF
Q2
OFF
Q3
PWM1
Q1
OFF
Q2
OFF
Q3
OFF
Q1
OFF
Q2
PWM3
Q3
OFF
Q4
OFF
Q5
PWM3
Q6
OFF
Q4
PWM5
Q5
OFF
Q6
OFF
Q4
PWM5
Q5
OFF
Q6
Vm
Vm
Vm
OFF
Q1
OFF
Q2
PWM3
Q3
OFF
Q1
PWM2
Q2
OFF
Q3
OFF
Q1
PWM2
Q2
OFF
Q3
PWM4
Q4
OFF
Q5
OFF
Q6
PWM4
Q4
OFF
Q5
OFF
Q6
OFF
Q4
OFF
Q5
PWM6
Q6
Fig 4. Motor rotation Q1 to Q6 switch sequence
AN10661_1
Application note
© NXP B.V.2007. All rights reserved.
Rev. 01 — 17 October 2007
5 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
3.2 Speed control
By simply varying the voltage across the motor, one can control the speed of the motor.
When using PWM outputs to control the six switches of the three-phase bridge, variation
of the motor voltage can be achieved easily by changing the duty cycle of the PWM
signal (see Fig 5).
Vm
duty cycle
PWM1
Q1
Q2
Q3
Q4
Q5
Q6
Fig 5. PWM speed control
3.3 Motor feedback
3.3.1 Current sense
Low cost motor current measuring can be implemented (like in this application note)
using a current sensing resistor between the switching MOSFETs and ground (see also
block diagram Fig 6). The small voltage appearing across the current sense resistor is
filtered and amplified, before being fed to an ADC input of the microcontroller.
Like in this application note measuring the motor current is often used as a safety. In
case the motor is in a stalled position, the current will increase dramatically. Due to this
exceptional increase in current, the ADC values will reach a current limit level that will
cause the system to shut down, avoiding any damages (switch into ‘coast’ mode).
3.3.2 RPM measurement
For closed loop speed control the ‘real’ motor speed must be known. By having the Hall
sensor signals available at the LPC2141 microcontroller input pins, they can easily be
“misused” for exact motor speed (RPM) measurement.
One possible way for example is to connect the Hall sensor outputs to external interrupt
input pins of the microcontroller. This results in having an interrupt every 60° degrees of
an electrical rotation. By simply counting the number of interrupts within a certain exact
time (for example 1 second) it’s easy to calculate the exact motor speed.
Another possibility is to connect the sensor signals to Timer Capture inputs of the
microcontroller. This way the exact time is measured between every rotation phase
change.
AN10661_1
Application note
© NXP B.V.2007. All rights reserved.
Rev. 01 — 17 October 2007
6 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
4. Application setup
FET drivers
PWM
PWM
12V
PWM
Q1
Q2
Q3
BLDC Motor
M
Q4
Q5
Q6
HALL Sensors
PWM
N
S
PWM
S
N
PWM
USB
USB
CAP
CAP
CAP
GPI
GPI
GPI
Gain Amp
AIN
Im
LPC2141
Fig 6. Block diagram
4.1 Using the LPC2141
For this application note the LPC2141 is used (see Fig 6), mainly because of its sixchannel PWM timer and the on-chip USB interface. Available in an LQFP64 package it is
a small and cheap member of NXP’s ARM7 based LPC2000 family. It offers high speed
(60 MHz) 32-bit CPU performance, 8 kB of on-chip static RAM and 32 kB of on-chip flash
program memory. For larger memory - or additional specific peripheral (CAN, Ethernet,
etc.) requirements, a broad selection of (compatible) NXP - LPC2000 family members
are available. To give an impression of the possibilities this microcontroller offers, for this
application note:
−
CPU load is less than 5 %, used code size is 6 kB (including USB communication)
−
Unused peripherals: UART, I2C, SPI/SSP, RTC, 2 x Timer and 5 x A/D input
−
Over 30 unused GPIO pins available for user’s application
4.2 Motor selection
For this application note a 120 W Maxon EC-40 motor is used. The ‘no-load’ speed is
5900 RPM at 24 V input. The maximum continuous current is 6 A.
AN10661_1
Application note
© NXP B.V.2007. All rights reserved.
Rev. 01 — 17 October 2007
7 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
4.3 MOSFET selection
The NXP Semiconductors PH20100S N-channel TrenchMOS logic level FET is used for
this system. It is chosen in relation with the selected motor, which is supplied with 24 V.
For a 24 V - supplied motor, the MOSFET VDS needs to be at least 40 V, while the drain
current needs to be high enough to deal with the motor (starting) current. The latter is
already reduced thanks to a soft-acceleration mechanism (in small steps up towards the
required speed) implemented in software. The PH20100S can deal with a maximum
drain current of 34.3 Amps and a peak current of 137 Amps and is available in an SMD
SOT669 (LFPAK) package (see Fig 7).
4.4 MOSFET driver selection
MOSFET drivers are needed to raise the controller’s output signal (driving the MOSFET)
to the motor supply voltage level. In this application note we selected the PMD3001D and
the PMGD400UN from NXP Semiconductors, as shown in Fig 7.
Vcc
Dbst
Cbst
Qa
M1
SOT669 (LFPAK) package
To motor winding
M1, M2 = 2 x LFPAK: PH20100S
Qa, Qb = 2 x PMD3001D
M1s
= 1 x PMGD400UN
Dbst
= 1 x BAS16VY
3V6
PWM_HS
Qb
M1s
M2
PWM_LS
Fig 7. Simplified MOSFET – driver diagram for low and high side driver
4.5 Adjusting motor speed
The LPC2141 has an on-chip six-channel (32-bit) PWM timer, which makes it ideal for
using it to control a three-phase bridge. Values for desired motor speed are received via
the USB interface
AN10661_1
Application note
© NXP B.V.2007. All rights reserved.
Rev. 01 — 17 October 2007
8 of 18
32
28
64
24
56
52
60
20
47K
3V3
57
RSTn
100n
P1.16
P1.17
P1.18
P1.19
P1.20
P1.21
P1.22
P1.23
33e
11
10
DD+
LPC2141
PWM4 / P0.8
PWM6 / P0.9
P0.10
P0.11
P0.12
P0.13
P0.14
P0.15
P0.16
P0.17
P0.18
P0.19
P0.20
PWM5 / P0.21
P0.22
P0.23
19
21
22
26
27
29
30
31
PWM_1
33
34
35
37
38
39
41
45
PWM_4
PWM_6
PWM_3
PWM_2
47K
3V3
46
47
53
54
55
1
2
58
HAL_A
HAL_B
HAL_C
PWM_5
33e
18p
18p
AD0.4 / P0.25
1K5
USB
6
3 2
5
4 1
CAP0.2 / P0.28
CAP0.3 / P0.29
CAP0.0 / P0.30
P0.31
LD1117S33
5V
IN
+
3V3
OUT
GND
49
63
23
43
51
7
Imotor
9
13
14
15
17
Vbat
Vref
Vdd
Vdd
Vdd
Vdda
+
100n
10u
100n
100n
100n
10u
XTAL1
Fig 8. Hardware schematics – controller part
Vss
Vss
Vss
Vss
Vss
Vssa
XTAL2
62
61
12MHz
RTXC1
RTXC2
3
5
22p
22p
AN10661
9 of 18
© NXP B.V. 2007. All rights reserved.
6
18
25
42
50
59
Brushless DC motor control using the LPC2141
Rev. 01 — 17 October 2007
16
12
8
4
48
44
40
36
PWM1 / P0.0
PWM3 / P0.1
P0.2
P0.3
P0.4
P0.5
P0.6
PWM2 / P0.7
P1.24
P1.25
P1.27
P1.26
P1.29
P1.30
P1.28
P1.31
NXP Semiconductors
AN10661_1
Application note
5. Hardware schematics
NXP Semiconductors
AN10661_1
Application note
12 - 24V
5V
BAS16
10K
100n
1K
10E
Q1
PH20100S
Q3
PH20100S
3V6
PMD3001D
Q2
PH20100S
1K
BAS21
Same as Q1
FET driver
PWM_3
Same as Q1
FET driver
PWM_2
PWM_1
W1
W2
W3
PMBF170
Hall Sensor
10K
10K
10E
Q4
PH20100S
Q6
PH20100S
PMGD400UN
PMD3001D
PWM_4
Q5
PH20100S
BAS21
+
A
B
C
-
5V
HAL_A
HAL_B
HAL_C
Same as Q4
FET driver
PWM_6
Same as Q4
FET driver
PWM_5
LM358
+
1K
100K
1K
10u
+
AN10661
10 of 18
© NXP B.V. 2007. All rights reserved.
Fig 9. Hardware schematics – power / motor part
BAS21
10K
100n
0.01E
Imotor
Brushless DC motor control using the LPC2141
Rev. 01 — 17 October 2007
5V
Motor windings
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
6. Software
The software for the complete demo contains three main parts: User Interface (GUI),
USB driver and the Motor Control application code.
6.1 User interface
A WindowsⓇ user interface is available to control the BLDC demo (see Fig 10). The
program is called “BLDC_USBGUI.EXE” and is developed in Microsoft Visual Basic 2005
Express, so it needs the Microsoft .NET framework installed at your PC. The program
offers easy control of speed and readouts of motor current and RPM.
Fig 10. Windows user interface screen
6.2 USB device driver
For USB communication Keil’s LPC2148 USB HID (human interface device) software
example is used. For more information please check website of Keil.
6.3 BLDC Motor Control code
The example software is written in C language and compiled using Keil’s uVision (ARM7
RealView, V3.0) free demo compiler. It performs following main tasks:
•
USB interface for receiving desired speed, sending motor current and measure and
send calculated RPM
•
Read and ‘guard’ the motor current, using 10-bit ADC input
•
Use Timer 1 to generate a system-interrupt every 10 milliseconds.
•
Motor commutation by reading Hall sensors (using Timer 0 input capture pins), set
the PWM Timer duty cycle for speed and drive Q1-Q6 MOSFET outputs for control of
the three-phase bridge.
AN10661_1
Application note
© NXP B.V. 2007. All rights reserved.
Rev. 01 — 17 October 2007
11 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
7. Source code listings
The motor control part consists of five modules (bldc.c – adc.c – pwm.c – hsensor.c
timer1.c) and a header file (bldc.h), all listed below. The USB modules from Keil’s HID
example are not listed in this application note. For LPC2141 configuration the standard
startup code from Keil was used and set as CCLK = PCLK = 60 MHz.
7.1 BLDC.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <LPC214x.H>
#include "bldc.h"
unsigned char actualSpeed = 0;
unsigned char desiredSpeed = 0;
unsigned int RPM,fRPM;
void GetInReport(unsigned char *rep)
{
rep[0] = fRPM;
rep[1] = fRPM >> 8;
rep[2] = AD0DR4 >> 8;;
}
void SetOutReport(unsigned char *rep)
{
if (rep[0] < 101)
desiredSpeed = rep[0];
}
int main (void)
{
ADC0_Init();
T1_Init();
PWM_Init();
HES_Init();
USB_Init();
USB_Connect(1);
while (1)
{
if (((AD0DR4 >> 8) & 0xFF) > MAX_Im)
{
VICIntEnClr = 0xFFFFFFFF;
PWMMR1 = 0;
PWMMR2 = 0;
PWMMR3 = 0;
PWMMR4 = 0;
PWMMR5 = 0;
PWMMR6 = 0;
PWMLER = 0x7F;
while (1) ;
}
AN10661_1
Application note
// LPC214x definitions
// Host is asking for an InReport
// send measured motor speed (low byte)
// send measured motor speed (high byte)
// send potm value for debugging
// OutReport received from USB host
// New desired speed value received
// ADC0 Initialization
// 10 msec tick
// PWM Timer Initialization
// USB Initialization
// USB Connect
// Loop forever
// Check motor overcurrent
//
//
//
//
//
//
//
//
//
disable all interrupts!
Q1 off
Q2 off
Q3 off
Q4 off
Q5 off
Q6 off
enable PWM0-PWM6 match latch (reload)
wait for a RESET
© NXP B.V. 2007. All rights reserved.
Rev. 01 — 17 October 2007
12 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
if (f_10ms)
{
f_10ms = 0;
// every 10 mseconds
if (actualSpeed > desiredSpeed)
actualSpeed --;
else if (actualSpeed < desiredSpeed)
actualSpeed ++;
RPM = 10000000 / T0CR0;
fRPM = ((fRPM * 15) + RPM) / 16;
// calculate motor speed
// filter it
}
}
}
7.2 ADC.C
1
2
3
4
5
6
7
8
#include <LPC214x.h>
void ADC0_Init(void)
{
PINSEL1 |= 0x00040000;
AD0CR
= 0x00200F10;
AD0CR |= 0x00010000;
}
// P0.25 = AIN0.4
// initialise ADC0, select AIN4
// start burst mode now, see errata ADC.2
7.3 PWM.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <LPC214x.h>
void PWM_Init(void)
{
PINSEL0 |= 0x000A800A;
PINSEL1 |= 0x00000400;
PWMPR = 20;
PWMPC = 0;
PWMTC = 0;
PWMMR0 = 100;
PWMMR1 = 0;
PWMMR2 = 0;
PWMMR3 = 0;
PWMMR4 = 0;
PWMMR5 = 0;
PWMMR6 = 0;
PWMMCR = 0x00000002;
PWMPCR = 0x7E00;
PWMLER = 0x7F;
PWMTCR = 0x09;
// select PWM1-4 and PWM6
// select PWM5
//
//
//
//
//
//
//
//
//
//
//
//
//
//
prescaler to 20, timer runs at 60 MHz / 20 = 3 MHz
prescale counter to 0
reset timer to 0
-> PMW base frequency = 3 MHz / 100 = 30 KHz
Match 1 for Q1 (off)
Match 2 for Q2 (off)
Match 3 for Q3 (off)
Match 4 for Q4 (off)
Match 5 for Q5 (off)
Match 6 for Q6 (off)
reset TC on MR0
enable PWM1 - PWM6 outputs
enable PWM0 - PWM6 match latch (reload)
enable PWM mode and start timer
}
AN10661_1
Application note
© NXP B.V. 2007. All rights reserved.
Rev. 01 — 17 October 2007
13 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
7.4 HSENSOR.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <LPC214x.H>
#include "bldc.h"
__irq void T0_Isr(void)
{
T0TC = 0;
switch ((IO0PIN >> 18) & 7)
{
case 1: PWMMR1 = actualSpeed;
PWMMR2 = 0;
PWMMR3 = 0;
PWMMR4 = 0;
PWMMR5 = 0;
PWMMR6 = actualSpeed;
break;
case 2: PWMMR1 = 0;
PWMMR2 = actualSpeed;
PWMMR3 = 0;
PWMMR4 = actualSpeed;
PWMMR5 = 0;
PWMMR6 = 0;
break;
case 3: PWMMR1 = 0;
PWMMR2 = actualSpeed;
PWMMR3 = 0;
PWMMR4 = 0;
PWMMR5 = 0;
PWMMR6 = actualSpeed;
break;
case 4: PWMMR1 = 0;
PWMMR2 = 0;
PWMMR3 = actualSpeed;
PWMMR4 = 0;
PWMMR5 = actualSpeed;
PWMMR6 = 0;
break;
case 5: PWMMR1 = actualSpeed;
PWMMR2 = 0;
PWMMR3 = 0;
PWMMR4 = 0;
PWMMR5 = actualSpeed;
PWMMR6 = 0;
break;
case 6: PWMMR1 = 0;
PWMMR2 = 0;
PWMMR3 = actualSpeed;
PWMMR4 = actualSpeed;
PWMMR5 = 0;
// LPC214x definitions
// Reset timer
// read Hall sensor inputs P0.18, P0.19 and P0.20
// phase 6: 001
// phase 4: 010
// phase 5: 011
// phase 2: 100
// phase 1: 101
// phase 3: 110
AN10661_1
Application note
© NXP B.V. 2007. All rights reserved.
Rev. 01 — 17 October 2007
14 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
PWMMR6 = 0;
break;
default: break;
// invalid
}
T0IR = 0xFF;
PWMLER = 0x7F;
VICVectAddr = 0;
// reset flags
// enable PWM0 - PWM6 match latch (reload)
// Acknowledge interrupt by reseting VIC
}
void HES_Init(void)
{
VICVectAddr1 = (unsigned int) &T0_Isr;
VICVectCntl1 = 0x24;
// Channel1 on Source#4 ... enabled
VICIntEnable |= 0x10;
// Channel#4 is the Timer 0
PINSEL1 |= 0x3A000000;
// P0.30,P0.28,P0.29 as CAP0.0,CAP0.2,CAP0.3
T0PR
T0MR0
T0MCR
T0CCR
T0TC
T0TCR
// pre 60, timer runs at 60 MHz / 60 = 1 MHz
// = 1 sec / 1 us
=
=
=
=
=
=
60;
1000000;
3;
0x0FC7;
0;
1;
// Capture on both edges and enable the interrupt
// Reset timer
// start timer
}
7.5 TIMER1.C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <LPC214x.H>
// LPC214x definitions
char f_10ms = 0;
__irq void T1_Isr(void)
{
f_10ms = 1;
T1IR = 0x01;
VICVectAddr = 0;
}
// Timer 1 ISR every 10 msec
// toggles every 10 mseconds
// reset interrupt flag
// reset VIC
void T1_Init(void)
{
VICVectAddr2 = (unsigned int) &T1_Isr;
VICVectCntl2 = 0x25;
// Channel2 on Source#5 ... enabled
VICIntEnable |= 0x20;
// Channel#5 is the Timer 1
T1MR0 = 600000;
T1MCR = 3;
T1TC = 0;
T1TCR = 1;
//
//
//
//
//
= 10 msec / 16,67 nsec
Interrupt on Match0, reset timer on match
Pclk = 60 MHz, timer count = 16,67 nsec
reset Timer counter
enable Timer
}
AN10661_1
Application note
© NXP B.V. 2007. All rights reserved.
Rev. 01 — 17 October 2007
15 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
7.6 BLDC.H
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#define MAX_Im
0xF0
// max motor current limit
extern unsigned char actualSpeed;
extern
extern
extern
extern
void
void
void
void
GetInReport(unsigned char *rep);
SetOutReport(unsigned char *rep);
USB_Init(void);
USB_Connect(unsigned int con);
extern void ADC0_Init(void);
extern void PWM_Init(void);
extern void HES_Init(void);
extern void T1_Init(void);
extern char f_10ms;
AN10661_1
Application note
© NXP B.V. 2007. All rights reserved.
Rev. 01 — 17 October 2007
16 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
8. Legal information
8.1 Definitions
Draft — The document is a draft version only. The content is still under
internal review and subject to formal approval, which may result in
modifications or additions. NXP Semiconductors does not give any
representations or warranties as to the accuracy or completeness of
information included herein and shall have no liability for the consequences
of use of such information.
8.2 Disclaimers
General — Information in this document is believed to be accurate and
reliable. However, NXP Semiconductors does not give any representations
or warranties, expressed or implied, as to the accuracy or completeness of
such information and shall have no liability for the consequences of use of
such information.
Right to make changes — NXP Semiconductors reserves the right to make
changes to information published in this document, including without
limitation specifications and product descriptions, at any time and without
notice. This document supersedes and replaces all information supplied prior
to the publication hereof.
Suitability for use — NXP Semiconductors products are not designed,
authorized or warranted to be suitable for use in medical, military, aircraft,
space or life support equipment, nor in applications where failure or
malfunction of a NXP Semiconductors product can reasonably be expected
to result in personal injury, death or severe property or environmental
damage. NXP Semiconductors accepts no liability for inclusion and/or use of
NXP Semiconductors products in such equipment or applications and
therefore such inclusion and/or use is for the customer’s own risk.
Applications — Applications that are described herein for any of these
products are for illustrative purposes only. NXP Semiconductors makes no
representation or warranty that such applications will be suitable for the
specified use without further testing or modification.
8.3 Trademarks
Notice: All referenced brands, product names, service names and
trademarks are property of their respective owners.
AN10661_1
Application note
© NXP B.V. 2007. All rights reserved.
Rev. 01 — 17 October 2007
17 of 18
AN10661
NXP Semiconductors
Brushless DC motor control using the LPC2141
9. Contents
1.
2.
3.
3.1
3.2
3.3
3.3.1
3.3.2
4.
4.1
4.2
4.3
4.4
4.5
5.
6.
7.
7.1
7.2
7.3
7.4
7.5
7.6
8.
8.1
8.2
8.3
9.
Introduction .........................................................3
Brushless DC motor fundamentals ...................4
How to control a brushless DC motor ...............5
Rotation .................................................................5
Speed control ........................................................6
Motor feedback......................................................6
Current sense........................................................6
RPM measurement ...............................................6
Application setup ................................................7
Using the LPC2101 ...............................................7
Motor selection ......................................................7
MOSFET selection ................................................8
MOSFET driver selection ......................................8
Controlling speed and direction .............................8
Hardware schematics .........................................9
Software .............................................................11
Source code listings .........................................12
BLDC.C ...............................................................12
ADC.C .................................................................13
PWM.C................................................................13
HSENSOR.C .......................................................14
TIMER1.C............................................................15
BLDC.H ...............................................................16
Legal information ..............................................17
Definitions............................................................17
Disclaimers..........................................................17
Trademarks .........................................................17
Contents.............................................................18
Please be aware that important notices concerning this document and the product(s)
described herein, have been included in the section 'Legal information'.
© NXP B.V. 2007. All rights reserved.
For more information, please visit: http://www.nxp.com
For sales office addresses, email to: [email protected]
Date of release: 17 October 2007
Document identifier: AN10661_1