LTSpice; Komplicerade vågformer till transistorer..

Elektronik- och mekanikrelaterad mjukvara/litteratur. (T.ex schema-CAD, simulering, böcker, manualer mm. OS-problem hör inte hit!)
Johan.o
EF Sponsor
Inlägg: 2387
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

LTSpice; Komplicerade vågformer till transistorer..

Inlägg av Johan.o »

Någon som vet hur man kan bygga rätt avancerade vågformer i LTSpice?

Är så att jag har en helbrygga och alla transistorer ska styras, men vill helst bara mata in
några värden, och låta programmet själv räkna ut utifrån det hur alla fyra vågformer ska se ut, genom en liten algoritm jag skriver på något sätt såklart...

Har du gjort något liknande tidigare är jag tacksam för hjälp.
Användarvisningsbild
RDX*
EF Sponsor
Inlägg: 1651
Blev medlem: 28 maj 2003, 22:52:04
Ort: Skåne - Lund

Inlägg av RDX* »

Jag gjorde något likande i mitt exjobb. Jag simulerade styrningen till en 3-fas brygga i simulink och exporterade tändpulserna till PSpice. Det fungerade riktigt bra.

Man kan göra samma sak i LTspice. Du kan använda .wav-filer för att styra spännings/strömkällor. Det är bara att koda ihop något (matlab?) som genererar wav-filerna och sedan köra simuleringen med dessa.
LTSpice Help, sökord:wavefile skrev: Syntax: Vxxx n+ n- wavefile=<filename> [chan=<nnn>]

This allows a .wav file to be used as an input to LTspice. <filename> is either a full, absolute path for the .wav file or a relative path computed from the directory containing the simulation schematic or netlist. Double quotes may be used to specify a path containing spaces. The .wav file may contain up to 65536 channels, numbered 0 to 65535. Chan may be set to specify which channel is used. By default, the first channel, number 0, is used. The .wav file is interpreted as having a full scale range from -1V to 1V.

This source only has meaning in a .tran analysis.

Man skulle kanske också kunna koda en textfil med PWL- (Piecewise linear) "data". Men sen vet jag inte om man kan klistra in den till LTSpice på ett bra sätt.

Ps. LTSpice kan också exportera .wav-filer så man kan lyssna på tex distorsionen i en audioförsärkare eller höra hur en last arbetar i en H-brygga.
Johan.o
EF Sponsor
Inlägg: 2387
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

Inlägg av Johan.o »

Ohh.. tack :)

Satt ock knåpade ett tag med PWL direkt i Spice, men det var tokjobbigt..
Man vill ju att systemet ska hinna svänga in och då blir det många rutor att fylla i..

Ska genast slå på Matlab och testa testa!
Johan.o
EF Sponsor
Inlägg: 2387
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

Inlägg av Johan.o »

Ähh... nu har jag suttit hela natten med Matlab, det är fan totalt värdelöst.
Något så enkelt som addera flera arrayer är tydligen helt omöjligt svårt..
Här blir inga vågformer byggda m.a.o.

Jävlar skit. Nu ska jag sova.. Klockan är mycket, sommartid också..dohhh... :roll:
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Att lägga ihop vektorer är enkelt. Använd,

[A , B] (kommatecknet är frivilligt)

eller,

[A ; B]

Vad det är för skillnad får du komma fram till själv. Det blir ju lite olika beroende på om A och B är rad- eller kolonnvektorer.
Användarvisningsbild
RDX*
EF Sponsor
Inlägg: 1651
Blev medlem: 28 maj 2003, 22:52:04
Ort: Skåne - Lund

Inlägg av RDX* »

Nu vet jag inte exakt vad du har problem med men här är ett litet exempel:

Kod: Markera allt

clc
clear

datatot=[0 0] %
Fs=44100; %samplingshastighet


data=[modulate(0.1,100,20000,'pwm')' modulate(0.8,100,20000,'pwm')']; %skapar 2 PWM-kanaler
for(i=0:100)
datatot=[datatot; data];%adderar ihop en längre vektor 
end

data=[modulate(0.8,100,20000,'pwm')' modulate(0.1,100,20000,'pwm')'];%skapar 2 PWM-kanaler med en annan duty-cycle
for(i=0:100)
datatot=[datatot; data];%lägger ihop den nya dutycyclen med den gamla PWM:en
end

wavwrite(datatot,Fs,'pwm')%Skriver vektorerna till en wav-fil

%plotar upp resultatet med de båda PWM:erna
plot(datatot(:,1))
hold on
plot(datatot(:,2)+1.1,'r')
ylim([-0.5 2.5])
hold off
För att få in ljudfilen i LTSpice så skapa tex ett motstånd och dra ena sidan till GND och och skapa en liten wire-bit på den andra sidan av motståndet. Döp wirebiten till X1.

Skapa en text (SPICE directive) med "Vpwm X1 GND wavefile=C:\Program\MATLAB71\work\pwm.wav chan=0".

X1 och GND är nu de 2 noder som din wav-fil ska generera en spänning mellan. Du kan även skapa en ny text där du spelar upp den andra kanalen (chan=1) mellan 2 andra noder.
Johan.o
EF Sponsor
Inlägg: 2387
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

Inlägg av Johan.o »

cykze: Med lägga ihop menar jag att seriekoppla två arrayer..
Så att en array byggs ut med en annan och blir längre..

RDX*: Tack, ska kika på det senare just nu orkar jag inte peta i Matlab..
Funderade nästan på att skriva ett litet c-program som skapar wave-filen men
det lär ta några dagar, skönt att det inte är någon större begränsning i samplingsfrekvensen för wave filer, (fs= 2^32 Hz).

Föresten: "i=0:100" i for-lopen, vad menas med det, är det att du deklarerar att i kan hålla värdet 0 till 100? Antar att det var där det felade när jag försökte använda en for-loop.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Det blir "seriekoppling". Har du testat?

Loopen:

Kod: Markera allt

for i=1:100
GÖR NÅGOT
end
stegar variabeln "i" från 1 till 100.


edit:
Motsvarande i C blir,

Kod: Markera allt

for (i=1; i<=100; i++)
{
GÖR NÅGOT
}
Johan.o
EF Sponsor
Inlägg: 2387
Blev medlem: 18 juni 2003, 01:08:50
Ort: Jönköping

Inlägg av Johan.o »

Ahaa, ok.
Har för mig att jag testade något liknande men jag var nog för trött.

Tack för hjälpen, då har jag lärt mig något nytt :)
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

En sak som är bra med Matlab är ju att det går snabbt att prova kommandon direkt i "kommandofönstret". :)

Sen kan jag ju påpeka att man kan ha valfri "iterationsvektor". 1:100 ger ju en vektor med värdena 1,2,3,...,100. Men det går också bra att göra något sånt här,

for i=[1 5 8]
GÖR NÅGOT
end

Då körs loopen tre gånger med i=1, 5 och 8. Det kan vara bra att ha ibland...


RDX*: Tack för tipset om wave-filer i LTSpice!
Skriv svar