AN1160

AN1160
Sensorless BLDC Control with Back-EMF Filtering
Using a Majority Function
Author:
Adrian Lita and Mihai Cheles
Microchip Technology Inc.
INTRODUCTION
This application note describes a sensorless Brushless
Direct Current (BLDC) motor control algorithm that is
implemented using a dsPIC® Digital Signal Controller
(DSC) or a PIC24 microcontroller. The algorithm works
utilizing a majority function for digitally filtering the
Back-Electromotive Force (BEMF). Each phase of the
motor is filtered to determine when to commutate the
motor drive voltages. This control technique excludes
the need for discrete, low-pass filtering hardware and
off-chip comparators. It should be pointed out that all
the discussions here, and the application software,
assume a 3-phase motor has to be used. The motor
control algorithm described here has four main parts:
• Sampling trapezoidal BEMF signals using the
microcontroller’s Analog-to-Digital Converter
(ADC)
• PWM ON-side ADC sampling to reduce noise and
solve low-inductance problems
• Comparing the trapezoidal BEMF signals to
VBUS/2 to detect the zero-crossing points
• Filtering the signals coming from the comparisons
using a majority function filter
• Commutate the motor driving voltages in three
different modes:
- Classic Open Controller
- Classic Closed-Loop Controller
- Proportional-Integral (PI) Closed-Loop
Controller
This new control method is a single-chip 16-bit PIC®
MCU or dsPIC DSC device-based solution. The only
external hardware required is a few resistors, used to
reduce the BEMF signals to the operational voltage
range of the device’s ADC module.
 2008-2012 Microchip Technology Inc.
SENSORED CONTROL VERSUS
SENSORLESS CONTROL
The BLDC motor is used for both consumer and industrial applications due to its compact size, controllability
and high efficiency. Increasingly, it is also used in automotive applications to eliminate belts and hydraulic
systems, to provide additional functionality and to
improve fuel economy, while reducing maintenance
costs to zero.
Since the electrical excitation must be synchronous to
the rotor position, the BLDC motor is usually operated
with one or more rotor position sensors. For reasons of
cost, reliability, mechanical packaging and especially if
the rotor runs immersed in fluid, it is desirable to run the
motor without position sensors, which is commonly
known as sensorless operation.
It is possible to determine when to commutate the
motor drive voltages by sensing the BEMF voltage on
an undriven motor terminal during one of the drive
phases. There are some disadvantages to sensorless
control, however:
• The motor must be moving at a minimum rate to
generate sufficient BEMF to be sensed
• Abrupt changes to the motor load can cause the
BEMF drive loop to go out of lock
If low cost is a primary concern, if low-speed motor
operation is not a requirement, and if the motor load is
not expected to change rapidly, sensorless trapezoidal
control may be a better choice for your application.
However, there are specific algorithms to overcome all
of the above listed disadvantages.
The BEMF zero-crossing technique described here is
recommended for several reasons:
• It is suitable for use on a wide range of motors
• It can, in theory, be used on both Y and
delta-connected 3-phase motors
• It requires no detailed knowledge of motor
parameters
• It is relatively insensitive to motor manufacturing
tolerance variations
DS01160B-page 1
AN1160
Six-Step (Trapezoidal) Commutation
The method for energizing the motor windings in the
sensorless algorithm, described in this application
note, is six-step trapezoidal or 120° commutation.
Figure 1 shows how six-step commutation works. Each
step, or sector, is equivalent to 60 electrical degrees.
Six sectors make up 360 electrical degrees or one
electrical revolution.
FIGURE 1:
SIX-STEP COMMUTATION
A
2
4
5
1
3
B
C
6
+VDC
GND
Red Winding
60°
Green Winding
+VDC
STEP COMMUTATION
• Step 1
- Red winding is driven positive.
- Green winding is driven negative.
- Blue winding is not driven.
• Step 2
- Red winding remains positive.
- Blue winding is driven negative.
- Green winding is not driven.
• Step 3
- Green winding is driven positive.
- Blue winding is driven negative.
- Red winding is not driven.
• Step 4
- Green winding is driven positive.
- Red winding is driven negative.
- Blue winding is not driven.
• Step 5
- Blue winding is driven positive.
- Red winding is driven negative.
- Green winding is not driven.
• Step 6
- Blue winding is driven positive.
- Green winding is driven negative.
- Red winding is not driven.
For every sector, two windings are energized and one
winding is not energized. The fact that one of the windings is not energized during each sector is an important
characteristic of six-step control that allows for the use
of a sensorless control algorithm.
+VDC
GND
The arrows in the winding diagram show the direction
in which the current flows through the motor windings
in each of the six steps. The graph shows the potential
applied at each lead of the motor during each of the six
steps. Sequencing through these steps moves the
motor through one electrical revolution.
Blue Winding
GND
1
2
3
4
5
6
Sector
DS01160B-page 2
 2008-2012 Microchip Technology Inc.
AN1160
Generating and Sensing BEMF
When a BLDC motor rotates, each winding generates
BEMF, which opposes the main voltage supplied to the
windings in accordance with Lenz’s law. The polarity of
this BEMF is in the opposite direction of the energizing
voltage. BEMF is mainly dependent on three motor
parameters:
• Number of turns in the stator windings
• Angular velocity of the rotor
• Magnetic field generated by rotor magnets
BEMF can be calculated in terms of these parameters
and angular velocity using Equation 4:
EQUATION 1:
BACK-EMF (BEMF)
BEMF = NlrB
where:
N
l
r
B

= Number of windings per phase
= Length of the rotor
= Internal radius of the rotor
= Rotor magnetic field
= Angular velocity
If magnetic saturation of the stator is avoided, or the
dependency of the magnetic field on temperature is
ignored (i.e., B is constant), the only variable term is the
rotor’s angular speed. Therefore, BEMF is proportional
to the rotor speed; as the speed increases, the BEMF
increases.
The frequency at which the sectors are sequenced
determines the speed of the motor; the faster that the
sectors are commutated, the higher the mechanical
speed is achieved. The BEMF voltage is proportional to
the rotor’s speed. Because of this, detection of position
using the BEMF at zero and very low speeds is not
possible. Nevertheless, there are many applications
(e.g., fans and pumps) that do not require positioning
control or closed-loop operation at low speeds. For
these applications, a BEMF sensing method is very
appropriate.
The commutated voltage applied to the stator also has
a direct impact on the correct functioning of the motor.
For efficient control, the applied voltage must be at
least enough to match to generated BEMF, plus the
voltage drop across the motor’s windings due to torque
production. This voltage drop, in turn, is equal to the
impedance of the windings times the current.
Generally speaking, if the commutated voltage is set to
maximum, regardless of the motor’s speed or torque
production, the motor will be driven inefficiently with the
wasted energy heating the motor’s windings. For the
proper control necessary, Pulse-Width Modulation
(PWM) is used to achieve the right voltage level. PWM
is an efficient method of driving the motor, but it introduces some noise issues when attempting to acquire
the control feedback signals (i.e., BEMF voltages).
 2008-2012 Microchip Technology Inc.
To summarize, the important relationships for BLDC
motors and sensorless control are:
• The magnitude of the BEMF signal is proportional
to speed
• The frequency of the BEMF signal is equal to the
(mechanical) rotational speed times the number
of poles pairs
• Motor torque is proportional to current (assuming
the motor’s temperature is constant)
• Motor drive voltage is equal to BEMF (proportional to speed) plus winding impedance voltage
drop (proportional to current for a given torque)
Zero-Crossing Detection
In BLDC motor control theory, the stator’s flux should
be 90 electrical degrees ahead of the rotor’s flux for
maximum torque generation. As a consequence, for
maximum torque, the phase current needs to be in
phase with the phase BEMF voltage.
For the 3-phase BLDC motors considered, the phases
are shifted 120° from each other, so a convenient
method for having a rotating rotor flux in the stator is the
six-step commutation scheme previously described,
commutating each of the three-phase voltages 60 electrical degrees. At maximum torque and full load, the
phase current should have the same waveform as the
driving voltage, neglecting the inductive reactance, and
the two signals need to be in-phase, as it can be seen
when comparing Figure 2 (high current, load applied)
with Figure 3 (low current, no load). Figure 6 shows the
individual idealized phase BEMF waveforms as well as
phase current, assuming an efficient commutation with
a certain load.
The BEMF phase voltage is centered at one-half of the
driving voltage. This means that any zero-crossing event
actually indicates an intersection of the BEMF waveform
with a point that is one-half of the supply voltage
(VBUS/2). The zero-crossing point occurs at 30 electrical
degrees from the end of the last commutation, which is
also 30 degrees from the next commutation point. The
motor speed can thus be calculated from the time interval between two zero-crossing events. When the current
zero-crossing event is identified, a precise schedule for
future commutation steps can be achieved.
Each sector corresponds to one of six equal 60º portions of the electrical cycle (the sector numbering is
arbitrary). Commutations occur at the boundary of each
of the sectors. Therefore, the sector boundaries are
what needs to be detected. There is an offset of 30º
between the BEMF zero-crossing events and required
commutation positions.
DS01160B-page 3
AN1160
FIGURE 2:
PHASE VOLTAGE AND PHASE CURRENT WHEN LOAD IS APPLIED
FIGURE 3:
ZERO-CROSSING POINT EXACT OCCURRENCE
DS01160B-page 4
 2008-2012 Microchip Technology Inc.
AN1160
Detecting BEMF Zero-Crossing Signals
BEMF voltage zero-crossing signals can be detected
by different methods. This section describes two different sensing methods. Both methods have advantages
as well as drawbacks, which will be discussed for each
case. Each method assumes that a wired neutral point
is not provided or that the stators are wired in a delta
configuration.
COMPARING THE BEMF VOLTAGE TO HALF
THE DC BUS VOLTAGE
This method consists of comparing the BEMF voltage
to one-half of the DC bus voltage (VBUS/2) by using
comparators, assuming that the zero-crossing events
occur when BEMF is equal to VBUS/2. Figure 4 shows
the circuitry used to implement this method.
COMPARING THE BEMF VOLTAGE TO THE
MOTOR NEUTRAL POINT
The zero-crossing sensing method described previously can be simplified by using a variable threshold
voltage point to detect the zero-crossing events. This
variable voltage is the motor neutral point. The neutral
point is not physically available for most BLDC motors.
However, it can be generated by using a resistor network. Three resistors (RR) are connected in parallel
with the motor windings and connected together to
generate a virtual neutral point, as shown in Figure 5.
FIGURE 5:
BEMF VOLTAGE
COMPARED TO A VIRTUAL
NEUTRAL POINT
VBUS
FIGURE 4:
BEMF VOLTAGE
COMPARED TO VBUS/2
A
VBUS
Back-EMF
RR
A
RR
Back-EMF
C
GND
RR
B
+
_
Virtual Neutral
GND C
To
ADC
B
GND
Assume that the motor is in commutation Step 1 (refer
to Figure 1), in which Phase A is connected to +VBUS
through an electronic switch, Phase C is connected to
GND through an electronic switch and Phase B is
open. The BEMF signal observed on Phase B has a
negative slope and its minimum value is almost equal
to +VDC just before the commutation Step 2 occurs.
Phase B reaches the value of GND when commutation
Step 2 occurs.
At that instant, Phase B is now connected to GND
through an electronic switch, Phase C is now open and
Phase A remains connected to VDC. The BEMF signal
observed on Phase C has a positive slope and its
maximum value is almost equal to VDC just before commutation Step 3 occurs. Both slopes observed on
Phase B and Phase C are compared to VDC/2 in order
to determine the zero-crossing event. This is easily
implemented with operational amplifiers configured as
comparators.
 2008-2012 Microchip Technology Inc.
To IC2
The neutral point signal can also be reconstructed in software, by averaging the values of three simultaneously
sampled ADC channels (Equation 2). The reconstructed
motor neutral voltage is then compared to each BEMF
signal to determine the zero-crossing events. An event
occurs when the BEMF signals are equal to the motor
neutral point.
EQUATION 2:
VIRTUAL NEUTRAL POINT
AND BEMF SIGNALS
RELATIONSHIP
BEMF A + BEMF B + BEMF CVn = --------------------------------------------------------------------------3
where:
Vn is motor neutral voltage
BEMF A is the BEMF voltage in Phase A
BEMF B is the BEMF voltage in Phase B
BEMF C is the BEMF voltage in Phase C
DS01160B-page 5
AN1160
Figure 6 shows the BEMF signals measured on all
three phases.
Figure 7 shows the required circuitry for a complete
BLDC control system.
FIGURE 6:
BEMF ON ALL 3 PHASES
FIGURE 7:
BEMF VOLTAGE MEASURED USING THE dsPIC® DSC ADC
dsPIC30F2010
BLDC
PWM3H
PWM3L
PWM2H
PWM2L
PWM1H
PWM1L
FLTA
3-Phase
Inverter
Fault
R49
R41
R34 R36
R44
AN2
R52
Demand
AN3
AN4
AN5
DS01160B-page 6
Phase Terminal Voltage Feedback
 2008-2012 Microchip Technology Inc.
AN1160
Figure 8 shows the sampling process over a sector
(60°) period. The lower window provides an enhanced
view of the time line while ADC sampling is taking
place. The ADC_Read signal represents the times at
which the ADC samples the BEMF voltage. Note that
through all of the BEMF decay ramp, only the first half
of the period is sampled. This is because once the
zero-crossing event has been detected, no further
sampling is done. This allows the top-level application
more time to execute other important tasks.
BEMF signal is sampled during the PWM High ON state,
it can be deduced that higher duty cycles (and higher
speeds) result in more ADC samples being taken. More
samples result in a faster and more accurate detection
of a zero-crossing event, with a net effect that sector
transitions can be scheduled much quicker.
Figure 9 and Figure 10 compare the differences in ADC
sampling to the PWM duty cycle. Sampling and conversion are configured to occur as fast as the ADC and the
controller will allow. At the same time, the sampling of
the BEMF voltage is acquired only on the high side of the
PWM signal, so the sampling rate and the PWM frequency are directly proportional. As shown in Figure 9
and Figure 10, the number of samples taken depends
on the duty cycle. The value of the duty cycle (corresponding to PWM High ON state) is proportional to the
voltage applied to the motor winding; at the same time,
higher motor speeds require a higher voltage. Since the
The challenge of this method consists of determining
the correct time to sample the BEMF signals, since the
samples acquired by the ADC may be affected by the
resonant transition voltages caused by the PWM
switching frequency. The ADC module is configured to
take samples at the PWM ON time in order to avoid the
ringing noise produced by the electronic switches and
other noises (e.g., the high-voltage spikes produced
when a motor winding de-energizes). These noises
could create false zero-crossing events.
FIGURE 8:
An advantage of using the VBUS/2 method is the need
to sample only one ADC channel, as opposed to simultaneously sampling three channels sequentially,
required for the neutral reconstruction method.
ADC SAMPLING vs. PWM AND BEMF SIGNAL
 2008-2012 Microchip Technology Inc.
DS01160B-page 7
AN1160
FIGURE 9:
BEMF SAMPLING OVER A PWM PERIOD (LOW PWM DUTY CYCLE)
FIGURE 10:
BEMF SAMPLING OVER A PWM PERIOD (HIGH PWM DUTY CYCLE)
DS01160B-page 8
 2008-2012 Microchip Technology Inc.
AN1160
Digital Filter (Majority Function)
As previously noted, the BEMF signal can be adversely
affected by PWM commutation in the other two
energized windings. The coupling between the motor
parameters, especially inductances, can induce ripple
in the BEMF signal that is synchronous with the PWM
commutation. This effect is less noticeable on motors
with concentrated windings.
Since this induced ripple can cause faulty commutation, it is essential to filter the BEMF signal. There are,
theoretically, two approaches: analog or digital. Analog
filtering has the disadvantages of additional components and cost, as well as frequency dependent phase
and magnitude variations.
This BEMF sensing method is based on a nonlinear
digital filter, called ‘majority function’. In certain situations, it is also known as ‘median operator’. The majority
function is a Boolean function, which takes a number n
of binary inputs and returns the value which is most common among them. For three Boolean inputs, it returns
whichever value (true or false) occurs at least twice. In
this case, two equal values represent 66% of the
numbers. The majority function always returns the value
of the majority (> 50%) of the numbers.
Table 1 shows an example of a 3-input majority function.The majority of the values can be expressed using
the AND (^) and OR (v) operators, as shown in
Equation 3.
TABLE 1:
EXAMPLE OF A MAJORITY
FUNCTION USING THREE
INPUTS
A
B
C
Majority
1
1
1
1
1
1
0
1
1
0
1
1
1
0
0
0
0
1
1
1
0
1
0
0
0
0
1
0
0
0
0
0
EQUATION 3:
BOOLEAN
REPRESENTATION OF THE
MAJORITY FUNCTION
Majority =  A  B    A  C    B  C 
 2008-2012 Microchip Technology Inc.
FILTERING THE BEMF SIGNALS USING THE
MAJORITY FUNCTION FILTER
The implementation of this nonlinear filter is based on
a 6-sample window, in which at least 51% of the three
most significant samples should be equal to ‘1’ and the
three least significant samples should be equal to ‘0’ for
the purpose of identifying the occurrence of a
zero-crossing event in the digitalized BEMF signals.
This filtering step results in a more robust algorithm.
The first stage of the majority function filter is implemented using two logic operators: an AND operator for
detecting the active BEMF signal corresponding to the
existing commutation state and an Exclusive-OR operator is used to detect the falling or rising edges on the
active BEMF signal. The output of this logic operation is
called “the active-masked BEMF signal” in the following
sections.
The active-masked BEMF signal is then filtered using
the majority detection filter. This filter is implemented
with an array composed of 64 values and a special logic
test condition that is used to modify the pointer of the
next data array. This logic test condition also identifies
both the falling and rising edges of the active-masked
BEMF signals; both edges are represented as a
true-to-false event at the output of the logical test condition. The output of this condition is also used as an input
to the majority detection filter.
The 64 values represent the 26 possible combinations
that the 6-sample window could have for the
active-masked BEMF signal. Each value on the look-up
table is a pointer to the next signal state over time. The
filter is always looking for a true-to-false change at the
output of the logic test condition. If this true-to-false
condition is detected, the filter looks for three consecutive false states to validate that a zero-crossing event
occurred. A true-to-false condition at the output of the
logic test represents a zero-crossing event, and therefore, a commutation on the motor which occurs after a
delay. This delay is equal to the timing of 30 electrical
degrees minus the time required to execute the digital
filtering. After the commutation a new BEMF signal is
then monitored.
The 64 array values are listed in Table 2. They are
calculated as follows (Equation 4):
• The first 32 numbers are the index number
multiplied by two
• The last 32 values are the index number minus
32, then multiplied by two
EQUATION 4:
CALCULATING ARRAY
VALUES
First Half:
Array Value [N] = N  2
Second Half:
Array Value [N] =  N – 32   2
DS01160B-page 9
AN1160
TABLE 2:
ARRAY VALUES
Array
Index [N]
Array
Value
Array
Index [N]
Array
Value
0
0
32
0
1
2
33
2
2
4
34
4
3
6
35
6
4
8
36
8
5
10
37
10
6
12
38
12
7
14
39
14
8
16
40
16
9
18
41
18
10
20
42
20
11
22
43
22
12
24
44
24
13
26
45
26
14
28
46
28
15
30
47
30
16
32
48
32
17
34
49
34
18
36
50
36
19
38
51
38
20
40
52
40
21
42
53
42
22
44
54
44
23
46
55
46
24
48
56
48
25
50
57
50
26
52
58
52
27
54
59
54
28
56
60
56
29
58
61
58
30
60
62
60
31
62
63
62
DS01160B-page 10
There are 16 unique array index numbers that represent the true-to-false condition. They are selected
based on their 6-bit binary values, using these majority
function criteria:
• A majority of ‘1’ (> 50%) in the three Most
Significant bits (MSbs)
• A majority of ‘0’ (> 50%) in the three Least
Significant bits (LSbs)
Table 3 shows the 16 possible numbers that match
these two conditions. The values pointed to by these
unique indexes are replaced by ‘1’ to indicate that a
true-to-false condition has occurred.
TABLE 3:
UNIQUE INDEX NUMBERS
INDICATING A TRUE-TO-FALSE
CONDITION
Number
6-Bit Binary Value
24
011000
25
011001
26
011010
28
011100
40
101000
41
101001
42
101010
44
101100
48
110000
49
110001
50
110010
52
110100
56
111000
57
111001
58
111010
60
111100
 2008-2012 Microchip Technology Inc.
AN1160
The 48 remaining array numbers are pointers to the
unique values in case a true-to-false condition occurs.
There are some values that never point to any of the
unique values because they are not multiples of any of
the 16 unique numbers. Table 4 provides some
numbers that match this condition.
TABLE 6:
COMPLETE MAJORITY FILTER
COEFFICIENTS
Array
Array
Array
(Unique
Index
Value
Numbers)
[N]
Array
Index
[N]
Array
Value
Array
(Unique
Numbers)
0
0
0
32
0
0
1
2
2
33
2
2
2
4
4
34
4
4
3
6
6
35
6
6
4
8
8
36
8
8
5
10
10
37
10
10
6
12
12
38
12
12
7
14
14
39
14
14
8
16
16
40
16
1
9
18
18
41
18
1
Those numbers (that never point to a 16 unique
number) are then pointed to their multiple and they are
trapped into a loop in such a way that the filter is waiting
for a new value, which points to a unique number.
Table 5 shows the numbers that are not multiples of a
unique value.
10
20
20
42
20
1
11
22
22
43
22
22
12
24
24
44
24
1
13
26
26
45
26
26
14
28
28
46
28
28
The complete array of filter coefficients, combining the
initial array with unique number pointers, is shown in
Table 6.
15
30
30
47
30
30
16
32
32
48
32
1
17
34
34
49
34
1
18
36
36
50
36
1
19
38
38
51
38
38
20
40
40
52
40
1
21
42
42
53
42
42
22
44
44
54
44
44
23
46
46
55
46
46
24
48
1
56
48
1
25
50
1
57
50
1
26
52
1
58
52
1
27
54
54
59
54
54
28
56
1
60
56
1
29
58
58
61
58
58
30
60
60
62
60
60
31
62
62
63
62
62
TABLE 4:
NUMBERS THAT ARE UNIQUE
NUMBER MULTIPLES
6-Bit
Binary
Number
Number
of Right
Shifts
Unique
Number
Pointed To
6-Bit Binary
of Unique
Number
3
000011
3
24
011000
11
001011
3
24
011000
54
110110
1
44
101000
7
000111
2
28
011100
TABLE 5:
Number
NUMBERS THAT NEVER POINT
TO A UNIQUE VALUE
6-Bit
Binary
Numbers
Pointed To
Before
Becoming Zero
Number of
Times to be
Right Shifted
1
000001
2, 4, 8, 16, 32
5
9
001001
18, 36, 8, 16, 32
5
36
100100
8, 16, 32
3
17
010001
34, 4, 8, 16, 32
5
Table 7 shows an example of the complete filtering
process. The inputs are the noiseless binary
representation of the BEMF signals.
Table 8 shows another example of the complete filtering process. In this case, the inputs are the noisy binary
representation of the BEMF signals.
To keep the magnetic field in the stator advancing ahead
of the rotor, the transition from one sector to another must
occur at precise rotor positions for optimal torque. From
the moment of zero-crossing detection, commutation
delay is equal to the timing of 30 electrical degrees, minus
the time required to execute the digital filtering process. To
implement the commutation delay, one of the device’s
general purpose timers is used to measure the amount of
time elapsed from one zero-cross event to the next.
 2008-2012 Microchip Technology Inc.
DS01160B-page 11
AN1160
B
A
C
B
A
AND Masked
Phase
C
B
A
Zero-Cross
Event
C
XOR Masked
Phase
Filter Output
BEMF Phase
Commutation
Step
DIGITAL FILTERING COMPUTATIONS USING NOISELESS BEMF SIGNALS
Logical Test
ANGLE
TABLE 7:
AND
Mask
XOR
Mask
0
1
1
0
0
0
0
0
0
0
0
0
0
FALSE
000
000
3
1
1
0
0
0
0
0
1
0
1
1
0
FALSE
010
000
6
1
1
0
0
0
0
0
1
0
1
1
2
FALSE
001
111
9
1
1
0
0
0
0
0
1
0
1
1
6
FALSE
100
000
12
1
1
0
0
0
0
0
1
0
1
1
14
FALSE
010
111
15
1
1
0
0
0
0
0
1
0
1
1
30
FALSE
001
000
18
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
100
111
21
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
000
000
24
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
27
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
30
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
33
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
36
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
39
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
42
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
45
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
48
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
51
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
54
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
57
1
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
60
1
0
0
0
0
0
0
1
0
0
1
62
FALSE
—
—
63
1
0
0
0
0
0
0
1
0
0
1
60
FALSE
—
—
66
1
0
0
0
0
0
0
1
0
0
1
1
FALSE
—
—
69
1
0
0
0
0
0
0
1
0
0
1
2
TRUE
—
—
72
1
0
0
1
1
1
0
0
1
1
2
4
FALSE
—
—
75
1
0
0
1
1
1
0
0
1
1
2
10
FALSE
—
—
78
1
0
0
1
1
1
0
0
1
1
2
22
FALSE
—
—
81
1
0
0
1
1
1
0
0
1
1
2
46
FALSE
—
—
84
1
0
0
1
1
1
0
0
1
1
2
30
FALSE
—
—
87
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
90
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
93
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
96
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
99
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
102
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
105
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
108
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
111
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
114
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
117
1
0
0
1
1
1
0
0
1
1
2
62
FALSE
—
—
120
1
0
1
1
1
1
0
0
1
0
2
62
FALSE
—
—
123
1
0
1
1
1
1
0
0
1
0
2
60
FALSE
—
—
126
1
0
1
1
1
1
0
0
1
0
2
1
FALSE
—
—
129
1
0
1
1
1
1
0
0
1
0
2
2
TRUE
—
—
132
1
0
1
0
0
0
1
0
0
1
3
4
FALSE
—
—
DS01160B-page 12
 2008-2012 Microchip Technology Inc.
AN1160
B
A
C
B
A
AND Masked
Phase
C
B
A
Zero-Cross
Event
C
XOR Masked
Phase
Filter Output
Angle
BEMF Phase
Commutation
Step
DIGITAL FILTERING COMPUTATIONS USING NOISY BEMF SIGNALS
Logical Test N
TABLE 8:
AND
Mask
XOR
Mask
0
1
1
0
0
0
0
0
0
0
0
0
0
FALSE
000
000
3
1
1
0
0
0
0
0
1
0
1
1
0
FALSE
010
000
6
1
0
1
0
0
0
0
1
0
0
1
2
FALSE
001
111
9
1
1
0
0
0
0
0
1
0
1
1
4
FALSE
100
000
12
1
1
0
0
0
0
0
1
0
1
1
10
FALSE
010
111
15
0
1
1
0
0
0
0
1
0
1
1
22
FALSE
001
000
18
1
1
0
0
0
0
0
1
0
1
1
46
FALSE
100
111
21
1
0
0
0
0
0
0
1
0
0
1
1
FALSE
000
000
24
1
1
0
0
0
0
0
1
0
1
1
2
FALSE
—
—
27
1
1
0
0
0
0
0
1
0
1
1
6
FALSE
—
—
30
1
1
0
0
0
0
0
1
0
1
1
14
FALSE
—
—
33
1
1
1
0
0
0
0
1
0
1
1
30
FALSE
—
—
36
0
1
0
0
0
0
0
1
0
1
1
62
FALSE
—
—
39
1
1
0
0
0
0
0
1
0
1
1
1
FALSE
—
—
42
1
1
0
0
0
0
0
1
0
1
1
2
FALSE
—
—
45
1
0
0
0
0
0
0
1
0
0
1
6
FALSE
—
—
48
1
1
0
0
0
0
0
1
0
1
1
12
FALSE
—
—
51
1
1
0
0
0
0
0
1
0
1
1
26
FALSE
—
—
54
1
1
0
0
0
0
0
1
0
1
1
54
FALSE
—
—
57
1
1
0
0
0
0
0
1
0
1
1
1
FALSE
—
—
60
1
0
0
0
0
0
0
1
0
0
1
2
TRUE
—
—
63
1
1
0
1
1
1
0
0
1
1
2
4
FALSE
—
—
66
0
0
0
1
1
1
0
0
1
1
2
10
FALSE
—
—
69
1
1
1
1
1
1
0
0
1
0
2
22
FALSE
—
—
72
1
1
0
1
1
1
0
0
1
1
2
44
FALSE
—
—
75
0
0
0
1
1
1
0
0
1
1
2
1
FALSE
—
—
78
1
0
1
1
1
1
0
0
1
0
2
2
FALSE
—
—
81
1
0
0
1
1
1
0
0
1
1
2
4
FALSE
—
—
—
84
0
1
0
1
1
1
0
0
1
1
2
10
FALSE
—
87
1
0
1
1
1
1
0
0
1
0
2
22
FALSE
—
—
90
0
1
0
1
1
1
0
0
1
1
2
44
FALSE
—
—
93
1
0
0
1
1
1
0
0
1
1
2
1
FALSE
—
—
96
1
0
1
1
1
1
0
0
1
0
2
2
FALSE
—
—
—
99
1
1
0
1
1
1
0
0
1
1
2
4
FALSE
—
102
1
0
0
1
1
1
0
0
1
1
2
10
FALSE
—
—
105
1
0
0
1
1
1
0
0
1
1
2
22
FALSE
—
—
108
1
1
1
1
1
1
0
0
1
0
2
46
FALSE
—
—
111
1
0
0
1
1
1
0
0
1
1
2
1
FALSE
—
—
114
1
1
0
1
1
1
0
0
1
1
2
2
FALSE
—
—
117
1
0
0
1
1
1
0
0
1
1
2
6
FALSE
—
—
120
1
0
1
1
1
1
0
0
1
0
2
14
FALSE
—
—
123
1
0
1
1
1
1
0
0
1
0
2
28
FALSE
—
—
126
1
0
1
1
1
1
0
0
1
0
2
1
FALSE
—
—
129
1
0
1
1
1
1
0
0
1
0
2
2
TRUE
—
—
132
1
0
1
0
0
0
1
0
0
1
3
4
FALSE
—
—
 2008-2012 Microchip Technology Inc.
DS01160B-page 13
AN1160
CONTROL LOOPS
This application software has three control modes that
can be selected for use during sensorless operation.
These modes are as follows:
• Open Loop
• Closed Loop
• Closed Loop (PI Controller)
FIGURE 12:
Open-Loop Mode
When the load on a motor is constant over its operating
range, the response curve of motor speed relative to
applied voltage is linear. If the supply voltage is
well-regulated, a motor under constant torque can be
operated open loop over its entire speed range.
Assume that with PWM, the effective voltage is linearly
proportional to the PWM duty cycle. An open-loop controller can be made by linking the PWM duty cycle to a
16-bit variable, which is generated by a potentiometer
being sampled by an ADC. The block diagram of this
mode is shown in Figure 11.
FIGURE 11:
OPEN-LOOP CONTROL
Voltage
Demand
BLDC
Motor
dsPIC® DSC
MCPWM
The Analog-to-Digital conversion value is delivered in a
10-bit unsigned integer format; therefore, the possible
conversion values are within the range of 0 to 1024. It
is required to scale this conversion value to match the
PWM duty cycle range. Assuming a PWM frequency of
20 kHz, the PWM duty cycle value varies from 0 to
2000 for microcontrollers running at 40 MIPS, or 0 to
3500 for devices at 70 MIPS (i.e., 16-bit Microchip
devices.)
Closed-Loop and Proportional-Integral
(PI) Closed-Loop Modes
Closed-Loop mode implemented in the software has
two options. The classic Closed-Loop mode attempts
to maintain a constant speed by increasing and
decreasing the duty cycle with a unit each run.
DS01160B-page 14
The Proportional-Integral (PI) mode uses a PI speed
controller to calculate the difference between the
motor’s calculated speed and the speed demand
value, and apply the appropriate corrections. The
speed demand is typically set as determined by a
potentiometer value, scaled to the desired speed
range. Figure 12 shows the block diagram of the speed
PI Closed-Loop mode.
CLOSED-LOOP CONTROL
Motor
Demand
+

-
Speed PI
Controller
dsPIC® DSC
MCPWM
Calculated Motor Speed
If we know the number of pair poles and the electrical
revolutions per second, it is possible to determine the
motor speed. For a motor with two pole pairs (or
4 poles), it is necessary to execute the six-step commutation cycle twice to achieve a complete mechanical
revolution. Therefore, it is possible to measure the
mechanical revolutions per second through counting
the number of six-step commutation cycles and then
comparing them to the number of the motor pole pairs.
To measure the mechanical speed (RPM), Timer2 is
used for the 30-degree measurement. If it is known that
N ticks of Timer2 correspond to 30 electrical degrees,
the final mechanical RPM is calculated using the basic
motor control formulas.
Once the current speed is calculated, it is then
compared to the desired speed set by the scaled value
of the potentiometer. The proportional and integral
error between the desired speed and the current speed
is calculated and then multiplied by the PI constants, as
shown in Equation 5. The PI output is then scaled to
match the range of the PWM duty cycle.
EQUATION 5:
PI CONTROLLER
COMPUTATIONS
Speed Error = Desired Speed – Current Speed
Integral Error = Integral Error + Speed Error
PI Output = (kp) • (Speed Error) + (Ki) • (Integral Error)
 2008-2012 Microchip Technology Inc.
AN1160
Start-up Sequence
The motor start-up sequence is composed of two
stages: a user-definable linear start-up ramp and a
ramp sustaining time. This sequence is common to all
control modes.
During the start-up ramp and the sustaining time, the
motor is run in forced spinning commutation. During
these phases, the BEMF is not checked. For the
start-up ramp, the parameters that can be defined are:
• Ramp Length (in time): How long the ramp takes
• Ramp Final RPM: The target motor speed at the
end of the ramp
• Ramp Start-up Duty Cycle: The PWM duty cycle
used to spin the motor in forced commutation
For open-loop control, the sustaining time should be
kept very low as it does not affect anything. Also note
that the ramp’s slope is calculated in the accompanying
Excel® tuning file.
The scope capture in Figure 13 shows the sequence,
from left to right:
• Rotor alignment sequence (exactly 200 ms)
• Start-up ramp, including sustaining time forced
commutation (up to 60% of the top screen)
• Switching from forced commutation to closed loop
(at about 60% of the unzoomed screen when the
current drops very low)
• Closed-loop operation
The sustaining time is the required time to keep the
motor spinning in forced commutation immediately
after the ramp finishes. During this period, if PI
Closed-Loop mode is enabled, then the PI controller is
trained for the required speed.
FIGURE 13:
START-UP SEQUENCE
 2008-2012 Microchip Technology Inc.
DS01160B-page 15
AN1160
SOFTWARE OVERVIEW
Figure 14, Figure 15 and Figure 16 provide an overview
of the BLDC control algorithm’s flow.
The state machine (Figure 14) Acknowledges the
following states:
• STATE_STARTING: The state in which the motor
starts. The start-up ramp is executed here.
• STATE_STARTED: The motor is running in the
selected mode (Open or Closed-Loop mode).
• STATE_STOPPING: The state in which a command is issued for motor stopping. Automatically
transitions to STATE_STOPPED.
• STATE_STOPPED: The motor is stopped.
• STATE_FAULT: When current Fault or stalling
occurs. Basically, the same as
STATE_STOPPING, but the stop comes from a
Fault, not by user command.
DS01160B-page 16
The ADC Interrupt Service Routine (ISR) (Figure 15)
sets the pre-commutation state, which is the state after
the zero-crossing point has been detected. It lasts for
30 electrical degrees, plus the delay the majority filter
adds, minus the phase advancing degrees. During the
pre-commutation state, the ADC does not sample any
signal and the CPU is almost free (as seen in Figure 8,
when the BEMF voltage reaches its halfway point).
The pre-commutation state is cleared in Figure 16.
When the state is cleared, commutation occurs, the
ADC restarts sampling after the blanking counter
reaches the preset macro value, and the whole process
restarts.
PI Closed-Loop control includes a new PI training
routine, that is invoked whenever the sustaining time is
not zero. The routine involves calculating the output of
the PI controller using real measured values for the
input and the reference; the output is not applied until
the sustaining time has passed. This process assures
a smoother switching from forced sector commutation
to PI Closed-Loop operation.
 2008-2012 Microchip Technology Inc.
AN1160
FIGURE 14:
APPLICATION MAIN ROUTINE AND STATE MACHINE
State Machine
Main()
START
Initialization Code:
-Clock Frequency
-PWM Module
-ADC
-Timers
-RTDM
Infinite
Loop
STATE_STOPPING
Stop_Motor()
STATE_STARTING
Go to
PWM ISR
STATE_FAULT
Stop_Motor()
STATE_STARTED
Spinning
Direction
Change?
Check if Buttons
are Pressed
Y
Stop_Motor()
Button 1
Pressed?
Y
Change State to
STARTING/
STOPPING
Wait for Motor
to Stop
N
Change Spinning
Direction
Y
(Re)Start_Motor()
with New Direction
Button 2
Pressed?
N
STATE_STOPPED
Spinning
Direction
Check
Execute State
Machine
 2008-2012 Microchip Technology Inc.
DS01160B-page 17
AN1160
FIGURE 15:
INTERRUPT ROUTINE FOR ADC (SENSORLESS COMMUTATION)
Set the New
Auto-Triggering Level
for ADC Interrupt
In
Pre-Commutation
State?
N
Reconstruct
MotorVirtualNeutral
Voltage
Sample BEMF
Signal N
Y
Waited for
Blanking
Time?
Y
Use POT
Control?
Filter
BEMF Signal
N
Zero-Crossing
Point Detected?
Y
Y
Read DMCI and
Set Desired RPM
Read POT and
Set Desired RPM
Switch to
STARTED State
Y
State is
STARTING?
N
Calculate the
Average Ticks
Timer2 Counted
from 0 to 30°
and Set
Pre-Commutation
State
Calculate RPM
Add Phase
Advance
Set Timer1 to do
an Interrupt
when the Rotor
Reaches 60°
Exit ADC ISR
DS01160B-page 18
Execute
PI Control Loop
or Open Loop
 2008-2012 Microchip Technology Inc.
AN1160
FIGURE 16:
INTERRUPT ROUTINES FOR PWM AND TIMER1
Timer1 Interrupt Service Routine
PWM Interrupt Service Routine (20 kHz PWM Frequency)
Update Delay
Buffer
State
STARTING?
Set Pre-Commutation State to ‘0’
Y
Init Ready?
Y
Start_Motor()
Change Motor
Sector and PWM
Overdrive
N
N
Exit Timer1 ISR
Stall Detected?
Update RTDM
Buffers
Y
Go to
STATE_FAULT
Init_Motor()
Exit PWM ISR
Init_Motor()
Init Variables for
Current Spinning
Direction
Start_Motor()
Change Motor
Sector and PWM
Overdrive
Ramp Finished?
Start Building
START-UP RAMP
N
Train PI
Wait the Desired Time for the
Rotor to Align to New Position
(forced commutation spinning,
non-blocking)
Y
Sustaining Time
Over?
Wait for Desired
Rotor Align Time
(non-blocking)
N
Check Where on
Ramp We are
and Calculate
Corresponding Delay
Turn Sensorless
Control On and Exit
Function
 2008-2012 Microchip Technology Inc.
DS01160B-page 19
AN1160
CONCLUSION
REFERENCES
This application note is intended for the developer who
wants to drive a sensorless BLDC motor, using this
new BLDC control technique, in a basic and simple
form, without the use of discrete, low-pass filtering
hardware and off-chip comparators.
• Valiant, L. (1984), “Short Monotone Formulae for
the Majority Function”, Journal of Algorithms
5:363–366.
• “Modern Power Electronics and AC Drives”, B.
Bose, Prentice Hall PTR, ISBN 0130167436
• “Electric Motors and Drives”, A. Hughes,
Heinemann Newnes, ISBN 0750617411
• “Brushless Permanent Magnet and Reluctance
Motor Drives”, T. Miller, Oxford Clarendon,
ISBN 0198593694
• K. Iizuka et. al., “Microcomputer Control for
Sensorless Brushless Motor”, IEEE Transactions
on Industrial Applications, Vol. 21, No.4 1985,
pp 595-601
• AN857, “Brushless DC Motor Control Made
Easy”, Microchip Technology Inc., 2002
• AN901, “Using the dsPIC30F for Sensorless
BLDC Control”, Microchip Technology Inc., 2007
• AN957, “Sensored BLDC Motor Control Using
dsPIC30F2010”, Microchip Technology Inc., 2005
• AN970, “Using the PIC18F2431 for Sensorless
BLDC Motor Control”, Microchip Technology Inc.,
2005
• AN992, “Sensorless BLDC Motor Control Using
dsPIC30F2010”, Microchip Technology Inc., 2005
• AN1017, “Sinusoidal Control of PMSM Motors with
dsPIC30F DSC”, Microchip Technology Inc., 2005
• AN1078, “Sensorless Field Oriented Control of a
PMSM”, Microchip Technology Inc., 2007
It also shows that this new control method is a
single-chip 16-bit device-based solution, which does
not require external hardware, except for a couple of
resistors used to condition the BEMF signals to the
operational voltage range of the ADC module. The
algorithm described uses nonlinear digital filtering,
based on a majority detection function to sense the
back-EMF signals generated by a rotating BLDC motor.
Digital filtering makes it possible to more accurately
detect the zero-cross events in the back-EMF signal.
When detected by the dsPIC DSC device, zero-cross
events provide the information needed by the algorithm
to commutate the motor windings.
Accurately detecting the zero-cross events in a
back-EMF signal is the key to sensorless control of a
BLDC motor that is driven using six-step, or trapezoidal, commutation. The use of digital filtering, as
opposed to hardware filters or external comparators,
requires less hardware, which equates to less cost and
a smaller PCB.
DS01160B-page 20
 2008-2012 Microchip Technology Inc.
AN1160
APPENDIX A:
REVISION HISTORY
Revision A (1/2008):
Original version of this document by D. Torres.
Revision B (9/2012):
Revision by A. Lita and M. Cheles to create a solution
that only uses one ADC S/H circuitry, extending the
algorithm compatibility to all 16-bit devices comprising
a motor control PWM peripheral. The use of BEMF as
a control modality and majority detect filtering is
unchanged.
 2008-2012 Microchip Technology Inc.
DS01160B-page 21
AN1160
NOTES:
DS01160B-page 22
 2008-2012 Microchip Technology Inc.
Note the following details of the code protection feature on Microchip devices:
•
Microchip products meet the specification contained in their particular Microchip Data Sheet.
•
Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the
intended manner and under normal conditions.
•
There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our
knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data
Sheets. Most likely, the person doing so is engaged in theft of intellectual property.
•
Microchip is willing to work with the customer who is concerned about the integrity of their code.
•
Neither Microchip nor any other semiconductor manufacturer can guarantee the security of their code. Code protection does not
mean that we are guaranteeing the product as “unbreakable.”
Code protection is constantly evolving. We at Microchip are committed to continuously improving the code protection features of our
products. Attempts to break Microchip’s code protection feature may be a violation of the Digital Millennium Copyright Act. If such acts
allow unauthorized access to your software or other copyrighted work, you may have a right to sue for relief under that Act.
Information contained in this publication regarding device
applications and the like is provided only for your convenience
and may be superseded by updates. It is your responsibility to
ensure that your application meets with your specifications.
MICROCHIP MAKES NO REPRESENTATIONS OR
WARRANTIES OF ANY KIND WHETHER EXPRESS OR
IMPLIED, WRITTEN OR ORAL, STATUTORY OR
OTHERWISE, RELATED TO THE INFORMATION,
INCLUDING BUT NOT LIMITED TO ITS CONDITION,
QUALITY, PERFORMANCE, MERCHANTABILITY OR
FITNESS FOR PURPOSE. Microchip disclaims all liability
arising from this information and its use. Use of Microchip
devices in life support and/or safety applications is entirely at
the buyer’s risk, and the buyer agrees to defend, indemnify and
hold harmless Microchip from any and all damages, claims,
suits, or expenses resulting from such use. No licenses are
conveyed, implicitly or otherwise, under any Microchip
intellectual property rights.
Trademarks
The Microchip name and logo, the Microchip logo, dsPIC,
FlashFlex, KEELOQ, KEELOQ logo, MPLAB, PIC, PICmicro,
PICSTART, PIC32 logo, rfPIC, SST, SST Logo, SuperFlash
and UNI/O are registered trademarks of Microchip Technology
Incorporated in the U.S.A. and other countries.
FilterLab, Hampshire, HI-TECH C, Linear Active Thermistor,
MTP, SEEVAL and The Embedded Control Solutions
Company are registered trademarks of Microchip Technology
Incorporated in the U.S.A.
Silicon Storage Technology is a registered trademark of
Microchip Technology Inc. in other countries.
Analog-for-the-Digital Age, Application Maestro, BodyCom,
chipKIT, chipKIT logo, CodeGuard, dsPICDEM,
dsPICDEM.net, dsPICworks, dsSPEAK, ECAN,
ECONOMONITOR, FanSense, HI-TIDE, In-Circuit Serial
Programming, ICSP, Mindi, MiWi, MPASM, MPF, MPLAB
Certified logo, MPLIB, MPLINK, mTouch, Omniscient Code
Generation, PICC, PICC-18, PICDEM, PICDEM.net, PICkit,
PICtail, REAL ICE, rfLAB, Select Mode, SQI, Serial Quad I/O,
Total Endurance, TSHARC, UniWinDriver, WiperLock, ZENA
and Z-Scale are trademarks of Microchip Technology
Incorporated in the U.S.A. and other countries.
SQTP is a service mark of Microchip Technology Incorporated
in the U.S.A.
GestIC and ULPP are registered trademarks of Microchip
Technology Germany II GmbH & Co. & KG, a subsidiary of
Microchip Technology Inc., in other countries.
All other trademarks mentioned herein are property of their
respective companies.
© 2008-2012, Microchip Technology Incorporated, Printed in
the U.S.A., All Rights Reserved.
Printed on recycled paper.
ISBN: 978-1-62076-594-4
QUALITY MANAGEMENT SYSTEM
CERTIFIED BY DNV
== ISO/TS 16949 ==
 2008-2012 Microchip Technology Inc.
Microchip received ISO/TS-16949:2009 certification for its worldwide
headquarters, design and wafer fabrication facilities in Chandler and
Tempe, Arizona; Gresham, Oregon and design centers in California
and India. The Company’s quality system processes and procedures
are for its PIC® MCUs and dsPIC® DSCs, KEELOQ® code hopping
devices, Serial EEPROMs, microperipherals, nonvolatile memory and
analog products. In addition, Microchip’s quality system for the design
and manufacture of development systems is ISO 9001:2000 certified.
DS01160B-page 23
Worldwide Sales and Service
AMERICAS
ASIA/PACIFIC
ASIA/PACIFIC
EUROPE
Corporate Office
2355 West Chandler Blvd.
Chandler, AZ 85224-6199
Tel: 480-792-7200
Fax: 480-792-7277
Technical Support:
http://www.microchip.com/
support
Web Address:
www.microchip.com
Asia Pacific Office
Suites 3707-14, 37th Floor
Tower 6, The Gateway
Harbour City, Kowloon
Hong Kong
Tel: 852-2401-1200
Fax: 852-2401-3431
India - Bangalore
Tel: 91-80-3090-4444
Fax: 91-80-3090-4123
India - New Delhi
Tel: 91-11-4160-8631
Fax: 91-11-4160-8632
Austria - Wels
Tel: 43-7242-2244-39
Fax: 43-7242-2244-393
Denmark - Copenhagen
Tel: 45-4450-2828
Fax: 45-4485-2829
India - Pune
Tel: 91-20-2566-1512
Fax: 91-20-2566-1513
France - Paris
Tel: 33-1-69-53-63-20
Fax: 33-1-69-30-90-79
Japan - Osaka
Tel: 81-66-152-7160
Fax: 81-66-152-9310
Germany - Munich
Tel: 49-89-627-144-0
Fax: 49-89-627-144-44
Atlanta
Duluth, GA
Tel: 678-957-9614
Fax: 678-957-1455
Boston
Westborough, MA
Tel: 774-760-0087
Fax: 774-760-0088
Chicago
Itasca, IL
Tel: 630-285-0071
Fax: 630-285-0075
Cleveland
Independence, OH
Tel: 216-447-0464
Fax: 216-447-0643
Dallas
Addison, TX
Tel: 972-818-7423
Fax: 972-818-2924
Detroit
Farmington Hills, MI
Tel: 248-538-2250
Fax: 248-538-2260
Indianapolis
Noblesville, IN
Tel: 317-773-8323
Fax: 317-773-5453
Los Angeles
Mission Viejo, CA
Tel: 949-462-9523
Fax: 949-462-9608
Santa Clara
Santa Clara, CA
Tel: 408-961-6444
Fax: 408-961-6445
Toronto
Mississauga, Ontario,
Canada
Tel: 905-673-0699
Fax: 905-673-6509
Australia - Sydney
Tel: 61-2-9868-6733
Fax: 61-2-9868-6755
China - Beijing
Tel: 86-10-8569-7000
Fax: 86-10-8528-2104
China - Chengdu
Tel: 86-28-8665-5511
Fax: 86-28-8665-7889
China - Chongqing
Tel: 86-23-8980-9588
Fax: 86-23-8980-9500
Netherlands - Drunen
Tel: 31-416-690399
Fax: 31-416-690340
Korea - Daegu
Tel: 82-53-744-4301
Fax: 82-53-744-4302
Spain - Madrid
Tel: 34-91-708-08-90
Fax: 34-91-708-08-91
China - Hangzhou
Tel: 86-571-2819-3187
Fax: 86-571-2819-3189
Korea - Seoul
Tel: 82-2-554-7200
Fax: 82-2-558-5932 or
82-2-558-5934
China - Hong Kong SAR
Tel: 852-2401-1200
Fax: 852-2401-3431
Malaysia - Kuala Lumpur
Tel: 60-3-6201-9857
Fax: 60-3-6201-9859
China - Nanjing
Tel: 86-25-8473-2460
Fax: 86-25-8473-2470
Malaysia - Penang
Tel: 60-4-227-8870
Fax: 60-4-227-4068
China - Qingdao
Tel: 86-532-8502-7355
Fax: 86-532-8502-7205
Philippines - Manila
Tel: 63-2-634-9065
Fax: 63-2-634-9069
China - Shanghai
Tel: 86-21-5407-5533
Fax: 86-21-5407-5066
Singapore
Tel: 65-6334-8870
Fax: 65-6334-8850
China - Shenyang
Tel: 86-24-2334-2829
Fax: 86-24-2334-2393
Taiwan - Hsin Chu
Tel: 886-3-5778-366
Fax: 886-3-5770-955
China - Shenzhen
Tel: 86-755-8203-2660
Fax: 86-755-8203-1760
Taiwan - Kaohsiung
Tel: 886-7-536-4818
Fax: 886-7-330-9305
China - Wuhan
Tel: 86-27-5980-5300
Fax: 86-27-5980-5118
Taiwan - Taipei
Tel: 886-2-2500-6610
Fax: 886-2-2508-0102
China - Xian
Tel: 86-29-8833-7252
Fax: 86-29-8833-7256
Thailand - Bangkok
Tel: 66-2-694-1351
Fax: 66-2-694-1350
UK - Wokingham
Tel: 44-118-921-5869
Fax: 44-118-921-5820
China - Xiamen
Tel: 86-592-2388138
Fax: 86-592-2388130
China - Zhuhai
Tel: 86-756-3210040
Fax: 86-756-3210049
DS01160B-page 24
Italy - Milan
Tel: 39-0331-742611
Fax: 39-0331-466781
Japan - Yokohama
Tel: 81-45-471- 6166
Fax: 81-45-471-6122
11/29/11
 2008-2012 Microchip Technology Inc.