Sunteți pe pagina 1din 7

L1 – L2, Master EPA - Modelarea şi Comanda Convertoarelor Statice

Prof.Dr.Ing. Dan FLORICAU – Universitatea POLITEHNICA Bucureşti

L1: Utilizarea blocurilor DLL programabile în C pentru implementarea


comenzilor numerice în cadrul programului de simulare PSIM

L2 :Comanda numerică DPWM a unui convertor 2/3 – implementare PSIM


utilizând blocuri DLL programabile în C

1. Scopul lucrării
În prima parte a lucrării (L1) se studiază structura unui bloc DLL programabil în C în
vederea implementării comenzilor PWM numerice în cadrul programului de simulare PSIM.
Se elaborează un proiect în mediul de simulare Visual C++ şi se implementează comanda
PWM sinusoidală cu eşantionare regulată simetrică pentru invertorul trifazat de tensiune.
Această strategie PWM asigură o funcţionare continuă a invertorului doar în zona 1 de
liniaritate.
În partea a II-a a lucrării (L2) se va implementa o comandă numerică PWM cu
funcţionare discontinuă pe 3 sectoare, care să asigure o funcţionare a invertorului în zona de
liniaritate extinsă (1+2).

2. Chestiuni de studiat
a) Elaborarea unui proiect în mediul de simulare Visual C++ în vederea obţinerii unui
bloc programabil DLL. Studiul variabilelor specifice t, delt, in şi out.
b) Implementarea strategiei PWM sinusoidală cu eşantionare regulată simetrică pentru
invertorul trifazat de tensiune.
c) Elaborarea modelului PSIM al invertorului trifazat de tensiune care să conţină
modulul DLL specific comenzii numerice PWM sinusoidală cu eşantionare regulată
simetrică. Studiul rapoartelor de conducţie şi a valorii efective a tensiunii de fază.
d) Implementarea strategiei numerice DPWM (Discontinuous Pulse Width
Modulation) pe 3 sectoare. Studiul rapoartelor de conducţie şi a valorii efective a tensiunii de
fază.

3. Mod de experimentare
a) Pentru elaborarea unui modul DLL se urmăreşte exemplul de programare în mediul
Microsoft C/C++ 5.0 sau 6.0:
// directorul de lucru este "D:\EPA\"; în acest director se găseşte fişierul utilizator
"user.c" ; // se lansează programul Visual C++; // din meniu se alege "File" - "New" şi se
deschide pagina "Projects", se selectează "Win32 Dynamic-Link Library" şi se dă nume
proiectului "Project name", de exemplu "PWM", iar la "Location" menţionaţi directorul de
lucru "D:\EPA\"; // asiguraţi-vă că este selectat "Create new workspace" şi selectaţi "Win32"
de la "Platform" [pentru Version 6.0]; // la întrebarea "What kind of DLL would you like to
create?" se selectează "An empty DLL project"; //de la meniul "Project" se merge la "Add to
Project" - "Files" şi se selectează fişierul utilizator "user.c"; // de la panoul cu numele
proiectului selectaţi “File View”, se deschide fişierul sursă "user.c" şi se scrie codul comenzii;
// de la meniul "Build" se selectează "Set Active Configurations" şi se alege "Win32 Release";
// de la meniul "Build", se alege "Rebuild All" pentru a genera blocul DLL cu numele
"PWM.dll"; // blocul DLL generat va fi memorat în directorul "D:\EPA\PWM\release".

// Nu se schimbă numele funcţiei, numărul variabilelor, tipul variabilei şi secvenţa


// Se poate schimba denumirea variabilelor (de ex.: variabila "t" poate fi denumită "Time")

// Variabile:

1
L1 – L2, Master EPA - Modelarea şi Comanda Convertoarelor Statice
Prof.Dr.Ing. Dan FLORICAU – Universitatea POLITEHNICA Bucureşti

// t: timpul, această variabilă este transmisă de PSIM


// delt: pasul de calcul, această variabilă este transmisă de PSIM
// in: variabile de intrare pentru blocul DLL
// out: variabile de ieşire pentru blocul DLL, disponibile în PSIM

// Numărul maxim de variabile de intrare şi de ieşire este 20.

#include <math.h>

__declspec(dllexport) void simuser (t, delt, in, out)

// Toate variabilele trebuie definite de tipul "double"


double t, delt;
double *in, *out;

{
static int count=100, Ncount=100;
// variabila "count" este numărătorul care numără paşii de calcul delt; variabila "Ncount" reprezintă
numărul total de paşi de calcul care se efectuează într-o perioadă de comutaţie

// rapoartele de conducţie pentru întreruptoarele superioare ale invertorului: "a_A", "a_B" şi "a_C"
static double a_A, a_B, a_C;

// referinţele sinusoidale pentru cele trei faze


static double r_A, r_B, r_C;

// parametrii modelului comenzii PWM: "Eps" este timpul curent în cadrul unei perioade de comutaţie;
"PWM_A", "PWM_B" şi "PWM_C" sunt comenzile ("on"="1" şi "off"="0") pentru întreruptoarele
superioare ale invertorului; FC[3] şi FD[3] reprezintă momentele de comutaţie la nivelul perioadei de
comutaţie curente
double Eps;
int PWM_A, PWM_B, PWM_C;
static double FC[3], FD[3];

// la prima iteraţie "count = Ncount" pentru calculul rapoartelor de conducţie; rapoartele de conducţie se
calculează doar atunci când "count = Ncount", adică la începutul fiecărei perioade de comutaţie; atunci
când cele 2 variabile sunt diferite NU se execută procedura IF
if ( count == Ncount)
{
count = 0; // se iniţializează numărătorul

r_A = in[0]; // se citesc referinţele de tensiune


r_B = in[1];
r_C = in[2];

a_A = r_A/100 + 0.5; // se calculează rapoartele de conducţie


a_B = r_B/100 + 0.5;
a_C = r_C/100 + 0.5;

if (a_A < 0.05) {a_A = 0.05;} // se limitează rapoartele de conducţie


if (a_A > 0.95) {a_A = 0.95;}

FC[0] = (1.0 - a_A)/(2.0);


FD[0] = a_A + FC[0];

if (a_B < 0.05) {a_B = 0.05;}


if (a_B > 0.95) {a_B = 0.95;}

FC[1] = (1.0 - a_B)/(2.0);


FD[1] = a_B + FC[1];

2
L1 – L2, Master EPA - Modelarea şi Comanda Convertoarelor Statice
Prof.Dr.Ing. Dan FLORICAU – Universitatea POLITEHNICA Bucureşti

if (a_C < 0.05) {a_C = 0.05;}


if (a_C > 0.95) {a_C = 0.95;}

FC[2] = (1.0 - a_C)/(2.0);


FD[2] = a_C + FC[2];
}

// se execută la fiecare pas de calcul delt


count = count + 1;

// se calculează timpul curent "Eps" în cadrul perioadei de comutaţie curente


Eps = t/1e-3 - floor(t/1e-3); //perioada de comutaţie este egală cu 0.001s

// se calculează comenzile PWM la fiecare pas de calcul


if ((Eps>=FC[0])&&(Eps<=FD[0])) {PWM_A=1;}
else {PWM_A=0;}

if ((Eps>=FC[1])&&(Eps<=FD[1])) {PWM_B=1;}
else {PWM_B=0;}

if ((Eps>=FC[2])&&(Eps<=FD[2])) {PWM_C=1;}
else {PWM_C=0;}

// Ieşiri ale blocului DLL

out[0] = PWM_A;
out[1] = PWM_B;
out[2] = PWM_C;
out[3] = a_A;
out[4] = a_B;
out[5] = V_A;
}

b) Strategia PWM sinusoidală cu eşantionare regulată simetrică (Fig.1).

r_A reA
up
E/2

0 t
k k+1

-E/2

T1
1

τΑ (κ)
t
Fig. 1. Strategia PWM sinusoidală cu eşantionare regulată simetrică.

Tp Tp
τ A (k ) = ⋅ r _ A(k ) +
Ud 2
Duratele de conducţie: Tp Tp (1)
τ B (k ) = ⋅ r _ B(k ) +
Ud 2
Tp Tp
τ C (k ) = ⋅ r _ C(k ) +
Ud 2

3
L1 – L2, Master EPA - Modelarea şi Comanda Convertoarelor Statice
Prof.Dr.Ing. Dan FLORICAU – Universitatea POLITEHNICA Bucureşti

r _ A(k ) 1
a A (k ) = +
Ud 2
Rapoartele de conducţie (T_A, T_B, T_C): r _ B(k ) 1 (2)
a B (k ) = ⋅+
Ud 2
r _ C(k ) 1
a C (k ) = +
Ud 2
c) Se elaborează modelul PSIM pentru invertorul trifazat de tensiune în directorul
"D:\EPA\PWM\release". Blocurile DLL necesare în reprezentarea schemei se găsesc în
"Elements" - "Other" - "Function Blocks" - DLL 6 Input. Timpul simulării este de 0.03s şi
pasul de calcul 10us. Pentru acest pas de calcul rezultă o frecvenţă de comutaţie de 1000Hz
(100 paşi * 10us = 0.001s), care justifică numărul de paşi (100) impus în modelarea comenzii.

Fig. 2. Implementare PSIM.

În Fig.3 sunt prezentate câteva rezultate ale simulării numerice. Se observă


eşantionarea regulată a tensiunilor de referinţă pentru un grad de modulare de 0.8. Se
calculează amplitudinea armonicii fundamentale a tensiunii de fază. In acest scop se va
reprezenta tensiunea de fază pe o perioadă a fundamentalei (10-30ms) şi se aplică funcţia
FFT. Pentru a verifica valoarea obţinută se va ţine cont că această strategie funcţionează doar
în prima zonă liniară. Valoarea maximă a tensiunilor de fază de referinţă este egală cu Ud/2.

4
L1 – L2, Master EPA - Modelarea şi Comanda Convertoarelor Statice
Prof.Dr.Ing. Dan FLORICAU – Universitatea POLITEHNICA Bucureşti

Fig. 3. Rezultate ale simulării numerice pentru strategia PWM sinusoidală cu eşantionare
regulată simetric.

d) Implementarea strategiei numerice DPWM (Discontinuous Pulse Width


Modulation) pe 3 sectoare. Prin schimbarea fazei, considerată ca referinţă de calcul, la fiecare
120°el., se pot obţine comenzile: DPWM-1 [Fig.4(a)] şi DPWM-2 [Fig.4(b)].

a_A a_A
DPWM-1 DPWM-2
[u.r.] [u.r.]

a) t [s] t [s]
b)

Fig. 4. Rapoartele de conducţie pentru un grad de modulare de 0.8

Pentru implementarea strategiei numerice DPWM-1 se consideră funcţiile generatoare


de comutaţii şi rapoartele de conducţie specifice. Funcţiile generatoare de comutaţii sunt
reprezentate în funcţie de faza considerată ca fază de referinţă:
mA1g=(V_C-V_A) /Ud; // faza A este referinţă de calcul
mA2g=(V_B-V_A) /Ud;

mB1g=(V_A-V_B) /Ud; // faza B este referinţă de calcul


mB2g=(V_C-V_B) /Ud;

mC1g=(V_A-V_C) /Ud; // faza C este referinţă de calcul


mC2g=(V_B-V_C) /Ud;

Pentru calculul rapoartelor de conducţie se consideră 3 sectoare de câte 120°el.. Dacă


faza A este mai negativă (sectorul 1) decât celelalte 2 se obţin următoarele rapoarte de
conducţie:
a_A=0;
a_B=mA2g;
a_C=mA1g;

Atunci când faza B este mai negativă decât celelalte 2 se obţine sectorul al 2-lea:
a_A=mB1g;
a_B=0;
a_C=mB2g;

5
L1 – L2, Master EPA - Modelarea şi Comanda Convertoarelor Statice
Prof.Dr.Ing. Dan FLORICAU – Universitatea POLITEHNICA Bucureşti

Pentru sectorul al 3-lea faza C este mai negativă. Rapoartele de conducţie rezultate
sunt următoarele:
a_A=mC1g;
a_B=mC2g;
a_C=0;

Se implementează această comandă într-un modul DLL programabil în C. Pentru


implementare se utilizează proiectul descris la punctul a) şi se rescrie comanda numerică în
fişierul user.c. Se vor executa mai multe simulări numerice cu şi fără compensarea duratelor
de conducţie foarte mici. Pentru cazul eliminării duratelor de conducţie foarte mici se
analizează valoarea amplitudinii armonicii fundamentale în aceleaşi condiţii de simulare cu
modulaţia anterioară. Pentru acest calcul se ţine cont că strategia DPWM-1 permite
invertorului să funcţioneze în ambele zone de liniaritate (1+2). Ca urmare, valoarea maximă a
tensiunilor de fază de referinţă este egală cu Ud/sqrt(3). Se compară rezultatul obţinut cu
strategia PWM sinusoidală cu eşantionare regulată simetrică şi se cuantifică creşterea
obţinută.
În Fig.5 se prezintă câteva rezultate pentru un grad de modulare 0.8, care să poată fi
considerate ca exmplu de funcţionare.

Fig. 5. Rezultate ale simulării numerice pentru strategia DPWM-1.

Se introduc rezultatele proprii obţinute în urma simulărilor numerice de la punctele c)


şi d) în referat. Nu se acceptă scanarea rezultatelor prezentate în lucrarea de laborator. De
asemenea, se vor prezenta 2 exemple de calcul pentru valorile efective ale tensiunilor de fază,
pornind de la condiţiile de simulare.

4. Întrebări recapitulative
Care este diferenţa dintre o strategie PWM cu eşantionare naturală şi una cu
eşantionare regulată?
Care sunt zonele de funcţionare liniară ale unui invertor trifazat de tensiune?
În cazul implementării unei comenzi PWM numerice cu funcţionare continuă există
comutaţii pe întregul ciclu? Dar în cazul unei comenzi PWM cu funcţionare discontinuă?
Ce se înţelege prin zone de funcţionare de supramodulare?

6
L1 – L2, Master EPA - Modelarea şi Comanda Convertoarelor Statice
Prof.Dr.Ing. Dan FLORICAU – Universitatea POLITEHNICA Bucureşti

Ce influenţă are introducerea armonicii a treia în sistemul trifazat al tensiunilor de


referinţă ?
Se poate simplifica implementarea unei comenzi numerice în cadrul unui bloc DLL?
Se obţin aceleaşi performanţe dacă generăm rapoartele de conducţie eşantionate regulat cu
ajutorul unui modul DLL şi le comparăm în exterior (schema PSIM) cu o undă purtătoare
simetrică?
Cum se calculează valoarea efectivă a tensiunii de fază în funcţie de gradul de
modulare şi de zona liniară de funcţionare?
Daţi exemple de strategii PWM sau DPWM care funcţionează în zona 1 de liniaritate
sau în zona extinsă de liniaritate (1+2).
Să se calculeze duratele de conducţie pentru cazul strategiei DPWM-2 la un grad de
modulare oarecare şi să se verifice pentru o perioadă de comutaţie valorile medii-instantanee
ale tensiunilor de fază.