%Dokumentinnstillinger:---------------------------------
\documentclass[11pt,norsk]{elsys-design}


\heading{Designnotat}
\title{Sinus-generator}
\author{Øyvind Skaaden}
\version{1.0}
\date{\today}

\begin{document}

\maketitle

%Automatisk generert innholdsfortegnelse:------------------
\toc

%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}

I veldig mange sammenhenger er det å kunne generere et periodisk signal en veldig nyttig ting. I de fleste tilfeller ønsker vi at signalet skal ha en enkel tone, og da må vi bruke et sinussignal.
For å generere et sinussignal er det flere måter å gjøre det på, men her vil vi ta utganspunk i systemet i \autoref{fig:introsystem}.

\begin{figure}[!htbp]
	\centering
	\includegraphics[width=0.7\textwidth]{figurer/D8_Innledning.pdf}
	\caption{Blokkdiagram for sinus-generatoren. Spenningene $v_1$ og $v_2$ er henholdsvis til utgangen på firkantsignalgeneratoren og lavpassfilteret.}
	\label{fig:introsystem}
\end{figure}

Vi ønsker å ikke være veldig langt unna frekvensen som velges, så vi ønsker å være innenfor $10 000$ ppm av frekvensen $f_0 $ til sisnussignalet. 

Siden vi lager sinusen fra en firkantpuls ønsker vi også at signalet ikke er veldig ødelagt av de overharmoniske svingningene. Derfor velger vi at harmonisk forvrengning, $D$, ikke skal være større enn $D_{max} = 2\% $.

\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}

For å generere et firkantsignal er det flere måter å gjøre det på. Her vil det bli tatt utganspunkt i en type generator som heter relaksjonsgenerator. Den genererer et firkantsignal basert på opp- og utladning av en kondensator i et $RC$-ledd. Vi kan da styrefrekvensen ved å velge riktig tidskonstant.


\begin{figure}[!htpb]
	\centering
	\begin{circuitikz}[scale=0.92, every node/.style={transform shape}]
		\draw
		(0,0) 		node[op amp,yscale=1](opamp){}

		(opamp.-) 	to [short] 					++(0,1) 			coordinate(C)
					to [R, l=$R_1 $, *-] 		(C-|opamp.out)
					to 							(opamp.out)	
		(C) 		to [C, l_=$C$,]				++(-2,0) 			node[ground] {}

		(opamp.+)	to [short] 					++(0,-1) 			coordinate(R_b)
					to [R, l_=$R_3 $, *-] 		(R_b-|opamp.out)
					to 							(opamp.out)
		(R_b)		to [R, l=$R_2$] 			++(-2,0) 			node[ground] {}

		(opamp.out) to [short, -o]				++(1,0) 			node[right] {$v_1$}

;
	\end{circuitikz}
	\caption{Relaksjonsgenerator. Genererer et firkantsignal basert på tidskonstanten $\tau = R_1 \cdot C$.}
	\label{circ:relaksjonStart}
\end{figure}

Vi antar forsyningsspenningen til operasjonsforsterkeren i generatoren er lik positiv og negativ. Da er perioden $T$ til signalet som blir generert som i \eqref{eq:periodeGenerator}.

\begin{align}
	T = 2 \cdot R_1 \cdot C \cdot \ln\left(1 + \frac{R_2}{R_3}\right) \label{eq:periodeGenerator}
\end{align} 

Vi kan også anta at $1k\Omega < R_2 = R_3 < 100k\Omega$, og skriver om fra periode $T$ til frekvens $f = \frac{1}{T}$ i \eqref{eq:frekvensGenerator}. 

\begin{align}
	f = \frac{1}{2 \cdot R_1 \cdot C \cdot \ln\left(3\right)} \label{eq:frekvensGenerator}
\end{align} 

Siden en firkantpuls består av en grunnfrekvens og mange overtoner av grunnfrekvensen, kan vi hente ut et sinussignal fra firkantsignalgeneratoren ved å fjerne overtonene. Dette kan gjøres med et lavpass-filter. 

Igjen så finnes det mange varianter av et lavpassfilter, men her tas det utganspunkt i en Sallan-Key-topologi \cite{sallan-key} med en Butterworth-form\cite{butterworth} på dempningen. 

Sallan-key-filteret er et andreordens-filter og disse kan seriekobles for å legge til flere ordener. Dersom det er to i serie vil vi kunne ha opp til et fjerdeordens-filter, tre så får vi sjetteordens o.s.v. 

\begin{figure}[!htpb]
	\centering
	\begin{circuitikz}
		\draw
		(0,0) 		node[op amp,yscale=-1](opamp){}

		(opamp.+) 	to [short] 					++(-1,0) 			coordinate(C2)
					to [C, l_=$C_2$, *-] 		++(0,-2)
					to ++(0,0) 										node[ground]{}

		(C2) 		to [R, l_=$R$] 				++(-2,0) 			coordinate(R2)
					to [short, *-] 				++(0,1) 			coordinate(C1)
					to [C, l=$C_1 $] 			(C1-|opamp.out) 
					to [short, -*] 				(opamp.out)

		(R2) 		to [R, l_=$R$, -o] 			++(-2,0) 			node[left] {$v_1$}

		(opamp.-) 	to [short] 					++(0,-1) 			coordinate(fb)
					to [short] 					(fb-|opamp.out) 
					to [short] 					(opamp.out)
					to [short, -o] 				++(1,0) 			node[right] {$v_2$}

		;
	\end{circuitikz}
	\caption{Kretstopologi for et andregrads lavpass-filter i Sallen-Key topologi.}
	\label{circ:sallen-key-start}
\end{figure}


For å regne ut de forskjellige komponentverdiene har vi noen formler. Siden vi bruker operasjonsforsterkere (opamp) er det ganske standard å bruke motstandsverdier mellom $1k\Omega$ og $100k\Omega$. Motstandene kan da velges fritt innenfor disse grenser.

$\omega_0 $ er knekkfrekvensen i radianer og gitt i (\ref{eq:knekkfreq}).
\begin{align}
	\omega_0 = 2\pi \cdot f_0 \label{eq:knekkfreq}
\end{align}

To tidskonstanter $\tau_1$ og $\tau_2$ i (\ref{eq:tidskonstanter}).

\begin{align}
	\tau_1 = \frac{1}{\omega_0 \zeta} \quad \text{og} \quad \tau_2 = \frac{1}{\omega_0^2\tau_1} \label{eq:tidskonstanter}
\end{align}

Da er kondensatorverdiene gitt som i (\ref{eq:kondiser}).

\begin{align}
	C_1 = \frac{\tau_1}{R} \quad \text{og} \quad C_2 = \frac{\tau_2}{R} \label{eq:kondiser}
\end{align}

Verdiene for $\zeta$ kan regnes ut eller så er de gitt for et normal Butterworth-filter for orden 1 til 6 i \autoref{tab:sallenKeyLosning}. Her kommer $\zeta$-verdiene i par som gjelder for et sett med et Sallen-Key-filter.


\begin{table}[!htpb]
\centering
\caption{$\zeta$-verdier for forskjellige ordener $n$ for et butterwurth-filter med et Allan-Key-filter topologi.}
\label{tab:sallenKeyLosning}
\begin{tabular}{|l|l|l|l|}
\hline \hline
           	& \multicolumn{3}{l|}{Polpar \textit{i}} \\ \hline
$n$ 		& $1$                 & $2$					& $3$               \\ \hline 
\hline
$1$			& $1$                 &                 	&                  	\\ \hline
$2$ 		& $0.70711$           &                		&                  	\\ \hline
$3$			& $1$                 & $0.5$              	&                  	\\ \hline
$4$			& $0.92388$           & $0.38268$          	&                  	\\ \hline
$5$			& $1$                 & $0.80902$          	& $0.30902$         \\ \hline
$6$ 		& $0.96593$           & $0.70711$          	& $0.25882$         \\ \hline 
\hline
\end{tabular}%
\end{table}

Hele sinusgeneratoren vil da være firkantgeneratoren og deretter filteret/ene i serie som vist i \autoref{circ:sinusTeori}.

\begin{figure}[!htpb]
	\centering
	\begin{circuitikz}[scale=0.92, every node/.style={transform shape}]
		\draw
		(0,0) 		node[op amp,yscale=1](opamp){}

		(opamp.-) 	to [short] 					++(0,1) 			coordinate(C)
					to [R, l=$R_1 $, *-] 		(C-|opamp.out)
					to 							(opamp.out)	
		(C) 		to [C, l_=$C$,]				++(-2,0) 			node[ground] {}

		(opamp.+)	to [short] 					++(0,-1) 			coordinate(R_b)
					to [R, l_=$R_3 $, *-] 		(R_b-|opamp.out)
					to 							(opamp.out)
		(R_b)		to [R, l=$R_2$] 			++(-2,0) 			node[ground] {}

		(9,0) 		node[op amp,yscale=-1](opamp2){} 

		(opamp2.+) 	to [short] 					++(-1,0) 			coordinate(C2)
					to [C, l_=$C_2$, *-] 		++(0,-2)
					to ++(0,0) 										node[ground]{}

		(C2) 		to [R, l_=$R$] 				++(-2,0) 			coordinate(R2)
					to [short, *-] 				++(0,1) 			coordinate(C1)
					to [C, l=$C_1 $] 			(C1-|opamp2.out) 
					to [short, -*] 				(opamp2.out)

		(R2) 		to [R, l_=$R$] 				++(-2,0) 			coordinate(koblingInn)

		(opamp2.-) 	to [short] 					++(0,-1) 			coordinate(fb)
					to [short] 					(fb-|opamp2.out) 
					to [short] 					(opamp2.out)
					to [short, -o] 				++(1,0) 			node[right] {$v_2$}

		(opamp.out) to [short, -o]				(opamp.out-|koblingInn) node[below]{$v_1$}
					to 							(koblingInn)

		;
	\end{circuitikz}
	\caption{Relaksjonsgenerator med lavpass-filter. Genererer et sinussignal på utgangen $v_2$ basert på tidskonstanten $\tau = R_1 \cdot C$.}
	\label{circ:sinusTeori}
\end{figure}


\section{Realisering og test}
\label{sec:realisering}
\subsection{Realisering}

Frekvensen som sinusgeneratoren skal generere er gitt ved $f_0 = 4,1kHz$. 

Velger $R_1 = R_2 = R_3 = 1k\Omega$. Kondensatoren i generatoren er gitt i \eqref{eq:generatorKondis}. Opampen som blir brukt er en LF353P, den har to opamper i samme pakke.

\begin{align}
	C = \frac{1}{2 \cdot R_1 \cdot f_0 \cdot \ln(3)} = 111\text{nF} \label{eq:generatorKondis}
\end{align}

Siden vi har to opamper tilgjengelig, og brukte én i generatoren lager vi kun et andre-ordens filter.
Starter med å velge $R=1k\Omega$. 

Siden dette er et andre-ordens filter blir $\zeta = 0.70711$. Knekkfrekvensen $\omega_0 = 2\pi \cdot f_0 = 8,1\pi \cdot 10^3 $ rad/s. Da er tidskonstantene gitt i \eqref{eq:tid1}.

\begin{align}
	\tau_1 = \frac{1}{\omega_0 \zeta_1} \approx 55\mu\text{s} \quad &\text{og} \quad \tau_2 = \frac{1}{\omega_0^2\tau_1} \approx 27\mu\text{s} \label{eq:tid1}
\end{align}

Dermed blir kondensatorene, og justert for standardverdier som i \eqref{eq:kond1} og \eqref{eq:kond2}.

\begin{align}
	C_1 = \frac{\tau_1}{R} \approx 55 \text{nF} \approx (100 \text{nF} + 100 \text{nF}) || (10 \text{nF} + 10 \text{nF}) \label{eq:kond1}\\
	C_2 = \frac{\tau_2}{R} \approx 27 \text{nF} \approx 10 \text{nF} || 10 \text{nF} || (10 \text{nF} + 10 \text{nF}) || 1 \text{nF} || \text{nF} \label{eq:kond2}
\end{align}

Den fullførte kretsen er som i \autoref{circ:sinusVerdier}.

\begin{figure}[!htpb]
	\centering
	\begin{circuitikz}[scale=0.92, every node/.style={transform shape}]
		\draw
		(0,0) 		node[op amp,yscale=1](opamp){}

		(opamp.-) 	to [short] 					++(0,1) 			coordinate(C)
					to [R, l=$1k\Omega$, *-] 		(C-|opamp.out)
					to 							(opamp.out)	
		(C) 		to [C, l_=$C$,]				++(-2,0) 			node[ground] {}

		(opamp.+)	to [short] 					++(0,-1) 			coordinate(R_b)
					to [R, l_=$1k\Omega$, *-] 		(R_b-|opamp.out)
					to 							(opamp.out)
		(R_b)		to [R, l=$1k\Omega$] 			++(-2,0) 			node[ground] {}

		(9,0) 		node[op amp,yscale=-1](opamp2){} 

		(opamp2.+) 	to [short] 					++(-1,0) 			coordinate(C2)
					to [C, l_=$27 \text{nF}$, *-] 		++(0,-2)
					to ++(0,0) 										node[ground]{}

		(C2) 		to [R, l_=$1k\Omega$] 				++(-2,0) 			coordinate(R2)
					to [short, *-] 				++(0,1) 			coordinate(C1)
					to [C, l=$55 \text{nF}$] 			(C1-|opamp2.out) 
					to [short, -*] 				(opamp2.out)

		(R2) 		to [R, l_=$1k\Omega$] 				++(-2,0) 			coordinate(koblingInn)

		(opamp2.-) 	to [short] 					++(0,-1) 			coordinate(fb)
					to [short] 					(fb-|opamp2.out) 
					to [short] 					(opamp2.out)
					to [short, -o] 				++(1,0) 			node[right] {$v_2$}

		(opamp.out) to [short, -o]				(opamp.out-|koblingInn) node[below]{$v_1$}
					to 							(koblingInn)

		;
	\end{circuitikz}
	\caption{Relaksjonsgenerator med lavpass-filter. Genererer et sinussignal på utgangen $v_2$ basert på tidskonstanten $\tau = R_1 \cdot C$.}
	\label{circ:sinusVerdier}
\end{figure}

\subsection{Test}

Etter testing må motstandsverdien $R_1$ endres til $R_1 = 870\Omega$. Ellers helt lik krets. Den endelige kretsen kan sees i 

\begin{figure}[!htpb]
	\centering
	\begin{circuitikz}[scale=0.92, every node/.style={transform shape}]
		\draw
		(0,0) 		node[op amp,yscale=1](opamp){}

		(opamp.-) 	to [short] 					++(0,1) 			coordinate(C)
					to [R, l=$1k\Omega$, *-] 		(C-|opamp.out)
					to 							(opamp.out)	
		(C) 		to [C, l_=$C$,]				++(-2,0) 			node[ground] {}

		(opamp.+)	to [short] 					++(0,-1) 			coordinate(R_b)
					to [R, l_=$1k\Omega$, *-] 		(R_b-|opamp.out)
					to 							(opamp.out)
		(R_b)		to [R, l=$1k\Omega$] 			++(-2,0) 			node[ground] {}

		(9,0) 		node[op amp,yscale=-1](opamp2){} 

		(opamp2.+) 	to [short] 					++(-1,0) 			coordinate(C2)
					to [C, l_=$27 \text{nF}$, *-] 		++(0,-2)
					to ++(0,0) 										node[ground]{}

		(C2) 		to [R, l_=$1k\Omega$] 				++(-2,0) 			coordinate(R2)
					to [short, *-] 				++(0,1) 			coordinate(C1)
					to [C, l=$55 \text{nF}$] 			(C1-|opamp2.out) 
					to [short, -*] 				(opamp2.out)

		(R2) 		to [R, l_=$1k\Omega$] 				++(-2,0) 			coordinate(koblingInn)

		(opamp2.-) 	to [short] 					++(0,-1) 			coordinate(fb)
					to [short] 					(fb-|opamp2.out) 
					to [short] 					(opamp2.out)
					to [short, -o] 				++(1,0) 			node[right] {$v_2$}

		(opamp.out) to [short, -o]				(opamp.out-|koblingInn) node[below]{$v_1$}
					to 							(koblingInn)

		;
	\end{circuitikz}
	\caption{Komplett fungerende krets med alle komponentverdier.}
	\label{circ:ferdig}
\end{figure}

Den målte frekvensen til sinusen er $f=4.096kHz$ som er godt innenfor avviket på $10000$ppm. Kretsen hadde et avvik på $976$ppm. Harmonisk forvrengning fikk vi ikke til å måle, men antar den ikke er så stor.

\begin{figure}
	\centering
	\includegraphics[width=\textwidth]{graphs/sinusmaalingWhite.png}
	\caption{Måling av sinusgeneratoren. Oransje er firkantgeneratoren og blå er den rene sinusen.}
	\label{fig:maaling}
\end{figure}



\section{Konklusjon}
\label{sec:konklusjon}

Ut i fra spesifikasjonene som ble oppgitt var kretsen velfungerende. Frekvensen var nære, og sinusen ser ut som en sinus. For å få til en enda bedre sinus, vil det fungere å ha et enda høyere ordens filter. Den vil da fjerne mer av de uønskede frekvensene.


%Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
\phantomsection
\addcontentsline{toc}{section}{Referanser}
\begin{thebibliography}{99}

\bibitem{sallan-key}
	Wikipedia contributors. (2019, August 6). \textit{Sallen–Key topology}. In Wikipedia, The Free Encyclopedia. Retrieved 11:21, October 8, 2019, from \url{https://en.wikipedia.org/w/index.php?title=Sallen%E2%80%93Key_topology&oldid=909548354}

\bibitem{butterworth}
	Wikipedia contributors. (2019, September 27). \textit{Butterworth filter}. In Wikipedia, The Free Encyclopedia. Retrieved 10:22, October 8, 2019, from \url{https://en.wikipedia.org/w/index.php?title=Butterworth_filter&oldid=918135860}

\bibitem{notat}
	L. Lundheim. (23.10.2018). \textit{Teknisk Notat: Sinus-generator}. NTNU, Elsys-2018-LL-1.

\end{thebibliography}{}

\clearpage
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------



\end{document}
