Øvelse 1: Digital PWM Controller... 2 Modul 1: Digital PWM Controller Lav en model med C/C++ og simulering... 3 Formål... 3 Modul detaljer... 3 Steps... 4 Opsætning i Visual Studio... 9 Simuler designet... 13 Analyser simuleringsresultaterne... 16 Øvelse 2: MATLAB visualisering... 18 Opsætning af MATLAB i PSpice:... 18 Modul 2.1: Plot multiple B-H kurver... 19 Modul 2.2: MATLAB plots... 21 Modul 2.3: Anvend MATLAB funktioner i PSpice... 23 Ekstra: Anvend MATLAB GUI med PSpice... 26 Ekstra: PSpice Search... 27 Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 1 af 28
Øvelse 1: Digital PWM Controller I denne øvelse kommer du til at udvikle din egen model vha. C/C++ kode og generere et dynamic link library (dll) til denne model. Sammenlignet med konventionelle PSpice modeller hvor hele modeldefinitionen er i.lib filen, så er selve modellens opførsel indkapslet i førnævnte.dll fil. Dvs. at PSpice library filen bare er en wrapper som tilgår PSpice model.dll. Der er udviklet et interface til at automatisere en stor del af processen af denne kodegenerering. Krav til denne øvelse: - OrCAD/Allegro 17.2 S006 eller nyere samt en PSpice Designer Plus licens - Visual Studio 2013 Community Sæt et workspace op til øvelsen: - Opret et direktorie til at arbejde i, denne vejledning antager at C:\Workshop2016\PSpice\LAB\DigitalPWM\LAB anvendes i denne øvelse o Der findes to direktorier herunder, LAB og LAB_COMPLETE. o LAB indeholder øvelsesfilerne o LAB_COMPLETE bruges ikke i dag, men kan bruges senere til evt. fejlfinding Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 2 af 28
Modul 1: Digital PWM Controller Lav en model med C/C++ og simulering Hands-on med PSpice Formål Lav en PWM model med en digital PWM controller vha. PSpice Device Model Interface (DMI) og brug dette i en PSpice simulering. Modul detaljer Dette modul forklarer processen i at udvikle en digital C/C++ model vha. PSpice DMI ved at tage udgangspunkt i en pulsbreddemoduleret (PWM) controller og bruge denne i en switching power supply. Denne PWM controller har følgende egenskaber: - Variabel PWM frekvens - Duty cycle kontrol - Full bridge - Ekstern shutdown pin - RESET pin - Indbygget soft start - Overcurrent/shortcircuit beskyttelse Flow for Digital C/C++ model Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 3 af 28
Steps 1. Opret koncept af modellen 2. Vælg passende modelleringsteknik Dette afhænger af applikationen samt designerens præferencer. PSpice DMI kan lave disse typer modeller: - Digital C/C++ - SystemC - Analog - Verilog-ADMS Vi kommer til at anvende Digital C/C++ i dette modul til at udvikle den digitale PWM model. Nedenstående billede viser PSpice DMI Template Code Generator interfacet med de modeller der kan oprettes deri. Figur 1: PSpice DMI Template Code Generator Interface fra Model Editor Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 4 af 28
3. Lav model template vha. PSpice Model Editor a. Start Model Editor fra startmenuen i. Start Cadence Release 17.2-2016 Model Editor ii. Vælg PSpice Designer Plus iii. iv. Vælg Capture v. b. Nu oprettes DMI Template Code i. ii. Part Name PWMControl iii. Vælg Part Type Digital C/C++ iv. Vælg Interface Clocked Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 5 af 28
v. vi. DLL Location C:\workshop2016\PSpice\LAB\DigitalPWM\LAB\Code vii. Klik på CSV File ved Port Entry 1. Browse til C:\workshop2016\PSpice\LAB\DigitalPWM\LAB\portv.csv viii. ix. Nu indlæses data fra.csv filen og udfylder port listen Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 6 af 28
x. xi. Klik herefter op Global Parameters. Dobbeltklik på værdierne for at omdøbe dem som vist nedenfor: xii. xiii. Tryk OK xiv. Nu vises en log for den oprettede kode c. Opsætning af modelbiblioteket (PWMControl.lib) i. Tilpas.SUBCKT til at være delt op i flere linjer ii. Tast Enter efter FB_7, tilføj + på næste linje Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 7 af 28
iii. Tast Enter efter REF_7, tilføj + på næste linje iv. Fortsæt som vist nedenfor Figur 2: Det oprettede subcircuit. Tilpas de markerede områder som vist. v. Klik på File Save d. Det oprettede bibliotek peger på den.dll fil vi skal kompilere i senere i modulet 4. Opret schematic symbol for modelbiblioteket a. I dette punkt genereres en schematic part for modellen fra forrige step. b. I Model Editor vælges File Export to Part Library c. Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 8 af 28
d. e. Klik OK Opsætning i Visual Studio Nu er symbolet oprettet ud fra modellen, næste skridt er at implementere den ønskede funktionalitet af PWM controlleren. Dette gøres i Visual Studio Community 2013. 5. Tilføj model implementeringsdetaljer (logik) a. Nu skal logikken til PWM controlleren sættes op b. Åbn projektet C:\workshop2016\PSpice\LAB\DigitalPWM\LAB\Code\PWMControl\code\PWMC ontrol.vcxproj c. Når projektet er åbent, sæt følgende build parametre til Release og x64: d. e. Herefter testes at projektet kan bygges uden fejl f. g. Tryk på Build PWMControl og verificer at der ikke opstår nogle fejl undervejs. Tjek loggen i bunden af skærmen, den skal skrive Build: 1 succeeded: h. i. Åbn nu PWMControl_user.cpp fra Solution Explorer vinduet (vises det ikke, så vælg View Solution Explorer). 6. Nu tilføjes logikken til modulet #include "pspengfunc.h" a. Efter #include "psppwmcontrol.h" omkring linje 18-19 skal følgende tilføjes: Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 9 af 28
static int flagconst = 1; b. Find void psppwmcontrol::initialize(){ i. Lige efter mdigsimtimestep = 1.0 / fp_getparamvaluedbl("digfreq"); tilføjes denne variabel: doslowstart = true; c. Gå nu til evaluate funktionen bool psppwmcontrol::evaluate(double pticks, PSpiceState* pvectorstates, int psize){ Tilføj efter ovenstående linje dette: double a = mdigsimtimestep*pticks; Søg herefter på // LOGIC TO BE IMPLEMENTED BY USER d. Nu indsættes model koden: Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 10 af 28
// LOGIC TO BE IMPLEMENTED BY USER oldpw = PW; pspbits2int(fb, FBInt, 8); pspbits2int(ref, REFInt, 8); pspbits2int(fbc, FBCInt, 8); if ((FBInt < 0.75*REFInt) FBInt >(1.1*REFInt) (doslowstart == true)) PGOOD = pspbit::lo; else if (doslowstart == false)pgood = pspbit::hi; if (REFInt > FBInt && md < 0.60) { if (!doslowstart) { md += 0.001*(REFInt - FBInt); // int diff = (REFInt - FBInt); // fprintf(stderr, "FBInt=%d\n", diff); } else { md += 0.0001; if (lcurrenttime > mss lcurrenttime > a + mss) doslowstart = false; } } else if (REFInt < FBInt && md > 0.05) { md -= 0.01*(FBInt - REFInt); // fprintf(stderr, "Reducing DutyCycle\n"); doslowstart = false; } if (mcurrentclkcount <= 0) { mcurrentclkcount = mper; } if (mcurrentclkcount > md * mper) mpwstatus = false; else mpwstatus = true; int flag, resetpin; int OverCurr; resetpin = A[1]; flag = A[0]; OverCurr = ((256 * moc) / 5); if (resetpin == 1){ flagconst = 1; } Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 11 af 28
if (mpwstatus == true && (int)pw!= 1){ if (FBCInt <= OverCurr) { if ((flag == 1) && flagconst == 1) { PW = pspbit::hi; PW_N = pspbit::lo; } else { PW = pspbit::lo; PW_N = pspbit::hi; flagconst = 0; } } else { PW = pspbit::lo; PW_N = pspbit::hi; flagconst = 0; } } else if (mpwstatus == false && (int)pw!= 0){ PW = pspbit::lo; PW_N = pspbit::hi; } mcurrentclkcount--; fprintf(stderr, "FBI=%d REFInt=%d md=%g PW=%d PW_N=%d FBCInt=%d OverCurr=%f a=%f\n", FBInt, REFInt, md, (int)pw, (int)pw_n, FBCInt, OverCurr, a ); e. Åbn nu psppwmcontrol.h f. Her skal de brugerdefinerede variable defineres. Disse tilføjes lige før den sidste } unsigned int FBInt, REFInt, FBCInt; int mcurrentclkcount; bool mpwstatus, doslowstart; Nu er den ønskede funktionalitet af PWM controlleren bygget i projektet. Næste skridt er at kompilere projektet for at få den påkrævede.dll fil. 7. Kompiler/byg din model.dll a. Nu er vi klar til at bygge model.dll filen vælg Build Build PWMControl: b. Tjek at Release og x64 er markeret Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 12 af 28
c. d. Tjek at output rapporterer Build: 1 succeeded 8. Åbn nu mappen for projektet: C:\workshop2016\PSpice\LAB\DigitalPWM\LAB\Code\PWMControl\code\x64\Release a. Kopier PWMControll.dll til mappen for simuleringsprofilen her: C:\workshop2016\PSpice\LAB\DigitalPWM\LAB\Design\DigitalPWM- PSpiceFiles\SCHEMATIC1\DigitalPWM b. Nu er den kompilerede fil tilgængelig for PSpice projektet. Simuler designet 9. Simuler designet med den nye model a. Start OrCAD Capture og vælg OrCAD PSpice Designer Plus b. Åbn projektet: C:\workshop2016\PSpice\LAB\DigitalPWM\LAB\Design\DigitalPWM.opj c. Åbn SCHEMATIC1 og PAGE1 i. d. Nu skal logiksymbolet placeres for den kompilerede model. e. Åbn Place Part ( p ) f. Klik på Add Library Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 13 af 28
i. g. Tilføj PWMControl.OLB fra C:\workshop2016\PSpice\LAB\DigitalPWM\LAB\Code\PWMControl\lib h. Nu kan X_PWMCONTROL parten placeres i. i. Placer den i den indikerede boks i schematic, hold øje med at pins er forbundet korrekt. Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 14 af 28
i. j. Nu skal simuleringsmodelbiblioteket tilføjes simuleringsprofilen, klik på PSpice - Edit Simulation Profile k. Configuration Files Library Browse i. Vælg PWMControl.lib fra..\lab\code\pwmcontrol.lib ii. Vælg Add to design Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 15 af 28
iii. Figur 3: Tilføj PWMcontrol.lib med Add to Design knappen Analyser simuleringsresultaterne 10. Nu er projektet sat op til at kunne simuleres. Klik på Run PSpice knappen (alternativt vælg menuen PSpice Run). a. Afhængig af maskinens specifikationer vil analysen kunne tage 1-5 minutter. b. Efter at simuleringen er afsluttet tilføjes et par plots til Probe Window. c. Vælg Plot Add Plot d. Tilføj følgende traces til top plottet: DSTM2:1 U10:A_1 e. Tilføj følgende traces til det nederste plot V(VOUT) V(M1:d) f. Tilføj endnu en Y akse (Plot Add Y Axis) og tilføj derefter denne trace: I(R2) Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 16 af 28
Herefter vil det resulterende plot se således ud: Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 17 af 28
Øvelse 2: MATLAB visualisering Plot funktionaliteten i PSpice kan udvides ved hjælp at MATLAB i OrCAD/Allegro 17.2. Arbejder man meget i fx polære plots og ønsker at plotte flere simultant, så kan dette gøres nu ved at eksportere plotdata fra PSpice og plotte det med MATLAB. Derudover er det blevet muligt at anvende MATLABs funktioner i PSpice og i PSpice measurements. Denne nye visualiseringskapabilitet med MATLAB muliggør: - Visualiser forskellige typer plots - Eksporter simuleringsresultater til MATLAB med et enkelt klik - Kør egne MATLAB scripts til at tilpasse output - Udvid frekvensdomæneanalyse med polære plots - Lav 3D plots til at udvide DC sweep samt transient analyse plots Opsætning af MATLAB i PSpice: 1. Åbn PSpice A/D fra startmenuen 2. Vælg Tools MATLAB Set MATLAB path 3. Browse til MATLAB\bin folderen (Tilpas stien afhængigt af hvor MATLAB er installeret) 4. 5. Tryk OK 6. Stien til MATLAB er nu noteret i PSpice.ini og vil blive husket fremover Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 18 af 28
Modul 2.1: Plot multiple B-H kurver Dette modul gennemgår hvordan multiple B-H kurver kan plottes ved hjælp af MATLAB. Steps 1. Åbn C:\workshop2016\PSpice\LAB\MATLAB\DCIND\DCIND_PC44.OPJ a. Sørg for at BHCurve-FullBH simuleringsprofilen er valgt b. Tryk på PSpice - Run Figur 4: Tjek af BHCurve-FullBH profilen er valgt 2. Når Probe Window er åbnet, vælg da Tools MATLAB Upload all traces Figur 5: Upload traces til MATLAB Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 19 af 28
3. Skriv desktop for at åbne MATLAB GUI 4. Når MATLAB GUI er åbnet op, så vil der i Workspace ses at der er indlæst data fra PSpice: a. Disse data indeholder en reference til simuleringens.dat fil og derved resultaterne fra simuleringen 5. Åbn nu C:\workshop2016\PSpice\LAB\MATLAB\DCIND\Plot_5_BH.m i MATLAB GUI a. Dette kan gøres ved fx at vælge Open: b. c. Og browse til den førnævnte sti 6. Når Plot_5_BH.m er blevet åbnet, så kan der trykkes på Run a. Spørges der til File not found vælg da Change Folder som vist 7. Nu vil B-H plottet vises Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 20 af 28
Modul 2.2: MATLAB plots I dette modul gennemgås hvordan et projekt kan bygges op i Capture/PSpice til at plotte probedata i MATLAB. Gå til C:\workshop2016\PSpice\LAB\MATLAB\BJT og åbn BJT.OPJ 2. Vælg en PSpice Designer Plus license a. Tjek i Project Manager at PolarPlot er sat som rodprojekt (hvis ikke så højreklik på PolarPlot og vælg Make Root ) b. Dobbeltklik nu på PolarPlot og PAGE1 for at få vist schematic til dette modul. i. Der er opbygget en række passive og aktive kredsløb, bemærk de angivne netnavne. c. Verificer at simuleringsprofilen PolarPlot-AC er markeret som vist her: Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 21 af 28
d. Kør nu en simulering med den valgte profil (tryk F11 eller på den grønne play knap). e. Efter at resultatet er kommet frem i Probe Window, så skal MATLAB funktionaliteten kaldes frem: f. Vælg i dette tilfælde Upload All Traces. 3. Dette vil gemme alle probedata (.dat filen) således at denne er tilgængelig for manipulering i MATLAB 4. Herefter åbnes MATLAB Command Window automatisk a. Skriv følgende: desktop b. Herefter åbner MATLAB GUI op med de valgte probedata indlæst i Workspace 5. Åbn C:\workshop2016\PSpice\LAB\MATLAB\BJT\BJT-PSpiceFiles\PolarPlot\ Polarplot_AC.m a. Figur 6: Open polarplot_ac.m i MATLAB 6. Læs igennem Polarplot_AC.m og tryk herefter på Run a. Vælg Change to Folder hvis der meldes File not found 7. Nu vil polær plottet blive vist Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 22 af 28
Modul 2.3: Anvend MATLAB funktioner i PSpice Dette modul vil gennemgå hvordan MATLAB funktioner kan anvendes i et PSpice projekt som vist her: Derudover gennemgås hvordan en PSpice measurement kan anvende MATLAB syntaks. Steps 1. Åbn BJT.OPJ fra C:\workshop2016\PSpice\LAB\MATLAB\BJT 2. Vælg Function-Tran simuleringsprofilen 3. Placer VSIN fra Place PSpice Search menuen 4. Placer ABM1 fra Place Pspice Search menuen 5. Tryk på G og placer et 0 symbol 6. Dobbeltklik på det markerede område ovenfor og indsæt: {MFUNC("angle",V(%IN),1)} 7. Placer en voltage probe på udgangen af ABM blokken 8. Start simuleringen (tjek at Function-Tran profilen stadig er valgt) Når simuleringen starter, så kaldes MATLAB motoren i baggrunden. Den udfører den angivne kommando på indgangssignalet og giver derefter PSpice et resultat på udgangsporten. 9. Når Probe Window er åbnet, så skal disse tre kommandoer indtastes i Command Window (vælg View Command Window hvis nedenstående vindue ikke er vist i Probe Window: Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 23 af 28
Figur 7: PSpice skal sættes op til at kunne ekserkvere MATLAB udregninger i measurement vinduet ::orpspmatlab::addmatlabmeasurement matlabfunction1 matlabfunction1(1,<matlab_function>) 2 orpspmatlab::matlabfunction1 ::orpspmatlab::addmatlabmeasurement matlabfunction2 matlabfunction2(1,2,<matlab_function>) 3 orpspmatlab::matlabfunction2 ::orpspmatlab::addmatlabmeasurement matlabfunction3 matlabfunction3(1,2,3,<matlab_function>) 4 orpspmatlab::matlabfunction3 Hvor, 1,2,3 : er navnene på de traces <matlab_function> : MATLAB funktionen der kaldes. NB: Dette navn skal matche præcist hvad kommandoen hedder I MATLAB. eg: ::orpspmatlab::addmatlabmeasurement matlabfunction1 matlabfunction1(v(out),mean) 2 orpspmatlab::matlabfunction1 Her er MATLAB funktionen mean. Nu vises measurements, udregnet med MATLAB, samme sted som når en normal PSpice measurement anvendes. Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 24 af 28
Figur 8: Bemærk MATLAB udregnede measurements nederst i vinduet Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 25 af 28
Ekstra: Anvend MATLAB GUI med PSpice MATLAB GUI vinduet er ikke sat op til at se PSpice kommandoerne hvis det åbnes udenfor PSpice. Dette er i modsætning til Command Window desktop kommandoen, her er miljøet til at ekserkvere PSpice kommandoer sat op automatisk. For at få MATLAB GUI til at kunne køre PSpice kommandoerne uden at åbne MATLAB igennem PSpice, så skal følgende sættes op: 1. I MATLAB GUI åbnes Set path Figur 9: I MATLAB - Set Path kan stien til PSpice integrationen sættes op 2. Tilføj mappen C:\Cadence\SPB_17.2\tools\pspice\tclscripts\orPSPMatlab\MatlabScripts 3. Ok 4. Luk dialogboksen Herefter vil MATLAB kunne køre scripts hvor eg. getpspicedata kommandoen kaldes. Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 26 af 28
Ekstra: PSpice Search Der er tilføjet en funktion til nemt at finde komponenter med PSpice modeller i Capture. Åbn Capture med en PSpice licens. 1. Vælg File Open Demo Design 2. Tryk på PSpice kolonnen for at sortere efter demodesigns som er simulerbare 3. Dobbeltklik på Forward converter design and simulation 4. Der åbnes nu en kopi af det valgte design 5. Prøv at køre en simulering før der foretages nogen ændringer Vi vil herefter modificere projektet ved at bruge komponenter fundet fra Place PSpice Component Search: Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 27 af 28
1. Søg på MUR810 i det åbnede PSpice Part search vindue 2. Dobbeltklik på MUR810 og erstat den med de 2 MUR430 placeret på output nettet 3. Åbn nu Place PSpice Component Modeling Application Herefter åbnes modelling app for Capacitor 4. Angiv nogle passende værdier og udskift herefter denne med C5 i projektet. a. Kan editere en placeret modelapp højreklik More Edit PSpice Model 5. Kør herefter simuleringen igen. Nordcad Systems A/S Workshop 2016 - OrCAD - Allegro - Sigrity Side 28 af 28