PWM Manual
PWM Manual
14
Motor Control PWM
DS70187E-page 14-1
14.1
INTRODUCTION
This section describes the Motor Control PWM (MCPWM) peripheral in the dsPIC33F/PIC24H family of devices.
14.1.1
The MCPWM is used to generate a periodic pulse waveform, which is useful in motor and power control applications. The MCPWM module acts as a timer to count up to a period count value. The time period and the duty cycle of the pulses are both programmable. Depending on the device, there are up to two MCPWM modules, MCPWM1 and MCPWM2, in the dsPIC33F/PIC24H family of devices. The features of these two modules are listed in 14.2 Features of the MCPWM1 Module and 14.3 Features of the MCPWM2 Module.
14.2
The distinctive features of the MCPWM1 module are summarized below: Up to eight PWM outputs with four duty cycle generators Dedicated time base that supports TCY/2 PWM edge resolution On-the-fly PWM frequency changes Hardware dead time generators Output pin polarity programmed by device Configuration bits Multiple operating and output modes: - Single event mode - Edge-aligned mode - Center-aligned mode - Center-aligned mode with double updates - Complementary Output mode - Independent Output mode Manual override register for PWM output pins Duty cycle updates that can be configured to be immediate or synchronized to the PWM Up to two hardware fault input pins with programmable function Special Event Trigger for synchronizing analog-to-digital conversions Output pins associated with the PWM can be individually enabled Note: Depending on the dsPIC33F/PIC24H device, there are different versions of the MCPWM1 module. Refer to the Motor Control PWM chapter in the specific device data sheet for more information.
DS70187E-page 14-2
14
Motor Control PWM
DS70187E-page 14-3
PxTCON: PWM Time Base Control Register This register is used for the selection of Time Base mode, time base input clock prescaler, time base output postscaler, and for enabling the time base timer. PxTMR: PWM Time Base Register The time base count value and the time base count direction status are obtained in this register. PxTPER: PWM Time Base Period Register The PWM time base value is written into this register, which determines the PWM operating frequency. PxSECMP: Special Event Compare Register This register provides the compare value at which the analog-to-digital conversions are to be synchronized with the PWM time base. Comparison can be either during up-count or down-count in Center-aligned mode depending on the setting of the SEVTDIR bit in this register. PWMxCON1: PWM Control Register 1 Selection of either Independent or Complementary mode for each PWM I/O pair is performed in this register. PWMxCON2: PWM Control Register 2 This register provides the following selections: Selection of a PWM Special Event Trigger output postscaler value Immediate updating of duty cycle registers Selection of output override synchronization with the time base Enabling updates from duty cycle and period buffer registers
PxDTCON1: Dead Time Control Register 1 The dead time value and clock period prescaler for Dead Time Unit A and Dead Time Unit B can be selected using this register. PxDTCON2: Dead Time Control Register 2 Dead time insertions from Dead Time Unit A or Dead Time Unit B for each of the PWM outputs can be selected using this register. PxFLTACON: Fault A Control Register This register provides the following selections: - PWM output pin driven on an external fault active or inactive state - Fault mode Cycle-by-Cycle mode or Latched mode - Pin pair to be controlled or not controlled by Fault Input A PxFLTBCON: Fault B Control Register This register provides the following selections: - PWM output pin driven on an external fault active or inactive state - Fault mode Cycle-by-Cycle mode or Latched mode - Pin pair to be controlled or not controlled by Fault Input B PxOVDCON: Override Control Register This register is used for enabling the output override feature and for PWM output pin control selection. PxDC1: PWM Duty Cycle Register 1 The 16-bit PWM duty cycle value for the PWM output pair 1 is written into this register.
DS70187E-page 14-4
14
Motor Control PWM
DS70187E-page 14-5
Register 14-1: R/W-0 PTEN bit 15 R/W-0 bit 7 Legend: R = Readable bit
PTEN: PWM Time Base Timer Enable bit 1 = PWM time base is on 0 = PWM time base is off Unimplemented: Read as 0 PTSIDL: PWM Time Base Stop in Idle Mode bit 1 = PWM time base halts in CPU Idle mode 0 = PWM time base runs in CPU Idle mode Unimplemented: Read as 0 PTOPS<3:0>: PWM Time Base Output Postscale Select bits 1111 = 1:16 postscale 0001 = 1:2 postscale 0000 = 1:1 postscale PTCKPS<1:0>: PWM Time Base Input Clock Prescale Select bits 11 = PWM time base input clock period is 64 TCY (1:64 prescale) 10 = PWM time base input clock period is 16 TCY (1:16 prescale) 01 = PWM time base input clock period is 4 TCY (1:4 prescale) 00 = PWM time base input clock period is TCY (1:1 prescale) PTMOD<1:0>: PWM Time Base Mode Select bits 11 = PWM time base operates in Continuous Up/Down Count mode with interrupts for double PWM updates 10 = PWM time base operates in Continuous Up/Down Count mode 01 = PWM time base operates in Single Event mode 00 = PWM time base operates in Free Running mode
bit 14 bit 13
bit 3-2
bit 1-0
DS70187E-page 14-6
PTDIR: PWM Time Base Count Direction Status bit (read-only) 1 = PWM time base is counting down 0 = PWM time base is counting up PTMR<14:0>: PWM Time Base Register Count Value bits
bit 14-0
PxTPER: PWM Time Base Period Register R/W-0 R/W-0 R/W-0 R/W-0 PTPER <14:8> R/W-0 R/W-0 R/W-0 bit 8 R/W-0 R/W-0 R/W-0 R/W-0 PTPER <7:0> R/W-0 R/W-0 R/W-0 bit 0
14
W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
DS70187E-page 14-7
SEVTDIR: Special Event Trigger Time Base Direction bit(1) 1 = Special Event Trigger will occur when the PWM time base is counting down 0 = Special Event Trigger will occur when the PWM time base is counting up SEVTCMP <14:0>: Special Event Compare Value bits(2) SEVTDIR is compared with the PTDIR bit (PxTMR<15>) to generate the Special Event Trigger. SEVTCMP<14:0> is compared with the PTMR bit (PxTMR<14:0>) to generate the Special Event Trigger.
DS70187E-page 14-8
R/W-y(1) PEN3H
R/W-y(1) PEN2H
R/W-y(1) PEN1H
R/W-y(1) PEN4L
R/W-y(1) PEN3L
R/W-y(1) PEN2L
y = Bit depends on configuration W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
bit 15-12 Unimplemented: Read as 0 bit 11-8 PMOD4:PMOD1: PWM I/O Pair Mode bits 1 = PWM I/O pin pair is in Independent Output mode 0 = PWM I/O pin pair is in Complementary Output mode PEN4H:PEN1L: PWMxHy I/O Enable bits(1) 1 = PWMxHy(2,3) pin is enabled for PWM output 0 = PWMxHy(2,3) pin disabled; I/O pin becomes general purpose I/O The Reset condition of the PEN4H:PEN1H and PEN4L:PEN1L bits depend on the value of the PWMPIN device configuration bit in the FPOR register. When PWMPIN is set to 0, Reset values are 1 and when PWMPIN is set to 1, Reset values are 0. The letter x refers to the MCPWM module number. The letter y refers to the MCPWM Duty Cycle register number. In devices where the PWMLOCK configuration bit is present in the FOSCSEL configuration register, the PWMLOCK register can be write-protected. If the PWMLOCK bit (FOSCSEL<6>) is asserted (PWMLOCK = 1), the PWMxCON1 register is writable only after the proper sequence is written to the PWMxKEY register. If the PWMLOCK bit (FOSCSEL<6>) is deasserted (PWMLOCK = 0), the PWMxCON1 register is writable at any times. For more information on the unlock sequence, refer to 14.16.5 Write Protected Registers.
bit 7-0
Note 1:
2: 3: Note:
14
Motor Control PWM
DS70187E-page 14-9
bit 15-12 Unimplemented: Read as 0 bit 11-8 SEVOPS<3:0>: PWM Special Event Trigger Output Postscale Select bits 1111 = 1:16 postscale 0001 = 1:2 postscale 0000 = 1:1 postscale Unimplemented: Read as 0 IUE: Immediate Update Enable bit 1 = Updates to the active PxDCy(1,2) registers are immediate 0 = Updates to the active PxDCy(1,2) registers are synchronized to the PWM time base OSYNC: Output Override Synchronization bit 1 = Output overrides through the PxOVDCON(1) register are synchronized to the PWM time base 0 = Output overrides through the PxOVDCON(1) register occur on the next TCY boundary UDIS: PWM Update Disable bit 1 = Updates from duty cycle and period buffer registers are disabled 0 = Updates from duty cycle and period buffer registers are enabled The letter x refers to the MCPWM module number. The letter y refers to the MCPWM Duty Cycle register number.
bit 1
bit 0
Note 1: 2:
DS70187E-page 14-10
R/W-0 R/W-0 DTBPS<1:0> bit 15 R/W-0 R/W-0 DTAPS<1:0> bit 7 Legend: R = Readable bit -n = Value at POR
bit 15-14 DTBPS<1:0>: Dead Time Unit B Prescale Select bits 11 = Clock period for Dead Time Unit B is 8 TCY 10 = Clock period for Dead Time Unit B is 4 TCY 01 = Clock period for Dead Time Unit B is 2 TCY 00 = Clock period for Dead Time Unit B is TCY bit 13-8 bit 7-6 DTB<5:0>: Unsigned 6-bit Dead Time Value bits for Dead Time Unit B DTAPS<1:0>: Dead Time Unit A Prescale Select bits 11 = Clock period for Dead Time Unit A is 8 TCY 10 = Clock period for Dead Time Unit A is 4 TCY 01 = Clock period for Dead Time Unit A is 2 TCY 00 = Clock period for Dead Time Unit A is TCY DTA<5:0>: Unsigned 6-bit Dead Time Value bits for Dead Time Unit A
bit 5-0
Register 14-8: U-0 bit 15 R/W-0 DTS4A bit 7 Legend: R = Readable bit
PxDTCON2: Dead Time Control Register 2 U-0 U-0 U-0 U-0 U-0 U-0 U-0 bit 8
14
Motor Control PWM
R/W-0 DTS4I
R/W-0 DTS3A
R/W-0 DTS3I
R/W-0 DTS2A
R/W-0 DTS2I
R/W-0 DTS1A
Unimplemented: Read as 0 DTS4A:DTS1I: Dead Time Select bits for PWM Signal Going Active 1 = Dead time provided from Dead Time Unit B 0 = Dead time provided from Dead Time Unit A
DS70187E-page 14-11
U-0
U-0
U-0
R/W-y(1) FAEN4(2)
R/W-y(1) FAEN3(2)
R/W-y(1) FAEN2(2)
y = Bit depends on configuration W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
FAOV4H:FAOV1L: Fault Input A PWM Override Value bits 1 = PWM output pin is driven Active on an external fault input event 0 = PWM output pin is driven Inactive on an external fault input event FLTAM: Fault A Mode bit 1 = Fault A input pin functions in Cycle-by-Cycle mode 0 = Fault A input pin latches all control pins to the programmed states in PxFLTACON<15:8> Unimplemented: Read as 0 FAEN4:FAEN1: Fault Input A Enable bit(1,2) 1 = PWMxHy/PWMxLy(3,4) pin pair is controlled by Fault Input A 0 = PWMxHy/PWMxLy(3,4) pin pair is not controlled by Fault Input A In devices where the PWMLOCK bit is present in the FOSCSEL configuration register, the Reset value for this bit is 1. In all other configurations, the Reset value for this bit is 0. Refer to the Motor Control PWM chapter in the specific device data sheet for more information. The fault pin A has priority over fault pin B, if enabled. The letter x refers to the MCPWM module number. The letter y refers to the MCPWM Duty Cycle register number. In devices where the PWMLOCK bit is present in the FOSCSEL<6> configuration register, the PWMLOCK register can be write-protected. If the PWMLOCK bit (FOSCSEL<6>) is asserted (PWMLOCK = 1), the PxFLTACON register is writable only after the proper sequence is written to the PWMxKEY register. If the PWMLOCK bit (FOSCSEL<6>) is deasserted (PWMLOCK = 0), the PxFLTACON register is writable at any time. For more information on the unlock sequence, refer to 14.16.5 Write Protected Registers.
bit 7
Note 1:
2: 3: 4: Note:
DS70187E-page 14-12
U-0
U-0
U-0
R/W-y(1) FBEN4(2)
R/W-y(1) FBEN3(2)
R/W-y(1) FBEN2(2)
y = Bit depends on configuration W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown
FBOV4H:FBOV1L: Fault Input B PWM Override Value bits 1 = PWM output pin is driven Active on an external fault input event 0 = PWM output pin is driven Inactive on an external fault input event FLTBM: Fault B Mode bit 1 = Fault B input pin functions in Cycle-by-Cycle mode 0 = Fault B input pin latches all control pins to the programmed states in PxFLTBCON<15:8> Unimplemented: Read as 0 FBEN4:FBEN1: Fault Input B Enable bit(1,2) 1 = PWMxHy/PWMxLy(3,4) pin pair is controlled by Fault Input B 0 = PWMxHy/PWMxLy(3,4) pin pair is not controlled by Fault Input B In devices where the PWMLOCK configuration bit is present in the FOSCSEL configuration register, the Reset value for this bit is 1. In all other configurations, the Reset value for this bit is 0. Refer to the Motor Control PWM chapter in the specific device data sheet for more information. Fault pin A has priority over fault pin B, if enabled. The letter x refers to the MCPWM module number. The letter y refers to the MCPWM duty cycle generator number In devices where the PWMLOCK configuration bit is present in the FOSCSEL configuration register, the PWMLOCK register can be write-protected. If the PWMLOCK bit (FOSCSEL<6>) is asserted (PWMLOCK = 1), the PxFLTACON register is writable only after the sequence is written to the PWMxKEY register. If the PWMLOCK bit (FOSCSEL<6>) is deasserted (PWMLOCK = 0), the PxFLTACON register is writable at any time. For more information on the unlock sequence, refer to 14.16.5 Write Protected Registers.
bit 7
Note 1:
2: 3: 4: Note:
14
Motor Control PWM
DS70187E-page 14-13
R/W-0 POUT4L
R/W-0 POUT3H
R/W-0 POUT3L
R/W-0 POUT2H
R/W-0 POUT2L
R/W-0 POUT1H
POVD4H:POVD1L: PWM Output Override bits 1 = Output on PWMxHy/PWMxLy(1,2) I/O pin is controlled by the PWM generator 0 = Output on PWMxHy/PWMxLy(1,2) I/O pin is driven, controlled by the value in the corresponding POUTyH/POUTyL(2) bit POUT4H:POUT1L: PWM Manual Output bits 1 = PWMxHy/PWMxLy I/O pin is driven Active when the corresponding POVDyH/POVDyL(2) bit is cleared 0 = PWMxHy/PWMxLy I/O pin is driven Inactive when the corresponding POVDyH/POVDyL(2) bit is cleared The letter x refers to the MCPWM module number. The letter y refers to the MCPWM duty cycle generator number.
bit 7-0
Note 1: 2:
Register 14-12: PxDC1: PWM Duty Cycle Register 1 R/W-0 bit 15 R/W-0 bit 7 Legend: R = Readable bit -n = Value at POR bit 15-0 W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown R/W-0 R/W-0 R/W-0 R/W-0 PxDC1<7:0> R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PxDC1<15:8> R/W-0 R/W-0 R/W-0 bit 8 R/W-0 bit 0
DS70187E-page 14-14
Register 14-14: PxDC3: PWM Duty Cycle Register 3 R/W-0 bit 15 R/W-0 bit 7 Legend: R = Readable bit -n = Value at POR bit 15-0 W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown R/W-0 R/W-0 R/W-0 R/W-0 PxDC3<7:0> R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PxDC3<15:8> R/W-0 R/W-0 R/W-0 bit 8 R/W-0 bit 0
14
Motor Control PWM
DS70187E-page 14-15
Register 14-16: PWMxKEY: PWM Unlock Register R/W-0 bit 15 R/W-0 bit 7 Legend: R = Readable bit -n = Value at POR bit 15-0 Note 1: W = Writable bit 1 = Bit is set U = Unimplemented, read as 0 0 = Bit is cleared x = Bit is unknown R/W-0 R/W-0 R/W-0 R/W-0 PWMKEY<7:0>(1) R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 PWMKEY<15:8>(1) R/W-0 R/W-0 R/W-0 bit 8 R/W-0 bit 0
PWMxKEY<15:0>: PWM Unlock bits(1) If the PWMLOCK configuration bit is asserted (PWMLOCK = 1), the PWMxCON1, PxFLTACON and PxFLTBCON registers are writable only after the proper sequence is written to the PWMxKEY register. If the PWMLOCK configuration bit is deasserted (PWMLOCK = 0), the PWMxCON1, PxFLTACON and PxFLTBCON registers are writable at any time. For more information on the unlock sequence, refer to 14.16.5 Write Protected Registers. This register is implemented only in devices where the PWMLOCK configuration bit is present in the FOSCSEL configuration register.
Note:
DS70187E-page 14-16
P = Programmable configuration bit bit 23-8 bit 7 Unimplemented: Read as 1 PWMPIN: Motor Control PWM Module Pin Mode bit 1 = PWM module pins controlled by the PORT register at device Reset (tri-stated) until the PTEN bit is set 0 = PWM module pins controlled by the PWM module at device Reset HPOL: Motor Control PWM High-side Polarity bit 1 = MCPWM module high-side output pins have active-high output polarity 0 = MCPWM module high-side output pins have active-low output polarity LPOL: Motor Control PWM Low-side Polarity bit 1 = MCPWM module low-side output pins have active-high output polarity 0 = MCPWM module low-side output pins have active-low output polarity These bits are not used by the MCPWM module. For more information, refer to Section 25. Device Configuration (DS70194).
bit 6
bit 5
bit 4-0
14
Motor Control PWM
DS70187E-page 14-17
IESO: Not used by the MCPWM module. Refer to the Special Features chapter in the specific device data sheet for more information. PWMLOCK: Motor Control PWM Unlock bit 1 = MCPWM module registers, PWMxCON1, PxFLTACON and PxFLTBCON, are write-protected 0 = MCPWM module registers are not write-protected Unimplemented: Read as 0 These bits are not used by the MCPWM module. Refer to the Special Features chapter in the specific device data sheet for more information.
DS70187E-page 14-18
PXOVDCON
PWMXKEY
FLTxA FLTxB Dead Time Generator and Override Control PWMXHY Driver PWMXLY PWM Output
PXDCY Buffer
14
Motor Control PWM
PXTMR
PXTPER Buffer
DS70187E-page 14-19
The MCPWM module has up to four PWM generators. There are four special function PWM Duty Cycle registers (PxDCy) associated with the MCPWM module to specify the duty cycle values for the PWM generators. The duty cycle gives the time for which the PWM pulses are active in a given PWM time period. Note 1: 2: The letter x refers to the MCPWM module number. The letter y refers to the MCPWM Duty Cycle register number.
14.6.2
Dead time generation is automatically enabled when any of the PWM I/O pin pairs are operating in Complementary Output mode. As the power devices cannot switch instantaneously, some time must be provided between the turn-off event of one PWM output in a complementary pair and the turn-on event of the other transistor. There are two programmable dead time values. To increase user software flexibility, these dead times can be used in either of the two methods described below: The PWM output signals can be optimized for different turn-off times in the high-side and low-side transistors. The first dead time is inserted between the turn-off event of the lower transistor of the complementary pair and the turn-on event of the upper transistor. The second dead time is inserted between the turn-off event of the upper transistor and the turn-on event of the lower transistor. The two dead times can be assigned to individual PWM I/O pairs. This operating mode allows the MCPWM module to drive different transistor/load combinations with each complementary PWM I/O pair. There are up to two dead time generation units, A and B, that can be configured in the Dead Time Control registers, PxDTCON1 and PxDTCON2.
14.6.3
The MCPWM module output override feature allows the user software to manually drive the PWM I/O pins to the specified logic states independent of the duty cycle comparison units. The PWM Output Override bits (POVD4H:POVD1L) in the Override Control register (PxOVDCON<15:8>) are useful when controlling various types of electrically commutated motors. The output override (PxOVDCON<15:8>). feature can be controlled using the POVD4H:POVD1L bits
14.6.4
The MCPWM module has a Special Event Trigger that allows analog-to-digital conversions to be synchronized to the PWM time base. The analog-to-digital sampling and conversion time may be programmed to occur at any point within the PWM period. The Special Event Compare register (PxSECMP) specifies the special event compare value for generating the Special Event Trigger to start analog-to-digital conversion. Note: Detailed descriptions of the PWM timer, PWM time base period, output override feature and Special Event Trigger are provided in the subsequent sections.
DS70187E-page 14-20
14.7.1
In this mode, the PWM Time Base register (PxTMR) will count upward until the value in the PWM Time Base Period register (PxTPER) is matched. The PxTMR register is reset on the next input clock edge. The timer will continue counting upward and resetting until the PWM Time Base Timer Enable bit (PTEN) in the PWM Time Base Control register (PxTCON<15>) remains set.
14.7.2
The PxTMR register will begin counting upward when the PTEN bit (PxTCON<15>) is set. When the PxTMR value matches the PxTPER register value, the PxTMR register is reset on the next input clock edge, and the PTEN bit (PxTCON<15>) is cleared by the hardware to halt the timer.
14.7.3
In this mode, the PxTMR register will count upward until the value in the PxTPER register is matched. The timer will start counting downward on the following clock edge and continue counting down until it reaches zero. The PWM Time Base Count Direction Status bit, PTDIR (PxTMR<15>) indicates the counting direction. The PTDIR bit (PxTMR<15>) is set when the timer starts counting downward.
14.7.4
Continuous Up/Down Count Mode with Interrupts for Double Update of Duty Cycle (PTMOD<1:0> = 0b11)
This mode is similar to the Continuous Up/Down Count mode, with the exception that an interrupt event is generated twice per time base: once when the PxTMR register is equal to zero and a second time when a period match occurs.
14
Motor Control PWM
DS70187E-page 14-21
Zero Match Time Base 1:1 1:4 Input Prescaler 1:16 1:64 Period Match
TCY
Zero-Detect 0
Timer Direction Control Gated Duty Cycle Update Disable (UDIS) Immediate Update Enable (IUE)
Interrupt Control
1:16
PTMOD<1:0>
14.8.1
The input clock (TCY) derived from the oscillator source can be prescaled to four possible options: 1:1, 1:4, 1:16, and 1:64. These options can be selected by using the PWM Time Base Input Clock Prescale Select bits, PTCKPS<1:0> (PxTCON<3:2>). The prescaled clock is the input to the PWM clock control logic block.
14.8.2
The PWM clock control logic block determines the nature of the PWM timer output, depending on the time period match, zero match and PTMOD<1:0> (PxTCON<1:0>). The time base input prescaler counter is cleared when any of the following occurs: A write to the PxTMR register A write to the PxTCON register A device Reset The PxTMR register is not cleared when PxTCON is written. The time base value of the PWM Time Base Register Count Value bits, PTMR<14:0> (PxTMR<14:0>) is compared with the contents of the PxTPER register. If a match occurs, a period match signal is generated. If the time base value of the PTMR<14:0> (PxTMR<14:0>) is zero, a zero detect signal is generated.
DS70187E-page 14-22
The timer direction control block determines the count direction. The PTDIR bit (PxTMR<15>) is a read-only bit that gives the current direction of the count. If the PTDIR bit (PxTMR<15>) is cleared, the PxTMR register is counting upward. If the PTDIR bit (PxTMR<15>) is set, the PxTMR register is counting downward. The time base is enabled or disabled by setting or clearing the PTEN bit (PxTCON<15>). The PxTMR register is not cleared when the PTEN bit (PxTCON<15>) is cleared in user software.
14.8.4
The time base output postscaler is used to optionally select one of the several possible options (1:1 to 1:16, scaling inclusive) to postscale the timer output. The interrupt control logic decides when to set the PWM Interrupt Flag, PWMxIF, for generating a PWM interrupt, depending on the postscale value. The postscaler is useful when the PWM duty cycles need not be updated every PWM cycle. The time base output postscaler counter is cleared when any of the following occurs: A write to the PxTMR register A write to the PxTCON register A device Reset The PxTMR register is not cleared when the PxTCON register is written.
14.8.5
The PxTPER register determines the counting period for the PxTMR register. The user software must write a 15-bit value into the PWM Time Base Period register (PxTPER). When the value of the PTMR bit (PxTMR<14:0>) matches the value of the PTPER bit (PxTPER<14:0>), the time base will either reset to zero or reverse the count direction on the next clock input edge. The action taken depends on the operating mode of the time base. The time base period is double-buffered to allow run-time changes of the time period of the PWM signal without any glitches. The PxTPER register serves as a buffer to the actual register, which is not accessible by the user software. The PxTPER register contents are loaded into the actual Time Base Period register at the following times: Free Running and Single Event modes: when the PxTMR register is reset to zero after a match with the PxTPER register Up/Down Count modes: when the PxTMR register is zero The value held in the PxTPER register is automatically loaded into the PxTPER register when the PWM time base is disabled (PTEN = 0). Figure 14-3 and Figure 14-4 illustrate the times when the contents of the PxTPER register are loaded into the time base period register. Figure 14-3: PWM Period Buffer Updates in Free Running Count Mode
Period Value Loaded from PxTPER Buffer Register
14
Motor Control PWM
DS70187E-page 14-23
Figure 14-4:
DS70187E-page 14-24
14
Motor Control PWM
DS70187E-page 14-25
14.9.1
An interrupt event is generated when the PxTMR register is reset to 0 due to a match with the PxTPER register. The postscaler selection bits can be used in Free Running mode, to reduce the frequency of the interrupt events.
14.9.2
An interrupt event is generated when the PxTMR register is reset to 0 due to a match with the PxTPER register. The PTEN bit (PxTCON<15>) is also cleared to stop further PxTMR register increments. The postscaler selection bits have no effect in Single Event mode.
14.9.3
An interrupt event is generated each time the value of the PxTMR register is equal to zero and the PWM time base begins to count upward. The postscale selection can be used to reduce the frequency of interrupt events in Up/Down Count mode.
14.9.4
An interrupt event is generated each time the PxTMR register is equal to zero and each time a period match occurs. The postscale selection has no effect in Up/Down Count mode with Double Update of Duty Cycle. This mode allows the control loop bandwidth to be doubled because the PWM duty cycles can be updated twice per period. Every rising and falling edge of the PWM signal can be controlled using Double Update mode. On generation of a PWM interrupt, the PWM Interrupt Flag (PWMIF) is set in the corresponding IFSx register. Note: For more informations refer to the Interrupts chapter in the specific device data sheet, or refer to Section 41. Interrupts (Part IV) (DS70300) in the dsPIC33F/PIC24H Family Reference Manual.
DS70187E-page 14-26
In addition to the PENyH and PENyL control bits, three device Configuration bits in the POR Device Configuration register (FPOR) provide PWM output pin control. This register contains the following configuration bits: MCPWM High-side Drivers PWMyH Polarity bit (HPOL) MCPWM Low-side Drivers PWMyL Polarity bit (LPOL) MCPWM Drivers Initialization bit (PWMPIN) These three configuration bits work in conjunction with the PENxH and PENxL bits located in the PWMxCON1 register. These configuration bits ensure that the PWM pins are in the correct states after a device Reset.
14
Motor Control PWM
DS70187E-page 14-27
PWMXIF
DS70187E-page 14-28
PWMXH2 Period
14
Motor Control PWM
DS70187E-page 14-29
1H
2H
3H
1L
2L
3L
Complementary PWM Output mode is selected for each PWM I/O pin pair by clearing the PWM I/O Pair Mode bit (PMOD) in the PWM Control Register 1 (PWMxCON1<11:8>). The PWM I/O pins are set to Complementary PWM Output mode by default on a device Reset. Figure 14-9: PWM Channel Block Diagram, Complementary PWM Output Mode
PWMXH
PWMXL
DS70187E-page 14-30
1H
1L
Figure 14-11:
PWM Block Diagram for One Output Pin Pair Independent PWM Output Mode
PWM Generator
PWMxH
PWMxL
14
Motor Control PWM
DS70187E-page 14-31
When the PWM time base is operating in Up/Down Count mode (PTMOD<1:0> = 10), duty cycles are updated when the value of the PxTMR register is zero and the PWM time base begins to count upward. Figure 14-12 indicates the times when the duty cycle updates occur for Up/Down Count mode. When the PWM time base is in Up/Down Count mode with double updates (PTMOD<1:0> = 11), duty cycles are updated when the value of the PxTMR register is zero and when the value of the PxTMR register matches the value in the PxTPER register. Figure 14-12 and Figure 14-13 indicate the times when the duty cycle updates occur for Up/Down Count mode of the PWM time base. Figure 14-12: Duty Cycle Update Times in Up/Down Count Mode
Duty Cycle Value Loaded from PXDCY Register, CPU Interrupted
PWM Output
PXTMR Value
Figure 14-13: Duty Cycle Update Times in Up/Down Count Mode with Double Updates
Duty Cycle Value Loaded from PXDCY Register, CPU Interrupted
PWM Output
PXTMR Value
DS70187E-page 14-32
50%
90%
10%
90%
Case 1
PXTMR Value
14
Motor Control PWM
DS70187E-page 14-33
Table 14-1 provides the PWM resolutions and PWM frequencies for different clock frequencies and PxTPER values. The PWM frequencies provided in Table 14-1 are for edge-aligned (Free Running PxTMR) PWM mode. For center-aligned modes (Up/Down PxTMR mode), the PWM frequencies are half the values in Table 14-1, as indicated in Table 14-2. Table 14-1: Example of PWM Frequencies and Resolutions, 1:1 Prescaler, Edge-aligned PWM PxTPER Value 0x7FFE 0x3FE 0x7FFE 0x1FE 0x7FFE 0xFE 0x7FFE 0x7E PXDCY Value for 100% 0xFFFE 0x7FE 0xFFFE 0x3FE 0xFFFE 0x1FE 0xFFFE 0xFE PWM Resolution 16 bits 11 bits 16 bits 10 bits 16 bits 9 bits 16 bits 8 bits PWM Frequency (FPWM) 1.22 kHz 39.1 kHz 610 Hz 39.1 kHz 305 Hz 39.1 kHz 153 Hz 39.1 kHz
TCY (FCY) 25 ns (40 MHz) 25 ns (40 MHz) 50 ns (20 MHz) 50 ns (20 MHz) 100 ns (10 MHz) 100 ns (10 MHz) 200 ns (5 MHz) 200 ns (5 MHz) Table 14-2:
Example of PWM Frequencies and Resolutions, 1:1 Prescaler, Center-aligned PWM PxTPER Value 0x7FFE 0x3FFE 0x7FFE 0x1FFE 0x7FFE 0xFFE 0x7FFE 0x7FE PXDCY Value for 100% 0xFFFE 0x7FFE 0xFFFE 0x3FFE 0xFFFE 0x1F FE 0xFFFE 0xFFE PWM Resolution 16 bits 15 bits 16 bits 14 bits 16 bits 13 bits 16 bits 12 bits PWM Frequency 610 Hz 1.22 kHz 305 Hz 1.22 kHz 153 Hz 1.22 kHz 76.3 Hz 1.22 kHz
TCY (FCY) 25 ns (40 MHz) 25 ns (40 MHz) 50 ns (20 MHz) 50 ns (20 MHz) 100 ns (10 MHz) 100 ns (10 MHz) 200 ns (5 MHz) 200 ns (5 MHz) Note:
100% duty cycle cannot be accomplished when PTPER = 0x7FFF. Maximum duty cycle in this scenario is 100 percent minus one-half TCY.
DS70187E-page 14-34
PXTPER = 10
TCY
PxTMR
PXDCY = 14 PXDCY = 15
TCY/2
14
Motor Control PWM
PWM Edge Event
Edge Logic
Note: PXDCY<0> is compared to the FOSC/2 signal when the prescaler is 1:1.
DS70187E-page 14-35
TCY
Prescaler
Clock Control
6-bit Down Counter High-side PWM Signal to Output Pin Low-side PWM Signal to Output Pin Dead Time Select Logic
PWM Generator
PWMXLY
DS70187E-page 14-36
14
Motor Control PWM
Equation 14-4 provides the formula for dead time calculation. Equation 14-4: Dead Time Calculation Dead Time DT = ------------------------------------------------------Prescale Value TCY Note: Dead Time (DT) is the DTA<5:0> or DTB<5:0> register value.
DS70187E-page 14-37
/* Configuration register FPOR */ /* High and Low switches set to active-high state */ _FPOR(RST_PWMPIN & PWMxH_ACT_HI & PWMxL_ACT_HI) /* PWM time base operates in a Free Running mode */ P1TCONbits.PTMOD = 0b00; /* PWM time base input clock period is TCY (1:1 prescale) */ /* PWM time base output post scale is 1:1 */ P1TCONbits.PTCKPS = 0b00; P1TCONbits.PTOPS = 0b00; /* /* /* /* Choose PWM time period based on input clock selected */ Refer to Equation 14-1 */ PWM switching frequency is 20 kHz */ FCY is 20 MHz */
P1TPER = 999;
DS70187E-page 14-38
Example 14-3:
/* Clock period for Dead Time Unit A is TcY */ /* Clock period for Dead Time Unit B is TcY */ P1DTCON1bits.DTAPS = 0b00; P1DTCON1bits.DTBPS = 0b00; /* Dead time value for Dead Time Unit A */ /* Dead time value for Dead Time Unit B */ P1DTCON1bits.DTA = 10; P1DTCON1bits.DTB = 20; /* Dead Time Unit selection for PWM signals */ /* Dead Time Unit A selected for PWM active transitions */ /* Dead Time Unit B selected for PWM inactive transitions */ P1DTCON2bits.DTS3A = 0; P1DTCON2bits.DTS2A = 0; P1DTCON2bits.DTS1A = 0; P1DTCON2bits.DTS3I = 1; P1DTCON2bits.DTS2I = 1; P1DTCON2bits.DTS1I = 1;
14
Motor Control PWM
Example 14-4:
/* PWM I/O pin controlled by PWM Generator */ P1OVDCONbits.POVD3H P1OVDCONbits.POVD2H P1OVDCONbits.POVD1H P1OVDCONbits.POVD3L P1OVDCONbits.POVD2L P1OVDCONbits.POVD1L = = = = = = 1; 1; 1; 1; 1; 1;
Example 14-5:
/* Initialize duty cycle values for PWM1, PWM2 and PWM3 signals */ P1DC1 = 200; P1DC2 = 200; P1DC3 = 200;
Example 14-6:
P1TCONbits.PTEN = 1;
DS70187E-page 14-39
DS70187E-page 14-40
14
Motor Control PWM
DS70187E-page 14-41
PxTMR Case 1: PWM FLTxA Case 2: PWM FLTxA Case 3: PWM FLTxA Note: Arrows indicate the time when normal PWM operation is restored. Duty Cycle = 100% Fault State Duty Cycle = 50% Fault State Duty Cycle = 50% Fault State
Duty Cycle = 50% PWM FLTXA FLTXB Fault State B Fault State A
DS70187E-page 14-42
PXOVDCON <POUT4H:POUT1L> Output Override Logic PXOVDCON <POVD4H:POVD1L> Dead Time Control Logic
Fault Logic
FLTxA/FLTxB
14
Motor Control PWM
All control bits associated with the PWM output override function are in the PxOVDCON register. The upper half of the PxOVDCON register contains eight PWM Output Override bits (POVDx) that determine which PWM I/O pins will be overridden. The lower half of the PxOVDCON register contains eight PWM Manual Output bits (POUTx) that determine the state of the PWM I/O pin when it is overridden with the POVDx bit. The POVD4H:POVD1L bits (PxOVDCON<15:8>) are active-low control bits. When the POVD4H:POVD1L bits (PxOVDCON<15:8>) are set, the corresponding POUTx bit has no effect on the PWM output. When one of the POVD4H:POVD1L bits (PxOVDCON<15:8>) is cleared, the output on the corresponding PWM I/O pin is determined by the state of the corresponding POUT4H:POUT1L bits (PxOVDCON<7:0>). When the POUT4H:POUT1L bits (PxOVDCON<7:0>) are set, the PWM pin is driven to its active state. When the POUT4H:POUT1L bits (PxOVDCON<7:0>) are cleared, the PWM pin is driven to its inactive state. Example 14-7 demonstrates the PWM Output Override feature.
DS70187E-page 14-43
/* PWM I/O pins are driven to active state by setting the corresponding bit */ P1OVDCONbits.POUT3H P1OVDCONbits.POUT2H P1OVDCONbits.POUT1H P1OVDCONbits.POUT3L P1OVDCONbits.POUT2L P1OVDCONbits.POUT1L = = = = = = 1; 1; 1; 1; 1; 1;
DS70187E-page 14-44
Note:
Switching times between states 1 through 6 are controlled by the user software. The state switch is controlled by writing a new value to the PxOVDCON register.
PWM Output Override Example 2 PxOVDCON<15:8> b11000011 b11110000 b00111100 b00001111 PxOVDCON<7:0> b00000000 b00000000 b00000000 b00000000
14
Motor Control PWM
DS70187E-page 14-45
PWMXL1 Note: Switching times between states 1 through 4 are controlled by the user software. The state switch is controlled by writing a new value to PxOVDCON. The PWM outputs are operated in the independent mode for this example.
DS70187E-page 14-46
/* Select Special Event time base direction such that trigger will occur */ /* when PWM time base is counting downwards */ P1SECMPbits.SEVTDIR = 1; /* Select PWM Special Event Trigger Output Postscale value to 1:1 */ PWM1CON2bits.SEVOPS = 0b0000; /* Assign special event compare value */ P1SECMPbits.SEVTCMP = 100; /* Choose ADC1 trigger source such that MCPWM1 module stops sampling and */ /* starts conversion */ AD1CON1bits.SSRC = 0b011;
14
Motor Control PWM
DS70187E-page 14-47
DS70187E-page 14-48
; This code example drives all PWM1 pins to the inactive state ; before executing the PWRSAV instruction. CLR PWRSAV SETM.B P1OVDCON #0 P1OVDCONH ; Force all PWM outputs inactive ; Put the device in Sleep mode ; Set POVD bits when device wakes
The Fault A and Fault B input pins, if enabled to control the PWM pins through the PxFLTACON and PxFLTBCON registers, continue to function normally when the device is in Sleep mode. If one of the fault pins is driven low while the device is in Sleep mode, the PWM outputs are driven to the programmed Fault states in the PxFLTACON and PxFLTBCON registers. The fault input pins can also wake the CPU from Sleep mode. If the fault interrupt enable bit is set (FLTxAIE = 1 or FLTxBIE = 1), the device will wake-up from Sleep mode when the fault pin is driven low. If the fault pin interrupt priority is greater than the current CPU priority, program execution starts at the fault pin interrupt vector location upon wake-up. Otherwise, execution continues from the next instruction following the PWRSAV instruction.
14
Motor Control PWM
DS70187E-page 14-49
14.18
REGISTER MAPS
A summary of the registers associated with the MCPWM module are provided in Table 14-7 and Table 14-8.
Table 14-7:
Name IFS3 IFS4 IEC3 IEC4 IPC14 IPC15 IPC16 P1TCON P1TMR P1TPER P1SECMP PWM1CON1 PWM1CON2 P1DTCON1 P1DTCON2
PTOPS<3:0>
PWM Time Base Register PWM Time Base Period Register PWM Special Event Compare Register PMOD1 PEN4H DTS4A FLTAM FLTBM PEN3H DTS4I
DTBPS<1:0>
DTAPS<1:0>
P1FLTBCON FBOV4H FBOV4L FBOV3H FBOV3L FBOV2H FBOV2L FBOV1H FBOV1L P1DC1 P1DC2 P1DC3 P1DC4 PWM1KEY(3)
P1OVDCON POVD4H POVD4L POVD3H POVD3L POVD2H POVD2L POVD1H POVD1L POUT4H POUT4L POUT3H POUT3L POUT2H POUT2L POUT1H POUT1L PWM Duty Cycle 1 Register PWM Duty Cycle 2 Register PWM Duty Cycle 3 Register PWM Duty Cycle 4 Register PWMKEY<15:0>
Legend: y = bit depends on configuration, u = uninitialized bit, = unimplemented, read as 0. Note 1: The Reset condition of the PEN4H:PEN1H and PEN4L:PEN1L bits depends on the value of the PWMPIN bit (FPOR<7>). When PWMPIN is set to 0, Reset values are 1. When PWMPIN is set to 1, Reset values are 0. 2: In devices where the PWMLOCK configuration bit is present in the FOSCSEL configuration register, the reset value for the FAEN4:FAEN1 and FBEN4:FBEN1 bits is 1. In all other configurations, the reset value for these bits is 0. Refer to the specific device data sheet for more information. 3: This register is implemented only in devices where the PWMLOCK configuration bit is present in the FOSCSEL configuration register. Refer to the specific device data sheet for availability.
Table 14-8:
SFR Name IFS3 IFS4 IEC3 IEC4 IPC18 IPC19 P2TCON P2TMR P2TPER P2SECMP PWM2CON1 PWM2CON2 P2DTCON1 P2DTCON2 P2FLTACON P2OVDCON P2DC1
FLT2AIP<2:0>
PTOPS<3:0>
PWM Timer Count Value Register PWM Time Base Period Register PWM Special Event Compare Register PMOD1
SEVOPS<3:0> DTB<5:0>
DTBPS<1:0>
POVD1H POVD1L
Legend: y = bit depends on configuration, u = uninitialized bit, = unimplemented, read as 0 Note 1: The Reset condition of the PEN1H and PEN1L bits depends on the value of the PWMPIN bit (FPOR<7>). When PWMPIN is set to 0, Reset values are 1. When PWMPIN is set to 1, Reset values are 0. 2: In devices where the PWMLOCK configuration bit is present in the FOSCSEL configuration register, the reset value for FAEN1 bit is 1. In all other configurations, the reset value for this bit is 0. Refer to the specific device data sheet for more information.
14
Application Note # AN901 AN908 AN957 AN984 AN1017 AN1078 AN1083 AN1106 AN1160 AN1162 AN1206 AN1208 GS001 GS002 GS004 GS005
Please visit the Microchip web site (www.microchip.com) for additional application notes and code examples for the dsPIC33F/PIC24H family of devices.
DS70187E-page 14-52
14
Motor Control PWM
DS70187E-page 14-53
DS70187E-page 14-54
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 Microchips 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 Microchips 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 buyers 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, KEELOQ, KEELOQ logo, MPLAB, PIC, PICmicro, PICSTART, PIC32 logo, rfPIC 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, MXDEV, MXLAB, SEEVAL and The Embedded Control Solutions Company are registered trademarks of Microchip Technology Incorporated in the U.S.A. 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, MPLAB Certified logo, MPLIB, MPLINK, mTouch, Omniscient Code Generation, PICC, PICC-18, PICDEM, PICDEM.net, PICkit, PICtail, REAL ICE, rfLAB, Select Mode, Total Endurance, TSHARC, UniWinDriver, WiperLock and ZENA 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. All other trademarks mentioned herein are property of their respective companies. 2007-2012, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved. Printed on recycled paper.
ISBN: 978-1-62076-524-1
== ISO/TS 16949 ==
2007-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 Companys 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, Microchips quality system for the design and manufacture of development systems is ISO 9001:2000 certified.
DS70187E-page 14-55
ASIA/PACIFIC
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 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 China - Hangzhou Tel: 86-571-2819-3187 Fax: 86-571-2819-3189 China - Hong Kong SAR Tel: 852-2401-1200 Fax: 852-2401-3431 China - Nanjing Tel: 86-25-8473-2460 Fax: 86-25-8473-2470 China - Qingdao Tel: 86-532-8502-7355 Fax: 86-532-8502-7205 China - Shanghai Tel: 86-21-5407-5533 Fax: 86-21-5407-5066 China - Shenyang Tel: 86-24-2334-2829 Fax: 86-24-2334-2393 China - Shenzhen Tel: 86-755-8203-2660 Fax: 86-755-8203-1760 China - Wuhan Tel: 86-27-5980-5300 Fax: 86-27-5980-5118 China - Xian Tel: 86-29-8833-7252 Fax: 86-29-8833-7256 China - Xiamen Tel: 86-592-2388138 Fax: 86-592-2388130 China - Zhuhai Tel: 86-756-3210040 Fax: 86-756-3210049
ASIA/PACIFIC
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 India - Pune Tel: 91-20-2566-1512 Fax: 91-20-2566-1513 Japan - Osaka Tel: 81-66-152-7160 Fax: 81-66-152-9310 Japan - Yokohama Tel: 81-45-471- 6166 Fax: 81-45-471-6122 Korea - Daegu Tel: 82-53-744-4301 Fax: 82-53-744-4302 Korea - Seoul Tel: 82-2-554-7200 Fax: 82-2-558-5932 or 82-2-558-5934 Malaysia - Kuala Lumpur Tel: 60-3-6201-9857 Fax: 60-3-6201-9859 Malaysia - Penang Tel: 60-4-227-8870 Fax: 60-4-227-4068 Philippines - Manila Tel: 63-2-634-9065 Fax: 63-2-634-9069 Singapore Tel: 65-6334-8870 Fax: 65-6334-8850 Taiwan - Hsin Chu Tel: 886-3-5778-366 Fax: 886-3-5770-955 Taiwan - Kaohsiung Tel: 886-7-536-4818 Fax: 886-7-330-9305 Taiwan - Taipei Tel: 886-2-2500-6610 Fax: 886-2-2508-0102 Thailand - Bangkok Tel: 66-2-694-1351 Fax: 66-2-694-1350
EUROPE
Austria - Wels Tel: 43-7242-2244-39 Fax: 43-7242-2244-393 Denmark - Copenhagen Tel: 45-4450-2828 Fax: 45-4485-2829 France - Paris Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79 Germany - Munich Tel: 49-89-627-144-0 Fax: 49-89-627-144-44 Italy - Milan Tel: 39-0331-742611 Fax: 39-0331-466781 Netherlands - Drunen Tel: 31-416-690399 Fax: 31-416-690340 Spain - Madrid Tel: 34-91-708-08-90 Fax: 34-91-708-08-91 UK - Wokingham Tel: 44-118-921-5869 Fax: 44-118-921-5820
11/29/11
DS70187E-page 14-56