34
The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller - DATA SHEET”

The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Embed Size (px)

Citation preview

Page 1: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

The Cortex-M3 Embedded Systems:

LM3S9B96 Microcontroller – Pulse Width Modulator (PWM)

Refer to Chapter 21 in the reference book“Stellaris® LM3S9B96 Microcontroller - DATA SHEET”

Page 2: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Pulse Width Modulator (PWM)

Using analog signal (continuous in terms of both voltage and current) to control devices (e.g., a rheostat) Simple and straightforward BUT: not easy to regulate, not power efficient, not resilient to noise

PWM is a powerful technique for digitally encoding analog signal levels The average value of voltage (and current) fed to the load is

controlled by turning the switch between supply and load on and off at a fast pace E.g., several times a minute in an electric stove, 120 Hz in a

lamp dimmer, from few kilohertz (kHz) to tens of kHz for a motor drive, tens or hundreds of kHz in audio amplifiers and computer power supplies

The duty cycle of the square wave is modulated to encode an analog signal

Power loss in the switching devices is very low: “on” no current, “off” not voltage drop

Page 3: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Pulse Width Modulator (PWM)

Page 4: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

H Bridge for Motor Control

An H bridge is an electronic circuit that enables a voltage to be applied across a load in either direction

S1 S2 S3 S4 Result

1 0 0 1 Motor moves right

0 1 1 0 Motor moves left

0 0 0 0 Motor free runs

0 1 0 1 Motor brakes

1 0 1 0 Motor brakes

1 1 0 0 Shoot-through

0 0 1 1 Shoot-through

1 1 1 1 Shoot-through

Page 5: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Pulse Width Modulator (PWM)

The Stellaris PWM module consists of four PWM generator blocks and a control block

Each PWM generator block has the following features: Provides low-latency shutdown and prevents

damage to the motor being controlled One 16-bit counter Two PWM comparators PWM signal generator Dead-band generator

Page 6: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Pulse Width Modulator (PWM)

The control block determines the polarity of the PWM signals and which signals are passed through to the pins

The PWM control block has the following options: PWM output enable of each PWM signal Optional output inversion of each PWM signal Optional fault handling for each PWM signal Synchronization of timers/comparators/PWM generators

across the PWM generator blocks Interrupt status summary of the PWM generator blocks Extended fault capabilities with multiple fault signals,

programmable polarities, and filtering

Page 7: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Block Diagram

Page 8: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

PWM Module Block Diagram

Page 9: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

PWM Timer In Count-Down mode:

The timer counts from the load value to zero Goes back to the load value, and continues to count

down In Count-Up/Down mode:

The timer counts from zero up to the load value Counts down to zero Counts up to the load value, and so on

Count-Down mode is used for generating left- or right-aligned PWM signals, while the Count-Up/Down mode is used for generating center-aligned PWM signals

Page 10: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

PWM Timer Outputs three signals that are used in the PWM

generation process: The direction signal (“dir” signal): “low” when

counting down, and “high” when counting up A single-clock-cycle-width High pulse when the

counter is zero (“zero” signal) A single-clock-cycle-width High pulse when the

counter is equal to the load value (“load” signal)

Page 11: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

PWM Comparators Each PWM generator has two comparators that

monitor the value of the counter When either comparator matches the counter,

they output a single-clock-cycle-width High pulse, "cmpA" and "cmpB”

These qualified pulses are used in the PWM generation process

Page 12: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Signals Used in PWM Generation

Page 13: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Signals Used in PWM Generation

Page 14: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

PWM Signal Generator takes the “load”, “zero”, “cmpA”, and “cmpB”

pulses (qualified by the dir signal) generates two internal PWM signals, “pwmA” and

“pwmB” In Count-Down mode: zero, load, match A down,

and match B down In Count-Up/Down mode: zero, load, match A

down, match A up, match B down, and match B up

For each event, the effect on each output PWM signal is programmable

Page 15: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

PWM Generation Example In Count-Up/Down Mode

pwmA is set to drive High on match A up, drive Low on match A down, and ignore the other four events

pwmB is set to drive High on match B up, drive Low on match B down, and ignore the other four events

Page 16: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

Dead-Band Generator The generated pwmA and pwmB signals can be

passed to the dead-band generator If the dead-band generator is disabled, pwmA and

pwmB signals will not be modified If the dead-band generator is enabled, the pwmB

signal is lost and two PWM signals are generated based on the pwmA signal, pwmA’ and pwmB’

pwmA’ is pwmA with the rising edge delayed pwmB’ is the inversion of pwmA with a delay

added between the falling edge of pwmA and the rising edge of pwmB’

Page 17: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

PWM Dead-Band Generator

Page 18: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

Interrupt/ADC-Trigger Selector The same four (or six) counter events can be

used to generate an interrupt Any of these events or a set of these events can

be selected Different or the same events can be selected to

generate an ADC trigger

Page 19: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

Synchronization Four PWM generators providing eight PWM

outputs Unsynchronized: each PWM generator and

its two output signals are used alone, independent of other PWM generators

Synchronized: The PWM generator and its two outputs signals are used in conjunction with other PWM generators using a common and unified time base Set the “SYNCn” bits in the PWMSYNC

register will cause corresponding PWM generators reset their counter together

Page 20: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

Fault Conditions When fault conditions happen, the PWM function must

be stopped and the PWMn signals should be set to a safe state

Two basic situations cause fault conditions: The microcontroller is stalled and cannot perform the

necessary computation in the time required for motion control

An external error or event is detected The following inputs can be used to generate a fault

condition FAULTn fault input pins A stall of the controller generated by the debugger The trigger of an ADC digital comparator

Fault conditions are calculated on a per-PWM generator basis

Page 21: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Functional Description

Output Control Block Takes care of the final conditioning of the pwmA'

and pwmB' signals before they go to the pins as the PWMn signals.

The set of PWM signals that are actually enabled to the pins can be modified via the PWNENABLE register

During fault conditions, PWMn usually must be driven to safe values Use PWMFAULT register to specify whether the output

continues to use the generated signal or an encoding specified in the PWMFAULTVAL register

A final inversion can be applied to any of the PWMn signals using the PWMINVERT register

Page 22: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Initialization and Configuration

The following example shows how to initialize PWM Generator 0 with a 25-kHz frequency, a 25% duty cycle on the PWM0 pin, and a 75% duty cycle on the PWM1 pin, assuming the system clock is 20 MHz1. Enable the PWM clock by writing a value of 0x0010.0000

to the RCGC0 register2. Enable the clock to the appropriate GPIO module via the

RCGC2 register3. In the GPIO module, enable the appropriate pins for their

alternate function using the GPIOAFSEL register4. Configure the PMCn fields in the GPIOPCTL register to

assign the PWM signals to the appropriate pins5. Configure the RCC register in the System Control module

to use the PWM divide (USEPWMDIV) and set the divider (PWMDIV) to divide by 2 (000).

Page 23: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Recall: Clock Control

Page 24: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Initialization and Configuration

6. Configure the PWM generator for countdown mode with immediate updates to the parameters1. Write the PWM0CTL register with a value of

0x0000.00002. Write the PWM0GENA register with a value of

0x0000.008C3. Write the PWM0GENB register with a value of

0x0000.080C

7. Set the period: for a 25-KHz frequency, the period = 1/25,000, or 40 microseconds. The PWM clock source is 10MHz. Thus, there are 400 clock ticks per period. Use this value to set the PWM0LOAD register. In Count-Down mode, set the LOAD field in the PWM0LOAD register to the requested period minus one1. Write the PWM0LOAD register with a value of

0x0000.018F

Page 25: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Initialization and Configuration

8. Set the pulse width of the PWM0 pin for a 25% duty cycle: Write the PWM0CMPA register with a value of 0x0000.012B

9. Set the pulse width of the PWM1 pin for a 75% duty cycle: Write the PWM0CMPB register with a value of 0x0000.0063

10.Start the timers in PWM generator 0 : Write the PWM0CTL register with a value of 0x0000.0001

11.Enable PWM outputs: Write the PWMENABLE register with a value of 0x0000.0003

Page 26: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Key Registers: PWMnCTL

Page 27: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Key Registers: PWMnGENARegister 44: PWM0 Generator A Control (PWM0GENA), offset 0x060 Register 45: PWM1 Generator A Control (PWM1GENA), offset 0x0A0 Register 46: PWM2 Generator A Control (PWM2GENA), offset 0x0E0 Register 47: PWM3 Generator A Control (PWM3GENA), offset 0x120

Page 28: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Key Registers: PWMnGENBRegister 48: PWM0 Generator B Control (PWM0GENB), offset 0x064 Register 49: PWM1 Generator B Control (PWM1GENB), offset 0x0A4 Register 50: PWM2 Generator B Control (PWM2GENB), offset 0x0E4 Register 51: PWM3 Generator B Control (PWM3GENB), offset 0x124

Page 29: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Key Registers: PWMnLOAD

Register 28: PWM0 Load (PWM0LOAD), offset 0x050 Register 29: PWM1 Load (PWM1LOAD), offset 0x090 Register 30: PWM2 Load (PWM2LOAD), offset 0x0D0 Register 31: PWM3 Load (PWM3LOAD), offset 0x110

Page 30: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Key Registers: PWMnCMPA

Register 36: PWM0 Compare A (PWM0CMPA), offset 0x058 Register 37: PWM1 Compare A (PWM1CMPA), offset 0x098 Register 38: PWM2 Compare A (PWM2CMPA), offset 0x0D8 Register 39: PWM3 Compare A (PWM3CMPA), offset 0x118

Page 31: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Key Registers: PWMnCMPB

Register 40: PWM0 Compare B (PWM0CMPB), offset 0x05C Register 41: PWM1 Compare B (PWM1CMPB), offset 0x09C Register 42: PWM2 Compare B (PWM2CMPB), offset 0x0DC Register 43: PWM3 Compare B (PWM3CMPB), offset 0x11C

Page 32: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Key Registers: PWMENABLE

Page 33: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Using PWM to Generate Different Frequencies

Page 34: The Cortex-M3 Embedded Systems: LM3S9B96 Microcontroller – Pulse Width Modulator (PWM) Refer to Chapter 21 in the reference book “Stellaris® LM3S9B96 Microcontroller

Using PWM to Generate Different Duty Cycles