AVR138: ATmega32M1 family PSC Cookbook Features • PSC Basics • Waveform Generation using Power Stage Controller • Code Examples 8-bit Microcontroller Application Note 1. Preamble ATMEL® is introducing a new 8 bit AVR® family with the ATmega32M1. This family embeds an innovative PSC dedicated to motor control applications and led lighting applications. Note: This PSC is different that the PSC used in the AT90PWMx family dedicated for lighting. As it is primarily dedicated for motor control and to simplify its use, it is a merge of the three AT90PWMx family PSC. The AVR434 ‘PSC cookbook’ is specially dedicated for the AT90PWMx family PSC and is not applicable for the ATmega32M1 family PSC. 2. Introduction This application note is an introduction to the use of the Power Stage Controller (PSC) available in ATmega32M1 family. The object of this document is to give a general overview of the PSC, show its various modes of operation and explain how to configure them. The code examples will make this clearer and can be used as guideline for other applications. The examples are developed and tested on ATmega32M1. PSC description and additional information can be found in the data sheet and in application notes where the PSC is used. This application note describes waveforms which can be generated by the PSC and how to program it. It also introduces fault modes and output enable management. All source files are available on the Atmel website. They are written on GCC compiler, nevertheless they can easily modified to compile on other compilers. 3. General Description The Power Stage Controller is a special timer with 3 modules dedicated to drive the power stage of an equipment or a board. The PSC is logical level compatible and is able to drive a bridge of power transistors. The PSC can drive different kind of bridges (DC, Brushless DC, AC motors ...) Rev. 8122A–AVR–03/08 Each of the 3 PSC modules can be seen as a PWM generator with two complementary outputs. To provide a self running PSC mode without the need of embedded software action, the PSC has 3 inputs which can stop the waveform generation. For example, in a current sensing mode, the current can be monitored by a comparator which can stop the PSC waveform when a maximum current is reach. The PSC can be clocked by a fast clock like the output of a 64 MHz PLL. So it can generate high speed PWM with a high resolution. It can also be clocked by slower clocks such as PLL intermediate output or by CPU clock (CLKio). Moreover it includes a prescaler to generate signals with very low frequency. 4. PSC Applications The PSC is intended to drive applications with a power stage: • Motor Control (Waveform Generation and Speed/Torque regulation) • Led Lighting Control (Current Regulation) Figure 4-1. Led boost control example Boost 1 Boost 2 PSCOUT0A Boost 3 PSCOUT1A PSCOUT2A PSC Figure 4-2. Motor control example U V W Motor VDC+ Q1 Q3 Q5 Q2 Q4 Q6 VDC- PSCOUT0A PSCOUT0B PSCOUT1A PSCOUT1B PSCOUT2A PSCOUT2B PSC Note: 2 Motor can be BLDC or asynchronous motor AVR138 8122A–AVR–03/08 AVR138 5. PSC Modes 5.1 Prerequisite We recommend reading the following chapters of the ATmega32M1 datasheet: 5.2 • Overview • PSC Description • Functional Description Why Different Modes The PSC provides 2 modes of operation: 5.3 1 ramp mode This mode is used to generate overlapped waveform. The major risk of this mode is when driving a half bridge to have cross-conduction. centered mode The PSC output waveforms are symmetrical and centered. This mode is useful for space vector pwm methods to generate sinusoidal waveforms. (Overlapped waveforms are possible) Running Modes Examples All examples are written in C and embedded in a AVR Studio GCC project. These examples are given to quickly start the generation of waveforms and to evaluate the two running modes. The name of the AVR projects are OneRampMode.aps and CenteredMode.aps. Thanks to PSC_MODE definition, we can select the running mode. 3 8122A–AVR–03/08 5.3.1 Mode: one ramp The One Ramp mode can also be seen as a edge aligned mode. To select the 1 ramp mode use the following syntax: #define PSC_MODE PSC_MODE_ONE_RAMP In the following example, CLOCK PSC = CLK PLL = 64 Mhz Figure 5-1. One Ramp Mode POCRnRB POCRnSB POCRnRA PSC Counter POCRnSA 0 On-Time A On-Time B PSCOUTnA PSCOUTnB Dead-Time B Dead-Time A PSC Cycle Table 5-1. PSCOUT0A PSCOUT0B PSCOUT1A PSCOUT1B PSCOUT2A PSCOUT2B Settings for Figure 5-2. PSC SFR Instruction Result in Clock Number Result in µS POCR0SA A_SA_VAL = 250 Dead Time 0A = 250 + 1 3.9µS POCR0RA A_RA_VAL = 400 On Time 0A = 400 - 250 2.3µS POCR0SB A_SB_VAL = 750 Dead Time 0B = 750 - 400 5.5µS On Time 0B = 1250 - 750 7.8µS POCR1SA B_SA_VAL = 800 Dead Time 1A = 800 + 1 12.5µS POCR1RA B_RA_VAL = 1100 On Time 1A = 1100 - 800 4.7µS POCR1SB B_SB_VAL = 1150 Dead Time 1B = 1150 - 1100 0.8µS On Time 1B = 1250 - 1150 1.6µS POCR2SA C_SA_VAL = 600 Dead Time 2A = 600 + 1 9.4µS POCR2RA C_RA_VAL = 800 On Time 2A = 800 - 600 3.1µS POCR2SB C_SB_VAL = 900 Dead Time 2B = 900 - 800 1.6µS On Time 2B = 1250 - 900 5.5µS POCR_RB 4 RB_VAL = 1250 AVR138 8122A–AVR–03/08 AVR138 Figure 5-2. One Ramp Waveforms 5 8122A–AVR–03/08 One Ramp With Overlapped Waveforms To select the one ramp mode with overlapped waveforms un-comment the following line: #define T_OVERLAP Table 5-2. PSCOUT0A PSCOUT0B PSCOUT1A PSCOUT1B PSCOUT2A PSCOUT2B Settings for Figure 5-3. PSC SFR Instruction Result in Clock Number Result in µS POCR0SA A_SA_VAL = 25 Dead Time 0A = 25 + 1 0.41µS POCR0RA A_RA_VAL = 75 On Time 0A = 75 - 25 0.78µS POCR0SB A_SB_VAL = 50 Dead Time 0B = 50 - 75 -0.39µS On Time 0B = 100 - 50 0.78µS POCR1SA B_SA_VAL = 25 Dead Time 1A = 25 + 1 0.41µS POCR1RA B_RA_VAL = 75 On Time 1A = 75 - 25 0.78µS POCR1SB B_SB_VAL = 50 Dead Time 1B = 50 - 75 -0.39µS On Time 1B = 100 - 50 0.78µS POCR2SA C_SA_VAL = 20 Dead Time 2A = 20 + 1 9.4µS POCR2RA C_RA_VAL = 40 On Time 2A = 40 - 20 3.1µS POCR2SB C_SB_VAL = 60 Dead Time 2B = 60 - 40 1.6µS On Time 2B = 100 - 60 5.5µS POCR_RB RB_VAL = 100 PSCOUT0A and PSCOUT0B have overlap protection disabled. PSCOUT1A and PSCOUT1B have overlap protection enabled. Figure 5-3. 6 One Ramp With Overlapped Waveforms AVR138 8122A–AVR–03/08 AVR138 5.3.2 Mode: Centered To select the centered mode use the following syntax: #define PSC_MODE PSC_MODE_CENTERED In the following example, CLOCK PSC = CLK IO = 8Mhz POCRnRB PSC Counter POCRnSB POCRnSA 0 On-Time 0 On-Time 1 On-Time 1 PSCOUTnA PSCOUTnB Dead-Time Dead-Time PSC Cycle Table 5-3. PSCOUT0A PSCOUT0B PSCOUT1A PSCOUT1B PSCOUT2A PSCOUT2B Settings for Figure 5-4. PSC SFR Instruction Result in Clock Number Result in µS POCR0SA A_SA_VAL = 25 On Time 0A = 2 * 25 6.2µS POCR0RA A_RA_VAL = 75 RA is used for synchr. signal POCR0SB A_SB_VAL = 40 On Time 0B = 2*(125 - 40 + 1) 21.5µS Dead Time 0 = 40 - 25 1.9µS 27.5µS POCR1SA B_SA_VAL = 110 On Time 1A = 2 * 110 POCR1RA B_RA_VAL = 80 RA is used for synchr. signal POCR1SB B_SB_VAL = 115 On Time 1B = 2*(125 - 115 + 1) 2.8µS Dead Time 1 = 115 - 110 0.6µS 15µS POCR2SA C_SA_VAL = 60 On Time 2A = 2 * 60 POCR2RA C_RA_VAL = 80 RA is used for synchr. signal POCR2SB C_SB_VAL = 90 On Time 2B = 2*(125 - 90 + 1) 9µS Dead Time 2 = 90 - 60 3.7µS POCR_RB RB_VAL = 125 7 8122A–AVR–03/08 Figure 5-4. Centered Mode Waveforms 6. PSC Inputs 6.1 Prerequisite We recommend reading the following chapters of the ATmega32M1 datasheet: 6.2 • Overview • PSC Description • PSC Inputs Description The PSC has 3 identical inputs which can be programmed to quickly react on the PSC outputs. The outputs can be de-activated definitively (fault mode) or only during the active state of the selected input. The PSC inputs have a digital filter which can be bypassed to get a shorter reaction time. 8 AVR138 8122A–AVR–03/08 AVR138 Figure 6-1. PSC Input Block Diagram PAOCnA (PAOCnB) Asynchonous Way 0 PSCINn Analog Comparator n Output 0 Digital Filter 1 1 CLK PSC PFLTEnA (PFLTEnB) PISELnA (PISELnB) PELEVnA / PCAEnA (PELEVnB) (PCAEnB) PRFMnA3:0 (PRFMnB3:0) 2 Input Processing 4 CLK PSC Synchronous System (need the clock activity) PSC Core (Counter, Waveform Generator, ...) Control of the 6 outputs PSCOUTnA PSCOUTnB CLK PSC The following examples are given to quickly start the use of PSC inputs and to evaluate the input modes. It is done in one ramp mode. Thanks to PSC_MODE definition, they can easily be modified to test inputs in centered mode. These examples can be used on STK500/STK524 boards. The name of the AVR project is test_halt.aps. The PSCIN0 signal is generated by an AGILENT 33250A Function Waveform Generator synchronized on the PSCOUT1B output. Synchronous mode versus asynchronous modes of inputs: All the following examples are given in synchronous mode (PSC_SYNCHRONOUS_OUTPUT_CONTROL definition), the system clock running is necessary to propagate the PSC input to the PSC output. The user can easily test the direct propagation of the PSC input by using the PSC_ASYNCHRONOUS_OUTPUT_CONTROL definition in the source files of the examples. 6.2.1 Input Mode 1: De-activate module 0 Output A Comment the #define PSC_TEST_HALT in the source file to get the following waveforms. Thanks to PSC_USE_HIGH_LEVEL, the PSCIN0 input acts on PSCOUT0A when it is in a high level. 9 8122A–AVR–03/08 Figure 6-2. 6.2.2 PSC Input Mode 1 on PSCIN0 input Input Mode 7: Halt PSC and Wait for Software Action PSCIN0 input can easily be activated by connected PD1 to SW0 switch on STK500 board. When PSC is in fault state, the software will reset it when PE2 equals 0. So PE2 can be connected to SW1 to restart the PSC. Thanks to PSC_USE_LOW_LEVEL, the PSCIN0 input acts on PSCOUT0A when it is in a low level. The restart of the PSC is not possible while PSCIN0 remains active (low level). Un-comment the #define PSC_TEST_HALT in the source file. The PSCIN0 configuration uses PSC_INPUT_HALT_PSC when it is involved. 10 AVR138 8122A–AVR–03/08 AVR138 Figure 6-3. 6.2.3 PSC Input Mode 7 on PSC0IN0 input Use of the filter on the PSC inputs In this example, PSC operates with the 64MHz output of the PLL. Comment the #define PSC_TEST_HALT in the source file to get the following waveforms. Un-comment the #define TEST_FILTER Table 6-1. PSCOUT0A PSCOUT0B Settings for Figure 6-4. and Figure 6-5. PSC SFR Instruction Result in Clock Number Result in µS POCR0SA A_SA_VAL = 5 Dead Time 0A = 5 + 1 0.09µS POCR0RA A_RA_VAL = 25 On Time 0A = 25 - 5 0.3µS POCR0SB A_SB_VAL = 30 Dead Time 0B = 30 - 25 0.08µS On Time 0B = 40 - 30 0.16µS POCR_RB 6.2.3.1 RB_VAL = 40 Filter Propagation Delay On Figure 6-4. the input filter is enable, the propagation delay equals 92.5nS. On Figure 6-5. the input filter is disabled, the propagation delay equals 30nS. The filter delay is 4*Clock cycles, which corresponds to 62.5nS. 11 8122A–AVR–03/08 12 Figure 6-4. PSC0IN0 Configured to act on PSCOUT0A (filter enabled) Figure 6-5. PSC0IN0 Configured to act on PSCOUT0A (filter disabled) AVR138 8122A–AVR–03/08 AVR138 6.2.3.2 Filter Performance On Figure 6-6. the input filter is disabled, the 50nS spike on PSCIN0 is propagated on PSCOUT0A. On Figure 6-7. the input filter is enabled, the 50nS spike on PSCIN0 is not propagated on PSCOUT0A Figure 6-6. PSC0IN0 Configured to act on PSCOUT0A (filter disabled) Figure 6-7. PSC0IN0 Configured to act on PSCOUT0A (filter enabled) 13 8122A–AVR–03/08 6.2.4 Use of the Comparator (ACMP0) as PSC input This example demonstrates the use of comparator 0 as PSC input. The name of the AVR project is Comparator.aps. The comparator 0 is used as PSC input thanks to Psc_config_input0(..) functions. Comparator 0 negative input is connected to a 0.9V DC source. Comparator 0 positive input is connected to the output of an AGILENT 33250A Waveform Generator. The Waveform Generator generates a saw signal from 0 to 2.6V. We can see that each time the positive input is below the negative input the outputs of the PSC are de-activated. Figure 6-8. 6.3 PSC Outputs versus COmparator 0 inputs Output Modulation with POC register This example demonstrates the use of PSC Output Configuration (POC) register to validate or not validate the PSC outputs. This register is useful to drive BLDC motors. It can select the good outputs according to the Hall Sensor values or according to the Back-Emf detection. The example can be used on STK500/STK524 boards. The name of the AVR project is OutputEnable.aps. The user can connect the PSC outputs to the STK500 LED inputs and see a kind of LED chaser where the light intensity of each LED is adjusted by the duty cycle of the corresponding output. 14 AVR138 8122A–AVR–03/08 AVR138 Figure 6-9. Output Modulation with POC register 7. PSC Interrupts The PSC can generate interrupts when a significant event occurs on PSC inputs or at the end of the PSC cycle. This example demonstrates the use of the interrupt at the end of PSC cycle. The name of the AVR project is Test_Interrupt.aps. The PSC end of cycle interrupt is enabled and the interrupt routine makes toggle the PD2 pin. The PSC uses the centered mode and the end of cycle is located in the middle of the waveforms., 15 8122A–AVR–03/08 Figure 7-1. 16 PSC interrupt toggles PD2 pin. AVR138 8122A–AVR–03/08 Headquarters International Atmel Corporation 2325 Orchard Parkway San Jose, CA 95131 USA Tel: 1(408) 441-0311 Fax: 1(408) 487-2600 Atmel Asia Room 1219 Chinachem Golden Plaza 77 Mody Road Tsimshatsui East Kowloon Hong Kong Tel: (852) 2721-9778 Fax: (852) 2722-1369 Atmel Europe Le Krebs 8, Rue Jean-Pierre Timbaud BP 309 78054 Saint-Quentin-enYvelines Cedex France Tel: (33) 1-30-60-70-00 Fax: (33) 1-30-60-71-11 Atmel Japan 9F, Tonetsu Shinkawa Bldg. 1-24-8 Shinkawa Chuo-ku, Tokyo 104-0033 Japan Tel: (81) 3-3523-3551 Fax: (81) 3-3523-7581 Technical Support [email protected] Sales Contact www.atmel.com/contacts Product Contact Web Site www.atmel.com Literature Requests www.atmel.com/literature Disclaimer: The information in this document is provided in connection with Atmel products. No license, express or implied, by estoppel or otherwise, to any intellectual property right is granted by this document or in connection with the sale of Atmel products. EXCEPT AS SET FORTH IN ATMEL’S TERMS AND CONDITIONS OF SALE LOCATED ON ATMEL’S WEB SITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Atmel makes no representations or warranties with respect to the accuracy or completeness of the contents of this document and reserves the right to make changes to specifications and product descriptions at any time without notice. Atmel does not make any commitment to update the information contained herein. Unless specifically provided otherwise, Atmel products are not suitable for, and shall not be used in, automotive applications. Atmel’s products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life. © 2008 Atmel Corporation. All rights reserved. Atmel ®, logo and combinations thereof, AVR ® and others are registered trademarks or trademarks of Atmel Corporation or its subsidiaries. Other terms and product names may be trademarks of others. 8122A–AVR–03/08