hallo,
dringend hilfe brauche ich.
ich benutze ezdsp f28335 für meine masterarbeit um AC motor zu regeln.
auf homepage von TI gibts sowas "F280x ACI3_3:Sensored Indirect Flux
Vector Control of Three-Phase ACI Motor -SPRC207" .Das ist mir sehr
hilfreich.aber da benutzt man IQ-Math.Ich vermute mal,in meinem
Fall,also f28335 floating point DSP brauche ich nicht IQ-Math zu
benutzen(?).
Z.b. In literatur "svgen_dq.pdq" wird erklärt wie man mit µC
Raummodulation erzeugen kann, würde ich sagen :Ta, Tb und Tc MÜSSEN
innerhalb von [0 ,1] bleiben.Deswegen schreibe ich in C-code mit
floating point format:
1
voidsvgendq_calc(SVGENDQ*v)
2
{
3
float32Va,Vb,Vc,t1,t2;
4
Uint16Sector=0;
5
6
//Inverse clarke transformation
7
Va=v->Ubeta;
8
Vb=(-v->Ubeta+1.73205081*v->Ualpha)/2;//1.73205081 = sqrt(3), Ualpha ist float32
9
Vc=(-v->Ubeta-1.73205081*v->Ualpha)/2;
10
11
//60 Grad Sector determination with Sector = 4*c + 2*b + a
12
if(Va>0)
13
Sector=1;
14
if(Vb>0)
15
Sector=Sector+2;
16
if(Vc>0)
17
Sector=Sector+4;
18
19
// X,Y,Z (Va,Vb,Vc) calculations
20
Va=v->Ubeta;
21
Vb=(v->Ubeta+v->Ualpha*1.73205081)/2;
22
Vc=(v->Ubeta-v->Ualpha*1.73205081)/2;
23
24
if(Sector==0)//(Ualpha,Ubeta) = (0,0)
25
{
26
v->Ta=0;
27
v->Tb=0;
28
v->Tc=0;
29
}
30
elseif
31
//......
32
}
Diese bestimmten Werte Ta,Tb,Tc gebe ich PWM_update Compare Register
über:
Ich hab versucht mit Abtastfrequenz 20Khz, es scheint zu funktionieren,
aber wenn ich schaue in WatchWindow wundere ich mich dass Ta,Tb,Tc nicht
innerhalb von [0,1] bleiben sondern gibts auch werte wie 14.254 und so
weiter.Und deswegen Compare register wert ist größer als PWM_periode
(maximal counter von UP_DOWN counter).
so sample-code in IQ-math von TI:
1
voidsvgendq_calc(SVGENDQ*v)
2
{
3
4
_iqVa,Vb,Vc,t1,t2;
5
Uint32Sector=0;// Sector is treated as Q0 - independently //with global Q
Hallo Tequilla,
es ist bei mir zwar schon etwas her, als ich mit diesen Themen (TI,
DSP's) konfrontiert war:
kann mich aber entsinnen, dass es mit Type-Vereinbarungen und Typecasts
in structs und Zeigern auf float-Variablen immer etwas hakelig war; das
WatchFenster hatte nicht unbedingt das angezeigt, was wirklich Sache
war. Ich hatte das zum Beobachten testweise erst mal in eine globale
Variable umgespeichert. (Bevor man am Programmcode zweifelt ...).
Gruß
Ralf Schlegelmilch
danke Ralf erstmal für deinen Antwort.
ich hab noch mal geschaut, und in meinem fall zeigt CCS richtig
an.Problem habe ich gefunden, es liegt an meinen space_vector_modulation
algorithmus.Ich hab vergessen,Alpha und Beta Kodinaten auf den Maximal
wert (Umax = Uvcd/sqrt(3)) zu norminieren.Dann wie erwartet ,Ta,Tb,Tc
bleiben innerhalb (0,1).
Aber wie ich nach svgendq reference (bitte siehe Anhang)verstehe,für
PWM-Compare Register brauche ich nur noch:
Aber es funktioniert nicht!
Ich hab dann einzelne Modul getestet.
1. Erstmal nur IPARK modul : funktioniert wie erwartet, also Vd,Vq =
const
----> Valpha,Vbeta sind sinusförmig.
2. IPARK + SVGENDQ:
Vd,Vq = const.
Ta,Tb,Tc bleiben innerhalb (0,1) aber nicht in form von (sinus +
dritte hamonic) bitte siehe anhang.
Wenn ich aber erzwingen dass Ta,Tb,Tc innerhalb (-1,1) bleiben
müssen,also nach Umformung:(so sieht das aus in samplecode von TI)
1
Ta=2(Ta-0.5);
2
Tb=2(Tb-0.5);
3
Tc=2(Tc-0.5);
dann sieht man auf CCS Graphtool dass Ta,Tb,Tc sind in form von (sinus +
dritte hamonic).
Kann Jemand mir erklären, wieso man umformen muss:
1
Ta=2(Ta-0.5);
2
Tb=2(Tb-0.5);
3
Tc=2(Tc-0.5);
und wie berechnet man dann CompareRegister?
vielen dank im voraus!
Tequila