Modul l 44:: Brojni sistemi Digital Signal Controller ...es.elfak.ni.ac.rs/mikro/Materijal/04-Brojni...
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
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