Wprowadzenie do elektroniki/Filtry/Wstęp-Analiza układu RC

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Filtr RC

Schemat filtru RC dolnoprzepustowego

Równanie w dziedzinie czasu

Zaczynając rozdział chciałbym przytoczyć bardzo prosty układ filtru pasywnego składający się z dwóch elementów, rezystora R oraz kondensatora C. Następnie przytoczyć kilka możliwości jego opisu. Do zrozumienia rozdziału będzie konieczne zapoznanie się z takimi zagadnieniami jak liczby zespolone transformata Laplace'a, a także zagadnienia z zakresu rachunku różniczkowego.


Z napięciowego prawa Kirchhoffa wynika następująca zależność

uwe(t)uR(t)uwy(t)=0<=>uwe(t)i(t)*Ruwy(t)=0

Następnie należy wyznaczyć prąd płynący w obwodzie jako funkcję napięcia wyjściowego

i(t)=dqdt

Ładunek zgromadzony na kondensatorze wyraża się zależnością

Q=U*C

Stąd równanie na prąd przyjmie postać

i(t)=Cduwy(t)dt

Ostatecznie stan w obwodzie możemy opisać takim równaniem różniczkowym w którym mamy tylko jedną niewiadomą.

uwe(t)Cduwy(t)dt*Ruwy(t)=0

uwe(t)τduwy(t)dtuwy(t)=0

Równanie to będzie stanowiło bazę do dalszych rozważań w tym rozdziale.

Metoda rozwiązania równania różniczkowego jest zależna od tego jak opisany będzie sygnał wejściowy filtru. Dla testu proszę sobie rozwiązać równanie kiedy wymuszeniem filtru będzie sygnał o stałej wartości Umax a watrość początkowa będzie 0.

Dla tych co nie wiedzą jak się do tego zabrać podaje gotowe rozwiązanie. Licealista znający podstawy obliczania pochodnych będzie mógł sprawdzić przez podstawienie czy rozwiązanie jest prawdziwe.

Równanie

Umax=τ*u'wy(t)+uwy(t)

Ma rozwiązanie

uwy(t)=Umax*(1etτ)

Równanie Różniczkowe - Transformata Laplace'a

Transformata Laplace'a [1] jest to odwzorowanie przekształcające funkcję zmiennej t na funkcję zmiennej s

Transformata Laplace'a ma szereg właściwości ułatwiających rozwiązywanie równań różniczkowych, pozwala na łatwe przejście między opisem w dziedzinie czasu , dyskretnym czy opisem w dziedzinie częstotliwości. Umożliwia łatwe symulowanie układów w programie matlab.

W naszych rozważaniach skorzystamy z jednej właściwości transformaty Laplace'a. A mianowicie z tego, że transformata pochodnej funkcji jest równa transformacie funkcji pomnożonej przez zmienną s. Nasze równanie różniczkowe


uwe(t)τduwy(t)dtuwy(t)=0

Po zastosowaniu przekształcenia będzie wyglądało następująco

uwe(s)τ*s*uwy(s)uwy(s)=0

Widzimy, iż po takim przekształceniu z równania różniczkowego zrobiło nam się równanie algebraiczne. Możemy teraz wyznaczyć transmitancję układu jako stosunek sygnału wyjściowego do sygnału wejściowego

uwy(s)*(1+sτ)=uwe(s)

uwy(s)=uwe(s)1+sτ

Powyżej otrzymane równanie użyjemy w kolejnym punkcie do analizy częstotliwościowej filtru. A teraz zostaje nam podzielenie obydwu stron równania przez uwe(s) w celu obliczenia transmitancji fitru

H(s)=uwy(s)uwe(s)=11+sτ

I oto mamy transmitancję filtru którą możemy użyć do symulacji w programie matlab, i patrzeć jak zachowuje się układ pod wpływem różnych wymuszeń.

Opis w dziedzinie częstotliwości

Uczyłeś się elektrotechniki?? Wiesz jak działa dzielnik napięcia?? Znasz podstawy liczb zespolonych?? oto fragment dla ciebie.

Zakładamy iż filtr został zasilony napięciem sinusoidalnym (większość przebiegów okresowych można aproksymować do sumy przebiegów sinusoidalnych rozwijając je w szereg furiera[2] - funkcje harmoniczne).

Reaktancja kondensatora w postaci zespolonej Xc=j1ω*C

Całkowita impedancja zespolona układu jest równa

Z=R+Xc

Z właściwości dzielnika napięciowego wiemy iż


Uwy=Uwe*XcZ

Po podstawieniu mamy

Uwy=Uwe*j1ω*CRj1ω*C

Mnożąc obydwie strony ułamka przez jωC i pamiętając zależność dla liczb zespolonych j2=1 mamy

Uwy=Uwe*1jRCω+1

Zastępując wyrażenie RC stałą czasowa τ otrzymamy

Uwy=Uwe*1jτω+1

Przytoczę tutaj równanie jakie otrzymaliśmy w wyniku transformaty lapalcea uwy(s)=uwe(s)*11+sτ

Pewnie widzicie jak łatwo przy pomocy tego typu transformaty przejść do opisu w dziedzinie częstotliwości wystarczy bowiem za s podstawić jω

Dyskretyzacja - Czyli jak zrobić taki filtr komputerowo??

Teraz to co tygrysy lubią najbardziej.


Wiadomo że czasy w jakich przyszło nam żyć opanowały komputery. Sprzęt muzyczny opuszcza pomału analogowe układy (oczywiście że nigdy tego do końca nie zrobi). Również filtry przechodzą ze swoich analogowych wzorców do świata cyfrowego. W tym rozdziale zajmiemy się zagadnieniem jak przeportować nasz analogowy pierwowzór do procesora. Okazuje się, że wcale nie jest bo bardzo trudne. Można to zrobić na kilka sposobów: między innymi stosując transformatę Z. Ja tutaj przedstawię sposób z zamianą równania różniczkowego na różnicowe.

uwe(t)τduwy(t)dtuwy(t)=0


uwe(n)τuwy(n)uwy(n1)Tuwy(n)=0

  1. uwe(n) - n-ta próbka sygnału wejściowego
  2. uwy(n) - n-ta próbka sygnału wyjściowego
  3. uwy(n1) - n-1 opóźniona o jeden (poprzednia) próbka sygnału wyjściowego
  4. T - Okres próbkowania

Należy teraz wyznaczyć uwy(n)

uwe(n)τTuwy(n)+τTuwy(n1)uwy(n)=0


uwe(n)+τTuwy(n1)=(τT+1)uwy(n)

a to próbkę n-tą wyznaczamy ze wzoru

uwy(n)=uwe(n)+τTuwy(n1)(τT+1)

Przykład

Napiszemy program filtra cyfrowego wzorowanego na układzie RC. R=100kΩ, C=2μF, okres próbkowania 1ms, czas obserwacji 1s. Program będzie przeliczał dla wymuszenia skokowego i sinusoidalnego. τ=R*C=100*103*2*106=0,2

τT=0,20,001=200

1+τT=201

Wszystkie współczynniki mamy już policzone więc zabieramy się do kodu

//Funkcja wciśnięcia przycisku
void MainWindowImpl::on_pushButton_clicked()
{
	double x[1000], y[1000], z[1000];
	double wy, we;	
	wy=0;
	we=0;
	for (int i=0; i<1000; i++)
		{
		x[i]=(double)i/1000;		
//wymuszenie sinusoidalne	
//		we=10*sin(10*x[i]);
//wymuszenie skokowe				
		we=10;		
		wy= (we+200*wy)/201;
				
		y[i] = we;
		z[i] = wy;
		}
qwtPlot->setAxisLabelRotation(QwtPlot::xBottom, -50.0);	
// dwie krzywe wartość zadana U_we oraz wartość wyjściowa U_wy
U_we->setSamples(x, y, 1000);
U_wy->setSamples(x, z, 1000);
qwtPlot->replot(); 
}

Oczywiście Część odpowiedzialna za obliczenia wygląda ona tak:

for (int i=0; i<1000; i++)
		{
		we=10;
		wy= (we+200*wy)/201;}

Prawda że proste ??

Dla niewtajemniczonych w języki programowania jeden szczegół zasługuje na wytłumaczenie. Chodzi mianowicie o to, iż zmienna wy znajdująca się po prawej stronie równania jest to wartość z wcześniejszej iteracji pętli. Ponieważ języki programowania działają w ten sposób, iż pierw wykonują działania a przypisanie wartości następuje na końcu. równanie x=x+1 jest niepoprawne matematycznie a komputer najpierw wykona x+1 a dopiero potem wynik przypisze do zmiennej x (zwiększenie wartości x o jeden).


Warto pokusić się o blisko dwukrotne skrócenie czasu wykonania pętli poprzez jednorazowe wyliczenie ilorazu 1/201 poza pętlą i zamianę ostatniej liniji pętli na równoważną (zamiast dzielenia w pętli mamy odejmowanie):

			wy= wy -(wy-we)*(1/201);}


Na koniec podaje jak wyszły wykresy wartości zadanej(czerwona linia) i wartości wyjściowej filtru(niebieska linia).

Teraz jeśli zmienimy wymuszenie na sinusoidalne (zakomentujemy linijkę we=10; a odkomentujemy linijkę we=10*sin(10*x[i]); ) to odpowiedź naszego filtru będzie wyglądała tak