Beste allemaal,

Dit is mijn eerste post op uw forum omdat ik sinds een paar weken druk bezig met LTSpice. Ik heb veel filmpjes gekeken, sites bekeken en zelfs een boek geraadpleegd, maar heb nog veel moeite met het simuleren in LTSpice. Als mijn model onlogisch lijkt en niet werkt, komt het omdat ik er nog weinig van snap.

Ik heb in MATLAB en Simulink een werkende controller gemaakt en wil deze in LTSpice nabootsen om binnenkort het systeem in het echt na te maken. Het systeem ziet er als volgt uit:

- Twee nodes die energie met DC source
- Een line ertussenin voor current sharing
- Elke node heeft een bepaalde load

Ik heb de wiskunde uit MATLAB en Simulink geprobeerd te vertalen naar een controller in LTSpice. De drie functies dienen als control output. Deze functies zijn omschreven in de parameters boven de controller. Echter krijg ik hem niet werkend en heb daarom een aantal vragen:

- Wat voor source zou ik kunnen gebruiken als control input? Nu gebruik ik voltage dependent current source, welke voorheen wel in de PID-controller werkten, maar niet in deze controller

- Ik krijg de error voor een van de sources: Missing value of transconductance for "G3". Ik heb de waarden gecheckt, maar kan de error niet verhelpen

- LTSpice verwijt mij questionable use of curly braces in alle 6 de sources (ctrl_dyn1.1 tm ctrl_dyn2.3). Hoe kan ik deze verhelpen?

- LTSpice zegt dat de zes parameters ctrl_dyn1.1 tm ctrl_2.3 unknown zijn. Ik meen de formules ingevoerd te hebben, maar ze blijken niet te werken.

Ik zou het fijn vinden als men tips heeft om mij wat verder te helpen. Ik kijk mij stuk op allerlei errors en zie daardoor het totale plaatje niet meer. Ik heb een screenshot van de controller en mijn spice model in de bijlage toegevoegd.

Alvast dank!

Wouter

Ik zie dat je in de formules voor de .params uitdrukkingen als I(R5) en V(T_phi1) hebt staan. Probeer je op die manier circuitparameters afhankelijk te maken van spanningen en stromen? Dat kan niet, alle parameters worden aan het begin van de simulatie uitgerekend en staan vervolgens vast.

Wat je wel kunt gebruik zijn de zogenaamde "behavioral voltage or current sources" deze kunnen werken met een formule. Hier wat uitleg over ze:

Daarnaast zag ik ook dat je de .param als commentaar had geplaatst i.p.v. een spice directive (daarom zijn ze blauw i.p.v. zwart).

Je moet nog iets met net "load1" doen denk ik? Aan GND leggen..?
edit: oops, ik keek naar het plaatje, de LTspice file bevat meer dan het plaatje laat zien.

[Bericht gewijzigd door PE9SMS op (42%)]

Op 22 mei 2019 20:26:12 schreef Brandon:
Wat je wel kunt gebruik zijn de zogenaamde "behavioral voltage or current sources" deze kunnen werken met een formule. Hier wat uitleg over ze:

Daarnaast zag ik ook dat je de .param als commentaar had geplaatst i.p.v. een spice directive (daarom zijn ze blauw i.p.v. zwart).

Dankjewel! Dit is een hele goede tip die ik heb toegepast en werkt!

Op 22 mei 2019 19:21:42 schreef Robin F.:
Ik zie dat je in de formules voor de .params uitdrukkingen als I(R5) en V(T_phi1) hebt staan. Probeer je op die manier circuitparameters afhankelijk te maken van spanningen en stromen? Dat kan niet, alle parameters worden aan het begin van de simulatie uitgerekend en staan vervolgens vast.

Dankjewel! Typische beginnersfouten maar deze hebben mijn ontwerp in het begin erg gedwarsboomd!

Intussen ben ik een andere controller gaan implementeren, waarover ik een aantal vragen heb die aansluiten bij dit onderwerp. Daarom post ik deze ook in dezelfde thread (ik hoor graag als newbie of dit juist is). Ik gebruik hetzelfde systeem met twee DGU's met ZIP-load en een line ertussen.

De volgende vragen gaan over het implementeren van een controller met buck converter. Ik heb eerst de controller getest door de control output te gebruiken als input voor het systeem met behavioral voltage sources. Vervolgens heb ik een buck converter ontworpen met MOSFET en hierin wil ik de control output vertalen naar een duty cycle.

Op het laatste punt loopt het mis. De control output die ik genereer is te groot en moet worden geconverteerd om te gebruiken voor de duty cycle. De control output lijkt een lineair verband te hebben en stijgt snel.

Hoe kan ik de control output gebruiken om mijn duty cycle te bepalen en regelen?
Waar moet ik op letten als ik een gain kies om de control output te vertalen naar de duty cycle?

Ik heb twee ltspice modellen toegevoegd als bijlage. Eentje heeft V_source als control output. De andere heeft de duty cyle als V_source en hierin wil ik graag de control output converteren.

Ik wil een duty cycle van 83% in mijn buck converter zodat een voltage van 10V wordt gegenereerd met een voltage source van 12V. Hiervoor gebruik ik een behavioral voltage source met een if-statement:

V=if(0.33*V(u1)/(time*200*1e9)>=V(sawtooth), 12, 0)

Hierin probeer ik voor de eerste term van het if-statement een soort gain te maken die er voor zorgt dat dat voltage 83% van de tijd boven de V(sawtooth) uitkomt. V(sawtooth) wordt gebruikt om een periodieke functie die tussen -0.5 en 0.5 beweegt. 0.33 is daarom gekozen om 83% aan te geven.
De time variable werkt hier niet omdat de output dan Volt/sec wordt, hoe kan ik dit oplossen waarbij ik wel een functie houd met een variabele die tijdsafhankelijk in de noemer staat?

Hopelijk specificeer ik hiermee de vragen uit mijn vorige posts.

[Bericht gewijzigd door Wouter12345 op (13%)]

Welk signaal is "de control output"?

En wat probeer je te bereiken met de formule hierboven? Je hebt iets met een if-statement waarin je kijkt naar een spanning gedeeld door de tijd, dus iets dat afneemt naarmate de tijd verstrijkt?

Op 3 juni 2019 19:43:44 schreef Robin F.:
Welk signaal is "de control output"?

En wat probeer je te bereiken met de formule hierboven? Je hebt iets met een if-statement waarin je kijkt naar een spanning gedeeld door de tijd, dus iets dat afneemt naarmate de tijd verstrijkt?

Dank voor je antwoord Robin!

De control output is onder andere afhankelijk van het voltage over een capacitor, oftewel, de waarde stijgt lineair gedurende de simulatie.

In de simulatie van 1sec wordt de waarde van de control output 200TV. Deze waarde wil ik met een formule converteren naar een duty cycle die het voltage in het circuit bepaalt.

Ik weet wat het voltage in het circuit moet zijn, en ik weet de control output, maar ik weet niet zo goed hoe ik hier een passende duty cycle bij vind. Omdat de control input stijgt, moet de eerste term van de if-statement inderdaad met de tijd afnemen om een constante waarde te geven die vergeleken kan worden met de sawtooth om de duty cycle te bepalen.

[Bericht gewijzigd door Wouter12345 op (11%)]

Ik bedoelde, welk punt in je schema.... Ik neem aan phi1 of phi2? Die exploderen inderdaad als ik je simulatie run.

De geijkte manier om een spanning om te zetten in een duty cycle is door hem te vergelijken met een zaagtand, wat je dus lijkt te doen met die behavioural source. Dat schalen met de tijd lijkt me niet logisch, als je dit implementeert krijg je dus een variabele die oneindig groot wordt? Is dat de bedoeling?

Op 4 juni 2019 19:40:06 schreef Robin F.:
Ik bedoelde, welk punt in je schema.... Ik neem aan phi1 of phi2? Die exploderen inderdaad als ik je simulatie run.

De geijkte manier om een spanning om te zetten in een duty cycle is door hem te vergelijken met een zaagtand, wat je dus lijkt te doen met die behavioural source. Dat schalen met de tijd lijkt me niet logisch, als je dit implementeert krijg je dus een variabele die oneindig groot wordt? Is dat de bedoeling?

De control outputs zijn u1 en u2, die inderdaad weer afhankelijk zijn van phi1 en phi2. Verder zijn u1 en u2 afhankelijk van allerlei system variables, hierdoor geven de control outputs geen juiste weergave van hun werking met niet niet werkende buck converter.

In het spice-model wat ik hieronder post is hetzelfde systeem met control output als systeem input weergegeven. Hier zijn de juiste waarden van u1 en u2 te zien, die reiken tot 200TV.

Het is niet de bedoeling dat de variabele die vergeleken wordt met de zaagtand oneindig groot wordt. Het is de bedoeling dat de control input naar het domein van de zaagtand wordt geconverteerd zodat de control input daadwerkelijk de duty cycle kan bepalen.

Wellicht begrijp ik het grotere plaatje van het concept nog niet goed. Ik maak namelijk een systeem waarin de currents en voltages dynamisch zijn. De twee nodes moeten met elkaar communiceren om:

- I(node1) = I(node2) (Current sharing)
- (V(node1) - V(node2))/2 = V(reference) (Average voltage regulation)

Waarin I(node) gemeten wordt over de zeer kleine resistor in de node en V(node) gemeten wordt over de capacitor in de node.

Om deze dynamische doelstellingen te verwezenlijken wil ik dat de control input de duty cycle van beide nodes veranderen om zo de voltages te regelen. Ook al probeer ik de duty cycle te veranderen met dummy variables om bijvoorbeeld een output voltage van 10V te krijgen, de output blijft steeds 12V. Is het mogelijk om met de control input en duty cycle de twee doelstellingen te bereiken?

De spanningen en stromen zijn "dynamisch"? "Current sharing"? In je schema lijkt het alsof je twee losse drivers hebt die samen dezelfde output aandrijven, is dat de bedoeling? Ik vind het een erg onduidelijk verhaal...

Als je vraag is "hoe zet ik een spanning van 0~5V om in een PWM-signaal", dan is het antwoord "vergelijk het met een zaagtand van 0~5V op de frequentie waarop je de PWM wilt hebben". Zoiets dus:

Je hebt gelijk Robin, er klopt meer niet. Daarom zie ik voor nu af van het probleem met de sawtooth en duty cycle.

Het probleem waar ik nu naar kijk gaat over de controller dynamics. De controller dynamics zijn afhankelijk van drie onderdelen die ik los van elkaar test:Phi, Theta en Vref. Dit is te zien in de onderstaande formule:

V=-{K}*(-V(Phi2)+I(R_node2))+{gamma}*(V(Theta2)-V(Theta1))+{Vref}

Ik zet K=0 in de simulatie, en daaruit blijkt dat het systeem met de termen van theta stabiel wordt. Voor het eerste gedeelte met phi wordt een loop gemaakt, en deze blijkt nog niet te werken. Ik wil namelijk dat de current source input voor het berekenen van phi afhankelijk is van een waarde uit dat circuit. Mijn pogingen om dit te doen is te zien in de afbeeldingen die ik heb bijgevoegd. Deze poging is vertaald uit de controller dynamics:

T_phi * theta_dot = -phi + I_node1

Weet je hoe ik deze loop werkend kan krijgen in spice? Het werkende spice waar ik mee bezig ben heb ik ook toegevoegd

Die beide plaatjes zouden hetzelfde moeten doen, immers een G die zijn eigen spanning meet doet hetzelfde als een R.

Wat werkt er niet aan? Als je je dat afvraagt voor zo'n eenvoudig circuitje, kun je toch gewoon een testschema'tje maken waarin je er een input op aansluit en de output meet?