29.01.2013 Views

AVR1311: Using the XMEGA Timer/Counter ... - Atmel Corporation

AVR1311: Using the XMEGA Timer/Counter ... - Atmel Corporation

AVR1311: Using the XMEGA Timer/Counter ... - Atmel Corporation

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>AVR1311</strong>: <strong>Using</strong> <strong>the</strong> <strong>XMEGA</strong> <strong>Timer</strong>/<strong>Counter</strong><br />

Extensions<br />

Features<br />

• Advanced Waveform eXtensions (AWeX)<br />

- Dead-time insertion<br />

- Pattern generation<br />

- Fault protection<br />

• High Resolution Extension (HiRes)<br />

- Increases resolution by 2 bits (4x)<br />

1 Introduction<br />

Some <strong>Timer</strong>/<strong>Counter</strong>s on <strong>the</strong> <strong>XMEGA</strong> have extension modules that are useful for<br />

applications such as motor and power control applications. This document gives an<br />

introduction to <strong>the</strong> extension modules available and how to use <strong>the</strong>m.<br />

8-bit<br />

Microcontrollers<br />

Application Note<br />

Rev. 8076A-AVR-04/08


2 AWeX<br />

2.1 Dead-time Insertion<br />

2 <strong>AVR1311</strong><br />

The Advanced Waveform eXtension (AWeX) is a collection of <strong>Timer</strong>/<strong>Counter</strong><br />

extensions that are typically used in motor and power control applications. When <strong>the</strong><br />

AWeX extension is used, <strong>the</strong> PWM outputs of <strong>the</strong> <strong>Timer</strong>/<strong>Counter</strong> module is routed<br />

through <strong>the</strong> AWeX module, which controls <strong>the</strong> port pins.<br />

Figure 2-1. AWeX module overview.<br />

<strong>Timer</strong>/<strong>Counter</strong> x0<br />

Compare/<br />

WaveGen<br />

Channel A<br />

WG<br />

Channel B<br />

WG<br />

Channel C<br />

WG<br />

Channel D<br />

Event<br />

system<br />

AWeX x<br />

Pattern<br />

Generator<br />

DTI<br />

Channel A<br />

DTI<br />

Channel B<br />

DTI<br />

Channel C<br />

DTI<br />

Channel D<br />

Fault<br />

Protection<br />

Port<br />

Override<br />

PORTx<br />

Figure 2-1 shows an overview of <strong>the</strong> AWeX module with its three sub-functions:<br />

Dead-time Insertion (DTI), Pattern generation and Fault protection.<br />

The AWeX module is available on select <strong>Timer</strong>/<strong>Counter</strong> modules. Refer to <strong>the</strong> device<br />

data sheet for more information.<br />

In many applications, such as motor control, PWM is used to generate waveforms<br />

using a half-bridge configuration similar to <strong>the</strong> one shown in Figure 2-2. If <strong>the</strong> high-<br />

and low-side switches are fed with inverted PWM waveforms (PWMH and PWML), <strong>the</strong><br />

average output voltage, VOUT, will be proportional to <strong>the</strong> duty cycle of <strong>the</strong> PWMH<br />

signal.<br />

INV<br />

INV<br />

INV<br />

INV<br />

INV<br />

INV<br />

INV<br />

INV<br />

Px0<br />

Px1<br />

Px2<br />

Px3<br />

Px4<br />

Px5<br />

Px6<br />

Px7<br />

8076A-AVR-04/08


2.1.1 Pin Mapping<br />

8076A-AVR-04/08<br />

Figure 2-2. Typical half-bridge setup.<br />

VDC<br />

PWMH<br />

PWML<br />

VOUT<br />

<strong>AVR1311</strong><br />

A half-bridge, like <strong>the</strong> one in Figure 2-2, is typically realized using MOSFETs or<br />

IGBTs. These devices are not capable of turning on/off instantaneously. There is<br />

always a small rise/fall time on <strong>the</strong> output. If <strong>the</strong> signal applied to <strong>the</strong> low side switch<br />

is just an inverted version of <strong>the</strong> signal applied to <strong>the</strong> high side, <strong>the</strong>re will be a small<br />

period during <strong>the</strong> switching where both <strong>the</strong> high- and low-side switches are<br />

conducting, leading to a short-circuit between positive supply and ground for a short<br />

period. This is usually known as shoot-through, and should obviously be avoided.<br />

The usual solution to avoid shoot-through is to insert a small dead-time around <strong>the</strong><br />

switching instant. When <strong>the</strong> low side is switched off, <strong>the</strong> high-side is not switched on<br />

until after <strong>the</strong> dead-time has passed. This is called dead-time insertion.<br />

The Dead-time insertion extension handles dead-time insertion automatically,<br />

ensuring that shoot-through cannot happen as a result of a software glitch. The deadtime<br />

for high-side and low-side can be set individually through <strong>the</strong> DTHS and DTLS<br />

registers respectively. As a shortcut, DTHS and DTLS can be set to <strong>the</strong> same value<br />

by writing to <strong>the</strong> DTBOTH register. The dead-time value is given in main system clock<br />

cycles. The allowable range for <strong>the</strong> dead-time is thus 0-255 main system clock cycles.<br />

The DTI extension overrides <strong>the</strong> I/O port directly and has higher priority than <strong>the</strong><br />

<strong>Timer</strong>/<strong>Counter</strong> module. The pin mapping is shown in Table 2-1. It is possible to<br />

enable dead-time insertion on each channel separately. Only <strong>the</strong> output pin pairs<br />

connected to signals that use DTI extension will be overridden by <strong>the</strong> AWeX module.<br />

Table 2-1. Dead-time insertion pin mapping.<br />

Pin Signal<br />

Pin 0 CCAH<br />

Pin 1 CCAL<br />

Pin 2 CCBH<br />

Pin 3 CCBL<br />

Pin 4 CCCH<br />

Pin 5 CCCL<br />

Pin 6 CCDH<br />

Pin 7 CCDL<br />

3


2.2 Pattern Generation<br />

2.3 Fault Protection<br />

4 <strong>AVR1311</strong><br />

The Pattern Generation extension reuses <strong>the</strong> DTI registers and double buffer<br />

mechanism to produce a synchronized bit pattern on <strong>the</strong> port it is connected to. In<br />

addition, compare channel A from <strong>Timer</strong>/<strong>Counter</strong> 0 connected to <strong>the</strong> same I/O port<br />

can be distributed to, and override, all <strong>the</strong> port pins. This allows complex patterns with<br />

pulse-width modulation to be generated on <strong>the</strong> I/O port.<br />

The pattern generator can be used to generate <strong>the</strong> commutation sequence for BLDC<br />

and stepper motors, controlling arrays of LEDs, or for any application that need to<br />

selectively distribute a PWM signal to several destinations.<br />

The functionality of <strong>the</strong> Pattern Generator is illustrated in Figure 2-3. The DTBUFLS<br />

register is used as buffer register for <strong>the</strong> Output Override Enable (OOE) register in <strong>the</strong><br />

AWeX module, while DTBUFHS is used as buffer register for <strong>the</strong> OUT register in <strong>the</strong><br />

associated I/O port module. The latching of values from buffer registers to <strong>the</strong>ir<br />

destination is synchronized to <strong>the</strong> UPDATE condition in <strong>the</strong> <strong>Timer</strong>/<strong>Counter</strong> module.<br />

For more information about <strong>the</strong> UPDATE condition, please consult <strong>the</strong> <strong>Timer</strong>/<strong>Counter</strong><br />

data sheet or <strong>the</strong> application note AVR1306.<br />

Figure 2-3. Pattern generation overview.<br />

UPDATE<br />

<strong>Timer</strong>/<strong>Counter</strong> 0 (TCx0)<br />

V DTBUFLS<br />

V<br />

EN<br />

OOE[7:0]<br />

EN<br />

DTBUFHS<br />

PORTx.OUT[7:0]<br />

Px[7:0]<br />

"oc_out[A]"<br />

1 to 8<br />

Expand<br />

The Fault Protection feature enables fast and deterministic action when a fault is<br />

detected. The fault protection is event controlled, thus any event from <strong>the</strong> Event<br />

System can be used to trigger a fault action.<br />

When <strong>the</strong> Fault Protection is enabled an incoming event from any of <strong>the</strong> selected<br />

event channel can trigger <strong>the</strong> event action. Each event channel can be separately<br />

enabled as fault protection input, and <strong>the</strong> specified event channels will be ORed<br />

toge<strong>the</strong>r allowing multiple event sources to be used for fault protection at <strong>the</strong> same<br />

time. For more information on <strong>the</strong> Fault Protection, read <strong>the</strong> Xmega manual.<br />

8076A-AVR-04/08


3 HiRes<br />

<strong>AVR1311</strong><br />

The HiRes extension module increases <strong>the</strong> PWM output resolution by a factor of four.<br />

This is accomplished by combining <strong>the</strong> PWM-generation abilities of a standard<br />

<strong>Timer</strong>/<strong>Counter</strong> module with a high-resolution part running at four times higher<br />

frequency. The concept is illustrated in Figure 3-1. The Pulse width is divided in two<br />

parts, tCOARSE and tFINE. The sum of <strong>the</strong>se, tP, is <strong>the</strong> total pulse width. The<br />

<strong>Timer</strong>/<strong>Counter</strong> unit generates <strong>the</strong> coarse pulse, while <strong>the</strong> HiRes extension extends<br />

<strong>the</strong> coarse pulse by 0-3 fine clock cycles.<br />

Figure 3-1. HiRes concept.<br />

tP<br />

tCOARSE<br />

tFINE<br />

Coarse<br />

step size<br />

T<br />

This is achieved by dividing <strong>the</strong> PWM generation in two parts. The <strong>Timer</strong>/<strong>Counter</strong> unit<br />

is responsible for generating a PWM signal based on <strong>the</strong> 14 most significant bits<br />

(MSBs) of <strong>the</strong> <strong>Timer</strong>/<strong>Counter</strong> compare channels. This coarse PWM signal is fed to<br />

<strong>the</strong> HiRes extension, which is responsible for adding <strong>the</strong> fine pulse based on <strong>the</strong> two<br />

least significant bits (LSBs) of <strong>the</strong> <strong>Timer</strong>/<strong>Counter</strong> compare channels.<br />

The HiRes extension is controlled by two bits in <strong>the</strong> HIRESx.CTRL register, HREN0<br />

and HREN1. These bits enable High Resolution operation for <strong>Timer</strong>/<strong>Counter</strong> x0 and<br />

<strong>Timer</strong>/<strong>Counter</strong> x1 respectively.<br />

3.1 Configuring <strong>the</strong> System Clocks for HiRes Operation<br />

8076A-AVR-04/08<br />

In order for <strong>the</strong> HiRes module to work as intended, <strong>the</strong> HiRes module needs a clock<br />

input with four times higher frequency than <strong>the</strong> main system clock. Figure 3-2 shows<br />

a simplified illustration of <strong>the</strong> clock distribution system. As <strong>the</strong> illustration shows,<br />

enabling Prescaler B and Prescaler C divides <strong>the</strong> main system clock frequency by 4.<br />

The HiRes module is clocked by <strong>the</strong> output of Prescaler A, four times <strong>the</strong> CPU clock<br />

frequency. The clock system is explained more in detail in application note<br />

“AVR1003: <strong>Using</strong> <strong>the</strong> <strong>XMEGA</strong> clock system”.<br />

5


3.2 <strong>Using</strong> <strong>the</strong> HiRes module<br />

4 Driver Implementation<br />

4.1 Files<br />

6 <strong>AVR1311</strong><br />

Figure 3-2. Clock distribution<br />

Internal 32 kHz RC Osc.<br />

Internal 2 MHz RC Osc.<br />

Internal 32 MHz Ring Osc.<br />

External Clock or Crystal Osc.<br />

Internal PLL<br />

Clock Control Register Clock Prescaler Control Register<br />

Prescaler A<br />

1, 2, 4, ... , 512<br />

Prescaler B<br />

1, 2<br />

Prescaler C<br />

1, 2<br />

CPU and peripherals<br />

2x speed tolerant peripherals<br />

4x speed tolerant peripherals<br />

As soon as <strong>the</strong> HiRes module is enabled and <strong>the</strong> clock system is configured correctly,<br />

<strong>the</strong> <strong>Timer</strong>/<strong>Counter</strong> is ready for high-resolution operation. In HiRes mode, <strong>the</strong><br />

<strong>Timer</strong>/<strong>Counter</strong> behaves almost as if it was running at four times <strong>the</strong> frequency off <strong>the</strong><br />

CPU. This is not <strong>the</strong> case, however, and <strong>the</strong> differences are subtle, but important:<br />

• The <strong>Timer</strong>/<strong>Counter</strong> itself is not running at 4 times <strong>the</strong> system clock frequency,<br />

but it will count by 4 for each system clock cycle. In o<strong>the</strong>r words, <strong>the</strong> 2 LSBs<br />

are always 0.<br />

• The Period/TOP value of <strong>the</strong> <strong>Timer</strong>/<strong>Counter</strong> cannot be set to a “high<br />

resolution” value. The 2 LSBs must be 0.<br />

• A positive or negative output pulse can never be shorter than one coarse<br />

step. A compare value of 0 produces a constant low output. A compare value<br />

equal to PER produces a constant high output.<br />

The included driver has functions that control all <strong>the</strong> major features of <strong>the</strong><br />

timer/counter modules (including waveform generation). All functions take a pointer to<br />

a timer/counter module as its first argument, so <strong>the</strong> same functions can be reused for<br />

all timer/counter modules on one <strong>XMEGA</strong>.<br />

Note that this driver is not written with high performance in mind. It is designed as a<br />

library to get started with <strong>the</strong> Xmega timer/counters and an easy-to-use framework for<br />

rapid prototyping. For time and code space critical application development, consider<br />

replacing function calls with macros or direct access to registers.<br />

The driver package consists of <strong>the</strong> following files:<br />

• awex_driver.c – AWeX driver source file<br />

• awex_driver.h – AWeX driver header file<br />

• hires_driver.c – HiRes driver source file<br />

• hires_driver.h – HiRes driver header file<br />

• tc_extensions_example.c – Examples using <strong>the</strong> <strong>Timer</strong>/<strong>Counter</strong> extensions.<br />

8076A-AVR-04/08


4.2 Doxygen Documentation<br />

8076A-AVR-04/08<br />

<strong>AVR1311</strong><br />

All source code is prepared for automatic documentation generation using Doxygen.<br />

Doxygen is a tool for generating documentation from source code by analyzing <strong>the</strong><br />

source code and using special keywords. For more details about Doxygen please visit<br />

http://www.doxygen.org. Precompiled Doxygen documentation is also supplied with<br />

<strong>the</strong> source code accompanying this application note, available from <strong>the</strong> readme.html<br />

file in <strong>the</strong> source code folder.<br />

7


Disclaimer<br />

Headquarters International<br />

<strong>Atmel</strong> <strong>Corporation</strong><br />

2325 Orchard Parkway<br />

San Jose, CA 95131<br />

USA<br />

Tel: 1(408) 441-0311<br />

Fax: 1(408) 487-2600<br />

<strong>Atmel</strong> Asia<br />

Room 1219<br />

Chinachem Golden Plaza<br />

77 Mody Road Tsimshatsui<br />

East Kowloon<br />

Hong Kong<br />

Tel: (852) 2721-9778<br />

Fax: (852) 2722-1369<br />

Product Contact<br />

Web Site<br />

www.atmel.com<br />

Literature Request<br />

www.atmel.com/literature<br />

<strong>Atmel</strong> Europe<br />

Le Krebs<br />

8, Rue Jean-Pierre Timbaud<br />

BP 309<br />

78054 Saint-Quentin-en-<br />

Yvelines Cedex<br />

France<br />

Tel: (33) 1-30-60-70-00<br />

Fax: (33) 1-30-60-71-11<br />

Technical Support<br />

avr@atmel.com<br />

<strong>Atmel</strong> Japan<br />

9F, Tonetsu Shinkawa Bldg.<br />

1-24-8 Shinkawa<br />

Chuo-ku, Tokyo 104-0033<br />

Japan<br />

Tel: (81) 3-3523-3551<br />

Fax: (81) 3-3523-7581<br />

Sales Contact<br />

www.atmel.com/contacts<br />

Disclaimer: The information in this document is provided in connection with <strong>Atmel</strong> products. No license, express or implied, by estoppel or o<strong>the</strong>rwise, to any<br />

intellectual property right is granted by this document or in connection with <strong>the</strong> sale of <strong>Atmel</strong> products. EXCEPT AS SET FORTH IN ATMEL’S TERMS AND<br />

CONDITIONS OF SALE LOCATED ON ATMEL’S WEB SITE, ATMEL ASSUMES NO LIABILITY WHATSOEVER AND DISCLAIMS ANY EXPRESS, IMPLIED<br />

OR STATUTORY WARRANTY RELATING TO ITS PRODUCTS INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTY OF MERCHANTABILITY,<br />

FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,<br />

CONSEQUENTIAL, PUNITIVE, SPECIAL OR INCIDENTAL DAMAGES (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS,<br />

BUSINESS INTERRUPTION, OR LOSS OF INFORMATION) ARISING OUT OF THE USE OR INABILITY TO USE THIS DOCUMENT, EVEN IF ATMEL HAS<br />

BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. <strong>Atmel</strong> makes no representations or warranties with respect to <strong>the</strong> accuracy or completeness of <strong>the</strong><br />

contents of this document and reserves <strong>the</strong> right to make changes to specifications and product descriptions at any time without notice. <strong>Atmel</strong> does not make any<br />

commitment to update <strong>the</strong> information contained herein. Unless specifically provided o<strong>the</strong>rwise, <strong>Atmel</strong> products are not suitable for, and shall not be used in,<br />

automotive applications. <strong>Atmel</strong>’s products are not intended, authorized, or warranted for use as components in applications intended to support or sustain life.<br />

© 2008 <strong>Atmel</strong> <strong>Corporation</strong>. All rights reserved. <strong>Atmel</strong>®, logo and combinations <strong>the</strong>reof, AVR® and o<strong>the</strong>rs, are <strong>the</strong> registered trademarks or<br />

trademarks of <strong>Atmel</strong> <strong>Corporation</strong> or its subsidiaries. O<strong>the</strong>r terms and product names may be trademarks of o<strong>the</strong>rs.<br />

8076A-AVR-04/08

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!