
Home  Forums  Rules  Articles  The diyAudio Store  Gallery  Blogs  Register  Donations  FAQ  Calendar  Search  Today's Posts  Mark Forums Read  Search 
Class D Switching Power Amplifiers and Power D/A conversion 

Please consider donating to help us continue to serve you.
Ads on/off / Custom Title / More PMs / More album space / Advanced printing & mass image saving 

Thread Tools  Search this Thread 
3rd November 2009, 01:36 AM  #11  
diyAudio Member
Join Date: May 2005
Location: Bristol, UK

Hi monaural, thanks for the reply.
Quote:
Could you explain? Like I said, I don't get it; why does the oscillation frequency vary with output amplitude? Qualitatively, what's causing the switching frequency to change? Is it because the effective gain of the modulator varies with output signal amplitude? Last edited by HarryDymond; 3rd November 2009 at 02:00 AM. 

3rd November 2009, 02:14 AM  #12 
diyAudio Member
Join Date: May 2009

Since this is a nonlinear system, you should not see the circuit as a static model. It's behaviour highly depends on the signal applied to it.
For example, in the extreme, try to add a carrier to the signal, at, say, 1Mhz the ucd will actually oscillate at that fixed frequency, just like a regular class D! well, the numerical solution is obtained, deriving the frequency response of the system (arround the comparator), applying a variabledutycycle squarewave to the system, and checking for Vo == Vin in the time domain. If you know how to handle laplace transfer functions, you will get to the expression: square_wave(t) = sum(n, from oo to +oo, skipping n=0) sen(pi*n*D)/(n*pi)*exp(j*D*n*pi)*exp(+j*2*pi*n/T*t) where D is duty cycle (from 0 to 1) T is the square wave period (what we want to know) from here, you multiply the frequency contents of the wave, with the corresponding frequency response of the branch, say G(s), so the inverting input of the comparator would be Vi(t) = sum(n, from oo to +oo, skipping n=0) sen(pi*n*D)/(n*pi)*exp(j*D*n*pi)*G(j*2*pi*n/T)*exp(+j*2*pi*n/T*t) Assuming Vi(0)  Vi+ = 0, since the step occurs at t=0 (assuption I took when calculating the square wave freq. content) then, the next commutation, at t=DT, the condition should also be truth: Vi(DT)  Vi+ = 0 so Vi(0) = Vi(DT) Btw, do not think that Vi+ is proportional to D. It's not. calculating it on matlab would give the answer. I have some matlab code: sorry about those portuguese comments, but i believe you will understand the code anyway, you always have google translator Code:
%cálculo da frequência de oscilação, recorrendo ao método numérico %% primeiro que tudo, calcula a resposta em frequência da malha clear all; close all; syms s; %Atraso da malha tau=300e9; L=28e6; C=680e9; Rl=8; Rg=1000; Ra=22e3; Rb=2.2e3; Cb=220e12; %descrição dos sistemas %filtro passa baixo Lpf=1/(L*C)*1/(s^2+s/(Rl*C)+1/(L*C)); %phaselead network A=Rg/(Ra+Rg); tz=Cb*(Ra+Rb); tp=Cb*(Rb+Ra*Rg/(Ra+Rg)); Pln=A*(tz*s+1)/(tp*s+1); Cmp=exp(s*tau); M=Lpf*Pln*Cmp; %% Agora que já calculou a resposta da malha(M), vai obter a frequência de %% oscilação, em funcao do duty cycle close all; D=0.1; %duty cycle T=linspace(1e6,10e6, 1000); tempo=linspace(0, 20e6, 10000); periodo=1/3.17e5; sinal=zeros(1, 1000); sinalp=zeros(1, 1000); sinal_tempo = zeros(1, 10000); for n=50:50; if(n ~= 0) sinal = sinal + i*(1cos(2*pi*n*D))./(n*pi).*subs(M, s, i*2*pi*n./T); if(n>0) sinalp = sinalp + (1exp(2*j*pi*n*D))*(1exp(2*j*pi*n*D))/(2*j*n).*subs(M, s, 2*j*pi*n./T); end sinal_tempo = sinal_tempo + sin(pi*n*D)./(n*pi).*exp(j*pi*n*D)*exp(j*n/periodo*tempo*2*pi).*subs(M, s, i*2*pi*n./periodo);; end end figure(1) subplot(2,1,1) plot(1./T, real(sinal)) hold on plot([1/1e6, 1/10e6], [0 0], 'r') subplot(2,1,2) plot(1./T, angle(sinal)) figure (2) plot(tempo, real(sinal_tempo)); %% Agora que já consegui calcular o sinal à saída,vou resolver em ordem a T close all; dt=100e9; T=1/130e3; sinal=0; frequencias=zeros(1,10); indice=1; duties=linspace(0.1,0.9,1000); for D=duties; frequencias(indice) = fzero(@(f) Vcomp(f, D, 100), [50e3, 1e6]); indice = indice + 1; end plot(duties, frequencias) % % figure(1) % subplot(2,1,1) % plot(1./T, real(sinal)) % hold on % plot([1/1e6, 1/10e6], [0 0], 'r') % % subplot(2,1,2) % plot(1./T, angle(sinal)) % % figure (2) % plot(tempo, real(sinal_tempo)); Code:
function y = Vcomp(f, D, ordem) if ordem <1 error('Ordem tem que ser pelo menos um!') end sinal=0; for n=ordem:ordem; if(n ~= 0) s=i*2*pi*n.*f; resposta_filtro=3442016806722689./65536.*exp(2833419889721787./9444732965739290427392.*s).*(6285469788699497./27153607276500459978752.*s + 1./23)./(3279375541930173./4722366482869645213696.*s + 1)./(s.^2 + 1180591620717411303424./6422418416702717.*s + 3442016806722689./65536); sinal = sinal + i*(1cos(2*pi*n*D))./(n*pi).*resposta_filtro; end end y = real(sinal); end 
3rd November 2009, 02:17 AM  #13 
diyAudio Member
Join Date: May 2009

That huge line inside the function is just the frequency response function expanded, because this way matlab works faster.
Those component values are retrieved from Um10155. 
3rd November 2009, 02:28 AM  #14  
diyAudio Member
Join Date: May 2009

Quote:
Well, imagine a simpler system: a comparator with delay connected to a first order lowpass filter (e.g. a resistor and a capacitor), and the output voltage directly fedback to the comparator Since Vcapacitor (capacitor voltage, which is also output voltage of the system) is the result of the current integral, and the current is (Vcomparator_out  Vcapacitor)/R , when mean Vcapacitor is low (, say, 0.5) when the Vcomparator = 1, the capacitor is integrating 1.5/R When the mean Vcapacitor is higher (say, 0.5) the capacitor just integrates 0.5/R, so, charges slower it means that higher the output voltage, slower is the charging, so, when the output voltage is higher, the capacitor takes longer to charge, and is faster to discharge, and vice versa. as a consequence, you can see that when Vi is away from 0V, the output is something like a sawtooth. With a simple first order system, its trivial to get a analytical solution, because the working variable (Vout) is proportional to the state variable (in this case, the charge stored in the capacitor), but for a 2nd order system, or the even more complex feedback network of ucd, it can't be done this way. However, the principle is the very same. Basically, the system reponds differently, as a function of stored energy. Last edited by monaural; 3rd November 2009 at 02:30 AM. 

Thread Tools  Search this Thread 


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
What's different UCD180 and UM10155  xxxxxxx  Class D  6  26th July 2008 06:19 AM 
New To Site?  Need Help? 