Modul l 44:: Brojni sistemi Digital Signal Controller ...es.elfak.ni.ac.rs/mikro/Materijal/04-Brojni...

46
Texas Instruments Incorporated Modul Modul 4: Brojni sistemi : Brojni sistemi Digital Signal Controller TMS320F2833x 4 4 - 1 Texas Instruments Incorporated

Transcript of Modul l 44:: Brojni sistemi Digital Signal Controller ...es.elfak.ni.ac.rs/mikro/Materijal/04-Brojni...

Texas Instruments Incorporated

Modul Modul 44: Brojni sistemi: Brojni sistemi

Digital Signal ControllerTMS320F2833x

4 4 -- 11

Texas Instruments Incorporated

“Floating“Floating--Point”, “Integer”, “FixedPoint”, “Integer”, “Fixed--Point”Point”uu Dve osnovne kategorije procesora:Dve osnovne kategorije procesora:

ww FloatingFloating--PointPointww Integer/FixedInteger/Fixed--PointPoint

uu U U čemu je razlikačemu je razlika??uu PrednostiPrednosti / / nedostacinedostaci ??

4 4 -- 22

uu RealReal--Time Time ControlControl: : ww Većina MC su tipa Većina MC su tipa FixedFixed--PointPoint!!ww F2833x F2833x podržava oba načina obradepodržava oba načina obrade! !

Tipovi pTipovi procesorrocesoraauu FloatingFloating--PointPoint pprocesorrocesorii

ww Ugrađena hardverska jedinica za podršku Ugrađena hardverska jedinica za podršku Floating Floating -- PointPoint operacijaoperacija

ww PrimeriPrimeri: Intel: Intelovaova Pentium Pentium serijaserija, , Texas Texas Instruments C6000 DSPInstruments C6000 DSP

ww Veliki dinamički opseg za numerička Veliki dinamički opseg za numerička izračunavanjaizračunavanja

4 4 -- 33

izračunavanjaizračunavanjaww Viša cenaViša cena

uu Integer / FixedInteger / Fixed--Point Point pprocesorrocesoriiww FixedFixed--PointPoint aritmetička jedinicaaritmetička jedinicaww Najveći broj MCNajveći broj MC--a su a su fixed pointfixed point mamašinešineww PrimeriPrimeri: Freescale : Freescale S12X, Infineon C166, S12X, Infineon C166,

Texas Instruments MSP430, Atmel AVRTexas Instruments MSP430, Atmel AVRww Niska cena poNiska cena po MIPSMIPS--uu

Standard IEEEStandard IEEE--754 “Single Precision754 “Single PrecisionFloatingFloating--Point”Point”

s eeeeeeee fffffffffffffffffffffff031 30 23 22

23 bit mantisa (fraction)8 bit eksponent1 bit snak

Case 1: if e = 255 and f = 0, then v = NaN

Case 2: if e = 255 and f = 0, then v = [(-1)s]*infinity

/

4 4 -- 44

Prednosti ⇒⇒ EEksksponent omoguponent omogućava veliki dinamički opsegćava veliki dinamički opsegNedostaci Nedostaci ⇒⇒ PreciPreciznostznost broja zavisi od ekspobroja zavisi od eksponentnentaa

Case 3:Case 3: if 0 < e < 255,if 0 < e < 255, then v = [(then v = [(--1)1)ss]*[2]*[2(e(e--127)127)]*(1.f)]*(1.f)

Case 4:Case 4: if e = 0 and f = 0,if e = 0 and f = 0, then v = [(then v = [(--1)1)ss]*[2]*[2((--126)126)]*(0.f)]*(0.f)Case 5: if e = 0 and f = 0, then v = [(-1)s]*0

//

FloatingFloating--Point formatPoint formatBit Znaka (S): Negativni: bit 31 = 1 / Positivni: Bit 31 = 0

• Mantisa (M): Mantisa normalizovana na m0 = 1; m0 se ne smešta u memoriju!

231 2 231 2 2 2 1 2 iM m m m m− − − −= + + + + = + ∑L

4 4 -- 55

1 ≤ M < 2

• Exponent (E): 8 Bitni označeni eksponent, sa pomerajem (OFFSET) = +127

• Konačno:

1 2 231 2 23

11 2 2 2 1 2 i

ii

M m m m m− − − −

=

= + + + + = + ∑L

( 1) 2S E OFFSETZ M −= −

FloatingFloating--Point Point ne rešava sve!ne rešava sve!

Primer: x = 10.0 (0x41200000)+ y = 0.000000240 (0x3480D959)

z = 10.000000240 RIGHT?GREŠKA!Nije moguće predstaviti 10.000000240 u

4 4 -- 66

Nije moguće predstaviti 10.000000240 upokretnom zarezu (jednostruka preciznost)

0x412000000 = 10.00000000010.000000240 ⇐ nije moguće!

0x412000001 = 10.000001000

z zaokruženo na 10.000000000

Osnove Osnove “Integer” “Integer” brojnog sistemabrojnog sistema

uu Binarni brojeviBinarni brojevi011001102 2 = (0*8)+(1*4)+(1*2)+(0*1) = 6= (0*8)+(1*4)+(1*2)+(0*1) = 610 10

111101111022 = (1*16)+(1*8)+(1*4)+(1*2)+(0*1) = 30= (1*16)+(1*8)+(1*4)+(1*2)+(0*1) = 301010

4 4 -- 77

uu DvojiDvojični komplementčni komplement011001102 2 = (0*= (0*--8)+(1*4)+(1*2)+(0*1) = 68)+(1*4)+(1*2)+(0*1) = 610 10

111101111022 = (1*= (1*--16)+(1*8)+(1*4)+(1*2)+(0*1) = 16)+(1*8)+(1*4)+(1*2)+(0*1) = --221010

Množenje 4Množenje 4--bitnih brojevabitnih brojeva

01000100x 1101x 1101

00000000010001000000000000 0000 00000100 0100

4 4 x x --3 3

4 4 x x --3 3

4 4 -- 88

00000100 0100 + + 111100 1100

1111101001110100AAkkumulatorumulator

MemorMemorijaija

1111010011110100--1212--1212

??Da li postoji drugiDa li postoji drugi ((boljibolji) ) brojni sistembrojni sistem??

Binarne frakcijeBinarne frakcije

11 00 11 11••

--11 1/21/2 1/41/4 1/81/8

= = --1 + 1/4 + 1/8 = 1 + 1/4 + 1/8 = --5/85/8

4 4 -- 99

= = --1 + 1/4 + 1/8 = 1 + 1/4 + 1/8 = --5/85/8

Frakcije imaju lepu osobinu dafrakcija x frakcija = frakcija

44--bitno IQ bitno IQ –– mnomnoženježenje

01000100x 1101x 1101

00000000010001000000000000 0000 00000100 0100

1/21/2x x -- 3/83/8..

..

4 4 -- 1010

00000100 0100 111100 1100 11111010011101001111010011110100

--3/163/16AAkkumulatorumulator

MemorMemorijaija --1/41/411101110..

FraFrakkcioncioni brojevii brojevi

S IIIIIIII fffffffffffffffffffffff031

32 bit mantissa

-2I + 2I-1 + … + 21 + 20 . 2-1 + 2-2 + … + 2-Q

4 4 -- 1111

PrednostiPrednosti ⇒⇒ PreciPreciznost ista za sve brojeve uznost ista za sve brojeve u IQ formatIQ formatuuNedostaci Nedostaci ⇒⇒ Ograničeni dinamički opseg u odnosu na Ograničeni dinamički opseg u odnosu na FPFP

“IQ” “IQ” –– Format Format “I” “I” ⇒⇒ INTEGER INTEGER –– FrakcijaFrakcija

“Q” “Q” ⇒⇒ QUOTIENT QUOTIENT –– Frakcija Frakcija

IQ IQ -- PrimeriPrimeri

S fff03

Najnegativniji decimalni broj: -1.0 = 1.000 B

Najpozitivniji decimalni broj : + 0.875 = 0.111 B

I1Q3 I1Q3 –– Format: Format:

4 4 -- 1212

Najmanji negativni decimalni broj: -1*2-3 (-0.125) = 1.111 B

Najmanji pozitivni decimalni broj: 2-3 (+0.125) = 0.001 B

OpsegOpseg: : --1.0 …. 0.875 (1.0 …. 0.875 (≈≈ + 1.0)+ 1.0)ReRezzoluolucijacija:: 22--33

IQ IQ -- PrimeriPrimeri

SII f03

Najnegativniji decimalni broj : -4.0 = 100.0 B

Najpozitivniji decimalni broj : + 3.5 = 011.1 B

I3Q1 I3Q1 –– Format: Format:

4 4 -- 1313

Najmanji negativni decimalni broj : -1 * 2-1 (- 0.5) = 111.1 B

Najmanji pozitivni decimalni broj : 2-1 (+0.5) = 000.1 B

OpsegOpseg: : --4.0 …. +3.5 (4.0 …. +3.5 (≈≈ + 4.0)+ 4.0)ReRezzoluolucijacija:: 22--11

IQ IQ –– Opseg I rezolucijaOpseg I rezolucija44--bitni broj:bitni broj:

Format Most Negative

Most Positive

Resolution (step size)

I1Q3 1.000-1

0.111+0.875

0.0010.125

I2Q2 10.00-2

01.11+1.75

00.010.25

4 4 -- 1414

-2 +1.75 0.25I3Q1 100.0

-4011.1+3.5

000.10.5

I4Q0 1000-8

0111+7

00011

• “Trade – Off” izmedju opsega i rezolucije• Napomena: Integer Format (I4Q0) je podskup IQ-Math

IQ IQ -- PrimeriPrimeri

S fff ffff ffff ffff ffff ffff ffff ffff031

Najnegativniji decimalni broj : -1.01.000 0000 0000 0000 0000 0000 0000 0000 B

Najpozitivniji decimalni broj : ≈ + 1.00.111 1111 1111 1111 1111 1111 1111 1111 B

I1Q31 I1Q31 –– Format: Format:

4 4 -- 1515

Najmanji negativni decimalni broj : -1*2-31

1.111 1111 1111 1111 1111 1111 1111 1111 B

Najmanji pozitivni decimalni broj : 2-31

0.000 0000 0000 0000 0000 0000 0000 0001 B

Opseg Opseg : : --1.0 …. (+1.0)1.0 …. (+1.0)ReRezzoluolucija cija :: 22--3131

IQ IQ -- PrimeriPrimeri

S III IIII ffff ffff ffff ffff ffff031

Najnegativniji decimalni broj : -1281000 0000. 0000 0000 0000 0000 0000 0000 B

Najpozitivniji decimalni broj : ≈ + 1280111 1111. 1111 1111 1111 1111 1111 1111 B

I8Q24 I8Q24 –– Format: Format:

4 4 -- 1616

Najmanji negativni decimalni broj : -1*2-24

1111 1111. 1111 1111 1111 1111 1111 1111 B

Najmanji pozitivni decimalni broj : 2-24

0000 0000. 0000 0000 0000 0000 0000 0001 B

Opseg Opseg : : --128 …. (+128)128 …. (+128)ReRezzoluolucija cija :: 22--2424

IQIQ--raračunica je nekad boljačunica je nekad bolja!!

I8Q24 Primer: x = 10.0 (0x0A000000)+ y = 0.000000240 (0x00000004)

z = 10.000000240 (0x0A000004)

4 4 -- 1717

Tačan rezulat

KakoKako se se frakcionifrakcioni brojbroj kodira u Ckodira u C--uu??~ 1~ 1

00

––½½

½½

~ 32K~ 32K

00

––16K16K

16K16K

7FFF7FFF

00000000

C000C000

40004000

⇒⇒*32768*32768

4 4 -- 1818

––11FraFrakkccijeije

––32K32KInteIntedžeridžeri

80008000HexHex

void main(void) {void main(void) {int coef = 32768 * 707 / 1000;int coef = 32768 * 707 / 1000;

}}

uu PrimerPrimer: : predstavljanje predstavljanje frafrakcionog brojakcionog broja 0.7070.707

FraFrakcionikcioni iliili InteIntedžeridžeri

uu OpsegOpsegww InteIntedžeri imaju maksimalni opseg koji je džeri imaju maksimalni opseg koji je

određen brojem bitovaodređen brojem bitovaww FraFrakcioni imaju opseg kcioni imaju opseg ±±11

uu PreciPreciznostznost

4 4 -- 1919

ww InteIntedžeri imaju maksimalnu preciznost džeri imaju maksimalnu preciznost 11ww Preciznost frakcionih određena brojem Preciznost frakcionih određena brojem

bitovabitova

Lab4Lab4: : ‚‚‚‚FixedFixed--pointpoint‚‚‚‚ ii ‚‚‚‚FloatingFloating--pointpoint‚‚‚‚

uu BenchmarkBenchmark operacije množenjaoperacije množenjauu k = i * ik = i * iuu TestTestne postavkene postavke::1.1. Množenje intedžeraMnoženje intedžera2.2. FloatingFloating--Point Point primenom FP bibliotekeprimenom FP biblioteke

4 4 -- 2020

2.2. FloatingFloating--Point Point primenom FP bibliotekeprimenom FP biblioteke3.3. FloatingFloating--Point Point primenom primenom FP FP hardverske jedinicehardverske jedinice

Fixed-point Floating-Point-Library

Floating-Point-Hardware

code size (words) 3 89 9clock cycles (6.67 ns) 3 112 5

Benchmark result:

F28x DSP BibliotekaSignal Processing Libraries & Applications SoftwareSignal Processing Libraries & Applications Software Literature #Literature #ACI3ACI3--1: Control with Constant V/Hz1: Control with Constant V/Hz SPRC194SPRC194ACI3ACI3--3: Sensored Indirect Flux Vector Control3: Sensored Indirect Flux Vector Control SPRC207SPRC207ACI3ACI3--3: Sensored Indirect Flux Vector Control (simulation)3: Sensored Indirect Flux Vector Control (simulation) SPRC208SPRC208ACI3ACI3--4: Sensorless Direct Flux Vector Control4: Sensorless Direct Flux Vector Control SPRC195SPRC195ACI3ACI3--4: Sensorless Direct Flux Vector Control (simulation)4: Sensorless Direct Flux Vector Control (simulation) SPRC209SPRC209PMSM3PMSM3--1: Sensored Field Oriented Control using QEP1: Sensored Field Oriented Control using QEP SPRC210SPRC210PMSM3PMSM3--2: Sensorless Field Oriented Control2: Sensorless Field Oriented Control SPRC197SPRC197PMSM3PMSM3--3: Sensored Field Oriented Control using Resolver3: Sensored Field Oriented Control using Resolver SPRC211SPRC211PMSM3PMSM3--4: Sensored Position Control using QEP4: Sensored Position Control using QEP SPRC212SPRC212BLDC3BLDC3--1: Sensored Trapezoidal Control using Hall Sensors1: Sensored Trapezoidal Control using Hall Sensors SPRC213SPRC213BLDC3BLDC3--2: Sensorless Trapezoidal Drive2: Sensorless Trapezoidal Drive SPRC196SPRC196

4 4 -- 2121

BLDC3BLDC3--2: Sensorless Trapezoidal Drive2: Sensorless Trapezoidal Drive SPRC196SPRC196DCMOTOR: Speed & Position Control using QEP without IndexDCMOTOR: Speed & Position Control using QEP without Index SPRC214SPRC214Digital Motor Control Library (F/C280x)Digital Motor Control Library (F/C280x) SPRC215SPRC215Communications Driver LibraryCommunications Driver Library SPRC183SPRC183DSP Fast Fourier Transform (FFT) LibraryDSP Fast Fourier Transform (FFT) Library SPRC081SPRC081DSP Filter LibraryDSP Filter Library SPRC082SPRC082DSP FixedDSP Fixed--Point Math LibraryPoint Math Library SPRC085SPRC085DSP IQ Math LibraryDSP IQ Math Library SPRC087SPRC087DSP Signal Generator LibraryDSP Signal Generator Library SPRC083SPRC083DSP Software Test Bench (STB) LibraryDSP Software Test Bench (STB) Library SPRC084SPRC084C28x FPU Fast RTS LibraryC28x FPU Fast RTS Library SPRC664SPRC664C2833x C/C++ Header Files and Peripheral ExamplesC2833x C/C++ Header Files and Peripheral Examples SPRC530SPRC530

Available from TI Website Available from TI Website ⇒⇒ http://www.ti.com/c2000http://www.ti.com/c2000

Kako se koristi frakciona računica?

Oduzima mnogo dana/nedelja za

konverziju (jednosmerni proces)

Početak razvojasimulacijom u floating-

point-u

SimulacionaPlatforma(MatLab)

Dilema Dilema FixedFixed--PointPoint razvojarazvoja

4 4 -- 2222

Fixed-Point Algoritam

(ASM, C, C++)

Fixed-Point DSP

Lako se portuje u floating-point kolo

Floating-Point DSP

Floating-PointAlgorithm(C ili C++)

Klasično 16-bitno “Q” izračunavanjey = mx + b

s Q15ss Q30

sssssssssssss Q15

s Q15

s Q15

ss Q30

M

XB

<< 15 Align Binary Point For Add

4 4 -- 2323

s Q15

ss Q30

sI Q30

ssssssssssssI Q15 Y

Y = ((i32) M * (i32) X + (i32) B << Q) >> Q;C:

>> 15 Align Binary Point For Store

Klasično 32-bitno “Q” izračunavanje y = mx + b

<< 24 Align DecimalPoint for Add

I8 Q24 M

XB

I8 Q24

I8 Q24

I16 Q48

ssssssssssssssssssI8 Q24

ssssI8 Q48

4 4 -- 2424

Y = ((i64) M * (i64) X + (i64) B << Q) >> Q;C:Napomena: Zahteva se podrška 64-bitnih intedžera u kompajleru (klasičan C ovo nema)

Y

ssssI8 Q48

I16 Q48

sssssssssssssssssI16 Q24 I8 Q24

>> 24 Align DecimalPoint for Store

32-bitno IQ izračunavanje y = mx + b

I8 Q24I16 Q48

M

X>> 24Align Decimal

Point Of Multiply

I8 Q24

sssssssssssssssssI16 Q24

4 4 -- 2525

B

Y

I8 Q24

I8 Q24I8 Q24

Y = ((i64) M * (i64) X) >> Q + B;C:

IQ izračunavanje Operacija množenja

Y = ((i64) M * (i64) X) >> Q + B;

_IQmpy(M,X) == ((i64) M * (i64) X) >> QRedefinRedefinisanjisanjee množenjamnoženja::

Y = _IQmpy(M,X) + B;Tako da se prethodna relacija svodi naTako da se prethodna relacija svodi na::

4 4 -- 2626

MOVL XT,@MIMPYL P,XT,@X ; P = low 32-bits of M*X QMPYL ACC,XT,@X ; ACC = high 32-bits of M*XLSL64 ACC:P,#(32-Q) ; ACC = ACC:P << 32-Q

; (same as P = ACC:P >> Q)ADDL ACC,@B ; Add BMOVL @Y,ACC ; Result = Y = _IQmpy(M*X) + B; 7 Cycles

C28x compC28x compajler podržavaajler podržava “_IQmpy” “_IQmpy” kao kao “intrinsic”; asemblerski kod:“intrinsic”; asemblerski kod:

IQ izračunavanje - IQmathliči na floating-point!

float Y, M, X, B;

Y = M * X + B;Floating-Point

long Y, M, X, B;

Y = ((i64) M * (i64) X + (i64) B << Q)) >> Q;Klasična

Fix-Point Q

4 4 -- 2727

_iq Y, M, X, B;

Y = _IQmpy(M, X) + B;

“IQmath”u C

iq Y, M, X, B;

Y = M * X + B;

“IQmath”u C++

“IQmath” kod se lako čita!

Primena IQmathGLOBAL_Q

GLOBAL_QGLOBAL_QKorisnik biraKorisnik bira “Global Q” “Global Q” vrednost za celu aplikacijuvrednost za celu aplikaciju

na osnovu potrebnog dinamičkog opsega i rezolucije, na primerna osnovu potrebnog dinamičkog opsega i rezolucije, na primer::

0.000 000 06-128.000 000 00127.999 999 94240.000 001-2048.000 0002047.999 99920

0.000 000 004-8.000 000 0007.999 999 99628ResolutionMin ValMax ValGLOBAL_Q

4 4 -- 2828

#define GLOBAL_Q 18 // set in “IQmathLib.h” file_iq Y, M, X, B;Y = _IQmpy(M,X) + B; // all values are in Q = 18

Korisnik može eksplicitno da specificira vrednostKorisnik može eksplicitno da specificira vrednost Q:Q:_iq20 Y, M, X, B;Y = _IQ20mpy(M,X) + B; // all values are in Q = 20

0.000 001-2048.000 0002047.999 99920

IQmath obezbeđuje kompatibilnost između Floating-Point i Fixed-Point

Y = _IQmpy(M, X) + B;

#if MATH_TYPE == IQ_MATH #if MATH_TYPE == FLOAT_MATH

1) Definisanje matematičke funkcije

2) Izbor tipa u IQmathLib.h

3) Kompajler automatski konvertuje u:

4 4 -- 2929

Sve “IQmath” operacije imaju ekvivalet u floating-point operaciji

Compile & Runon Fixed-Point

F282xx

Y = (float)M * (float)X + (float)B;3) Kompajler automatski konvertuje u:

Floating-Point Math Code

Fixed-Point Math Code

Compile & Runon Floating-Point

F283xx *

IQmath Library: Math & Trig Funkcije

IQsin(A),IQcos(A)_IQsin(A), _IQcos(A)sin(A),cos(A) trig

A – BA - BA - Bsubstract>, >=, <, <=, ==, |=, &&, || >, >=, <, <=, ==, |=, &&, ||>, >=, <, <=, ==, |=, &&, ||boolean

A + BA + BA + BaddA / B_IQdiv (A , B)A / B divideA * B_IQmpy(A , B)A * Bmultiply

A = IQ(1.2345)A = _IQ(1.2345)A = 1.2345constantiq A, B;_iq A, B;float A, B;type

“IQmath” in C++“IQmath” in CFloating-PointOperation

4 4 -- 3030Accuracy of functions/operations approx ~28 to ~31 bits

IQsin(A),IQcos(A)IQsinPU(A),IQcosPU(A)

IQasin(A),IQacos(A)IQatan(A),IQatan2(A,B)

IQatan2PU(A,B)IQsqrt(A),IQisqrt(A)

IQmag(A,B)IQexp(A)

_IQsin(A), _IQcos(A)_IQsinPU(A), _IQcosPU(A)

_IQasin(A),_IQacos(A)_IQatan(A), _IQatan2(A,B)

_IQatan2PU(A,B)_IQsqrt(A), _IQisqrt(A)

_IQmag(A,B)_IQexp(A)

sin(A),cos(A) sin(A*2pi),cos(A*2pi)

asin(A),acos(A)atan(A),atan2(A,B)

atan2(A,B)/2pisqrt(A),1/sqrt(A)sqrt(A*A + B*B)

exp(A)

trigand

powerfunctions

IQsat(A,Pos,Neg)_IQsat(A,Pos,Neg)if(A > Pos) A = Posif(A < Neg) A = Neg

saturation

IQmath Library: Funkcije konverzije

IQmpyI32int(A,B)_IQmpyI32int(A,B)(long) (A * (float) B)integer(iq*long)IQmpyI32(A,B)_IQmpyI32(A,B)A * (float) Biq = iq*long

IQfrac(A)_IQfrac(A)A – (long) Afraction(iq)IQint(A)_IQint(A)(long) Ainteger(iq)

IQNtoIQ(A)_IQNtoIQ(A)AiqN to iqIQtoIQN(A)_IQtoIQN(A)Aiq to iqN

“IQmath” in C++“IQmath” in CFloating-PointOperation

4 4 -- 3131

IQmath.lib > contains library of math functions IQmathLib.h > C header fileIQmathCPP.h > C++ header file

atoIQ(char)_atoIQ(char)atof(char)string to iqIQtoQN(A)_IQtoQN(A)Aiq to qNQNtoIQ(A)_QNtoIQ(A)AqN to iq

IQmpyI32frac(A,B)_IQmpyI32frac(A,B)A - (long) (A * (float) B)fraction(iq*long)

IQtoF(A)_IQtoF(A)AIQ to floatIQtoA(A,B,C)_IQtoA(A,B,C)sprintf(A,B,C)IQ to ASCII

Primer AC Indukcionog motoraOne of the more complex motor control algorithms

4 4 -- 3232

u Sensorless, ACI induction machine direct rotor flux controlu Goal: motor speed estimation & alpha-axis stator current estimation

Primer AC Indukcionog motora Park Transform – floating-point C code

#include “math.h”

#define TWO_PI 6.28318530717959void park_calc(PARK *v){

4 4 -- 3333

float cos_ang , sin_ang;sin_ang = sin(TWO_PI * v->ang);cos_ang = cos(TWO_PI * v->ang);

v->de = (v->ds * cos_ang) + (v->qs * sin_ang);v->qe = (v->qs * cos_ang) - (v->ds * sin_ang);

}

Primer AC Indukcionog motora Park Transform - converting to “IQmath” C code

#include “math.h”

#define TWO_PI 6.28318530717959void park_calc(PARK *v){

#include “IQmathLib.h”_IQ(6.28318530717959)

4 4 -- 3434

float cos_ang , sin_ang;sin_ang = sin(TWO_PI * v->ang);cos_ang = cos(TWO_PI * v->ang);

v->de = (v->ds * cos_ang) + (v->qs * sin_ang);v->qe = (v->qs * cos_ang) - (v->ds * sin_ang);

}

_iq_IQsin(_IQmpy(TWO_PI , v->ang));_IQcos(_IQmpy(TWO_PI , v->ang));

_IQmpy(v->ds , cos_ang) + _IQmpy(v->qs , sin_ang);_IQmpy(v->qs , cos_ang) - _IQmpy(v->ds , sin_ang);

Primer AC Indukcionog motora GLOBAL_Q = 24, sistem stabilan

4 4 -- 3535

IQmath: speed IQmath: current

Floating-Point: speed Floating-Point: current

I8Q24 Fractions:

Zašto je ovo stabilno?Jednaka preciznost u oblasti izračunavanja

Floating-Point:

0+∞ -∞

Ista preciznost kao I8Q24

4 4 -- 3636

0+∞ -∞

U oblasti gde se izračunavanja izvršavaju, preciznost single-precision floating-point je jednaka preciznosti I8Q24 formata.

Sledi da su rezultati slični!

Primer AC Indukcionog motora GLOBAL_Q = 27, sistem nestabilan

IQmath: speed

4 4 -- 3737

IQmath: current

Primer AC Indukcionog motora GLOBAL_Q = 16, sistem nestabilan

IQmath: speed

4 4 -- 3838

IQmath: current

Primer AC Indukcionog motora Q oblast stabilnosti

StabilanQ26 to Q19

Nestabilan(mali dinamički opseg)Q31 to Q27

Opseg stabilnostiOblast Q

4 4 -- 3939

Projektant mora odabrati pravu vrednost za GLOBAL_Q!

Nestabilan(mala rezolucija, problemi kvantizacije)Q18 to Q0

StabilanQ26 to Q19

Primer AC Indukcionog motora Upoređenje performansi

Benchmark C28x C C28x C C28x Cfloating-point floating-point IQmath

std. RTS lib fast RTS lib v1.4d(150 MHz) (150 MHz) (150 MHz)

B1: ACI module cycles 401 401 625B2: Feedforward control cycles 421 371 403

4 4 -- 4040

B3: Feedback control cycles 2336 792 1011Total control cycles (B2+B3) 2757 1163 1414% of available MHz used 36.8% 15.5% 18.9%

(20 kHz control loop)

Notes: C28x compiled on codegen tools v5.0.0, -g (debug enabled), -o3 (max. optimization)fast RTS lib v1.0beta1

IQmath lib v1.4d

IQmath Approach Summary

u Seamless portability of code between fixed and floating-point devicesw User selects target math type in “IQmathLib.h” file

w #if MATH_TYPE == IQ_MATHw #if MATH_TYPE == FLOAT_MATH

u One source code set for simulation vs. target deviceu Numerical resolution adjustability based on application

“IQmath” + fixed“IQmath” + fixed--point processor with 32point processor with 32--bit capabilities =bit capabilities =

4 4 -- 4141

u Numerical resolution adjustability based on application requirementw Set in “IQmathLib.h” file

w #define GLOBAL_Q 18w Explicitly specify Q value

w _iq20 X, Y, Z;

u Numerical accuracy without sacrificing time and cyclesu Rapid conversion/porting and implementation of algorithms

IQmath library is freeware IQmath library is freeware -- available from TI DSP websiteavailable from TI DSP websitehttp://www.ti.com/c2000http://www.ti.com/c2000

Vežba: Vežba: IQ IQ –– Math FIR Math FIR -- FilterFilter

ADCRESULT0

connectorwire

ADCINA0

datamemory

FIR FilterFIR FilterTB CounterCompare

Action Qualifier

ePWM1

ePWM2 triggering ADC on period match using SOC A trigger every

4 4 -- 4242

CPU copiesresult to

buffer duringADC ISR

ePWM2memory

Display Display using CCSusing CCS

match using SOC A trigger every 20µs (50 kHz)

Cilj:1. Generisati asimetričan PWM signal frekvencije 2 kHz

sa faktorom ispune 25% (duty cycle)2. Odmeravati signal pomoću AD konvertora sa brzinom

odmeravanja od 50 kHz3. Smestiti rezultat u cirkularni bafer

4. Rezultat AD konverzije propustiti kroz NF digitalni filter

Vežba: Vežba: IQ IQ –– Math FIR Math FIR -- FilterFilter

4 4 -- 4343

4. Rezultat AD konverzije propustiti kroz NF digitalni filter (FIR-finite impulse response). Funkciju filtriranja

izračunavti pomoću IQ-Math funkcija5. Nacrtati grafik filtriranog i nefiltriranog signala u

grafičkom alatu Code Composer Studija6. Uporediti rezultate

MATLAB FDATOOLMATLAB FDATOOL

4 4 -- 4444

MATLAB FDATOOLMATLAB FDATOOL

uu FIR FIR –– LowpassLowpass; 4; 4thth ––orderorderuu Corner Frequency: 300 HzCorner Frequency: 300 Hzuu Sampling Frequency: 50 kHzSampling Frequency: 50 kHzuu Hamming Hamming -- WindowWindow

4 4 -- 4545

MATLAB FDATOOLMATLAB FDATOOL

4 4 -- 4646