%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}