You are on page 1of 121

Signal Generator Library

Module users Guide C24x Foundation Software

Texas Instruments Inc., May 2002

Texas Instruments Inc., May 2002

IMPORTANT NOTICE
Texas Instruments and its subsidiaries (TI) reserve the right to make changes to their products or to discontinue any product or service without notice, and advise customers to obtain the latest version of relevant information to verify, before placing orders, that information being relied on is current and complete. All products are sold subject to the terms and conditions of sale supplied at the time of order acknowledgement, including those pertaining to warranty, patent infringement, and limitation of liability. TI warrants performance of its semiconductor products to the specifications applicable at the time of sale in accordance with TIs standard warranty. Testing and other quality control techniques are utilized to the extent TI deems necessary to support this warranty. Specific testing of all parameters of each device is not necessarily performed, except those mandated by government requirements. Customers are responsible for their applications using TI components. In order to minimize risks associated with the customers applications, adequate design and operating safeguards must be provided by the customer to minimize inherent or procedural hazards. TI assumes no liability for applications assistance or customer product design. TI does not warrant or represent that any license, either express or implied, is granted under any patent right, copyright, mask work right, or other intellectual property r ight of TI covering or relating to any combination, machine, or process in which such products or services might be or are used. TIs publication of information regarding any third partys products or services does not constitute TIs approval, license, warranty or endorsement thereof. Reproduction of information in TI data books or data sheets is permissible only if reproduction is without alteration and is accompanied by all associated warranties, conditions, limitations and notices. Representation or reproduction of this information with alteration voids all warranties provided for an associated TI product or service, is an unfair and deceptive business practice, and TI is not responsible or liable for any such use. Resale of TIs products or services w statements different from or beyond the parameters ith stated by TI for that products or service voids all express and any implied warranties for the associated TI product or service, is an unfair and deceptive business practice, and TI is not responsible nor liable for any such use. Also see: Standard Terms and Conditions of Sale for Semiconductor Products. www.ti.com/sc/docs/stdterms.htm Mailing Address: Texas Instruments Post Office Box 655303 Dallas, Texas 75265

Copyright 2002, Texas Instruments Incorporated

Texas Instruments Inc., May 2002

Trademarks
TMS320 is the trademark of Texas Instruments Incorporated. All other trademark mentioned herein are property of their respective companies

Acronyms
xDAIS : eXpress DSP Algorithm Interface Standard IALG : Algorithm interface defines a framework independent interface for the creation of algorithm instance objects STB : Software Test Bench QMATH: Fixed Point Mathematical computation CcA : C-Callable Assembly FIR : Finite Impulse Response Filter IIR : Infinite Impulse Response Filter FFT : Fast Fourier Transform

Texas Instruments Inc., May 2002

Contents
1. 2. Introduction..............................................................................................................1 SIN Generator...........................................................................................................1 2.1. Standard THD Sin generator .......................................................................................1 2.2. Low THD sin generator ...............................................................................................1 2.3. High precision sin generator ........................................................................................1 3. Signal Generator Modules..............................................................................5 3.1. SGENT_1: Single Channel SIN Generator (Table look-up).....................................5 3.2. SGENT_2: Dual Channel SIN Generator (Table look -up) ..................................... 13 3.3. SGENT_3: 3 SIN Generator (Table look-up)...................................................... 21 3.4. SGENT_3D: Dual 3 SIN Generator (Table look-up) ........................................... 29 3.5. SGENTI_1: Single Channel SIN Generator (Table look-up and Linear Interpolation) . 39 3.6. SGENTI_2: Dual Channel SIN Generator (Table look-up and Linear Interpolation) 47 3.7. SGENTI_3: 3 SIN Generator (Table look-up and Linear interpolation) ................. 55 3.8. SGENTI_3D: Dual 3 SIN Generator (Table look -up and Linear Interpolation)....... 63 3.9. SGENHP_1: High Precision SIN Generator (Table look-up and Linear Interpolation) 73 3.10. SGENHP_2: High Precision SIN Generator (Table look-up and Linear Interpolation) .. 81 3.11. RMPGEN: Ramp Generator ............................................................................. 89 3.12. TZDLGEN: Trapezoidal generator ........................................................................... 97 3.13. PROFILE: Profile generator ............................................................................... 105

Texas Instruments Inc., May 2002

Texas Instruments Inc., May 2002

Introduction 1.

Introduction
The signal generator module repository contains SIN generation, ramp generation and trapezoidal generation modules. The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. This strategy is adopted for all signal generator modules

2. SIN Generation
The signal generator repository contains comprehensive set of SIN generation modules viz., Single channel, Dual channel, 3 and dual 3 SIN generator to cater to various application requirements. Single and Dual channel modules are available in three forms viz., Standard THD version (SGENT_xx, Low THD version (SGENTI_xx) and High precision version (SGENHP_xx). The 3 and dual 3 SIN generator are available in two forms viz., Standard THD version (SGENT_xx) and Low THD version (SGENTI_xx). 2.1. Standard THD si n generator (SGENT_1, SGENT_2, SGENT_3& SGENT_3D) The standard THD sine generators are implemented using direct table look-up technique and it uses 16-bit modulo counter. Although a 16-bit counter is used, the upper byte (8bits) is used to index the 256-point look-up table and hence to obtain the SIN value. Thus, by changing how quickly values overflow from lower byte (i.e., manipulating step value) the frequency of the sine wave can be changed. Modulo counter ignores the overflow or carry out of 16-bit counter and retains only the remainder. The graph shown in page 2 exemplifies the error of the SIN output obtained using direct table look-up technique with respect to the floating point results. 2.2. Low THD sin generator (SGENTI_1, SGENTI_2, SGENTI_3& SGENTI_3D) The low THD sin generators are implemented using Table look-up and linear interpolation technique and it uses 16-bit modulo counter. The upper byte (8-bits) is used to index the 256-point look-up table and lower byte (8-bits) used to interpolate between the look-up table entries. The graph shown in page 3 exemplifies the error of the SIN output obtained using table look-up with linear interpolation technique with respect to the floating point results. 2.3. High Precision sin generator (SGENHP_1 & SGENHP_2) The high precision sin generators are implemented using Table look-up and linear interpolation technique and it uses 32-bit modulo counter. The high precision modules allow precise frequency control because of the fact that it uses 32-bit value for frequency input and also uses 32-bit modulo counter. The upper byte (8-bits) is used to index the 256-point look-up table and the 15-bits following the upper byte are used to interpolate between the look-up table entries. The graph shown in page 4 exemplifies the error of the SIN output obtained with this implementation with respect to the floating-point results.

Texas Instruments Inc., May 2002

Standard THD sin generator (SGENT_1, SGENT_2, SGENT_3 & SGENT_3D) error graph SIN(x) Obtained by C-float (Q15 format)

36000 24000 12000


SIN(x)

0 -12000 -24000 -36000 0 1 2 3


Input 'x' (in radians) SIN(x) Obtained by Direct table look-up technique (in Q15 format)

36000 24000 12000


SIN(x)

0 -12000 -24000 -36000 0 1 2 3


Input 'x' (in radians) Error with respect to Floating point 800 600 Error (in Counts) 400 200 0 -200 -400 -600 -800 0 1 2 3 Input 'x' (in radians) 4 5 6

Texas Instruments Inc., May 2002

Low THD sin generator (SGENTI_1, SGENTI_2, SGENTI_3& SGENTI_3D) error graph SIN(x) Obtained by C-float (Q15 format)

36000 24000 12000


SIN(x)

0 -12000 -24000 -36000 0 1 2 3


Input 'x' (in radians) SIN(x) Obtained by table look-up with linear interpolation (in Q15 format)

36000 24000 12000


SIN(x)

0 -12000 -24000 -36000 0 1 2 3


Input 'x' (in radians) Error with respect to Floating point 6 4 Error (in Counts) 2 0 -2 -4 -6 0 1 2 3 Input 'x' (in radians) Texas Instruments Inc., May 2002 4 5 6

High Precision sin generator (SGENHP_1 & SGENHP_2) error graph SIN(x) Obtained by C-float (Q15 format)

36000 24000 12000


SIN(x)

0 -12000 -24000 -36000 0 1 2 3


Input 'x' (in radians) SIN(x) Obtained by table look-up with linear interpolation (in Q15 format)

36000 24000 12000


SIN(x)

0 -12000 -24000 -36000 0 1 2 3


Input 'x' (in radians) Error with respect to Floating point 6 4 Error (in Counts) 2 0 -2 -4 -6 0 1 2 3 Input 'x' (in radians) Texas Instruments Inc., May 2002 4 5 6

SGENT_1
Description

Single Channel SIN Generator (Table look-up) This module generates single channel digital SIN signal using direct table look -up technique.

freq gain offset step_max SGENT_1 out

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface (Direct ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx Direct ASM Version File Names: sgt1a.asm, sgen.asm, sintb360.asm C-Callable file names: sgt1c.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 39 words + 257 0 words No No Yes Yes Yes 4 words

C-Callable ASM 39 words + 257 + cinit 0 words Yes No Yes Yes Yes 4 words

Comments 257 Look-up Table entries

IALG layer not implemented

Stack grows by 4 words

Each pre-initialized SGENT_1 structure consumes 7 words in the data memory and 9 words in the cinit section Each instance of SGENT_1 module consumes 6 words in Data memory.

Texas Instruments Inc., May 2002

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENT_1 object is defined by the following structure definition SGENT_1 freq step_max alpha gain offset out SGENT_1_LEN .struct .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out SIN Output Q15 8000-7FFF

Special Symbols SGENT_1_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENT_1 This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENT_1_LEN symbol. ASM Routines SGENT_1_calc This function implements the single channel digital SIN signal generation using direct table look -up technique.

Texas Instruments Inc., May 2002

Direct ASM Interface

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sgt1a.asm and sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENT_1_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENT_1_LEN,1 sgen .tag SGENT_1 Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate 50Hz digital SIN signal assuming 20KHz sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 5369 ; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; ; Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENT_1_calc *-

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

Direct ASM Interface Example: The following pseudo code exemplifies, 50Hz single channel Digital SIN signal generation using SGENT_1 module. .include sgen.asm .ref sgen sgen SGENT_1_calc ; Function external reference

.usect "SGEN",SGENT_1_LEN,1 .tag SGENT_1

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; ;

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

main: ; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENT_1_calc MAR *-

Texas Instruments Inc., May 2002

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENT_1 object is defined by the following structure definition typedef struct { unsigned int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out; void (*calc)(void *); } SGENT_1;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out SIN Output Q15 8000-7FFF

Special Constants and Data types SGENT_1 The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENT_1 SGENT_1_handle User defined Data type of pointer to SGENT_1 Module SGENT_1_DEFAULTS Structure symbolic constant to Initialize SGENT_1 Module. This provides the initial values to the terminal variables as well as method pointers. Methods void (*calc)(void *); This function implements the single channel digital SIN signal generation using direct table look -up technique.

Texas Instruments Inc., May 2002

C/C-Callable ASM Interface Module Usage Instantiation The following example instances empty signal generator object SGENT_1 sgen; Initialization To Instance pre-initialized object SGENT_1 sgen = SGENT_1_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, 50Hz single channel digital SIN signal generation using SGENT_1 module. #include <sgen.h> SGENT_1 sgen=SGENT_1_DEFAULTS; int x1; main ( ) { sgen.offset=0; sgen.gain=0x7fff; /* gain=1 in Q15 sgen.freq=5369; /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 sgen.step_max=1000; /* Max Freq= (step_max * sampling freq)/65536 /* Max Freq = (1000*20k)/65536 = 305.17 } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out; }

*/ */ */ */ */

Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

10

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The standard THD sine generators are implemented using direct table look-up technique and it uses 16-bit modulo counter. Although a 16-bit counter is used, the upper byte (8-bits) is used to index the 256-point look -up table and hence to obtain the SIN value. Thus, by changing how quickly values overflow from lower byte (i.e., manipulating step value) the frequency of the sine wave can be changed. Modulo counter ignores the overflow or carry out of 16-bit counter and retains only the remainder. The graph shown in page 2 exemplifies the error of the SIN output obtained using direct table look-up technique with respect to the floating point results. The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

T=

216 65536 TISR = TISR step step

(1)

The frequency of the generated SIN wave is reciprocal of the time, hence

step FISR (2) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency. Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (2)

step =

500 65536 = 1638.4 20000

Texas Instruments Inc., May 2002

11

Background Information This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q15 number to the SIN generator module.

Texas Instruments Inc., May 2002

12

SGENT_2
Description

Dual Channel SIN Generator (Table look-up) This module generates dual channel digital SIN signal with phase control using direct table look-up technique. phase freq gain offset step_max SGENT_2 out2 out1

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface (Direct ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx Direct ASM Version File Names: sgt2a.asm, sgen.asm, sintb360.asm C-Callable file names: sgt2c.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 58 words + 257 0 words No No Yes Yes Yes 4 words

C-Callable ASM 58 words + 257 + cinit 0 words Yes No Yes Yes Yes 4 words

Comments 257 Look-up Table entries

IALG layer not implemented

Stack grows by 4 words

Each pre-initialized SGENT_2 structure consumes 9 words in the data memory and 11 words in the cinit section Each instance of SGENT_2 module consumes 8 words in Data memory.

Texas Instruments Inc., May 2002

13

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENT_2 object is defined by the following structure definition SGENT_2 freq step_max alpha gain offset out1 phase out2 SGENT_2_LEN .struct .int .int .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain phase

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal Phase angle between the two SIN outputs

Q15 Q15 Q15

8000-7FFF 0-7FFF 8000-7FFF

[ , + ] is normalized to [ 1,+ 1]
FMAX = step _ max FS . 65536

step_max

Q0

0000-7FFF

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 SIN Output 1 SIN Output 2

sin ( ) sin ( + phase )

Q15 Q15

8000-7FFF 8000-7FFF

Special Symbols SGENT_2_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENT_2 This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENT_2_LEN symbol. ASM Routines SGENT_2_calc This function implements the dual channel digital SIN signal generation with phase control using direct table look-up technique.

Texas Instruments Inc., May 2002

14

Direct ASM Interface

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sgt2a.asm and sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENT_2_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENT_2_LEN,1 sgen .tag SGENT_2 Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate two 50Hz digital SIN signal with 90deg phase shift, assuming 20k sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 5369 ; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ;

SGEN_STEP_MAX .set 1000 SGEN_PHASE .set 4000h

FMAX =

step _ max FS . 65536

; = (1000*20k)/65536 = 305.17 ; Phase = (required Phase)/180 in Q15 ; = (+90/180) in Q15 = 4000h

Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_PHASE, sgen.phase SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENT_2_calc *-

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

15

Direct ASM Interface Example: The following pseudo code exemplifies, two 50Hz digital SIN signal generation with 90deg phase shift using SGENT_2 module. .include sgen.asm .ref sgen sgen SGENT_2_calc ; Function external reference

.usect "SGEN",SGENT_3_LEN,1 .tag SGENT_2

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ;

SGEN_STEP_MAX .set 1000 SGEN_PHASE .set 4000h

FMAX =

step _ max FS . 65536

; = (1000*20k)/65536 = 305.17 ; Phase = (required Phase)/180 in Q15 ; = (+90/180) in Q15 = 4000h

main: ; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_PHASE, sgen.phase SPLK #0, sgen.alpha isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENT_2_calc MAR *-

Texas Instruments Inc., May 2002

16

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENT_2 object is defined by the following structure definition typedef struct { unsigned int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out1; unsigned int phase; int out2; void (*calc)(void *); } SGENT_2;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain phase

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal Phase angle between the two SIN outputs , + is normalized to 1,+ 1

Q15 Q15 Q15

8000-7FFF 0-7FFF 8000-7FFF

step_max

FMAX =

step _ max FS . 65536

Q0

0000-7FFF

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 SIN Output 1 SIN Output 2

sin ( ) sin ( + phase )

Q15 Q15

8000-7FFF 8000-7FFF

Special Constants and Data types SGENT_2 The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENT_2 SGENT_2_handle User defined Data type of pointer to SGENT_2 Module SGENT_2_DEFAULTS Structure symbolic constant to Initialize SGENT_2 Module. This provides the initial values to the terminal variables as well as method pointers.

Texas Instruments Inc., May 2002

17

C/C-Callable ASM Interface Methods void (*calc)(void *); This function implements the dual channel digital SIN signal generation with phase control using direct table look-up technique. Module Usage Instantiation The following example instances empty signal generator object SGENT_2 sgen; Initialization To Instance pre-initialized object SGENT_2 sgen = SGENT_2_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, two 50Hz digital SIN signal generation with 90deg phase shift using SGENT_2 module. #include <sgen.h> SGENT_2 sgen=SGENT_2_DEFAULTS; Int x1, x2; main ( ) { sgen.offset=0; sgen.gain=0x7fff; sgen.freq=5369; sgen.step_max=1000; sgen.phase=4000h } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out1; x2=sgen.out2; } Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

/* gain = 1 in Q15 /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 /* Max Freq= (step_max * sampling freq)/65536 /* Max Freq = (1000*20k)/65536 = 305.17 /* Phase = (required Phase)/180 in Q15 /* = (+90/180) in Q15 = 4000h

*/ */ */ */ */ */ */

Texas Instruments Inc., May 2002

18

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The standard THD sine generators are implemented using direct table look-up technique and it uses 16-bit modulo counter. Although a 16-bit counter is used, the upper byte (8-bits) is used to index the 256-point look -up table and hence to obtain the SIN value. Thus, by changing how quickly values overflow from lower byte (i.e., manipulating step value) the frequency of the sine wave can be changed. Modulo counter ignores the overflow or carry out of 16-bit counter and retains only the remainder. The graph shown in page 2 exemplifies the error of the SIN output obtained using direct table look-up technique with respect to the floating point results. The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

T=

216 65536 TISR = TISR step step

(1)

The frequency of the generated SIN wave is reciprocal of the time, hence

step FISR (2) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency. Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (2)

step =

500 65536 = 1638.4 20000

Texas Instruments Inc., May 2002

19

Background Information This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q15 number to the SIN generator module.

Texas Instruments Inc., May 2002

20

SGENT_3
Description

Three Phase SIN Generator (Table look-up) This module generates 3-phase digital SIN signal with fixed 120 phase shift between the channels using direct table look-up technique.

freq gain offset step_max SGENT_3 out1 out2 out3

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface (Direct ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx Direct ASM Version File Names: sgt3a.asm, sgen.asm, sintb360.asm C-Callable file names: sgt3c.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 81 words + 257 0 words No No Yes Yes Yes 4 words

C-Callable ASM 81 words + 257 + cinit 0 words Yes No Yes Yes Yes 4 words

Comments 257 Look-up Table entries

IALG layer not implemented

Stack grows by 4 words

Each pre-initialized SGENT_3 structure consumes 9 words in the data memory and 11 words in the cinit section Each instance of SGENT_3 module consumes 8 words in Data memory.

Texas Instruments Inc., May 2002

21

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENT_3 object is defined by the following structure definition SGENT_3 freq step_max alpha gain offset out1 out2 out3 SGENT_3_LEN .struct .int .int .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 out3 SIN Output 1 SIN Output 2

( ) SIN Output 3 sin ( + 240 )


sin + 120 o
o

sin ( )

Q15 Q15 Q15

8000-7FFF 8000-7FFF 8000-7FFF

Special Symbols SGENT_3_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENT_3 This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENT_3_LEN symbol. ASM Routines SGENT_3_calc This function implements 3-phase digital SIN signal generation with fixed 120 phase shift between the channels using direct table look-up technique.

Texas Instruments Inc., May 2002

22

Direct ASM Interface

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sgt3a.asm and sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENT_3_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENT_3_LEN,1 sgen .tag SGENT_3 Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate 50Hz 3-phase digital SIN signal, assuming 20k sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 5369 ; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; ; Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENT_3_calc *-

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

23

Direct ASM Interface Example: The following pseudo code exemplifies, 3-phase digital SIN signal (50Hz) generation using SGENT_3 module. .include sgen.asm .ref sgen sgen SGENT_3_calc ; Function external reference

.usect "SGEN",SGENT_3_LEN,1 .tag SGENT_3

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; ;

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

main: ; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENT_3_calc MAR *-

Texas Instruments Inc., May 2002

24

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENT_3 object is defined by the following structure definition typedef struct { unsigned int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out1; int out2; int out3; void (*calc)(void *); } SGENT_3;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 out3 SIN Output 1 SIN Output 2

( ) SIN Output 3 sin ( + 240 )


sin + 120 o
o

sin ( )

Q15 Q15 Q15

8000-7FFF 8000-7FFF 8000-7FFF

Special Constants and Data types SGENT_3 The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENT_3 SGENT_3_handle User defined Data type of pointer to SGENT_3 Module SGENT_3_DEFAULTS Structure symbolic constant to Initialize SGENT_3 Module. This provides the initial values to the terminal variables as well as method pointers.

Texas Instruments Inc., May 2002

25

C/C-Callable ASM Interface

Methods void (*calc)(void *); This function implements 3-phase digital SIN signal generation with fixed 120 phase shift between the channels using direct table look-up technique. Module Usage Instantiation The following example instances empty generic signal generator object SGENT_3 sgen; Initialization To Instance pre-initialized object SGENT_3 sgen = SGENT_3_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, 3-phase digital SIN signal (50Hz) generation using SGENT_3 module. #include <sgen.h> SGENT_3 sgen=SGENT_3_DEFAULTS; Int x1, x2, x3; main ( ) { sgen.offset=0; sgen.gain=0x7fff; sgen.freq=5369; sgen.step_max=1000; sgen.phase=4000h } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out1; x2=sgen.out2; x3=sgen.out3; } Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

/* gain = 1 in Q15 /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 /* Max Freq= (step_max * sampling freq)/65536 /* Max Freq = (1000*20k)/65536 = 305.17 /* Phase = (required Phase)/180 in Q15 /* = (+90/180) in Q15 = 4000h

*/ */ */ */ */ */ */

Texas Instruments Inc., May 2002

26

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The standard THD sine generators are implemented using direct table look-up technique and it uses 16-bit modulo counter. Although a 16-bit counter is used, the upper byte (8-bits) is used to index the 256-point look -up table and hence to obtain the SIN value. Thus, by changing how quickly values overflow from lower byte (i.e., manipulating step value) the frequency of the sine wave can be changed. Modulo counter ignores the overflow or carry out of 16-bit counter and retains only the remainder. The graph shown in page 2 exemplifies the error of the SIN output obtained using direct table look-up technique with respect to the floating point results. The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

T=

216 65536 TISR = TISR step step

(1)

The frequency of the generated SIN wave is reciprocal of the time, hence

step FISR (2) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency. Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (2)

step =

500 65536 = 1638.4 20000

Texas Instruments Inc., May 2002

27

Background Information This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q15 number to the SIN generator module.

Texas Instruments Inc., May 2002

28

SGENT_3D
Description

Dual, three Phase SIN Generator (Table look-up) This module generates dual, 3 -phase digital SIN signal with fixed 120 phase shift between the channels and phase control between the two three phase signals using direct table look-up technique. out11 phase freq gain offset step_max SGENT_3D out21 out22 out23 out12 out13

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface (Direct ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx Direct ASM Version File Names: sgt3da.asm, sgen.asm, sintb360.asm C-Callable file names: sgt3dc.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage ASM Only 142 words + 257 0 words No No Yes Yes Yes 4 words C-Callable ASM 142 words + 257 + cinit 0 words Yes No Yes Yes Yes 4 words Stack grows by 4 words IALG layer not implemented Comments 257 Look-up Table entries

Each pre-initialized SGENT_3D structure consumes 13 words in the data memory and 15 words in the cinit section Each instance of SGENT_3D module consumes 12 words in Data memory.

Texas Instruments Inc., May 2002

29

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENT_3D object is defined by the following structure definition SGENT_3D freq step_max alpha gain offset out11 out12 out13 phase out21 out22 out23 SGENT_3D_LEN .struct .int .int .int .int .int .int .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max Format Range (Hex) 0-7FFF

[0,1]

[0,FMAX ]

Q15

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out11 out12 out13 out21 out22 out23 SIN Output 11 SIN Output 12

( ) SIN Output 13 sin ( + 240 )


sin + 120 o
o

sin ( )

Q15 Q15 Q15 Q15 Q15 Q15

8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF

SIN Output 21 SIN Output 22

( SIN Output 23 sin ( + 240

sin ( + phase )

sin + 120 o + phase


o

) + phase )

Texas Instruments Inc., May 2002

30

Direct ASM Interface Special Symbols SGENT_3D_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENT_3D This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENT_3D_LEN symbol. ASM Routines SGENT_3D_calc This function implements two, 3-phase digital SIN signal generation with phase control between the three phase signals using direct table look-up technique.

Texas Instruments Inc., May 2002

31

Direct ASM Interface Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENT_3D_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENT_3D_LEN,1 sgen .tag SGENT_3D Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate two, 50Hz 3-phase digital SIN signal with 90 deg phase shift between the two 3-phase signals, assuming 20k sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 5369 ; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; sgt3da.asm and

SGEN_STEP_MAX .set 1000 SGEN_PHASE .set 4000h

FMAX =

step _ max FS . 65536

; = (1000*20k)/65536 = 305.17 ; Phase = (required Phase)/180 in Q15 ; = (+90/180) in Q15 = 4000h

Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_PHASE, sgen.phase SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENT_3D_calc *-

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

32

Direct ASM Interface Example: The following pseudo code exemplifies, dual 3 -phase digital SIN signal (50Hz) generation with 90deg phase shift between the three phase signals using SGENT_3D module. .include sgen.asm .ref sgen sgen SGENT_3D_calc ; Function external reference

.usect "SGEN",SGENT_3D_LEN,1 .tag SGENT_3D

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ;

SGEN_STEP_MAX .set 1000 SGEN_PHASE .set 4000h

FMAX =

step _ max FS . 65536

; = (1000*20k)/65536 = 305.17 ; Phase = (required Phase)/180 in Q15 ; = (+90/180) in Q15 = 4000h

; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_PHASE, sgen.phase SPLK #0, sgen.alpha ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENT_3D_calc MAR *-

Texas Instruments Inc., May 2002

33

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENT_3D object is defined by the following structure definition typedef struct { unsigned int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out11; int out12; int out13; unsigned int phase; int out21; int out22; int out23; void (*calc)(void *); } SGENT_3D;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max Format Range (Hex) 0-7FFF

[0,1]

[0,FMAX ]

Q15

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out11 out12 out13 out21 out22 out23 SIN Output 11 SIN Output 12

( ) SIN Output 13 sin ( + 240 )


sin + 120 o
o

sin ( )

Q15 Q15 Q15 Q15 Q15 Q15

8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF

SIN Output 21 SIN Output 22

( SIN Output 23 sin ( + 240

sin ( + phase )
o

sin + 120 o + phase

) + phase )

Texas Instruments Inc., May 2002

34

C/C-Callable ASM Interface Special Constants and Data types SGENT_3D The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENT_3D SGENT_3D_handle User defined Data type of pointer to SGENT_3D Module SGENT_3_DEFAULTS Structure symbolic constant to Initialize SGENT_3D Module. This provides the initial values to the terminal variables as well as method pointers. Methods void (*calc)(void *); This function implements two, 3-phase digital SIN signal generation with phase control between the three phase signals using direct table look-up technique. Module Usage Instantiation The following example instances empty generic signal generator object SGENT_3D sgen; Initialization To Instance pre-initialized object SGENT_3D sgen = SGENT_3D_DEFAULTS; Invoking the computation function sgen.calc(&sgen);

Texas Instruments Inc., May 2002

35

C/C-Callable ASM Interface Example The following pseudo code exemplifies, dual 3 -phase digital SIN signal (50Hz) generation with 90deg phase shift between the three phase signals using SGENT_3D module. #include <sgen.h> SGENT_3D sgen=SGENT_3D_DEFAULTS; Int x11, x12, x13, x21, x22, x23; main ( ) { sgen.offset=0; sgen.gain=0x7fff; /* gain = 1 in Q15 sgen.freq=5369; /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 sgen.step_max=1000; /* Max Freq= (step_max * sampling freq)/65536 /* Max Freq = (1000*20k)/65536 = 305.17 sgen.phase=4000h /* Phase = (required Phase)/180 in Q15 /* = (+90/180) in Q15 = 4000h } void interrupt isr_20khz() { sgen.calc(&sgen); x11=sgen.out11; x12=sgen.out12; x13=sgen.out13; x21=sgen.out21; x22=sgen.out22; x23=sgen.out23; } Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

*/ */ */ */ */ */ */

Texas Instruments Inc., May 2002

36

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The standard THD sine generators are implemented using direct table look-up technique and it uses 16-bit modulo counter. Although a 16-bit counter is used, the upper byte (8-bits) is used to index the 256-point look -up table and hence to obtain the SIN value. Thus, by changing how quickly values overflow from lower byte (i.e., manipulating step value) the frequency of the sine wave can be changed. Modulo counter ignores the overflow or carry out of 16-bit counter and retains only the remainder. The graph shown in page 2 exemplifies the error of the SIN output obtained using direct table look-up technique with respect to the floating point results. The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

T=

216 65536 TISR = TISR step step

(1)

The frequency of the generated SIN wave is reciprocal of the time, hence

step FISR (2) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency. Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (2)

step =

500 65536 = 1638.4 20000

Texas Instruments Inc., May 2002

37

Background Information This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q15 number to the SIN generator module.

Texas Instruments Inc., May 2002

38

SGENTI_1
Description

Single Channel SIN Generator (Table look-up and interpolation) This module generates single channel digital SIN signal using table lookup and linear interpolation technique.

freq gain offset step_max SGENTI_1 out

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface ( ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: sgti1a.asm, sgen.asm, sintb360.asm C-Callable file names: sgti1c.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage ASM Only 54 words + 257 0 words No No Yes Yes Yes 5 words C-Callable ASM 54 words + 257 + cinit 0 words Yes No Yes Yes Yes 5 words Stack grows by 5 words IALG layer not implemented Comments 257 Look-up Table entries

Each pre-initialized SGENTI_1 structure consumes 7 words in the data memory and 9 words in the cinit section Each instance of SGENTI_1 module consumes 6 words in Data memory.

Texas Instruments Inc., May 2002

39

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENTI_1 object is defined by the following structure definition SGENTI_1 freq step_max alpha gain offset out SGENTI_1_LEN .struct .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out SIN Output Q15 8000-7FFF

Special Symbols SGENTI_1_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENTI_1 This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENTI_1_LEN symbol. ASM Routines SGENTI_1_calc This function implements the single channel digital SIN signal generation using table look-up and linear interpolation technique.

Texas Instruments Inc., May 2002

40

Direct ASM Interface

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sgti1a.asm and sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENTI_1_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENTI_1_LEN,1 sgen .tag SGENTI_1 Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate 50Hz digital SIN signal assuming 20KHz sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 5369 ; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; ; Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENTI_1_calc *-

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

41

Direct ASM Interface Example: The following pseudo code exemplifies, 50Hz single channel Digital SIN signal generation using SGENTI_1 module. .include sgen.asm .ref sgen sgen SGENTI_1_calc ; Function external reference

.usect "SGEN",SGENTI_1_LEN,1 .tag SGENTI_1

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; ;

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

main: ; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENTI_1_calc MAR *-

Texas Instruments Inc., May 2002

42

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENTI_1 object is defined by the following structure definition typedef struct { unsigned int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out; void (*calc)(void *); } SGENTI_1;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out SIN Output Q15 8000-7FFF

Special Constants and Data types SGENTI_1 The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENTI_1 SGENTI_1_handle User defined Data type of pointer to SGENTI_1 Module SGENTI_1_DEFAULTS Structure symbolic constant to Initialize SGENTI_1 Module. This provides the initial values to the terminal variables as well as method pointers. Methods void (*calc)(void *); This function implements the single channel digital SIN signal generation using table look-up and linear interpolation technique.

Texas Instruments Inc., May 2002

43

C/C-Callable ASM Interface Module Usage Instantiation The following example instances empty signal generator object SGENTI_1 sgen; Initialization To Instance pre-initialized object SGENTI_1 sgen = SGENTI_1_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, 50Hz single channel digital SIN signal generation using SGENTI_1 module. #include <sgen.h> SGENTI_1 sgen=SGENTI_1_DEFAULTS; int x1; main ( ) { sgen.offset=0; sgen.gain=0x7fff; /* gain=1 in Q15 sgen.freq=5369; /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 sgen.step_max=1000; /* Max Freq= (step_max * sampling freq)/65536 /* Max Freq = (1000*20k)/65536 = 305.17 } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out; }

*/ */ */ */ */

Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

44

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The low THD sin generators are implemented using Table look-up and linear interpolation technique and it uses 16-bit modulo counter. The upper byte (8-bits) is used to index the 256point look-up table and lower byte (8-bits) used to interpolate between the look-up table entries.

y2 y = y1 + y 2 y1 (x x1) x2 x1
(1)

y1

x1 x x 2
The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

216 65536 T= TISR = TISR step step

(2)

The frequency of the generated SIN wave is reciprocal of the time, hence

step FISR (3) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency.

Texas Instruments Inc., May 2002

45

Background Information

Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (3)

step =

500 65536 = 1638.4 20000

This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q15 number to the SIN generator module.

Texas Instruments Inc., May 2002

46

SGENTI_2
Description

Dual Channel SIN Generator (Table look-up and Interpolation) This module generates dual channel digital SIN signal with phase control using table look-up and linear interpolation technique. phase freq gain offset step_max SGENTI_2 out2 out1

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface ( ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: sgti2a.asm, sgen.asm, sintb360.asm C-Callable file names: sgti2c.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 84 words + 257 0 words No No Yes Yes Yes 5 words

C-Callable ASM 84 words + 257 + cinit 0 words Yes No Yes Yes Yes 5 words

Comments 257 Look-up Table entries

IALG layer not implemented

Stack grows by 5 words

Each pre-initialized SGENTI_2 structure consumes 9 words in the data memory and 11 words in the cinit section Each instance of SGENTI_2 module consumes 8 words in Data memory.

Texas Instruments Inc., May 2002

47

Direct ASM Interface ASM Interface Module Definition The structure of SGENTI_2 object is defined by the following structure definition SGENTI_2 freq step_max alpha gain offset out1 phase out2 SGENTI_2_LEN .struct .int .int .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain phase

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal Phase angle between the two SIN outputs

Q15 Q15 Q15

8000-7FFF 0-7FFF 8000-7FFF

[ , + ] is normalized to [ 1,+ 1]
FMAX = step _ max FS . 65536

step_max

Q0

0000-7FFF

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 SIN Output 1 SIN Output 2

sin ( ) sin ( + phase )

Q15 Q15

8000-7FFF 8000-7FFF

Special Symbols SGENTI_2_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENTI_2 This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENTI_2_LEN symbol. ASM Routines SGENTI_2_calc This function implements the dual channel digital SIN signal generation with phase control using table look-up and linear interpolation technique.

Texas Instruments Inc., May 2002

48

Direct ASM Interface

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sgti2a.asm and sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENTI_2_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENTI_2_LEN,1 sgen .tag SGENTI_2 Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate two 50Hz digital SIN signal with 90deg phase shift, assuming 20k sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 5369 ; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ;

SGEN_STEP_MAX .set 1000 SGEN_PHASE .set 4000h

FMAX =

step _ max FS . 65536

; = (1000*20k)/65536 = 305.17 ; Phase = (required Phase)/180 in Q15 ; = (+90/180) in Q15 = 4000h

Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_PHASE, sgen.phase SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENTI_2_calc *-

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

49

Direct ASM Interface Example: The following pseudo code exemplifies, two 50Hz digital SIN signal generation with 90deg phase shift using SGENTI_2 module. .include sgen.asm .ref sgen sgen SGENTI_2_calc ; Function external reference

.usect "SGEN",SGENTI_3_LEN,1 .tag SGENTI_2

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ;

SGEN_STEP_MAX .set 1000 SGEN_PHASE .set 4000h

FMAX =

step _ max FS . 65536

; = (1000*20k)/65536 = 305.17 ; Phase = (required Phase)/180 in Q15 ; = (+90/180) in Q15 = 4000h

main: ; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_PHASE, sgen.phase SPLK #0, sgen.alpha isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENTI_2_calc MAR *-

Texas Instruments Inc., May 2002

50

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENTI_2 object is defined by the following structure definition typedef struct { unsigned int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out1; unsigned int phase; int out2; void (*calc)(void *); } SGENTI_2;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain phase

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal Phase angle between the two SIN outputs , + is normalized to 1,+ 1

Q15 Q15 Q15

8000-7FFF 0-7FFF 8000-7FFF

step_max

FMAX =

step _ max FS . 65536

Q0

0000-7FFF

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 SIN Output 1 SIN Output 2

sin ( ) sin ( + phase )

Q15 Q15

8000-7FFF 8000-7FFF

Special Constants and Data types SGENTI_2 The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENTI_2 SGENTI_2_handle User defined Data type of pointer to SGENTI_2 Module SGENTI_2_DEFAULTS Structure symbolic constant to Initialize SGENTI_2 Module. This provides the initial values to the terminal variables as well as method pointers.

Texas Instruments Inc., May 2002

51

C/C-Callable ASM Interface Methods void (*calc)(void *); This function implements the dual channel digital SIN signal generation with phase control using table look-up and linear interpolation technique. Module Usage Instantiation The following example instances empty signal generator object SGENTI_2 sgen; Initialization To Instance pre-initialized object SGENTI_2 sgen = SGENTI_2_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, two 50Hz digital SIN signal generation with 90deg phase shift using SGENTI_2 module. #include <sgen.h> SGENTI_2 sgen=SGENTI_2_DEFAULTS; Int x1, x2; main ( ) { sgen.offset=0; sgen.gain=0x7fff; sgen.freq=5369; sgen.step_max=1000; sgen.phase=4000h } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out1; x2=sgen.out2; } Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

/* gain = 1 in Q15 /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 /* Max Freq= (step_max * sampling freq)/65536 /* Max Freq = (1000*20k)/65536 = 305.17 /* Phase = (required Phase)/180 in Q15 /* = (+90/180) in Q15 = 4000h

*/ */ */ */ */ */ */

Texas Instruments Inc., May 2002

52

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The low THD sin generators are implemented using Table look-up and linear interpolation technique and it uses 16-bit modulo counter. The upper byte (8-bits) is used to index the 256point look-up table and lower byte (8-bits) used to interpolate between the look-up table entries.

y2 y = y1 + y 2 y1 (x x1) x2 x1
(1)

y1

x1 x x 2
The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

216 65536 T= TISR = TISR step step

(2)

The frequency of the generated SIN wave is reciprocal of the time, hence

step FISR (3) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency.

Texas Instruments Inc., May 2002

53

Background Information

Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (3)

step =

500 65536 = 1638.4 20000

This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at-least 100 for reasonable frequency resolution.

To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q15 number to the SIN generator module.

Texas Instruments Inc., May 2002

54

SGENTI_3
Description

Three Phase SIN Generator (Table look-up and interpolation) This module generates 3-phase digital SIN signal with fixed 120 phase shift between the channels using table look-up and linear interpolation technique.

freq gain offset step_max SGENTI_3 out1 out2 out3

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface ( ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: sgti3a.asm, sgen.asm, sintb360.asm C-Callable file names: sgti3c.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 120 words + 257 0 words No No Yes Yes Yes 5 words

C-Callable ASM 120 words + 257 + cinit 0 words Yes No Yes Yes Yes 5 words

Comments 257 Look-up Table entries

IALG layer not implemented

Stack grows by 5 words

Each pre-initialized SGENTI_3 structure consumes 9 words in the data memory and 11 words in the cinit section Each instance of SGENTI_3 module consumes 8 words in Data memory.

Texas Instruments Inc., May 2002

55

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENTI_3 object is defined by the following structure definition SGENTI_3 freq step_max alpha gain offset out1 out2 out3 SGENTI_3_LEN .struct .int .int .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 out3 SIN Output 1 SIN Output 2

( ) SIN Output 3 sin ( + 240 )


sin + 120 o
o

sin ( )

Q15 Q15 Q15

8000-7FFF 8000-7FFF 8000-7FFF

Special Symbols SGENTI_3_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENTI_3 This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENTI_3_LEN symbol. ASM Routines SGENTI_3_calc This function implements 3-phase digital SIN signal generation with fixed 120 phase shift between the channels using table look-up and linear interpolation technique.

Texas Instruments Inc., May 2002

56

Direct ASM Interface

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sgti3a.asm and sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENTI_3_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENTI_3_LEN,1 sgen .tag SGENTI_3 Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate 50Hz 3-phase digital SIN signal, assuming 20k sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 5369 ; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; ; Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENTI_3_calc *-

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

57

Direct ASM Interface Example: The following pseudo code exemplifies, 3-phase digital SIN signal (50Hz) generation using SGENTI_3 module. .include sgen.asm .ref sgen sgen SGENTI_3_calc ; Function external reference

.usect "SGEN",SGENTI_3_LEN,1 .tag SGENTI_3

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; ;

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

main: ; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENTI_3_calc MAR *-

Texas Instruments Inc., May 2002

58

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENTI_3 object is defined by the following structure definition typedef struct { unsigned int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out1; int out2; int out3; void (*calc)(void *); } SGENTI_3;

Module Terminal Variables/ Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0-7FFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 out3 SIN Output 1 SIN Output 2

( ) SIN Output 3 sin ( + 240 )


sin + 120 o
o

sin ( )

Q15 Q15 Q15

8000-7FFF 8000-7FFF 8000-7FFF

Special Constants and Data types SGENTI_3 The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENTI_3 SGENTI_3_handle User defined Data type of pointer to SGENTI_3 Module SGENTI_3_DEFAULTS Structure symbolic constant to Initialize SGENTI_3 Module. This provides the initial values to the terminal variables as well as method pointers.

Texas Instruments Inc., May 2002

59

C/C-Callable ASM Interface

Methods void (*calc)(void *); This function implements 3-phase digital SIN signal generation with fixed 120 phase shift between the channels using table look-up and linear interpolation technique. Module Usage Instantiation The following example instances empty generic signal generator object SGENTI_3 sgen; Initialization To Instance pre-initialized object SGENTI_3 sgen = SGENTI_3_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, 3-phase digital SIN signal (50Hz) generation using SGENTI_3 module. #include <sgen.h> SGENTI_3 sgen=SGENTI_3_DEFAULTS; Int x1, x2, x3; main ( ) { sgen.offset=0; sgen.gain=0x7fff; sgen.freq=5369; sgen.step_max=1000; sgen.phase=4000h } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out1; x2=sgen.out2; x3=sgen.out3; } Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

/* gain = 1 in Q15 /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 /* Max Freq= (step_max * sampling freq)/65536 /* Max Freq = (1000*20k)/65536 = 305.17 /* Phase = (required Phase)/180 in Q15 /* = (+90/180) in Q15 = 4000h

*/ */ */ */ */ */ */

Texas Instruments Inc., May 2002

60

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The low THD sin generators are implemented using Table look-up and linear interpolation technique and it uses 16-bit modulo counter. The upper byte (8-bits) is used to index the 256point look-up table and lower byte (8-bits) used to interpolate between the look-up table entries.

y2 y = y1 + y 2 y1 (x x1) x2 x1
(1)

y1

x1 x x 2
The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

216 65536 T= TISR = TISR step step

(2)

The frequency of the generated SIN wave is reciprocal of the time, hence

step FISR (3) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency.

Texas Instruments Inc., May 2002

61

Background Information

Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (3)

step =

500 65536 = 1638.4 20000

This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q15 number to the SIN generator module.

Texas Instruments Inc., May 2002

62

SGENTI_3D
Description

Dual, three Phase SIN Generator (Table look-up and interpolation) This module generates dual, 3 -phase digital SIN signal with fixed 120 phase shift between the channels and phase control between the two three phase signals using table look-up and linear interpolation technique. out11 phase freq gain offset step_max SGENTI_3D out21 out22 out23 out12 out13

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface ( ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: sgti3da.asm, sgen.asm, sintb360.asm C-Callable file names: sgti3dc.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 224 words + 257 0 words No No Yes Yes Yes 4 words

C-Callable ASM 224 words + 257 + cinit 0 words Yes No Yes Yes Yes 4 words

Comments 257 Look-up Table entries

IALG layer not implemented

Stack grows by 4 words

Each pre-initialized SGENTI_3D structure consumes 13 words in the data memory and 15 words in the cinit section Each instance of SGENTI_3D module consumes 12 words in Data memory.

Texas Instruments Inc., May 2002

63

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENTI_3D object is defined by the following structure definition SGENTI_3D freq step_max alpha gain offset out11 out12 out13 phase out21 out22 out23 SGENTI_3D_LEN .struct .int .int .int .int .int .int .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max Format Range (Hex) 0-7FFF

[0,1]

[0,FMAX ]

Q15

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out11 out12 out13 out21 out22 out23 SIN Output 11 SIN Output 12

( ) SIN Output 13 sin ( + 240 )


sin + 120 o
o

sin ( )

Q15 Q15 Q15 Q15 Q15 Q15

8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF

SIN Output 21 SIN Output 22

( SIN Output 23 sin ( + 240

sin ( + phase )

sin + 120 o + phase


o

) + phase )

Texas Instruments Inc., May 2002

64

Direct ASM Interface Special Symbols SGENTI_3D_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENTI_3D This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENTI_3D_LEN symbol. ASM Routines SGENTI_3D_calc This function implements two, 3-phase digital SIN signal generation with phase control between the three phase signals using table look-up and linear interpolation technique.

Texas Instruments Inc., May 2002

65

Direct ASM Interface Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENTI_3D_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENTI_3D_LEN,1 sgen .tag SGENTI_3D Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate two, 50Hz 3-phase digital SIN signal with 90 deg phase shift between the two 3-phase signals, assuming 20k sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 5369 ; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ; sgti3da.asm and

SGEN_STEP_MAX .set 1000 SGEN_PHASE .set 4000h

FMAX =

step _ max FS . 65536

; = (1000*20k)/65536 = 305.17 ; Phase = (required Phase)/180 in Q15 ; = (+90/180) in Q15 = 4000h

Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_PHASE, sgen.phase SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENTI_3D_calc *-

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

66

Direct ASM Interface Example: The following pseudo code exemplifies, dual 3 -phase digital SIN signal (50Hz) generation with 90deg phase shift between the three phase signals using SGENTI_3D module. .include sgen.asm .ref sgen sgen SGENTI_3D_calc ; Function external reference

.usect "SGEN",SGENTI_3D_LEN,1 .tag SGENTI_3D

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ;

SGEN_STEP_MAX .set 1000 SGEN_PHASE .set 4000h

FMAX =

step _ max FS . 65536

; = (1000*20k)/65536 = 305.17 ; Phase = (required Phase)/180 in Q15 ; = (+90/180) in Q15 = 4000h

; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_PHASE, sgen.phase SPLK #0, sgen.alpha ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENTI_3D_calc MAR *-

Texas Instruments Inc., May 2002

67

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENTI_3D object is defined by the following structure definition typedef struct { unsigned int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out11; int out12; int out13; unsigned int phase; int out21; int out22; int out23; void (*calc)(void *); } SGENTI_3D;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max Format Range (Hex) 0-7FFF

[0,1]

[0,FMAX ]

Q15

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out11 out12 out13 out21 out22 out23 SIN Output 11 SIN Output 12

( ) SIN Output 13 sin ( + 240 )


sin + 120 o
o

sin ( )

Q15 Q15 Q15 Q15 Q15 Q15

8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF 8000-7FFF

SIN Output 21 SIN Output 22

( SIN Output 23 sin ( + 240

sin ( + phase )
o

sin + 120 o + phase

) + phase )

Texas Instruments Inc., May 2002

68

C/C-Callable ASM Interface Special Constants and Data types SGENTI_3D The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENTI_3D SGENTI_3D_handle User defined Data type of pointer to SGENTI_3D Module SGENTI_3_DEFAULTS Structure symbolic constant to Initialize SGENTI_3D Module. This provides the initial values to the terminal variables as well as method pointers. Methods void (*calc)(void *); This function implements two, 3-phase digital SIN signal generation with phase control between the three phase signals using table look-up and linear interpolation technique. Module Usage Instantiation The following example instances empty generic signal generator object SGENTI_3D sgen; Initialization To Instance pre-initialized object SGENTI_3D sgen = SGENTI_3D_DEFAULTS; Invoking the computation function sgen.calc(&sgen);

Texas Instruments Inc., May 2002

69

C/C-Callable ASM Interface Example The following pseudo code exemplifies, dual 3 -phase digital SIN signal (50Hz) generation with 90deg phase shift between the three phase signals using SGENTI_3D module. #include <sgen.h> SGENTI_3D sgen=SGENTI_3D_DEFAULTS; Int x11, x12, x13, x21, x22, x23; main ( ) { sgen.offset=0; sgen.gain=0x7fff; /* gain = 1 in Q15 sgen.freq=5369; /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 sgen.step_max=1000; /* Max Freq= (step_max * sampling freq)/65536 /* Max Freq = (1000*20k)/65536 = 305.17 sgen.phase=4000h /* Phase = (required Phase)/180 in Q15 /* = (+90/180) in Q15 = 4000h } void interrupt isr_20khz() { sgen.calc(&sgen); x11=sgen.out11; x12=sgen.out12; x13=sgen.out13; x21=sgen.out21; x22=sgen.out22; x23=sgen.out23; } Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

*/ */ */ */ */ */ */

Texas Instruments Inc., May 2002

70

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The low THD sin generators are implemented using Table look-up and linear interpolation technique and it uses 16-bit modulo counter. The upper byte (8-bits) is used to index the 256point look-up table and lower byte (8-bits) used to interpolate between the look-up table entries.

y2 y = y1 + y 2 y1 (x x1) x2 x1
(1)

y1

x1 x x 2
The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

216 65536 T= TISR = TISR step step

(2)

The frequency of the generated SIN wave is reciprocal of the time, hence

step FISR (3) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency.

Texas Instruments Inc., May 2002

71

Background Information

Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (3)

step =

500 65536 = 1638.4 20000

This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q number to the SIN generator 15 module.

Texas Instruments Inc., May 2002

72

SGENHP_1
Description

Single Channel SIN Generator (High precision) This module generates single channel digital SIN signal using table lookup and linear interpolation technique and it uses 32-bit integration counter for high precision SIN generation.

freq gain offset step_max SGENHP_1 out

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface ( ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: sghp1a.asm, sgen.asm, sintb360.asm C-Callable file names: sghp1c.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 84 words + 257 0 words No No Yes Yes Yes 5 words

C-Callable ASM 84 words + 257 + cinit 0 words Yes No Yes Yes Yes 5 words

Comments 257 Look-up Table entries

IALG layer not implemented

Stack grows by 5 words

Each pre-initialized SGENHP_1 structure consumes 10 words in the data memory and 12 words in the cinit section Each instance of SGENHP_1 module consumes 9 words in Data memory.

Texas Instruments Inc., May 2002

73

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENHP_1 object is defined by the following structure definition SGENHP_1 freq step_max alpha gain offset out SGENHP_1_LEN .struct .long .long .long .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q31

Range(Hex) 0-7FFFFFFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0-7FFFFFFF

FMAX =

step _ max FS . 2 32

The default value is set to 3E7FB26h to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out SIN Output Q15 8000-7FFF

Special Symbols SGENHP_1_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENHP_1 This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENHP_1_LEN symbol. ASM Routines SGENHP_1_calc This function implement the single channel digital SIN signal generation using table lookup and linear interpolation technique and it uses 32-bit integrator to generate high precision SIN signal.

Texas Instruments Inc., May 2002

74

Direct ASM Interface Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENHP_1_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENHP_1_LEN,1 sgen .tag SGENHP_1 Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate 50Hz digital SIN signal assuming 20KHz sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQH SGEN_FREQL SGEN_STEP_MAXH SGEN_STEP_MAXL .set 0000h .set 7FFFh .set 14F8h .set 0CF92h .set 03E7h .set 0FB26h ; sghp1a.asm and

; gain=1 in Q15 ; freq =(50/305.17)*2^31 = 0x14f8cf92

FMAX =

step _ max FS . 2 32 3 E7 FB 26 20k = = 305.17 232

Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAXL, sgen.step_max SPLK #SGEN_STEP_MAXH, sgen.step_max+1 SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQL, sgen.freq SPLK #SGEN_FREQH, sgen.freq+1 SPLK #0, sgen.alpha SPLK #0, sgen.alpha+1 Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENHP_1_calc *-

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

75

Direct ASM Interface Example: The following pseudo code exemplifies, 50Hz single channel Digital SIN signal generation using SGENHP_1 module. .include sgen.asm .ref sgen sgen SGENHP_1_calc ; Function external reference

.usect "SGEN",SGENHP_1_LEN,1 .tag SGENHP_1

SGEN_OFFSET SGEN_GAIN SGEN_FREQH SGEN_FREQL SGEN_STEP_MAXH SGEN_STEP_MAXL main:

.set .set .set .set

0000h 7FFFh 14F8h 0CF92h

; gain=1 in Q15 ; freq =(50/305.17)*2^31 = 0x14f8cf92

.set 03E7h .set 0FB26h

; ;

FMAX =

step _ max FS . 2 32 3 E7 FB 26 20k = = 305.17 232

; Module initialization LDP #sgen SPLK #SGEN_STEP_MAXL, sgen.step_max SPLK #SGEN_STEP_MAXH, sgen.step_max+1 SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQL, sgen.freq SPLK #SGEN_FREQH, sgen.freq+1 SPLK #0, sgen.alpha SPLK #0, sgen.alpha+1 isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENHP_1_calc MAR *-

Texas Instruments Inc., May 2002

76

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENHP_1 object is defined by the following structure definition typedef struct { unsigned long int freq; unsigned long int step_max; unsigned long int alpha; int gain; int offset; int out; void (*calc)(void *); } SGENHP_1;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain step_max

[0,1]

[0,FMAX ]

Format Q31

Range(Hex) 0-7FFFFFFF

DC offset in the SIN signal Gain of the SIN signal

Q15 Q15 Q0

8000-7FFF 0-7FFF 0-7FFFFFFF

FMAX =

step _ max FS . 2 32

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out SIN Output Q15 8000-7FFF

Special Constants and Data types SGENHP_1 The module definition is created as a data type. This makes it convenient to instance an interface t the signal generator module. To create multiple instances of the module o simply declare variables of type SGENHP_1 SGENHP_1_handle User defined Data type of pointer to SGENHP_1 Module SGENHP_1_DEFAULTS Structure symbolic constant to Initialize SGENHP_1 Module. This provides the initial values to the terminal variables as well as method pointers. Methods void (*calc)(void *); This function implement the single channel digital SIN signal generation using table lookup and linear interpolation technique and it uses 32-bit integrator to generate high precision SIN signal.

Texas Instruments Inc., May 2002

77

C/C-Callable ASM Interface Module Usage Instantiation The following example instances empty signal generator object SGENHP_1 sgen; Initialization To Instance pre-initialized object SGENHP_1 sgen = SGENHP_1_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, 50Hz single channel digital SIN signal generation using SGENHP_1 module. #include <sgen.h> SGENHP_1 sgen=SGENHP_1_DEFAULTS; int x1; main ( ) { sgen.offset=0; sgen.gain=0x7fff; /* gain=1 in Q15 */ sgen.freq=0x14F8CF92; /* freq = (Required Freq/Max Freq)*2^31 */ /* = (50/305.17)*2^31 = 0x14f8cf92 */ sgen.step_max=0x3E7FB26; /* Max Freq= (step_max * sampling freq)/2^32 */ /* =(0x3E7FB26*20k)/2^32 = 305.17 */ } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out; }

Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

78

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The high precision sin generators are implemented using Table look-up and linear interpolation technique and it uses 32-bit modulo counter. The upper byte (8-bits) is used to index the 256-point look-up table and the 15-bits following the upper byte are used to interpolate between the look-up table entries.

y2 y = y1 + y 2 y1 (x x1) x2 x1
(1)

y1

x1 x x 2
The amount of time it takes for the 32-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

2 32 T= TISR step

(2)

The frequency of the generated SIN wave is reciprocal of the time, hence

F=

step FISR 2 32 FISR = 1 TISR

(3) is the ISR invocation frequency.

Where

Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency.

Texas Instruments Inc., May 2002

79

Background Information Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (3)

step =

500 2 32 = 107374182.4 20000

This step value of 107374182 is u sed to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution given by equation (4) The frequency resolution is =

FMAX step _ max

(4)

Hence the step_max should be high to get good frequency resolution. It should be set to at least 100 for reasonable frequency resolution. To generate SIN signal of frequency f , initialize the freq element of the SIN generator module to

f f MAX

2 31 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q31 number to the SIN generator module. Since the frequency control variable is represented in Q31 format, we can precisely generate the required frequency.

Texas Instruments Inc., May 2002

80

SGENHP_2
Description

Dual Channel SIN Generator (High precision) This module generates single channel digital SIN signal using table lookup and linear interpolation technique with phase control and it uses 32-bit integration counter for high precision SIN generation. phase freq gain offset step_max SGENHP_2 out2 out1

Availability

This module is available in two interface formats: 1) The direct-mode assembly-only interface ( ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: sghp2a.asm, sgen.asm, sintb360.asm C-Callable file names: sghp2c.asm, sintb360.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage ASM Only 123 words + 257 0 words No No Yes Yes Yes 5 words C-Callable ASM 123 words + 257 + cinit 0 words Yes No Yes Yes Yes 5 words Stack grows by 5 words IALG layer not implemented Comments 257 Look-up Table entries

Each pre-initialized SGENHP_2 structure consumes 13 words in the data memory and 15 words in the cinit section Each instance of SGENHP_2 module consumes 12 words in Data memory.

Texas Instruments Inc., May 2002

81

Direct ASM Interface Direct ASM Interface Module Definition The structure of SGENHP_2 object is defined by the following structure definition SGENHP_2 freq step_max alpha gain offset out1 phase out2 SGENHP _2_LEN .struct .long .long .long .int .int .int .long .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain phase

[0,1]

[0,FMAX ]

Format Q31

Range(Hex) 0-7FFFFFFF

DC offset in the SIN signal Gain of the SIN signal Phase angle between the two SIN outputs

Q15 Q15 Q15

8000-7FFF 0-7FFF 8000-7FFF

[ , + ] is normalized to [ 1,+ 1]
FMAX = step _ max FS . 2 32

step_max

Q0

0-7FFFFFFF

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 SIN Output 1 SIN Output 2

sin ( ) sin ( + phase )

Q15 Q15

8000-7FFF 8000-7FFF

Special Symbols SGENHP_2_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. SGENHP_2 This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using SGENHP_2_LEN symbol. ASM Routines SGENHP_2_calc This function implement the dual channel digital SIN signal generation using table look-up and linear interpolation technique with phase control and it us es 32-bit integrator to generate high precision SIN signal.

Texas Instruments Inc., May 2002

82

Direct ASM Interface Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add sghp2a.asm and sintb360.asm files to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref SGENHP_2_calc Step 3: Instance the signal generator module sgen .usect "SGEN",SGENHP_2_LEN,1 sgen .tag SGENHP_2 Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate two 50Hz digital SIN signal with 90deg phase shift, assuming 20k sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQH SGEN_FREQL SGEN_STEP_MAXH SGEN_STEP_MAXL SGEN_PHASEL SGEN_PHASEH .set 0000h .set 7FFFh .set 14F8h .set 0CF92h .set 03E7h .set 0FB26h .set 0000h .set 4000h ;

; gain=1 in Q15 ; freq =(50/305.17)*2^31 = 0x14f8cf92

FMAX =

step _ max FS . 2 32 3 E7 FB 26 20k = = 305.17 232

; Phase = (required Phase)/180 in Q31 ; = (+90/180)x2^31= 40000000h

Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAXL, sgen.step_max SPLK #SGEN_STEP_MAXH, sgen.step_max+1 SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQL, sgen.freq SPLK #SGEN_FREQH, sgen.freq+1 SPLK #SGEN_PHASEL, sgen.phase SPLK #SGEN_PHASEH, sgen.phase+1 SPLK #0, sgen.alpha SPLK #0, sgen.alpha+1 Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ SGENHP_2_calc *-

Step 7: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

Texas Instruments Inc., May 2002

83

Direct ASM Interface Example: The following pseudo code exemplifies, two 50Hz digital SIN signal generation with 90deg phase shift using SGENHP_2 module. .include sgen.asm .ref sgen sgen SGENHP_2_calc ; Function external reference

.usect "SGEN",SGENHP_2_LEN,1 .tag SGENHP_2

SGEN_OFFSET SGEN_GAIN SGEN_FREQH SGEN_FREQL SGEN_STEP_MAXH SGEN_STEP_MAXL SGEN_PHASEL SGEN_PHASEH main:

.set 0000h .set 7FFFh .set 14F8h .set 0CF92h .set 03E7h .set 0FB26h .set 0000h .set 4000h

; gain=1 in Q15 ; freq =(50/305.17)*2^31 = 0x14f8cf92

; ;

FMAX =

step _ max FS . 2 32 3 E7 FB 26 20k = = 305.17 232

; Phase = (required Phase)/180 in Q31 ; = (+90/180)x2^31= 40000000h

; Module initialization LDP #sgen SPLK #SGEN_STEP_MAXL, sgen.step_max SPLK #SGEN_STEP_MAXH, sgen.step_max+1 SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQL, sgen.freq SPLK #SGEN_FREQH, sgen.freq+1 SPLK #SGEN_PHASEL, sgen.phase SPLK #SGEN_PHASEH, sgen.phase+1 SPLK #0, sgen.alpha SPLK #0, sgen.alpha+1 isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL SGENHP_2_calc MAR *-

Texas Instruments Inc., May 2002

84

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of SGENHP_2 object is defined by the following structure definition typedef struct { unsigned long int freq; unsigned long int step_max; unsigned long int alpha; int gain; int offset; int out1; unsigned long int phase; int out2; void (*calc)(void *); } SGENHP_2;

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain phase

[0,1]

[0,FMAX ]

Format Q31

Range(Hex) 0-7FFFFFFF

DC offset in the SIN signal Gain of the SIN signal Phase angle between the two SIN outputs , + is normalized to 1,+ 1

Q15 Q15 Q15

8000-7FFF 0-7FFF 8000-7FFF

step_max

FMAX =

step _ max FS . 2 32

Q0

0-7FFFFFFF

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out1 out2 SIN Output 1 SIN Output 2

sin ( ) sin ( + phase )

Q15 Q15

8000-7FFF 8000-7FFF

Special Constants and Data types SGENHP_2 The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type SGENHP_2 SGENHP_2_handle User defined Data type of pointer to SGENHP_2 Module SGENHP_2_DEFAULTS Structure symbolic constant to Initialize SGENHP_2 Module. This provides the initial values to the terminal variables as well as method pointers.

Texas Instruments Inc., May 2002

85

C/C-Callable ASM Interface Methods void (*calc)(void *); This function implements the dual channel digital SIN signal generation using table lookup and linear interpolation technique with phase control and it uses 32-bit integrator to generate high precision SIN signal. Module Usage Instantiation The following example instances empty signal generator object SGENHP_2 sgen; Initialization To Instance pre-initialized object SGENHP_2 sgen = SGENHP_2_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, two 50Hz digital SIN signal generation with 90deg phase shift using SGENHP_2 module. #include <sgen.h> SGENHP_2 sgen=SGENHP_2_DEFAULTS; int x1, x2; main( ) { sgen.offset=0; sgen.gain=0x7fff; sgen.freq=0x14F8CF92; sgen.step_max=0x3E7FB26; sgen.phase=0x40000000; } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out1; x2=sgen.out2; } Note: Edit Linker Command file, to place the look-up table in Program memory. SINTBL > PROG PAGE 0

/* gain=1 in Q15 */ /* freq = (Required Freq/Max Freq)*2^31 */ /* = (50/305.17)*2^31 = 0x14f8cf92 */ /* Max Freq= (step_max * sampling freq)/2^32 */ /* =(0x3E7FB26*20k)/2^32 = 305.17 */ /* Phase= (required Phase)/180 in Q31 */ /* = (+90/180) in Q31 = 40000000h */

Texas Instruments Inc., May 2002

86

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The high precision sin generators are implemented using Table look-up and linear interpolation technique and it uses 32-bit modulo counter. The upper byte (8-bits) is used to index the 256-point look-up table and the 15-bits following the upper byte are used to interpolate between the look-up table entries.

y2 y = y1 + y 2 y1 (x x1) x2 x1
(1)

y1

x1 x x 2
The amount of time it takes for the 32-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

2 32 T= TISR step

(2)

The frequency of the generated SIN wave is reciprocal of the time, hence

F=

step FISR 2 32 FISR = 1 TISR

(3) is the ISR invocation frequency.

Where

Thus the actual frequency of the SIN wave is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency.

Texas Instruments Inc., May 2002

87

Background Information Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (3)

step =

500 2 32 = 107374182.4 20000

This step value of 107374182 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution given by equation (4) The frequency resolution is =

FMAX step _ max

(4)

Hence the step_max should be high to get good frequency resolution. It should be set to at least 100 for reasonable frequency resolution. To generate SIN signal of frequency module to

f , initialize the freq element of the SIN generator

f f MAX

2 31 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q31 number to the SIN generator module. Since the frequency control variable is represented in Q31 format, we can precisely generate the required frequency.

Texas Instruments Inc., May 2002

88

RMPGEN
Description

Ramp Generator This module generates ramp output (Positive or Negative ramp) of adjustable gain, frequency and DC offset. freq gain offset step_max RMPGEN out

Availability

This module is available in two interface formats: 1) The direct mode assembly-only interface ( ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: rampga.asm, sgen.asm C-Callable file names: rampgc.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 44 words


0 words

C-Callable ASM 44 words + cinit 0 words Yes No Yes Yes Yes 4 words

Comments

No No Yes Yes Yes 4 words

IALG layer not implemented

Stack grows by 4 words

Each pre-initialized RMPGEN structure consumes 7 words in the data memory and 9 words in the cinit section Each instance of RMPGEN module consumes 6 words in Data memory.

Texas Instruments Inc., May 2002

89

Direct ASM Interface Direct ASM Interface Module Definition The structure of RMPGEN object is defined by the following structure definition RMPGEN freq step_max alpha gain offset out RMPGEN_LEN .struct .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency Format Q15 Range(Hex) 8000-7FFF

[ FMAX , FMAX ] normalized to [ 1,1].

in

hertz

between

The positive frequency input generates ramp up (+ve Ramp) and negative frequency input generates ramp down output (-ve Ramp) offset gain step_max DC offset in the ramp signal Gain of the ramp signal Q15 Q15 Q0 8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out Ramp Output Q15 8000-7FFF

Special Symbols RMPGEN_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. RMPGEN This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using RMPGEN_LEN symbol. ASM Routines RMPGEN_calc This function generates ramp output with adjustable gain, frequency and DC offset.

Texas Instruments Inc., May 2002

90

Direct ASM Interface

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add rampga.asm file to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref RMPGEN_calc Step 3: Instance the signal generator module sgen .usect "SGEN",RMPGEN_LEN,1 sgen .tag RMPGEN Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate 50Hz negative ramp signal assuming 20KHz sampling frequency) SGEN_OFFSET SGEN_GAIN SGEN_FREQ .set 0000h .set 7FFFh .set 0EB07h ; ; ; ; ; ; Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha Step 6: Invoke MAR SPLK CALL MAR the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ RMPGEN_calc *offset = 0 gain = 1 in Q15 freq = (50/305.17)*2^15 = 5369 Negate freq input for ve ramp

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

Step 7: Edit Linker Command file, to place the user defined section SGEN in Data memory. SGEN > DATA PAGE 1

Texas Instruments Inc., May 2002

91

Direct ASM Interface Example: The following pseudo code exemplifies, 50Hz negative ramp signal generation using RMPGEN module. .include sgen.asm .ref sgen sgen RMPGEN_calc ; Function external reference

.usect "SGEN",RMPGEN_LEN,1 .tag RMPGEN

SGEN_OFFSET SGEN_GAIN SGEN_FREQ

.set 0000h .set 7FFFh .set 0EB07h

; ; ; ; ; ;

offset = 0 gain = 1 in Q15 freq = (50/305.17)*2^15 = 5369 Negate freq input for ve ramp

SGEN_STEP_MAX .set 1000

FMAX =

step _ max FS . 65536

= (1000*20k)/65536 = 305.17

main: ; Module initialization LDP #sgen SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #0, sgen.alpha isr20k: ; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL RMPGEN_calc MAR *-

Texas Instruments Inc., May 2002

92

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of RMPGEN object is defined by the following structure definition typedef struct { int freq; unsigned int step_max; unsigned int alpha; int gain; int offset; int out; void (*calc)(void *); } RMPGEN; Module Terminal Variables/Functions
Item Input Name freq Description Frequency Format Q15 Range(Hex) 8000-7FFF

[ FMAX , FMAX ] normalized to [ 1,1].

in

hertz

between

The positive frequency input generates ramp up (+ve Ramp) and negative frequency input generates ramp down output (-ve Ramp) offset gain step_max DC offset in the ramp signal Gain of the ramp signal Q15 Q15 Q0 8000-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 65536

The default value is set to 1000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop. Output out SIN Output Q15 8000-7FFF

Special Constants and Data types RMPGEN The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type RMPGEN. RMPGEN_handle User defined Data type of pointer to RMPGEN Module SGENTI_1_DEFAULTS Structure symbolic constant to Initialize RMPGEN Module. This provides the initial values to the terminal variables as well as method pointers. Methods void (*calc)(void *); This function generates ramp output with adjustable gain, frequency and DC offset.

Texas Instruments Inc., May 2002

93

C/C-Callable ASM Interface Module Usage Instantiation The following example instances empty signal generator object RMPGEN sgen; Initialization To Instance pre-initialized object RMPGEN sgen = RMPGEN_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, 50Hz negative ramp signal generation using RMPGEN module. #include <sgen.h> RMPGEN sgen=RMPGEN_DEFAULTS; int x1; main ( ) { sgen.offset=0; sgen.gain=0x7fff; /* gain=1 in Q15 sgen.freq=-5369; /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 /* Negate freq input for ve ramp sgen.step_max=1000; } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out; }

*/ */ */ */

/* Max Freq= (step_max * sampling freq)/65536 */ /* Max Freq = (1000*20k)/65536 = 305.17 */

Texas Instruments Inc., May 2002

94

Background Information Background Information The signal generator modules are implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The frequency of the generated signal is reciprocal of the time it takes for successive overflow of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The amount of time it takes for the 16-bit modulo counter to overflow, assuming that the counter is incremented in ISR.

T=

216 65536 TISR = TISR step step

(1)

The frequency of the generated ramp signal is reciprocal of the time, hence

step FISR (2) 65536 1 Where FISR = is the ISR invocation frequency. TISR F=
Thus the actual frequency of the ramp is determined by the step value used to increment the modulo-counter and the ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency. Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop. Then the step value to generate 500Hz is determined using equation (2)

step =

500 65536 = 1638.4 20000

This step value of 1638 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 0.305Hz The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

Texas Instruments Inc., May 2002

95

Background Information To generate RAMP signal of frequency module to

f , initialize the freq element of the ramp generator

f f MAX

215 . Thus the required frequency is normalized with respect to the

maximum frequency as set by step_max and input as Q15 number to the ramp generator module. The negative frequency input generates negative ramp output.

Positive Ramp Output: T

gain offset 0

Negative Ramp Output: T

gain offset 0

Texas Instruments Inc., May 2002

96

TZDLGEN
Description

Trapezoidal Generator This module generates trapezoidal output of adjustable gain, frequency and DC offset. Input pre-scalar is provided to generate very low frequency output.

prescalar gain offset step_max TZDLGEN out

Availability

This module is available in two interface formats: 1) The direct mode assembly-only interface ( ASM) 2) The C-callable interface version

Module Properties

Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: tzdlga.asm, sgen.asm C-Callable file names: tzdlgc.asm, sgen.h
Item Code Size Data RAM xDAIS ready xDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

ASM Only 139 words


0 words

C-Callable ASM 139 words + cinit 0 words Yes No Yes Yes Yes 4 words

Comments

No No Yes Yes Yes 4 words

IALG layer not implemented

Stack grows by 4 words

Each pre-initialized TZDLGEN structure consumes 11 words in the data memory and 13 words in the cinit section Each instance of TZDLGEN module consumes 9 words in Data memory.

Texas Instruments Inc., May 2002

97

Direct ASM Interface Direct ASM Interface Module Definition The structure of TZDLGEN object is defined by the following structure definition TZDLGEN skip_cntr prescalar freq step_max task alpha gain offset out TZDLGEN_LEN .struct .int .int .int .int .int .int .int .int .int .endstruct

Module Terminal Variables/Functions


Item Input Name freq Description Frequency in hertz between normalized to offset gain prescalar step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0000-7FFF

DC offset in the trapezoidal signal Gain of the trapezoidal signal Prescalar for modulo counter, used o t generate very low frequency.

Q15 Q15 Q0 Q0

8000-7FFF 0-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 4 65536 prescalar

The default value is set to 4000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop and unity prescalar. Output out Trapezoidal Output Q15 8000-7FFF

Special Symbols TZDLGEN_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. TZDLGEN This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using TZDLGEN_LEN symbol. ASM Routines TZDLGEN_init This function initializes the trapezoidal module. RMPGEN_calc This function generates trapezoidal output with adjustable gain, frequency and DC offset.

Texas Instruments Inc., May 2002

98

Direct ASM Interface

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add tzdlga.asm file to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref TZDLGEN_init .ref TZDLGEN_calc Step 3: Instance the signal generator module sgen .usect "SGEN",TZDLGEN_LEN,1 sgen .tag TZDLGEN Step 4: Define Symbolic constants to initialize signal generator module (Signal generator module is initialized to generate 50Hz trapezoidal signal assuming 20KHz sampling frequency) SGEN_PRESCALAR SGEN_OFFSET SGEN_GAIN SGEN_FREQ SGEN_STEP_MAX .set .set .set .set 1 0000h 7FFFh 5369

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ;

.set 4000

FMAX =

; FMAX Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_PRESCALAR, sgen.prescalar SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq MAR SPLK CALL MAR Step 6: Invoke MAR SPLK CALL MAR *,AR1 #sgen,*+ TZDLGEN_init *-

step _ max FS . 4 65536 prescalar 4000 20000 = = 305.17 4 65536 1

the signal generator module in ISR *,AR1 ; Invoke the Signal Generator module #sgen,*+ TZDLGEN_calc *-

Step 7: Edit Linker Command file, to place the user defined section SGEN in Data memory. SGEN > DATA PAGE 1

Texas Instruments Inc., May 2002

99

Direct ASM Interface Example: The following pseudo code exemplifies, 50Hz trapezoidal signal generation, using TZDLGEN module. .include sgen.asm .ref .ref sgen sgen TZDLGEN_init TZDLGEN_calc ; Function external reference ; Function external reference

.usect "SGEN",TZDLGEN_LEN,1 .tag TZDLGEN .set .set .set .set 1 0000h 7FFFh 5369

SGEN_PRESCALAR SGEN_OFFSET SGEN_GAIN SGEN_FREQ SGEN_STEP_MAX

; offset = 0 ; gain = 1 in Q15 ; freq = (50/305.17)*2^15 = 5369 ;

.set 4000

FMAX =

; FMAX main: ; Module initialization LDP #sgen SPLK #SGEN_PRESCALAR, sgen.prescalar SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq MAR SPLK CALL MAR isr20k: *,AR1 #sgen,*+ TZDLGEN_init *-

step _ max FS . 4 65536 prescalar 4000 20000 = = 305.17 4 65536 1

; Invoke the Signal generator computation routine in ISR MAR *,AR1 ; Invoke the Signal Generator module SPLK #sgen,*+ CALL TZDLGEN_calc MAR *-

Texas Instruments Inc., May 2002

100

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of TZDLGEN object is defined by the following structure definition typedef struct { unsigned int skip_cntr; unsigned int prescalar; unsigned int freq; unsigned int step_max; unsigned int task; unsigned int alpha; int gain; int offset; int out; void (*init)(void *); void (*calc)(void *); } TZDLGEN; Module Terminal Variables/Functions
Item Input Name freq Description Frequency in hertz between normalized to offset gain prescalar step_max

[0,1]

[0,FMAX ]

Format Q15

Range(Hex) 0000-7FFF

DC offset in the trapezoidal signal Gain of the trapezoidal signal Prescalar for modulo counter, used to generate very low frequency.

Q15 Q15 Q0 Q0

8000-7FFF 0-7FFF 0-7FFF 0000-7FFF

FMAX =

step _ max FS . 4 65536 prescalar

The default value is set to 4000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop and unity prescalar. Output out Trapezoidal Output Q15 8000-7FFF

Special Constants and Data types TZDLGEN The module definition is created as a data type. This makes it convenient to instance an interface to the signal generator module. To create multiple instances of the module simply declare variables of type TZDLGEN. TZDLGEN_handle User defined Data type of pointer to TZDLGEN module TZDLGEN_DEFAULTS Structure symbolic constant to Initialize TZDLGEN Module. This provides the initial values to the terminal variables as well as method pointers.

Texas Instruments Inc., May 2002

101

C/C-Callable ASM Interface Methods void (*init)(void *); This function initializes the trapezoidal module. void (*calc)(void *); This function generates trapezoidal output with adjustable gain, frequency and DC offset.

Module Usage Instantiation The following example instances empty signal generator object TZDLGEN sgen; Initialization To Instance pre-initialized object TZDLGEN sgen = TZDLGEN_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies, 50Hz trapezoidal signal generation, using TZDLGEN module. #include <sgen.h> TZDLGEN sgen=TZDLGEN_DEFAULTS; int x1; main ( ) { sgen.prescalar=1; sgen.freq=5369; /* freq = (Required Freq/Max Freq)*2^15 /* = (50/305.17)*2^15 = 5369 sgen.step_max=4000; /* Max Freq= (step_max*Fs)/(4*65536*prescalar) /* Max Freq = (4000*20k)/(4*65536*1) = 305.17 sgen.gain=0x7fff; /* ~1 in Q15 format sgen.offset=0; sgen.init(&tgen); } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out; }

*/ */ */ */ */

Texas Instruments Inc., May 2002

102

Background Information Background Information The trapezoidal module is implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The trapezoidal signal consists of four states viz., MIN, RAMP UP, MAX and RAMP DOWN. The module is initialized to MIN state by the initialization routine and state switching is performed during the overflow of the modulo counter. Hence, the modulo counter overflows four times to complete one cycle of trapezoidal output. As a result the frequency of the generated signal is reciprocal of the time it takes for 4 overflows of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. FFFFh Modulo Counter 0 Max Trapezoidal Output Min T Ramp up Ramp down

The modular counter have software prescalar to reduce the increment rate in order to generate very low frequency trapezoidal signal. The prescalar essentially increases the time to overflow, thereby reducing the frequency. The amount of time it takes for the 16-bit modulo counter to overflow 4 times, for a given prescalar is given by

T=

4 216 prescalar 4 65536 prescalar TISR = TISR step step

(1)

The frequency of the generated trapezoidal signal is reciprocal of the time, hence

step FISR 4 65536 prescalar 1 Where FISR = is the ISR invocation frequency. TISR F=

(2)

Texas Instruments Inc., May 2002

103

Background Information

Thus, the actual frequency of the trapezoidal signal is determined by the incremental step value, prescalar and ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency. Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop and unity prescalar. Then the step value to generate 500Hz is determined using equation (2)

step =

500 4 65536 1 = 6553.6 20000

This step value of 6553 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 76.3mHz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate trapezoidal signal of frequency generator module to

f , initialize the freq element of the ramp

f f MAX

215 . Thus the required frequency is normalized with respect to

the maximum frequency as set by step_max and input as Q15 number to the trapezoidal generator module.

Prescalar: From equation (2), the minimum frequency is generated for unity prescalar, if the step increment is 1.

FMIN =

1 20000 FISR = = 76mHz 4 65536 1 4 65536

Hence, the minimum frequency is 76mHz or 13.1sec time period for 20Khz ISR. If the pre-scalar value is set to 2, then the minimum frequency is 38mHz or 26.2sec time period for 20K ISR.

FMIN =

1 20000 FISR = = 38mHz 4 65536 2 4 65536 2

Thus, the pre-scalar is essentially used to generate very low frequency signal by increasing the value.

Texas Instruments Inc., May 2002

104

PROFILE
Description

Profiling Signal Generator This module generates profiling signal of adjustable gain, frequency and DC offset. It can generate continuos or triggered single shot output. Input pre-scalar is provided to generate very low frequency. mode trig t_rmpup t_max t_rmpdn t_max prescalar gain offset step_max out PROFILE

Availability

This module is available in two interface formats: 1) The direct mode assembly-only interface ( ASM) 2) The C-callable interface version Type: Target Independent, Application Dependent Target Devices: x24x/x24xx ASM Version File Names: profilea.asm, sgen.asm C-Callable file names: profilec.asm, sgen.h
Item Code Size Data RAM XDAIS ready XDAIS component Multiple instances Reentrancy Multiple Invocation Stack usage

Module Properties

ASM Only 216 words


0 words

C-Callable ASM 216 words + cinit 0 words Yes No Yes Yes Yes 4 words

Comments

No No Yes Yes Yes 4 words

IALG layer not implemented

Stack grows by 4 words

Each pre-initialized PROFILE structure consumes 17 words in the data memory and 19 words in the cinit section Each instance of PROFILE module consumes 15 words in Data memory.

Texas Instruments Inc., May 2002

105

Direct ASM Interface Direct ASM Interface Module Definition The structure of PROFILE object is defined by the following structure definition PROFILE .struct mode .int trig .int skip_cntr .int prescalar .int freq .int step_max .int t_rmpup .int t_max .int t_rmpdn .int t_min .int task .int alpha .int gain .int offset .int out .int PROFILE_LEN .endstruct Module Terminal Variables/Functions
Item Input Name mode trig prescalar freq Description 1: Continuous Signal generation 0: Single Shot operation Trigger input for single shot operation Prescalar for modulo counter, used to generate very low frequency. Frequency in hertz between normalized to step_max Format Binary Binary Q0 Q15 Range(Hex) 0 or 1 0 or 1 0-7FFF 0000-7FFF

[0,1]

[0,FMAX ]

FMAX =

step _ max FS . 4 65536 prescalar

Q0

0000-7FFF

offset gain t_min t_rmpup t_max t_rmpdn Output out

The default value is set to 4000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop and unity prescalar. DC offset in the trapezoidal signal Gain of the trapezoidal signal Ratio of minimum state time with respect to the time period ( T ) in Q8 format Ratio of ramp up state time with respect to the time period ( T ) in Q8 format Ratio of max state time with respect to the time period ( T ) in Q8 format Ratio of ramp down state time with respect to the time period ( T ) in Q8 format Profile Output

Q15 Q15 Q8 Q8 Q8 Q8 Q15

8000-7FFF 0-7FFF 0000-0100 0000-0100 0000-0100 0000-0100 8000-7FFF

Texas Instruments Inc., May 2002

106

Direct ASM Interface Special Symbols PROFILE_LEN This symbol contains the total size of the structure and it is used to reserve the data memory space for the module at the time of instantiation. PROFILE This symbol is associated with the beginning of the structure and it is used with the .tag directive to provide structure characteristics to the data locations reserved using PROFILE_LEN symbol. ASM Routines PROFILE_init This function initializes the profile module. PROFILE_calc This function generates profile signal of adjustable gain, frequency and DC offset. It provides option for single shot or continuos signal generation.

Module Usage: (User should maintain software stack using AR1 to use this module) Step 1: Include sgen.asm in main system file and add profilea.asm file to the project. .include sgen.asm Step 2: Reference the Signal generator module computation function .ref PROFILE_init .ref PROFILE_calc Step 3: Instance the signal generator module sgen .usect "SGEN",PROFILE_LEN,1 sgen .tag PROFILE Step 4: Define Symbolic constants to initialize signal generator module Signal generator module is initialized to generate 50Hz profile signal assuming 20KHz sampling frequency, the profile properties are, 1) Min State time: 10% of T. 2) Ramp up state time: 20% of T. 3) Max state time: 30% of T. 4) Ramp down state time: 40% of T. SGEN_OFFSET SGEN_GAIN SGEN_FREQ SGEN_PRESCALAR SGEN_MODE SGEN_T_RMPUP SGEN_T_MAX SGEN_T_RMPDN SGEN_T_MIN SGEN_STEP_MAX .set 0000h .set 7FFFh .set 5369 .set 1 .set 1 .set 51 .set 77 .set 102 .set 25 .set 4000

; gain=1 in Q15 ; freq = (Required Freq/Max Freq)*2^15 ; = (50/305.17)*2^15 = 5369 ; ; ; ; ; ; Continuous Mode Ramp up time: 20% of T, 0.2 in Q8 Max state time: 30% of T, 0.3 in Q8 Ramp down time: 40% of T, 0.4 in Q8 Min state time: 10% of T, 0.1 in Q8

FMAX =

; FMAX

step _ max FS . 4 65536 prescalar 4000 20000 = = 305.17 4 65536 1

Texas Instruments Inc., May 2002

107

Direct ASM Interface Step 5: Initialize the signal generator module LDP #sgen SPLK #SGEN_MODE, sgen.mode SPLK #SGEN_PRESCALAR, sgen.prescalar SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_T_RMPUP, sgen.t_rmpup SPLK #SGEN_T_MAX, sgen.t_max SPLK #SGEN_T_RMPDN, sgen.t_rmpdn SPLK #SGEN_T_MIN, sgen.t_min MAR SPLK CALL MAR *,AR1 #sgen,*+ PROFILE_init *-

Step 6: Invoke the signal generator module in ISR MAR *,AR1 SPLK #sgen,*+ CALL PROFILE_calc MAR *Step 7: Edit Linker Command file, to place the user defined section SGEN in Data memory. SGEN > DATA PAGE 1

Texas Instruments Inc., May 2002

108

Direct ASM Interface Example: The following pseudo code exemplifies 50Hz profile signal generation with the following properties using PROFILE module (Assuming 20KHz sampling frequency). 1) Min State time: 10% of T. 2) Ramp up state time: 20% of T. 3) Max state time: 30% of T. 4) Ramp down state time: 40% of T. .include sgen.asm .ref .ref sgen sgen PROFILE_init PROFILE_calc ; Function external reference ; Function external reference

.usect "SGEN",PROFILE_LEN,1 .tag PROFILE

; Symbolic constants to initialize the Signal generator module SGEN_OFFSET .set 0000h SGEN_GAIN .set 7FFFh ; gain=1 in Q15 SGEN_FREQ .set 5369 ; freq = (Required Freq/Max Freq)*2^15 ; = (50/305.17)*2^15 = 5369 SGEN_PRESCALAR .set 1 SGEN_MODE .set 1 ; Continuous Mode SGEN_T_RMPUP .set 51 ; Ramp up time: 20% of T, 0.2 in Q8 SGEN_T_MAX .set 77 ; Max state time: 30% of T, 0.3 in Q8 SGEN_T_RMPDN .set 102 ; Ramp down time: 40% of T, 0.4 in Q8 SGEN_T_MIN .set 25 ; Min state time: 10% of T, 0.1 in Q8 SGEN_STEP_MAX .set 4000 ;

FMAX =

; FMAX main: ; Module initialization LDP #sgen SPLK #SGEN_MODE, sgen.mode SPLK #SGEN_PRESCALAR, sgen.prescalar SPLK #SGEN_STEP_MAX, sgen.step_max SPLK #SGEN_GAIN, sgen.gain SPLK #SGEN_OFFSET, sgen.offset SPLK #SGEN_FREQ, sgen.freq SPLK #SGEN_T_RMPUP, sgen.t_rmpup SPLK #SGEN_T_MAX, sgen.t_max SPLK #SGEN_T_RMPDN, sgen.t_rmpdn SPLK #SGEN_T_MIN, sgen.t_min MAR SPLK CALL MAR isr20k: *,AR1 #sgen,*+ PROFILE_init *-

step _ max FS . 4 65536 prescalar 4000 20000 = = 305.17 4 65536 1

; Invoke the Signal generator computation routine in ISR MAR *,AR1 SPLK #sgen,*+ CALL PROFILE_calc MAR *-

Texas Instruments Inc., May 2002

109

C/C-Callable ASM Interface C/C-Callable ASM Interface Object Definition The structure of PROFILE object is defined by the following structure definition typedef struct { int mode; int trig; unsigned int skip_cntr; unsigned int prescalar; unsigned int freq; unsigned int step_max; int t_rmpup; int t_max; int t_rmpdn; int t_min; unsigned int task; unsigned int alpha; int gain; int offset; int out; void (*init)(void *); void (*calc)(void *); } PROFILE; Module Terminal Variables/Functions
Item Input Name mode trig prescalar freq Description 1: Continuous Signal generation 0: Single Shot operation Trigger input for single shot operation Prescalar for modulo counter, used to generate very low frequency. Frequency in hertz between normalized to step_max Format Binary Binary Q0 Q15 Range(Hex) 0 or 1 0 or 1 0-7FFF 0000-7FFF

[0,1]

[0,FMAX ]

FMAX =

step _ max FS . 4 65536 prescalar

Q0

0000-7FFF

offset gain t_min t_rmpup t_max t_rmpdn Output out

The default value is set to 4000 to generate the maximum frequency of 305.17Hz using 20KHz sampling loop and unity prescalar. DC offset in the trapezoidal signal Gain of the trapezoidal signal Ratio of minimum state time with respect to the time period ( T ) in Q8 format Ratio of ramp up state time with respect to the time period ( T ) in Q8 format Ratio of max state time with respect to the time period ( T ) in Q8 format Ratio of ramp down state time with respect to the time period ( T ) in Q8 format Profile Output

Q15 Q15 Q8 Q8 Q8 Q8 Q15

8000-7FFF 0-7FFF 0000-0100 0000-0100 0000-0100 0000-0100 8000-7FFF

Texas Instruments Inc., May 2002

110

C/C-Callable ASM Interface Methods void (*init)(void *); This function initializes the profile module. void (*calc)(void *); This function generates profile signal of adjustable gain, frequency and DC offset. It provides option for single shot or continuos signal generation. Module Usage Instantiation The following example instances empty signal generator object PROFILE sgen; Initialization To Instance pre-initialized object PROFILE sgen = PROFILE_DEFAULTS; Invoking the computation function sgen.calc(&sgen); Example The following pseudo code exemplifies 50Hz profile signal generation with the following properties using PROFILE module (Assuming 20KHz sampling frequency). 1) Min State time: 10% of T. 2) Ramp up state time: 20% of T. 3) Max state time: 30% of T. 4) Ramp down state time: 40% of T. #include <sgen.h> PROFILE sgen=PROFILE_DEFAULTS; int x1; main ( ) { /* Signal Generator module initialization sgen.mode=1; /* Set Mode bit for Continuous signal Generation sgen.prescalar=1; sgen.freq=5369; sgen.step_max=4000; sgen.gain=0x7fff; sgen.offset=0; sgen.t_rmpup=51; sgen.t_max=77; sgen.t_rmpdn=102; sgen.t_min=25; sgen.init(&sgen); } void interrupt isr_20khz() { sgen.calc(&sgen); x1=sgen.out; }

*/ */

/* freq = (Required Freq/Max Freq)*2^15 */ /* = (50/305.17)*2^15 = 5369 */ /* Max Freq= (step_max * sampling freq)/(4*65536) */ /* Max Freq = (4000*20k)/(4*65536) = 305.17 */ /* ~1 in Q15 format */ /* /* /* /* 20% 30% 40% 10% of of of of T, T, T, T, 0.2 in Q8 0.3 in Q8 0.4 in Q8 0.1 in Q8 */ */ */ */

Texas Instruments Inc., May 2002

111

Background Information Background Information The profile signal generator is implemented using modulo arithmetic counter (i.e. Any overflow is ignored and only the remainder is kept) to precisely control the frequency. The profile signal consists of four states viz., MIN, RAMP UP, MAX and RAMP DOWN. The module is initialized to MIN state by the initialization routine and state switching is performed during the overflow of the modulo counter. Hence, the modulo counter overflows four times to complete one cycle of profile output. As a result the frequency of the generated signal is reciprocal of the time it takes for 4 overflows of modulo counter, which in turn commensurate with the step value added to the counter. Thus by changing the step value, one can precisely control the frequency. The step value is not directly commanded to vary the frequency, instead the modulation of frequency is performed using the normalized variable freq which is normalized to the maximum frequency. The maximum required frequency is predetermined based on the application requirement and it set by initializing the step_max input. Thus, the normalized variable freq allows the user to control the frequency of the signal between 0 to maximum frequency. The step value is calculated using the following equation step = freq step _ max (1) Where,

freq = 0 : 1 in Q15 format

Adding the same step value continuously to the modulo counter provides equal time period ( T 4 or 25% of T) for each state of the profile viz., MIN, RAMP UP, MAX and RAMP DOWN resulting in trapezoidal output as given below. Profile generator requires the traversal time for each state modifiable. This is done by providing 4 parameters describing the MIN state time, RAMP UP state time, MAX state time and RAMP DOWN state time. The time input for each state is specified as the ratio with respect to the Profile time period (T) in Q8 format. FFFFh Modulo Counter 0
MIN State time RAMP UP State time MAX State time Max RAMP DOWN State time

Trapezoidal Output
Min

Ramp up

Ramp down

Texas Instruments Inc., May 2002

112

Background Information

The modular counter have software pre-scalar to reduce the increment rate in order to generate very low frequency trapezoidal signal. The pre-scalar essentially increases the time to overflow, thereby reducing the frequency. The amount of time it takes for the 16-bit modulo counter to overflow 4 times, for a given pre-scalar is given by

T=

4 216 prescalar 4 65536 prescalar TISR = TISR step step

(2)

The frequency of the generated trapezoidal signal is reciprocal of the time, hence

step FISR 4 65536 prescalar 1 Where FISR = is the ISR invocation frequency. TISR F=

(3)

Thus, the actual frequency of the trapezoidal signal is determined by the incremental step value, pre-scalar and ISR execution rate. The signal generator modules use the normalized control variable to modulate the frequency instead of directly commanding the step value. The frequency control variable is normalized with respect to the maximum frequency. Assuming that the application requires the maximum frequency of 500Hz using 20Khz ISR loop and unity pre-scalar. Then the step value to generate 500Hz is determined using equation (3)

step =

500 4 65536 1 = 6553.6 20000

This step value of 6553 is used to initialize the step_max element of the signal generator module. The normalized control variable freq helps to control the frequency from 0 to 500Hz by varying it between 0 to 1 (Q15 format) with the frequency resolution of 76.3mHz

The frequency resolution is =

FMAX , hence the step_max should be high to get good step _ max

frequency resolution. It should be set to at least 100 for reasonable frequency resolution.

To generate trapezoidal signal of frequency generator module to

f , initialize the freq element of the trapezoidal

f f MAX

215 . Thus the required frequency is normalized with respect to

the maximum frequency as set by step_max and input as Q15 number to the trapezoidal generator module.

Texas Instruments Inc., May 2002

113

Background Information Pre-scalar From equation (2), the minimum frequency is generated for unity pre-scalar, if the step increment is 1.

FMIN =

1 20000 FISR = = 76mHz 4 65536 1 4 65536

Hence, the minimum frequency is 76mHz or 13.1sec time period for 20Khz ISR. If the pre-scalar value is set to 2, then the minimum frequency is 38mHz or 26.2sec time period for 20K ISR.

FMIN =

1 20000 FISR = = 38mHz 4 65536 2 4 65536 2

Thus, the pre-scalar is essentially used to generate very low frequency signal by increasing the value. Time Specification T2=0.1T T4=0.4T

T1=0.2T

T3=0.3T T

The state traversal time for MIN, RAMP_UP, MAX and RAMP DOWN are input to the module as ratio with respect to the profile time period in Q8 format and it is given below. The sum of the time parameter expressed as ratio with respect to the profile time period, must be unity. Otherwise the generated frequency will be different from the one set by the freq input. t_min =

T1 28 T

(4)

T2 28 T T3 t_max = 28 T
t_rmpup= t_rmpdn=

(5)

(6)

T4 28 T

(7)

Texas Instruments Inc., May 2002

114

Background Information To generate the profile given in the last page, initialize the time parameters as given below,

0.2T 2 8 = 51 T 0.3T 3) t_max= 2 8 = 77 T


1) t_min=

0.1T 28 = 26 T 0.4T 4) t_rmpdn= 2 8 = 102 T


2) t_rmpup=

The step value in equation (1), if added to modulo counter will provide ( T 4 or 25% of T) for each state. To get the required traversal time for each state, the step value is scaled up/down before adding to modulo counter. The step value is scaled up, if the state time parameter is less the 0.25 the scaled down if the state time parameter is greater then 0.25. Actual step value added during ramp up phase is give by the following equation =

step 0.25 t _ rmpup

(8)

Similarly for the other state of the profile output, actual step values are calculated based on time parameter and added to modulo counter. Single shot & Continuous profile generation: The profile generator operates in two modes viz., Single shot mode and Continuos mode. It is selected by using mode element. Setting the mode element will generate continuous profile output, resetting to zero will allow the module to work in single shot mode. In single shot mode, the profile generator generates one cycle of profile, if trig element is set to 1. Trigger element is automatically reset to zero, after a cycle of profile output.

trig

out

Wave Generation: The profile generator can be used to generate ramp and triangular waveform by appropriately initializing the state time parameters Positive ramp generation: 1) t_rmpup=256 (1 in Q8) 3) t_min=0 Negative ramp generation: 1) t_rmpup=0 3) t_min=0 Triangular wave generation: 1) t_rmpup=128 (0.5 in Q8) 3) t_min=0

2) t_max=0, 4) t_rmpdn=0

2) t_max=0, 4) t_rmpdn=256 (1 in Q8)

2) t_max=0, 4) t_rmpdn=128 (0.5 in Q8)

Texas Instruments Inc., May 2002

115

You might also like