LTSpice; Komplicerade vågformer till transistorer..
LTSpice; Komplicerade vågformer till transistorer..
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.
Ä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.
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.
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.
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.
Nu vet jag inte exakt vad du har problem med men här är ett litet exempel:
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.
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
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.
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.
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.
Det blir "seriekoppling". Har du testat?
Loopen:stegar variabeln "i" från 1 till 100.
edit:
Motsvarande i C blir,
Loopen:
Kod: Markera allt
for i=1:100
GÖR NÅGOT
end
edit:
Motsvarande i C blir,
Kod: Markera allt
for (i=1; i<=100; i++)
{
GÖR NÅGOT
}
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!

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!