Fix issue with old repo

main
Øyvind Skaaden 2021-04-25 18:18:10 +02:00
parent 3f129266f2
commit eb83ece462
83 changed files with 61238 additions and 2 deletions

278
.gitignore vendored Normal file
View File

@ -0,0 +1,278 @@
# ---> TeX
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
*.lzo
*.lzs
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
# *.ist
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Comment the next line if you want to keep your tikz graphics files
*.tikz
*-tikzDictionary
# listings
*.lol
# luatexja-ruby
*.ltjruby
# makeidx
*.idx
*.ilg
*.ind
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices and outlines
*.xyc
*.xyd
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# gummi
.*.swp
# KBibTeX
*~[0-9]*
# TeXnicCenter
*.tps
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
# Makeindex log files
*.lpz

BIN
D1/CSV/DataDesign1.zip Normal file

Binary file not shown.

8193
D1/CSV/MaxMeasure.csv Normal file

File diff suppressed because it is too large Load Diff

BIN
D1/CSV/MaxMeasure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

8193
D1/CSV/MinMeasure.csv Normal file

File diff suppressed because it is too large Load Diff

BIN
D1/CSV/MinMeasure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
D1/D1_ØyvindSkaaden.pdf Normal file

Binary file not shown.

360
D1/D1_ØyvindSkaaden.tex Normal file
View File

@ -0,0 +1,360 @@
%Dokumentinnstillinger:---------------------------------
%Ved å google flitting kan du finne ut hva de forskjellige tingene her betyr, og hvordan du kan gjøre eventuelle endringer.
\documentclass[11pt,norsk]{elsys-design}
%\documentclass[a4paper,11pt,norsk]{article}
% \usepackage[utf8]{inputenc}
% \usepackage{a4wide}
% \usepackage{lmodern}
% \usepackage[T1]{fontenc}
% \usepackage{babel}
% \setlength{\parindent}{0pt}
% \setlength{\parskip}{2ex}
% \usepackage{fixltx2e}
% \usepackage{amsmath}
% \usepackage[pdftex, pdfborderstyle={/S/U/W 0}]{hyperref}
% \usepackage{graphicx}
% \usepackage[font=small,labelfont=bf]{caption}
% \usepackage{tabularx}
% \usepackage{multirow}
% \usepackage[european, american voltages, american currents]{circuitikz}
\heading{Designnotat}
\title{Variabel nivåregulator (dempeledd)}
\author{Øyvind Skaaden}
\version{2.0}
\date{\today}
\begin{document}
\maketitle
%Automatisk generert innholdsfortegnelse:------------------
\toc
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
Vi vil ta for oss design av et system som vist i \figref{fig:problem}
\begin{figure}[h]
\centering
\includegraphics[width=0.8\textwidth]{bilder/Design1_Problem.png}
\caption{Blokkdiagram av systemet}
\label{fig:problem}
\end{figure}
Kretsen er et dempeledd med en variabel demping i et gitt område $-A_{min}$ til $ -A_{max} $ dB. Kretsen tar inn et signal $v_1$ og det kommer ut et dempet signal $v_2$. Mengde demping skal kunne styres med en dreibar kontroll.
Enkelt forklart betyr dette at vi skal kunne sende et hvilket som helst signal ($v_1$) og få samme signalet, men dempet (lavere amplitude) ut etter kretsen ($v_2$).
Det realiserte dempeleddet skal ikke avvike fra $A_{min}$ og $A_{max}$ med mer enn $0.1$ dB
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
Det vi ønsker å designe er en spenningsdeler som deler med en minimumsverdi og en maximumsverdi.
Løsningen er basert på krets \textbf{c)} i~\cite[Figur 3, s. 2)]{notat}.
Dette er en krets med to motstander og et potentiometer som sett i \figref{fig:utgangspunkt}.
Kretsen tar inn et inngangssignal $v_1$ og det dempede signalet ($v_2$) kommer ut på andre siden.
Utregningene tar utgangspunkt i at potentiometeret velges på forhånd.
Vi kan beskrive dempingen matematisk som i (\ref{eq:utgangspunkt}).
\begin{align}
v_2 = A \cdot v_1 \label{eq:utgangspunkt}
\end{align}
Et skjema for dempeleddet i \figref{fig:utgangspunkt}.
\begin{figure}[h]
\centering
%\includegraphics[height=4cm]{bilder/utgangspunkt.png}
\begin{circuitikz}[scale = 0.8] \draw
(0,6) to [short, *-] (2,6)
to [R, l_=$R_1$] (2,4)
to [potentiometer, l_=$R_P$, n=pot] (2,2)
to [R, l_=$R_1$] (2,0)
to (0,0) to [short, *-] (0,0)
(0,6) to [open, v_=$v_1$] (0,0)
(pot.wiper) to (4,3)
to [short, *-] (4,3)
(2,0) to [short, *-] ++(2,0)
to [short, *-] ++(0,0)
(4,3) to [open, v_=$v_2$] (4,0);
\end{circuitikz}
\caption{Skjema for dempeleddet.}
\label{fig:utgangspunkt}
\end{figure}
Ettersom vi skal gå fra en minimumsdemping til en maksimumsdemping, kan vi se på kretsen i tilfellene da potentiometeret er skrudd helt ned til minimumsmotstand og helt opp til maksimumsmotstand. Vi kan se de to tilfellene i \figref{circ:minPot} og \figref{circ:maxPot}.
\begin{figure}[h]
\centering
\begin{minipage}{0.45\textwidth}
\centering
\begin{circuitikz}[scale = 0.8] \draw
(0,6) to [short, *-] (2,6)
to [R, l_=$R_1$] (2,4)
to [R, l_=$R_P$] (2,2)
to [R, l_=$R_1$] (2,0)
to (0,0) to [short, *-] (0,0)
(0,6) to [open, v_=$v_1$] (0,0)
(2,0) to [short, *-] ++(2,0)
to [short, *-] ++(0,0)
(2,4) to [short, *-] ++(2,0) to [short, *-]
(4,4) to [open, v_=$v_{2}$] (4,0);
\end{circuitikz}
\caption{Krets når potentiometeret er på minimumsverdi.}
\label{circ:minPot}
\end{minipage}
\hfill
\begin{minipage}{0.45\textwidth}
\centering
\begin{circuitikz}[scale = 0.8] \draw
(0,6) to [short, *-] (2,6)
to [R, l_=$R_1$] (2,4)
to [R, l_=$R_P$] (2,2)
to [R, l_=$R_1$] (2,0)
to (0,0) to [short, *-] (0,0)
(0,6) to [open, v_=$v_1$] (0,0)
(2,0) to [short, *-] ++(2,0)
to [short, *-] ++(0,0)
(2,2) to [short, *-] ++(2,0) to [short, *-]
(4,2) to [open, v_=$v_{2}$] (4,0);
\end{circuitikz}
\caption{Krets når potentiometeret er på maksimumsverdi.}
\label{circ:maxPot}
\end{minipage}
\end{figure}
Her er $v_1$ inngangssignalet, $R_1$ og $R_2$ vanlige motstander, $ R_P $ er potentiometeret. $ v_{2 min} $ er $v_2$ ved minimumsdemping og $ v_{2 max} $ er $ v_2 $ ved maksimumsdemping.
Vi ser da at vi kan lage to likninger for å finne $R_1$ og $R_2$, gitt $v_1$, $R_P$ og ønsket $v_2$ i forhold til $v_1 $i begge tilfeller.
Vi bruker strømmen gjennom $R_1$, $R_P$ og $R_2$ for å koble forholdet mellom $v_2$ og $v_1$, $\tfrac{v_2}{v_1} = A $, til motstandene. Strømmen er gitt ved
\begin{align}
\frac{v_1}{R_1 + R_P + R_2} = i
\end{align}
Dette brukes i \figref{circ:minPot} og \figref{circ:maxPot} for å finne $R_1$ og $R_2$. Vi får formlene for minimumsdemping
\begin{align}
\frac{v_1}{R_1 + R_P + R_2} \cdot (R_P + R_2) &= A_{min} \cdot v_1 \\
\nonumber\\
R_P + R_2 &= A_{min} \cdot (R_1 + R_P + R_2) \label{eq:min}
\end{align}
og maksimumsdeming
\begin{align}
\frac{v_1}{R_1 + R_P + R_2} \cdot R_2 &= A_{min} \cdot v_1 \\
\nonumber\\
R_2 &= A_{min} \cdot (R_1 + R_P + R_2) \label{eq:max}
\end{align}
Kominerer vi (\ref{eq:min}) og (\ref{eq:max}) og finner skjæringspunkt, kan vi finne to likninger for $R_1$ og $R_2$, gitt ved verdien til potentiometeret, $R_P$ og ønsket minimum- og maksimumsdemping ($A_{min}$ og $A_{max}$).
\begin{align}
R_1 = \frac{-A_{min} \cdot R_P + R_P}{A_{min} - A_{max}}
\label{eq:r1}
\end{align}
\begin{align}
R_2 = \frac{A_{max} \cdot R_P}{A_{min} - A_{max}}
\label{eq:r2}
\end{align}
Vi har da to formler, (\ref{eq:r1}) og (\ref{eq:r2}), som sammen med gitt $R_P$ og ønsket område for demping $A_{min}$ og $A_{max}$
\section{Realisering og test}
\label{sec:realisering}
Vi skal ta for oss dempingen $A_{min} = -8\ \text{dB} $ til $A_{max} = -25\ \text{dB}$, med potentiometer $R_p = 10\text{k}\Omega$. Dette er i dB, så vi må konvertere det til et spenningsforhold.
Desibel til spenningsforhold er gitt ved
\begin{align}
A[\text{dB}] = 20\log A \label{eq:dBtoVolt}
\end{align}
Skriver vi om (\ref{eq:dBtoVolt}) får vi (\ref{eq:omdBtoVolt}).
\begin{align}
A = 10^{\frac{A[\text{dB}]}{20}} \label{eq:omdBtoVolt}
\end{align}
Regner ut $A_{min}$ og $A_{max}$ ved hjelp av (\ref{eq:omdBtoVolt}).
\begin{align*}
A_{min} &= 0.398 \\
A_{max} &= 0.056
\end{align*}
Setter dette inn i formlene (\ref{eq:r1}) og (\ref{eq:r2}) sammen med valgt $R_P = 10\text{k}\Omega$ og får
\begin{align*}
R_1 &= 17602.3\ \Omega \\
R_2 &= 1 637.4\ \Omega
\end{align*}
Siden dette ikke er standard motstandsverdier, kan vi legge flere motstander i serie. Valgte motstander er oppgitt i tabell \ref*{tab:resistancePre}
\clearpage
\begin{table}[h]
\centering
\begin{tabular}{|c|c|}
\hline\hline
$R_1$ & $R_2$ \\ \hline
\hline
$15k\Omega$ & $1.5k\Omega$ \\
$2.2k\Omega$ & $120\Omega$ \\
$330\Omega$ & $15\Omega$ \\
$47\Omega$ & $2.2\Omega$ \\
$22\Omega$ & \\
\hline\hline
$17599\Omega$ & $1637.2\Omega$ \\
\hline\hline
\end{tabular}
\caption{Verdier for motstander i serie, sum nederst}
\label{tab:resistancePre}
\end{table}
Etter testing av kretsen i \figref{fig:utgangspunkt} med motstandene som i serie beskrevet i Tabell \ref{tab:resistancePre}, med en amplitude på $1V$ og sinusfrekvens $f=1000$Hz, var ikke kravene oppfylt. Dempingen var mellom $-8.4$dB og $-24.7$dB.
Etter småjusteringer på motstandene, havnet dempingen på mellom $-8.05$dB og $-25,0$dB, som er innenfor kravene.
I tabell \ref{tab:resistancePost} er det oppgitt de motstandene som ble brukt i dempeleddet som var innenfor kravene.
\begin{table}[h]
\centering
\begin{tabular}{|c|c|}
\hline\hline
$R_1$ & $R_2$ \\ \hline
\hline
$150\cdot 10^2 \pm 1\% = 15\text{k}\Omega \pm 1\% $ & $150\cdot 10^1 \pm 1\% = 1.5\text{k}\Omega \pm 1\% $\\
$150\cdot 10^1 \pm 1\% = 1.5\text{k}\Omega \pm 1\% $ & $820\cdot 10^{-1} \pm 1\% = 82\Omega \pm 1\% $ \\
\hline\hline
$16.5\text{k}\Omega \pm 1\% $ & $1582\Omega \pm 1\% $ \\
\hline\hline
\end{tabular}
\caption{Verdier for motstander i serie, sum nederst.}
\label{tab:resistancePost}
\end{table}
I Figur \ref{circ:ferdigMedMotstand} er den skjemaet for den ferdige kretsen med motstande, og Figur \ref{pic:oppkobling} er den fysiske oppkoblingen av skjemaet.
\begin{figure}[h]
\centering
%\includegraphics[height=4cm]{bilder/utgangspunkt.png}
\begin{circuitikz}[scale = 0.8] \draw
(0,10) to [short, o-] (2,10)
to [R, l_=$15\text{k}\Omega$] (2,8)
to [R, l_=$1.5\text{k}\Omega$] (2,6)
to [potentiometer, l_=$10\text{k}\Omega$, n=pot] (2,4)
to [R, l_=$1.5\text{k}\Omega$] (2,2)
to [R, l_=$82\Omega$] (2,0)
to (0,0) to [short, *-] (0,0)
(0,10) to [open, v_=$v_1$] (0,0)
(pot.wiper) to [short, -*] (4,5)
(2,0) to [short, *-o] ++(2,0)
(4,5) to [open, v=$v_2$] (4,0);
\end{circuitikz}
\caption{Skjema for det ferdige dempeleddet med motstandsverdier.}
\label{circ:ferdigMedMotstand}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=\textwidth]{bilder/kobling.jpg}
\caption{Den fysiske oppkonlingen}
\label{pic:oppkobling}
\end{figure}
Målinger av testene kan sees i \figref{fig:pyMin} (min) og \figref{fig:pyMax} (max).
Alle inngangssignalene har en amplitude på $1$V. Den målte spenningsamplituden ved minimumsdemping er $A_{min} = 0.396$V. Den målte spenningsamplituden ved maksimumsdemping er $A_{max} = 0.056$V.
Bruker (\ref{eq:dBtoVolt}), og regner ut dempingen. $A$ i dette tilfellet er $A = \frac{A_\text{målt}}{A_\text{ref}} $.
\begin{align*}
A_{min}[\text{dB}] = -8.05\text{dB}\\
A_{max}[\text{dB}] = -25.0\text{dB}\\
\end{align*}
\begin{figure}[h]
\centering
\includegraphics[width=0.7\textwidth]{Graphs/MinMeasure.png}
\caption{Målinger av minimumsdemping}
\label{fig:pyMin}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=0.7\textwidth]{Graphs/MaxMeasure.png}
\caption{Målinger av maksimumsdemping}
\label{fig:pyMax}
\end{figure}
I vedlegg \ref{app:graphsOsc} er det lagt ved grafer fra oscilloscopet under testingen.
\clearpage
\section{Konklusjon}
\label{sec:konklusjon}
Som beskrevet i realisering og test er dempleleddet innenfor kravene på $0.1$dB. Målte min og max til å være $-8.05$dB og $-25.0$dB.
Motstandene $R_1$ og $R_2$ måtte justeres en del for at kravene skulle bli oppfylt. En feilkilde kan være potentiometeret som ble brukt. Det var lite data på toleransene som fulgte den.
De endelige verdiene er da som følger:
\begin{align*}
R_1 &= 16.5k\Omega \pm 1\% \\
R_P &= 10k\Omega \\
R_2 &= 1582\Omega \pm 1\%
\end{align*}
\section{Takk}
Takk til medstudent Ulrik Bredland for å ha samarbeidet og diskutert rundt dette designprosjektet.
Takker også til Forsterkerkomiteén på Samfundet for å kunne teste dempeleddet i en lydpraktisk situasjon.
%Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
\phantomsection
\addcontentsline{toc}{section}{Referanser}
\begin{thebibliography}{99}
\bibitem{notat}
Lars Lundheim,
\emph{Variabel nivåregulator},
Teknisk notat,
Elsys-2017-LL-1,
NTNU 2017.
\end{thebibliography}
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\clearpage
\section{Grafer fra testing - Oscilloscop}
\label{app:graphsOsc}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.85\textwidth]{bilder/MinMeasure.png}
\caption{Målinger av minimumsdemping, blå er inngangssignalet, og gul er dempet signal}
\label{fig:oscMin}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.7\textwidth]{bilder/MaxMeasure.png}
\caption{Målinger av maksimumsdemping, blå er inngangssignalet, og gul er dempet signal}
\label{fig:oscMax}
\end{figure}
\end{document}

BIN
D1/Graphs/DataDesign1.zip Normal file

Binary file not shown.

8193
D1/Graphs/MaxMeasure.csv Normal file

File diff suppressed because it is too large Load Diff

BIN
D1/Graphs/MaxMeasure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
D1/Graphs/MaxPic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

8193
D1/Graphs/MinMeasure.csv Normal file

File diff suppressed because it is too large Load Diff

BIN
D1/Graphs/MinMeasure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

BIN
D1/Graphs/MinPic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

37
D1/Graphs/graphs.py Normal file
View File

@ -0,0 +1,37 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 13 16:30:58 2019
@author: oyvind
"""
import csv
import matplotlib.pyplot as plt
header = []
data = []
filename = "MaxMeasure"
with open(filename + ".csv") as csvfile:
csvreader = csv.reader(csvfile)
header = next(csvreader)
for dataplot in csvreader:
values = [float(value) for value in dataplot]
data.append(values)
time = [p[0] for p in data]
ch1 = [p[1] for p in data]
ch2 = [p[2] for p in data]
plt.plot(time,ch1, time,ch2)
plt.xlabel("Tid (s)")
plt.ylabel("Spenning (V)")
plt.legend(["Dempet signal","Inngangssignal"])
plt.savefig(filename + ".png", dpi=200)
plt.show()

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

BIN
D1/bilder/MaxMeasure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

BIN
D1/bilder/MinMeasure.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
D1/bilder/kobling.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
D1/bilder/problem.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

BIN
D1/bilder/utgangspunkt.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

358
D1/designnotat.tex Normal file
View File

@ -0,0 +1,358 @@
%Dokumentinnstillinger:---------------------------------
%Ved å google flitting kan du finne ut hva de forskjellige tingene her betyr, og hvordan du kan gjøre eventuelle endringer.
\documentclass[a4paper,11pt,norsk]{article}
\usepackage[utf8]{inputenc}
\usepackage{a4wide}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{babel}
\setlength{\parindent}{0pt}
\setlength{\parskip}{2ex}
\usepackage{fixltx2e}
\usepackage{amsmath}
\usepackage[pdftex, pdfborderstyle={/S/U/W 0}]{hyperref}
\usepackage{graphicx}
\usepackage[font=small,labelfont=bf]{caption}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage[european, american voltages, american currents]{circuitikz}
\newcommand{\figref}[1]{Figur \ref{#1}}
\begin{document}
%Headingdel:---------------------------------------------
\begin{minipage}[c]{0.15\textwidth}
\includegraphics[width=2.0cm]{elsys_pos_staaende_ntnu}
\end{minipage}
\begin{minipage}[c]{0.85\textwidth}
\renewcommand{\arraystretch}{1.7}
\large
\begin{tabularx}{\textwidth}{|X|X|}
\hline
\multicolumn{2}{|l|}{} \\
\multicolumn{2}{|l|}{\huge \textbf{Designnotat}} \\
\multicolumn{2}{|l|}{} \\
\hline
\multicolumn{2}{|l|}{Tittel:
%Skriv inn tittel her:------------------------------------------
Variabel nivåregulator (dempeledd)
} \\
\hline
\multicolumn{2}{|l|}{Forfattere:
%Skriv inn forfattere her:--------------------------------------
Øyvind Skaaden
} \\
\hline
%Skriv inn versjon og dato her her:-----------------------------
Versjon: 1.0 & Dato: \today
\\
\hline
\end{tabularx}
\end{minipage}
\normalsize
%Automatisk generert innholdsfortegnelse:------------------
\setlength{\parskip}{0ex}
\renewcommand{\baselinestretch}{0.1}\normalsize
\tableofcontents
\renewcommand{\baselinestretch}{1.00}\normalsize
\setlength{\parskip}{2ex}
\rule{\textwidth}{1pt}
\clearpage
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
Vi vil ta for oss design av et system som vist i \figref{fig:problem}
\begin{figure}[h]
\centering
\includegraphics[width=0.8\textwidth]{bilder/problem.png}
\caption{Blokkdiagram av designproblem}
\label{fig:problem}
\end{figure}
Kretsen skal bli et dempeledd med en variabel demping i et gitt område $-A_{min}$ til $ -A_{max} $ dB. Mengde demping skal kunne styres med en dreibar kontroll.
Enkelt forklart betyr dette at vi skal kunne sende et hvilket som helst signal og få samme signalet, men dempet (lavere amplitude) ut etter kretsen.
Dempeleddet skal funksjonstestes med en signalgenerator meg sinussignal med frekvens $ f = 1000 \text{Hz} $. Vi kan også anta at lastmotstanden er meget stor. $ R_{last} \approx \infty $.
Det realiserte dempeleddet skal ikke avvike fra $A_{min}$ og $A_{max}$ med mer enn $0.1$ dB
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
Det vi ønsker å designe er en spenningsdeler som deler med en minimumsverdi og en maximumsverdi. Løsningen er basert på krets \textbf{c)} i~\cite[Figur 3, s. 2)]{notat}. Dette er en krets med to motstander og et potentiometer som sett i \figref{fig:utgangspunkt}. Kretsen tar utgangspunkt i at potentiometeret velges på forhånd.
Vi kan beskrive dempingen matematisk slik
$$ v_2 = A \cdot v_1 $$
Kretsen løsningen tar utgangspunk i
\begin{figure}[h]
\centering
%\includegraphics[height=4cm]{bilder/utgangspunkt.png}
\begin{circuitikz}[scale = 0.8] \draw
(0,6) to [short, *-] (2,6)
to [R, l_=$R_1$] (2,4)
to [potentiometer, l_=$R_P$, n=pot] (2,2)
to [R, l_=$R_1$] (2,0)
to (0,0) to [short, *-] (0,0)
(0,6) to [open, v_=$v_1$] (0,0)
(pot.wiper) to (4,3)
to [short, *-] (4,3)
(2,0) to [short, *-] ++(2,0)
to [short, *-] ++(0,0)
(4,3) to [open, v_=$v_2$] (4,0);
\end{circuitikz}
\caption{Kretsen løsningen tar utgangspunkt i}
\label{fig:utgangspunkt}
\end{figure}
Siden vi skal gå fra en minimumsdemping til en maksimumsdemping, kan vi se på kretsen i tilfellene da potentiometeret er skrudd helt ned til minimumsmotstand og helt opp til maksimumsmotstand. Vi kan se de to tilfellene i \figref{circ:minPot} og \figref{circ:maxPot}.
\begin{figure}[h]
\centering
\begin{minipage}{0.45\textwidth}
\centering
\begin{circuitikz}[scale = 0.8] \draw
(0,6) to [short, *-] (2,6)
to [R, l_=$R_1$] (2,4)
to [R, l_=$R_P$] (2,2)
to [R, l_=$R_1$] (2,0)
to (0,0) to [short, *-] (0,0)
(0,6) to [open, v_=$v_1$] (0,0)
(2,0) to [short, *-] ++(2,0)
to [short, *-] ++(0,0)
(2,4) to [short, *-] ++(2,0) to [short, *-]
(4,4) to [open, v_=$v_{2 min}$] (4,0);
\end{circuitikz}
\caption{Krets når potentiometeret er på minimumsverdi}
\label{circ:minPot}
\end{minipage}\hfill
\begin{minipage}{0.45\textwidth}
\centering
\begin{circuitikz}[scale = 0.8] \draw
(0,6) to [short, *-] (2,6)
to [R, l_=$R_1$] (2,4)
to [R, l_=$R_P$] (2,2)
to [R, l_=$R_1$] (2,0)
to (0,0) to [short, *-] (0,0)
(0,6) to [open, v_=$v_1$] (0,0)
(2,0) to [short, *-] ++(2,0)
to [short, *-] ++(0,0)
(2,2) to [short, *-] ++(2,0) to [short, *-]
(4,2) to [open, v_=$v_{2 max}$] (4,0);
\end{circuitikz}
\caption{Krets når potentiometeret er på maksimumsverdi}
\label{circ:maxPot}
\end{minipage}
\end{figure}
Her er $v_1$ inngangssignalet, $R_1$ og $R_2$ vanlige motstander, $ R_P $ er potentiometeret. $ v_{2 min} $ er $v_2$ ved minimumsdemping og $ v_{2 max} $ er $ v_2 $ ved maksimumsdemping.
Vi ser da at vi kan lage to likninger for å finne $R_1$ og $R_2$, gitt $v_1$, $R_P$ og ønsket $v_2$ i forhold til $v_1 $i begge tilfeller.
Vi bruker strømmen gjennom $R_1$, $R_P$ og $R_2$ for å koble forholdet mellom $v_2$ og $v_1$, $\tfrac{v_2}{v_1} = A $, til motstandene. Strømmen er gitt ved
\begin{align*}
\frac{v_1}{R_1 + R_P + R_2} = i
\end{align*}
Dette brukes i \figref{circ:minPot} og \figref{circ:maxPot} for å finne $R_1$ og $R_2$. Vi får formlene for minimumsdemping
\begin{align*}
\frac{v_1}{R_1 + R_P + R_2} \cdot (R_P + R_2) = A_{min} \cdot v_1
\end{align*}
\begin{align}
R_P + R_2 = A_{min} \cdot (R_1 + R_P + R_2)
\label{eq:min}
\end{align}
og maksimumsdeming
\begin{align*}
\frac{v_1}{R_1 + R_P + R_2} \cdot R_2 = A_{min} \cdot v_1
\end{align*}
\begin{align}
R_2 = A_{min} \cdot (R_1 + R_P + R_2)
\label{eq:max}
\end{align}
Kominerer vi (\ref{eq:min}) og (\ref{eq:max}) og finner kryssningspunkt, kan vi finne to likninger for $R_1$ og $R_2$.
\begin{align}
R_1 = \frac{-A_{min} \cdot R_P + R_P}{A_{min} - A_{max}}
\label{eq:r1}
\end{align}
\begin{align}
R_2 = \frac{A_{max} \cdot R_P}{A_{min} - A_{max}}
\label{eq:r2}
\end{align}
Vi har da to formler, (\ref{eq:r1}) og (\ref{eq:r2}), som sammen med gitt $R_P$ og ønsket område for demping $A_{min}$ og $A_{max}$
\section{Realisering og test}
\label{sec:realisering}
Alle fikk utdelt ulikt område for demping og her vil vi ta for oss demingen $A_{min} = -8\ \text{dB} $ til $A_{max} = -25\ \text{dB}$. Dette er i dB, så vi må konvertere det til et spenningsforhold.
Desibel for spenningsforhold er gitt ved
$$ A[\text{dB}] = 20\log A $$
Skriver vi denne om får vi
$$ A = 10^{\frac{A[\text{dB}]}{20}} $$
Regner da ut
\begin{align*}
A_{min} &= 0.398 \\
A_{max} &= 0.056
\end{align*}
Setter dette inn i formlene (\ref{eq:r1}) og (\ref{eq:r2}) sammen med valgt $R_P = 10k\Omega$ og får
\begin{align*}
R_1 &= 17602.3\ \Omega \\
R_2 &= 1 637.4\ \Omega
\end{align*}
Siden dette ikke er standard motstandsverdier, kan vi legge flere motstander i serie. Valgte motstander er oppgitt i tabell \ref*{tab:resistancePre}
\clearpage
\begin{table}[h]
\centering
\begin{tabular}{|c|c|}
\hline\hline
$R_1$ & $R_2$ \\ \hline
\hline
$15k\Omega$ & $1.5k\Omega$ \\
$2.2k\Omega$ & $120\Omega$ \\
$330\Omega$ & $15\Omega$ \\
$47\Omega$ & $2.2\Omega$ \\
$22\Omega$ & \\
\hline\hline
$17599\Omega$ & $1637.2\Omega$ \\
\hline\hline
\end{tabular}
\caption{Verdier for motstander i serie, sum nederst}
\label{tab:resistancePre}
\end{table}
Etter testing av denne kretsen (som sett i ) med amplitude $1V$ og sinusfrekvens $f=1000$Hz, var ikke kravene oppfylt. Dempingen var mellom $-8.4$dB og $-24.7$dB.
\begin{figure}[h]
\centering
\includegraphics[width=\textwidth]{bilder/kobling.jpg}
\caption{Den fysiske oppkonlingen}
\label{pic:oppkobling}
\end{figure}
Etter småjusteringer på motstandene, havnet dempingen på mellom $-8.05$dB og $-25,0$dB, som er innenfor kravene.
I tabell \ref{tab:resistancePost} er det oppgitt de motstandene som ble brukt i dempeleddet som var innen for kravene.
\begin{table}[h]
\centering
\begin{tabular}{|c|c|}
\hline\hline
$R_1$ & $R_2$ \\ \hline
\hline
$150\cdot 10^2 \pm 1\% = 15k\Omega \pm 1\% $ & $150\cdot 10^1 \pm 1\% = 1.5k\Omega \pm 1\% $\\
$150\cdot 10^1 \pm 1\% = 1.5k\Omega \pm 1\% $ & $820\cdot 10^{-1} \pm 1\% = 82\Omega \pm 1\% $ \\
\hline\hline
$16.5k\Omega \pm 1\% $ & $1582\Omega \pm 1\% $ \\
\hline\hline
\end{tabular}
\caption{Verdier for motstander i serie, sum nederst}
\label{tab:resistancePost}
\end{table}
\clearpage
De endelige verdiene er da som følger:
\begin{align*}
R_1 &= 16.5k\Omega \pm 1\% \\
R_P &= 10k\Omega \\
R_2 &= 1582\Omega \pm 1\%
\end{align*}
I vedlegg \ref{app:graphsPy} og \ref{app:graphsOsc} er det lagt ved grafer fra testingen, ene settet er generert med Python og det andre er rett fra oscilloscopet.
\section{Konklusjon}
\label{sec:konklusjon}
Som beskrevet i realisering og test er dempleleddet innenfor kravene på $0.1$dB. Målte min og max er $-8.05$dB og $-25,0$dB.
Motstandene $R_1$ og $R_2$ måtte justeres en del for at kravene skulle bli oppfylt. En feilkilde kan være potentiometeret som ble brukt. Det var lite data på toleransene som fulgte den.
\section{Takk}
Takk til medstudent Ulrik Bredland for å ha samarbeidet og diskutert rundt dette designprosjektet.
Takker også til Forsterkerkomiteén på Samfundet for å kunne teste dempeleddet i en lydpraktisk situasjon.
%Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
\phantomsection
\addcontentsline{toc}{section}{Referanser}
\begin{thebibliography}{99}
\bibitem{notat}
Lars Lundheim,
\emph{Variabel nivåregulator},
Teknisk notat,
Elsys-2017-LL-1,
NTNU 2017.
\end{thebibliography}
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\clearpage
\section{Grafer fra testing - Python}
\label{app:graphsPy}
\begin{figure}[h]
\centering
\includegraphics[width=0.7\textwidth]{Graphs/MinMeasure.png}
\caption{Målinger av minimumsdemping}
\label{fig:pyMin}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=0.7\textwidth]{Graphs/MaxMeasure.png}
\caption{Målinger av maksimumsdemping}
\label{fig:pyMax}
\end{figure}
\clearpage
\section{Grafer fra testing - Oscilloscop}
\label{app:graphsOsc}
\begin{figure}[h]
\centering
\includegraphics[width=\textwidth]{bilder/MinMeasure.png}
\caption{Målinger av minimumsdemping, blå er inngangssignalet, og gul er dempet signal}
\label{fig:oscMin}
\end{figure}
\begin{figure}[h]
\centering
\includegraphics[width=0.7\textwidth]{bilder/MaxMeasure.png}
\caption{Målinger av maksimumsdemping, blå er inngangssignalet, og gul er dempet signal}
\label{fig:oscMax}
\end{figure}
\end{document}

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,338 @@
%Dokumentinnstillinger:---------------------------------
%Ved å google flitting kan du finne ut hva de forskjellige tingene her betyr, og hvordan du kan gjøre eventuelle endringer.
\documentclass[11pt,norsk]{article}
\usepackage[utf8]{inputenc}
\usepackage{a4wide}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{babel}
\setlength{\parindent}{0pt}
\setlength{\parskip}{2ex}
\usepackage{amsmath}
\usepackage[pdftex, pdfborderstyle={/S/U/W 0}]{hyperref}
\usepackage{graphicx}
\usepackage[font=small,labelfont=bf]{caption}
\usepackage{tabularx}
\usepackage{multirow}
\input{clangTex}
% Electronic drawing
\usepackage[european, american currents, american voltages,siunitx]{circuitikz}
\newcommand{\figref}[1]{Figur \ref{#1}}
\begin{document}
%Headingdel:---------------------------------------------
\begin{minipage}[c]{0.15\textwidth}
\includegraphics[width=2.0cm]{elsys_pos_staaende_ntnu}
\end{minipage}
\begin{minipage}[c]{0.85\textwidth}
\renewcommand{\arraystretch}{1.7}
\large
\begin{tabularx}{\textwidth}{|X|X|}
\hline
\multicolumn{2}{|l|}{} \\
\multicolumn{2}{|l|}{\huge \textbf{Designnotat}} \\
\multicolumn{2}{|l|}{} \\
\hline
\multicolumn{2}{|l|}{Tittel:
%Skriv inn tittel her:------------------------------------------
Turtallsindikator
} \\
\hline
\multicolumn{2}{|l|}{Forfattere:
%Skriv inn forfattere her:--------------------------------------
Øyvind Skaaden
} \\
\hline
%Skriv inn versjon og dato her her:-----------------------------
Versjon: 2.0 & Dato: \today
\\
\hline
\end{tabularx}
\end{minipage}
\normalsize
%Automatisk generert innholdsfortegnelse:------------------
\setlength{\parskip}{0ex}
\renewcommand{\baselinestretch}{0.1}\normalsize
\tableofcontents
\renewcommand{\baselinestretch}{1.00}\normalsize
\setlength{\parskip}{2ex}
\rule{\textwidth}{1pt}
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
Overvåking og styring av fabrikker og prosessanlegg er et viktig anvendelsesområde for elektronisksystemdesign.
I slike installasjoner finnes ofte motorer og andre roterende innretninger, og det kan være viktig å sørge for at disse operere med riktig turtall.
I dette notatet skal det beskrives en løsning på en turtallsindikator som gir et varsel når turtallet for en innretning er for lavt.
Vi skal ta for oss design av systemet som vist i \figref{fig:blokkskjema}.
\begin{figure}
\centering
\includegraphics[width=0.7\textwidth]{pics/blokk.png}
\caption{Blokkskjema for kretsen.}
\label{fig:blokkskjema}
\end{figure}
Kretsen skal
\begin{itemize}
\item Ta inn et pulstog med driftssyklus $50\%$$v_1$
\item Ha en lysdiode på utgangen, som begynner å lyse dersom omdreiningshastigheten er lavere enn en oppgitt $\omega$
\end{itemize}
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
Det er to hovedmåter å designe en krets som skal måle turtallet.
Den ene baserer seg på en analog krets med elementer som bruker en viss tid på å lade seg opp.
Den andre baserer seg på en digital krets, f.eks. en mikrokontroller, som måler omdreiningshastigheten.
Dette notatet vil ta for seg den analoge måten å gjøre det på, men det blir lagt ved en smakebit på den digitale måten i vedlegg \ref{app:digital}.
Vi ønsker en krets som bruker litt tid på å lade opp et element.
Vi kan da ta utgangspunkt i en kondensator.
Med den kan vi styre hvor lang oppladningstid og utladningstid vi ønsker.
Dersom vi ønsker at kondensatoren skal lade seg raskt opp, kan vi ha en diode, pekende inn mot kondensatoren, i parallell med motstanden i en RC-krets.
Dersom vi ønsker rask utladning, kan vi snu dioden.
Se skjema for kretsen i \figref{circ:utgangspunkt}.
\begin{figure}[ht]
\centering
\begin{circuitikz}
\draw
(0,3) to [open, v=$v_1$] (0,0)
(0,3) to [short,*-] ++(1,0)
to [R, l=$R_1$, *-*] ++(3,0)
to [short,-*] ++(4,0)
++(-3,0) to [C, l=$C_1$, *-*] ++(0,-3)
++(3,0) to [short, *-*] (0,0)
(8,3) to [open, v=$v_2$] (8,0)
(4,3) -- ++(0,1.5)
to [D] ++(-3,0) -- ++(0,-1.5);
\end{circuitikz}
\caption{Foreslått krets for omdreiningsteller}
\label{circ:utgangspunkt}
\end{figure}
Denne kretsen kan ta inn et pulstog med variabel driftssyklus inn på $v_1 $, og det kommer ut et nærmest ``sagtann''-signal ut på $v_2 $, se \figref{graph:pulsetrain}.
Det er fordi kondensatoren lades normalt opp med tidskonstanten tau, $\tau = R\cdot C$, men lades spontant ut ned til ca $0.7$V, som er terskelspenning for dioden. Kondensatoren vil deretter lades normalt ut igen.
Dersom vi deretter kombinerer dette med en transistor, slik at vi kan styre større strømmer vi kretsen se ut som i \figref{circ:analogKrets}.
\begin{figure}
\centering
\begin{circuitikz}
\draw
(0,3) to [open, v=$v_1$] (0,0)
(0,3) to [short,o-] ++(1,0)
to [R, l=$R_1$, *-*] ++(3,0)
to [short,-o] ++(4,0)
++(-3,0) to [C, l=$C_1$, *-*] ++(0,-3)
++(3,0) to [short, o-o] (0,0)
(8,3) to [open, v=$v_2$] (8,0)
(4,3) -- ++(0,1.5)
to [D] ++(-3,0) -- ++(0,-1.5);
\draw
(9,3) node[nmos](nmosA){}
(9,8) node[right]{$V_S$} to [short, o-] ++(0,-0.5)
to [R, l=$R_2$] ++(0,-2)
to [led, *-*] (nmosA.D)
(nmosA.S) to [short, -*] (9,0)
node[ground](){}
(9,0) to [short, -o] (8,0)
(nmosA.G) to [short, o-o] (8,3);
\draw
(9,5.5) node[right] {$D+$}
(9,3.75) node[right] {$D-$};
\end{circuitikz}
\caption{Skjema for omdreinigsmåler med transistor}
\label{circ:analogKrets}
\end{figure}
Dersom omdreiningshastigheten er større enn grenseverdien vil ikke spenningen over $C_1 $, $v_2 $, bli tilstrekkelig for å ``åpne'' transistoren. Når frekvensen er lavere enn grensen, vil kondensatoren kunne lade seg opp til terskelspenningen, $V_T$, til transistoren, og transistoren vil ``åpne'' seg.
Motstanden $R_2 $ har som oppgave å begrense strømmen til led-en. Den trenger ikke å være der om det trengs en større strøm ut fra transistoren.
For å regne ut verdier til $R_1 $ og $C_1 $ må vi først finne ut hvilken tidskonstant vi trenger.
Vi vet at vi trenger en spenning på $v_2$ lik terskelspenningen til transistoren, $v_2 = V_T$, for at transistoren skal åpne seg.
Vi kan bruke dette til å finne en tau, $\tau$, gitt en frekvens, med periode $T$.
Vi kan anta at pulstoget har holdt på en stund, slik at systemet får balansert seg. Dersom vi da tar utgangspunkt i at vi har en diode med en diodespenning $V_D$. Startspenningen for stigningen av spenningen vil være sluttspenningen til utladningen over dioden, sett i \figref{graph:pulsetrain}.
Etter hver høye del av pulstoget vil spenningen $v_2$ raskt bevege seg mot $V_D$.
\begin{figure}
\centering
\includegraphics[width=\textwidth]{Grafer/EksempelPy.png}
\caption{Eksempel på hvordan spenniger endrer seg i kretsen i \figref{circ:analogKrets}.}
\label{graph:pulsetrain}
\end{figure}
Spenningen $v_2 $ når pulstoget er lavt, og endrer til høy, vil ha en likning som i (\ref{eq:spenningDiode}).
\begin{align}
v_D = V_D\cdot e^{-\frac{T}{2\tau}}
\label{eq:spenningDiode}
\end{align}
Siden vi vet at $v_1 $ varierer fra $v_D$ til en spenning $V_0 $ i et pulstog med periode $T$, med driftssyklus på 50\%, er pulsen $V_0 $ i $\tfrac{1}{2}T$. Vi vet da at spenningen $v_2 $ må nå $V_T$ etter $\tfrac{1}{2}T$ for at transistoren skal åpne seg.
Dersom vi setter dette sammen med hvordan spenningen utvikler seg gjennom perioden av pulstoget som er høyt vil vi få som i (\ref{eq:tauStart}).
Vi bruker formelen for spenning over en kondensator og løser for tidskonstanten $\tau$.
\begin{align}
v_2 = V_T &= V_0\cdot \left(v_D - V_0\right) e^{-\frac{T}{2\tau}} \label{eq:tauStart}\\
V_T &= V_0\cdot \left(V_D\cdot e^{-\frac{T}{2\tau}} - V_0\right) e^{-\frac{T}{2\tau}} \\
0 &= V_D\cdot e^{-\frac{T}{\tau}} - V_0 \cdot e^{-\frac{T}{2\tau}} + (V_0 - V_T) \\
e^{-\frac{T}{2\tau}} &= \frac{V_0 \pm \sqrt{(V_0)^2 - 4 \cdot V_D \cdot (V_0 - V_T)}}{2 \cdot V_D}\\
\tau &= -\frac{T}{2\cdot \ln\left(\frac{V_0 \pm \sqrt{(V_0)^2 - 4 \cdot V_D \cdot (V_0 - V_T)}}{2 \cdot V_D}\right)}
\label{eq:tau}
\end{align}
\textbf{Merk: }\textit{Det må velges den verdien for $\tau$ som gir mening. Vi ser også at $V_0 > V_T$ for at likningen skal gi mening.}
Når vi har funnet en tidskonstant ved (\ref{eq:tau}), velger vi bare en tilstrekkelig liten kondensator for $C_1$ og bruker likning (\ref{eq:RC}) for tidskonstanten $\tau$
\begin{align}
\tau = R_1 \cdot C_1
\label{eq:RC}
\end{align}
for å finne verdien for motstanden $R_1$.
\section{Realisering og test}
\label{sec:realisering}
Grenseverdien for omdreiningshastigheten er gitt ved $f=40000\text{rpm} \approx 666.67$Hz. Vi finner periodetiden ved (\ref{eq:period}).
\begin{align}
T = \frac{1}{f}\Rightarrow T = 1.5\ \text{ms} \label{eq:period}
\end{align}
Pulstoget har en spenning $V_0 = 5$V. Det ble brukt en BS170 transistor. Den har en terskelspenning $V_T \approx 2$V, og dioden som ble brukt har en diodespenning på $V_D \approx 0.7$V.
Vi finner $\tau$ ved hjelp av (\ref{eq:tau}).
\begin{align}
\tau &= -\frac{1.5\ \text{ms}}{2\cdot \ln\left(\frac{5\text{V} \pm \sqrt{(5\text{V})^2 - 4 \cdot 0.7\text{V} \cdot (3\text{V})}}{2 \cdot 0.7\text{V}}\right)} \label{eq:calculateTau}\\
\tau &= \begin{cases}
-0.40128946\ \text{ms}\\
1.81296116\ \text{ms}
\end{cases}
\intertext{Velger den verdien som gir mening}
\tau &= 1.81296116\ \text{ms}
\end{align}
For å koble opp kretsen i \figref{circ:analogKrets} trenger vi kun å regne ut verdiene for $R_1 $ og $C_1 $.
Velger motstand $R_1 = 1\text{M}\Omega$. Bruker (\ref{eq:tau}) for å finne $C_1 \approx 1.8$nF.
Simulering av spenningene med disse forhåndsvalgte verdiene kan sees i \figref{graph:pulsetrainReal}. Kode for simuleringen kan sees i Vedlegg \ref{app:codeSim}.
\begin{figure}
\centering
\includegraphics[width=\textwidth]{Grafer/SimuleringPy.png}
\caption{Simulering av kretsen.}
\label{graph:pulsetrainReal}
\end{figure}
Etter testing og observasjoner ser vi at spenningen $v_2$ har en topp på rudnt $2$V. Men det er ikke nok til å få dioden til å lyse. Dersom vi ønsker en mer lyssterk diode, kan vi bare endre terskelspenningen i (\ref{eq:calculateTau}) til noe høyere. Finner ut at for at lysdioden vi bruker skal ``lyse'', må vi ha en kondensator på $1$nF.
Den fungerende kretsen har følgende skjema, se \figref{circ:finalAnalog}. Ferdig oppkoblet krets kan sees i \figref{pic:oppkobling}
Dioden vil da begynne å lyse ved terskelfrekvensen og bli sterkere jo lavere frekvensen på pulstoget blir, se \figref{graph:pulsetrainRealLower}, og forsvinner ved frekvenser høyere enn terskelfrekvensen, se \figref{graph:pulsetrainRealHigher}.
\begin{figure}
\centering
\begin{circuitikz}
\draw
(0,3) to [open, v=$v_1$] (0,0)
(0,3) to [short,o-] ++(1,0)
to [R, l=1<\mega\ohm>, *-*] ++(3,0)
to [short,-o] ++(4,0)
++(-3,0) to [C, l=1<\nano\farad>, *-*] ++(0,-3)
++(3,0) to [short, o-o] (0,0)
(4,3) -- ++(0,1.5)
to [D] ++(-3,0) -- ++(0,-1.5);
\draw
(9,3) node[nmos](nmosA){}
(9,8) node[right]{5V} to [short, o-] ++(0,-0.5)
to [R, l=220<\ohm>] ++(0,-2)
to [led] (nmosA.D)
(nmosA.S) to [short, -*] (9,0)
node[ground](){}
(9,0) to [short, -o] (8,0)
(nmosA.G) to [short, o-o] (8,3);
\end{circuitikz}
\caption{Skjema for omdreinigsmåler med transistor, med verdier}
\label{circ:finalAnalog}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=\textwidth]{pics/krets2.JPG}
\caption{Fysisk oppkobling av krets}
\label{pic:oppkobling}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=\textwidth]{Grafer/SimuleringPyLower.png}
\caption{Simulering av kretsen ved frekvens lavere enn terskelfrekvens.}
\label{graph:pulsetrainRealLower}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=\textwidth]{Grafer/SimuleringPyHigher.png}
\caption{Simulering av kretsen ved frekvens høyere enn terskelfrekvens.}
\label{graph:pulsetrainRealHigher}
\end{figure}
\clearpage
\section{Konklusjon}
\label{sec:konklusjon}
Kretsen fungerte innenfor kravene som ble gitt. Dioden begynner å lyse ved gitt omdreiningshastighet på 40000 rpm.
\section{Takk}
Takk til Ulrik Bredland og Magnus Oddstøl for bra samarbeid. Stor takk til lærere på elsys som har tatt seg tiden til å gi en tilbakemelding på dette designnotatet.
% %Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
% \phantomsection
% \addcontentsline{toc}{section}{Referanser}
\clearpage
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\section{Digital måte å måle omdreiningshastighet}
\label{app:digital}
Det er mulig å lage en krets med arduino for å måle frekvensen til et pulstog.
Ta for dere koden under. Pulstoget leses på pinne 8 på arduinoen, og en transistor kan styres på pinnen som heter ``out'' i koden. Frekvensen velges ved å endre variabelen ``rpm''.
\lstinputlisting[style=CStyle]{MeasureFreq/MeasureFreq.ino}
\clearpage
\section{Kode for simulering av didoe-kondensator-krets}
\label{app:codeSim}
\lstinputlisting[style=PyStyle]{Grafer/CapDiode.py}
\end{document}

BIN
D2/D2_ØyvindSkaaden.pdf Normal file

Binary file not shown.

352
D2/D2_ØyvindSkaaden.tex Normal file
View File

@ -0,0 +1,352 @@
%Dokumentinnstillinger:---------------------------------
%Ved å google flitting kan du finne ut hva de forskjellige tingene her betyr, og hvordan du kan gjøre eventuelle endringer.
\documentclass[11pt,norsk]{elsys-design}
% \usepackage[utf8]{inputenc}
% \usepackage{a4wide}
% \usepackage{lmodern}
% \usepackage[T1]{fontenc}
% \usepackage{babel}
% \setlength{\parindent}{0pt}
% \setlength{\parskip}{2ex}
% \usepackage{amsmath}
% \usepackage[pdftex, pdfborderstyle={/S/U/W 0}]{hyperref}
% \usepackage{graphicx}
% \usepackage[font=small,labelfont=bf]{caption}
% \usepackage{tabularx}
% \usepackage{multirow}
\input{clangTex}
% %Headingdel:---------------------------------------------
% \begin{minipage}[c]{0.15\textwidth}
% \includegraphics[width=2.0cm]{elsys_pos_staaende_ntnu}
% \end{minipage}
% \begin{minipage}[c]{0.85\textwidth}
% \renewcommand{\arraystretch}{1.7}
% \large
% \begin{tabularx}{\textwidth}{|X|X|}
% \hline
% \multicolumn{2}{|l|}{} \\
% \multicolumn{2}{|l|}{\huge \textbf{Designnotat}} \\
% \multicolumn{2}{|l|}{} \\
% \hline
% \multicolumn{2}{|l|}{Tittel:
% %Skriv inn tittel her:------------------------------------------
% Turtallsindikator
% } \\
% \hline
% \multicolumn{2}{|l|}{Forfattere:
% %Skriv inn forfattere her:--------------------------------------
% Øyvind Skaaden
% } \\
% \hline
% %Skriv inn versjon og dato her her:-----------------------------
% Versjon: 2.0 & Dato: \today
% \\
% \hline
% \end{tabularx}
% \end{minipage}
% \normalsize
% %Automatisk generert innholdsfortegnelse:------------------
% \setlength{\parskip}{0ex}
% \renewcommand{\baselinestretch}{0.1}\normalsize
% \tableofcontents
% \renewcommand{\baselinestretch}{1.00}\normalsize
% \setlength{\parskip}{2ex}
% \rule{\textwidth}{1pt}
\heading{Designnotat}
\title{Turtallsindikator}
\author{Øyvind Skaaden}
\version{2.0}
\date{\today}
\begin{document}
\maketitle
%Automatisk generert innholdsfortegnelse:------------------
\toc
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
Overvåking og styring av fabrikker og prosessanlegg er et viktig anvendelsesområde for elektronisksystemdesign.
I slike installasjoner finnes ofte motorer og andre roterende innretninger, og det kan være viktig å sørge for at disse operere med riktig turtall.
I dette notatet skal det beskrives en løsning på en turtallsindikator som gir et varsel når turtallet for en innretning er for lavt.
Vi skal ta for oss design av systemet som vist i \figref{fig:blokkskjema}.
\begin{figure}
\centering
\includegraphics[width=0.7\textwidth]{pics/blokk.png}
\caption{Blokkskjema for kretsen.}
\label{fig:blokkskjema}
\end{figure}
Kretsen skal
\begin{itemize}
\item Ta inn et pulstog med driftssyklus $50\%$$v_1$
\item Ha en lysdiode på utgangen, som begynner å lyse dersom omdreiningshastigheten er lavere enn en oppgitt $\omega$
\end{itemize}
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
Det er to hovedmåter å designe en krets som skal måle turtallet.
Den ene baserer seg på en analog krets med elementer som bruker en viss tid på å lade seg opp.
Den andre baserer seg på en digital krets, f.eks. en mikrokontroller, som måler omdreiningshastigheten.
Dette notatet vil ta for seg den analoge måten å gjøre det på, men det blir lagt ved en smakebit på den digitale måten i vedlegg \ref{app:digital}.
Vi ønsker en krets som bruker litt tid på å lade opp et element.
Vi kan da ta utgangspunkt i en kondensator.
Med den kan vi styre hvor lang oppladningstid og utladningstid vi ønsker.
Dersom vi ønsker at kondensatoren skal lade seg raskt opp, kan vi ha en diode, pekende inn mot kondensatoren, i parallell med motstanden i en RC-krets.
Dersom vi ønsker rask utladning, kan vi snu dioden.
Se skjema for kretsen i \figref{circ:utgangspunkt}.
\begin{figure}[ht]
\centering
\begin{circuitikz}
\draw
(0,3) to [open, v=$v_1$] (0,0)
(0,3) to [short,*-] ++(1,0)
to [R, l=$R_1$, *-*] ++(3,0)
to [short,-*] ++(4,0)
++(-3,0) to [C, l=$C_1$, *-*] ++(0,-3)
++(3,0) to [short, *-*] (0,0)
(8,3) to [open, v=$v_2$] (8,0)
(4,3) -- ++(0,1.5)
to [D] ++(-3,0) -- ++(0,-1.5);
\end{circuitikz}
\caption{Foreslått krets for omdreiningsteller}
\label{circ:utgangspunkt}
\end{figure}
Denne kretsen kan ta inn et pulstog med variabel driftssyklus inn på $v_1 $, og det kommer ut et nærmest ``sagtann''-signal ut på $v_2 $, se \figref{graph:pulsetrain}.
Det er fordi kondensatoren lades normalt opp med tidskonstanten tau, $\tau = R\cdot C$, men lades spontant ut ned til ca $0.7$V, som er terskelspenning for dioden. Kondensatoren vil deretter lades normalt ut igen.
Dersom vi deretter kombinerer dette med en transistor, slik at vi kan styre større strømmer vi kretsen se ut som i \figref{circ:analogKrets}.
\begin{figure}
\centering
\begin{circuitikz}
\draw
(0,3) to [open, v=$v_1$] (0,0)
(0,3) to [short,o-] ++(1,0)
to [R, l=$R_1$, *-*] ++(3,0)
to [short,-o] ++(4,0)
++(-3,0) to [C, l=$C_1$, *-*] ++(0,-3)
++(3,0) to [short, o-o] (0,0)
(8,3) to [open, v=$v_2$] (8,0)
(4,3) -- ++(0,1.5)
to [D] ++(-3,0) -- ++(0,-1.5);
\draw
(9,3) node[nmos](nmosA){}
(9,8) node[right]{$V_S$} to [short, o-] ++(0,-0.5)
to [R, l=$R_2$] ++(0,-2)
to [led, *-*] (nmosA.D)
(nmosA.S) to [short, -*] (9,0)
node[ground](){}
(9,0) to [short, -o] (8,0)
(nmosA.G) to [short, o-o] (8,3);
\draw
(9,5.5) node[right] {$D+$}
(9,3.75) node[right] {$D-$};
\end{circuitikz}
\caption{Skjema for omdreinigsmåler med transistor}
\label{circ:analogKrets}
\end{figure}
Dersom omdreiningshastigheten er større enn grenseverdien vil ikke spenningen over $C_1 $, $v_2 $, bli tilstrekkelig for å ``åpne'' transistoren. Når frekvensen er lavere enn grensen, vil kondensatoren kunne lade seg opp til terskelspenningen, $V_T$, til transistoren, og transistoren vil ``åpne'' seg.
Motstanden $R_2 $ har som oppgave å begrense strømmen til led-en. Den trenger ikke å være der om det trengs en større strøm ut fra transistoren.
For å regne ut verdier til $R_1 $ og $C_1 $ må vi først finne ut hvilken tidskonstant vi trenger.
Vi vet at vi trenger en spenning på $v_2$ lik terskelspenningen til transistoren, $v_2 = V_T$, for at transistoren skal åpne seg.
Vi kan bruke dette til å finne en tau, $\tau$, gitt en frekvens, med periode $T$.
Vi kan anta at pulstoget har holdt på en stund, slik at systemet får balansert seg. Dersom vi da tar utgangspunkt i at vi har en diode med en diodespenning $V_D$. Startspenningen for stigningen av spenningen vil være sluttspenningen til utladningen over dioden, sett i \figref{graph:pulsetrain}.
Etter hver høye del av pulstoget vil spenningen $v_2$ raskt bevege seg mot $V_D$.
\begin{figure}
\centering
\includegraphics[width=\textwidth]{Grafer/EksempelPy.png}
\caption{Eksempel på hvordan spenniger endrer seg i kretsen i \figref{circ:analogKrets}.}
\label{graph:pulsetrain}
\end{figure}
Spenningen $v_2 $ når pulstoget er lavt, og endrer til høy, vil ha en likning som i (\ref{eq:spenningDiode}).
\begin{align}
v_D = V_D\cdot e^{-\frac{T}{2\tau}}
\label{eq:spenningDiode}
\end{align}
Siden vi vet at $v_1 $ varierer fra $v_D$ til en spenning $V_0 $ i et pulstog med periode $T$, med driftssyklus på 50\%, er pulsen $V_0 $ i $\tfrac{1}{2}T$. Vi vet da at spenningen $v_2 $ må nå $V_T$ etter $\tfrac{1}{2}T$ for at transistoren skal åpne seg.
Dersom vi setter dette sammen med hvordan spenningen utvikler seg gjennom perioden av pulstoget som er høyt vil vi få som i (\ref{eq:tauStart}).
Vi bruker formelen for spenning over en kondensator og løser for tidskonstanten $\tau$.
\begin{align}
v_2 = V_T &= V_0\cdot \left(v_D - V_0\right) e^{-\frac{T}{2\tau}} \label{eq:tauStart}\\
V_T &= V_0\cdot \left(V_D\cdot e^{-\frac{T}{2\tau}} - V_0\right) e^{-\frac{T}{2\tau}} \\
0 &= V_D\cdot e^{-\frac{T}{\tau}} - V_0 \cdot e^{-\frac{T}{2\tau}} + (V_0 - V_T) \\
e^{-\frac{T}{2\tau}} &= \frac{V_0 \pm \sqrt{(V_0)^2 - 4 \cdot V_D \cdot (V_0 - V_T)}}{2 \cdot V_D}\\
\tau &= -\frac{T}{2\cdot \ln\left(\frac{V_0 \pm \sqrt{(V_0)^2 - 4 \cdot V_D \cdot (V_0 - V_T)}}{2 \cdot V_D}\right)}
\label{eq:tau}
\end{align}
\textbf{Merk: }\textit{Det må velges den verdien for $\tau$ som gir mening. Vi ser også at $V_0 > V_T$ for at likningen skal gi mening.}
Når vi har funnet en tidskonstant ved (\ref{eq:tau}), velger vi bare en tilstrekkelig liten kondensator for $C_1$ og bruker likning (\ref{eq:RC}) for tidskonstanten $\tau$
\begin{align}
\tau = R_1 \cdot C_1
\label{eq:RC}
\end{align}
for å finne verdien for motstanden $R_1$.
\section{Realisering og test}
\label{sec:realisering}
Grenseverdien for omdreiningshastigheten er gitt ved $f=40000\text{rpm} \approx 666.67$Hz. Vi finner periodetiden ved (\ref{eq:period}).
\begin{align}
T = \frac{1}{f}\Rightarrow T = 1.5\ \text{ms} \label{eq:period}
\end{align}
Pulstoget har en spenning $V_0 = 5$V. Det ble brukt en BS170 transistor. Den har en terskelspenning $V_T \approx 2$V, og dioden som ble brukt har en diodespenning på $V_D \approx 0.7$V.
Vi finner $\tau$ ved hjelp av (\ref{eq:tau}).
\begin{align}
\tau &= -\frac{1.5\ \text{ms}}{2\cdot \ln\left(\frac{5\text{V} \pm \sqrt{(5\text{V})^2 - 4 \cdot 0.7\text{V} \cdot (3\text{V})}}{2 \cdot 0.7\text{V}}\right)} \label{eq:calculateTau}\\
\tau &= \begin{cases}
-0.40128946\ \text{ms}\\
1.81296116\ \text{ms}
\end{cases}
\intertext{Velger den verdien som gir mening}
\tau &= 1.81296116\ \text{ms}
\end{align}
For å koble opp kretsen i \figref{circ:analogKrets} trenger vi kun å regne ut verdiene for $R_1 $ og $C_1 $.
Velger motstand $R_1 = 1\text{M}\Omega$. Bruker (\ref{eq:tau}) for å finne $C_1 \approx 1.8$nF.
Simulering av spenningene med disse forhåndsvalgte verdiene kan sees i \figref{graph:pulsetrainReal}. Kode for simuleringen kan sees i Vedlegg \ref{app:codeSim}.
\begin{figure}
\centering
\includegraphics[width=\textwidth]{Grafer/SimuleringPy.png}
\caption{Simulering av kretsen.}
\label{graph:pulsetrainReal}
\end{figure}
Etter testing og observasjoner ser vi at spenningen $v_2$ har en topp på rudnt $2$V. Men det er ikke nok til å få dioden til å lyse. Dersom vi ønsker en mer lyssterk diode, kan vi bare endre terskelspenningen i (\ref{eq:calculateTau}) til noe høyere. Finner ut at for at lysdioden vi bruker skal ``lyse'', må vi ha en kondensator på $1$nF.
Den fungerende kretsen har følgende skjema, se \figref{circ:finalAnalog}. Ferdig oppkoblet krets kan sees i \figref{pic:oppkobling}
Dioden vil da begynne å lyse ved terskelfrekvensen og bli sterkere jo lavere frekvensen på pulstoget blir, og forsvinner ved frekvenser høyere enn terskelfrekvensen, se \figref{graph:pulsetrainRealSim} for se sammenhengen mellom frekvens og hvordan $v_2$ oppfører seg rundt terskelspenningen $V_T$.
\begin{figure}
\centering
\begin{circuitikz}
\draw
(0,3) to [open, v=$v_1$] (0,0)
(0,3) to [short,o-] ++(1,0)
to [R, l=$1\text{M}\Omega$, *-*] ++(3,0)
to [short,-o] ++(4,0)
++(-3,0) to [C, l=$1$nF, *-*] ++(0,-3)
++(3,0) to [short, o-o] (0,0)
(4,3) -- ++(0,1.5)
to [D] ++(-3,0) -- ++(0,-1.5);
\draw
(9,3) node[nmos](nmosA){}
(9,8) node[right]{5V} to [short, o-] ++(0,-0.5)
to [R, l=$220\Omega$] ++(0,-2)
to [led] (nmosA.D)
(nmosA.S) to [short, -*] (9,0)
node[ground](){}
(9,0) to [short, -o] (8,0)
(nmosA.G) to [short, o-o] (8,3);
\end{circuitikz}
\caption{Skjema for omdreinigsmåler med transistor, med verdier}
\label{circ:finalAnalog}
\end{figure}
\begin{figure}
\centering
\includegraphics[width=\textwidth]{pics/krets2.JPG}
\caption{Fysisk oppkobling av krets}
\label{pic:oppkobling}
\end{figure}
% \begin{figure}
% \centering
% \includegraphics[width=\textwidth]{Grafer/SimuleringPyLower.png}
% \caption{Simulering av kretsen ved frekvens lavere enn terskelfrekvens.}
% \label{graph:pulsetrainRealLower}
% \end{figure}
% \begin{figure}
% \centering
% \includegraphics[width=\textwidth]{Grafer/SimuleringPyHigher.png}
% \caption{Simulering av kretsen ved frekvens høyere enn terskelfrekvens.}
% \label{graph:pulsetrainRealHigher}
% \end{figure}
\begin{figure}
\centering
\includegraphics[width=\textwidth]{Grafer/SimuleringPyLower.png}
\includegraphics[width=\textwidth]{Grafer/SimuleringPyHigher.png}
\caption{Simulering av kretsen ved frekvens lavere (øverst) og høyere (nederst) enn terskelfrekvensen. Kode i vedlegg \ref{app:codeSim}.}
\label{graph:pulsetrainRealSim}
\end{figure}
\clearpage
\section{Konklusjon}
\label{sec:konklusjon}
Kretsen fungerte innenfor kravene som ble gitt. Dioden begynner å lyse ved gitt omdreiningshastighet på 40000 rpm.
\section{Takk}
Takk til Ulrik Bredland og Magnus Oddstøl for bra samarbeid. Stor takk til lærere på elsys som har tatt seg tiden til å gi en tilbakemelding på dette designnotatet.
% %Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
% \phantomsection
% \addcontentsline{toc}{section}{Referanser}
\clearpage
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\section{Digital måte å måle omdreiningshastighet}
\label{app:digital}
Det er mulig å lage en krets med arduino for å måle frekvensen til et pulstog.
Ta for dere koden under. Pulstoget leses på pinne 8 på arduinoen, og en transistor kan styres på pinnen som heter ``out'' i koden. Frekvensen velges ved å endre variabelen ``rpm''.
\lstinputlisting[style=CStyle]{MeasureFreq/MeasureFreq.ino}
\clearpage
\section{Kode for simulering av didoe-kondensator-krets}
\label{app:codeSim}
\lstinputlisting[style=PyStyle]{Grafer/CapDiode.py}
\end{document}

BIN
D2/Grafer/4b.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

125
D2/Grafer/CapDiode.py Normal file
View File

@ -0,0 +1,125 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 26 00:50:35 2019
@author: oyvind
"""
import math
import numpy as np
import matplotlib.pyplot as plt
# Name for the saved graph
filename = "SimuleringPy"
#RPM to simulate
RPM = 40000
#RPM to calculate tau
tauRPM = 40000
# Forward voltage of the diode
forwardVoltage = 0.7
# Threshold voltage of the transistor
thresholdVoltage = 2
# Upper voltage of the pulsetrain
upperVoltage = 5
# How many cycles you want it to run
cycles = 5
# The resolution of each cycle
resolution = 2000
# Converting from RPM to Hz and period in seconds and milliseconds
def RPMtoPeriod(rpm):
Hz = rpm / 60.0
period = 1 / Hz
periodmS = period * 10**3
return periodmS
periodmS = RPMtoPeriod(RPM)
print("Period in ms: " + str(periodmS))
# Calculates the tau based on the period, and the different voltages
def CalculateTau():
# Calculate the roots of the tau-equation
roots = np.roots([forwardVoltage, -upperVoltage, upperVoltage - thresholdVoltage])
# Calculate the possible taus
taus = -(RPMtoPeriod(tauRPM)) / (2 * np.log(roots))
print(taus)
# Discard the non-real tau
if taus[0] > taus[1] and taus[0] > 0:
return taus[0]
return taus[1]
# Just creates a pulsetrain with some voltage and duty-cycle
def GeneratePulsetrain(voltage = 5, dutyCycle = 0.5):
pulseTrain = []
for i in range(cycles):
for i in range(round(resolution * 2 * dutyCycle)):
pulseTrain.append(voltage)
for i in range(round(resolution * 2 * (1 - dutyCycle))):
pulseTrain.append(0)
return pulseTrain
# Generate the time-signatures from the number of cycles, the resolution and
# the periodtime. result in milliseconds
def GenerateTime():
times = []
for t in range(cycles * resolution * 2):
times.append(periodmS * t / (resolution * 2))
return times
def OutVoltage(wave, times):
cP = wave[0] # Start voltage-supply
v0 = 0 # Start voltage
cT = 0 #Start time
volt = []
for p in range(len(wave)):
# If the voltage-supply changes, recalculate startvalues
if wave[p] != cP:
v0 = volt[-1] # New start voltage, uses the last voltage calculated
if wave[p] == 0:
v0 = forwardVoltage
cP = wave[p] # Variable so the array is not accessed.
cT = times[p] # Offset time for each period
# Calculate the outgoing voltage over the CAPACITOR with the start values
volt.append(cP + (v0 - cP) * math.exp(-(times[p] - cT) / tau ))
return volt
def GenerateThreshLine(times):
thresh = []
for i in times:
thresh.append(thresholdVoltage)
return thresh
# Calculate Tau
tau = CalculateTau()
print("Tau in ms: " + str(tau))
# Generate all the lists of pulsetrain and time-signatures
time = GenerateTime()
pulse = GeneratePulsetrain(upperVoltage)
threshLine = GenerateThreshLine(time)
# Simulate the outgoing voltage
voltage = OutVoltage(pulse, time)
plt.figure(figsize=(12,5))
plt.plot(time, pulse)
plt.plot(time, voltage)
plt.plot(time, threshLine, 'k--')
plt.title("Spenningsutvikling ved " + str(RPM) + " RPM. Grensefrekvens er " +
str(tauRPM) + " RPM.")
plt.xlabel("Tid [ms]")
plt.ylabel("Spenning [V]")
plt.legend(["Pulstog, " + r'$v_1$', "Utgående spenning, " + r'$v_2$', "Terskelspenning, " + r'$V_T$'], loc="upper right")
plt.savefig(filename + ".png", dpi = 300)
plt.show()

BIN
D2/Grafer/EksempelPy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

94
D2/Grafer/Graftegning.py Normal file
View File

@ -0,0 +1,94 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Jan 18 22:30:00 2019
@author: oyvind
"""
import math
import matplotlib.pyplot as plt
# Name for the saved graph
filename = "4b"
# RPM
RPM = 40000
Hz = RPM / 60
# Tau in microseconds
tau = 1/(2 * Hz) * 10**6
# Square wave freq in kHz
sqWFreq = 5
# How many taus you want
periods = 3
# The resolution of each tau
resolution = 1000
# Forwardvoltage of diode
diodeVoltage = 0.7
# Calculates the length of each squarewave in taus
sqTime = (1/sqWFreq) * 10**3
sqTau = sqTime / tau
# Creats the square wave
# Default values are in the argument list
def CreateSquareWave(amp=2.5, offset=2.5, symetry=0.5):
squareWave = []
# Only generates as many datapoints we need
while len(squareWave) < periods * resolution:
# First generate the first half
for r in range(int(resolution*sqTau * symetry)):
squareWave.append(amp + offset)
# Then the second
for r in range(int(resolution*sqTau * (1 - symetry))):
squareWave.append(offset - amp)
squareWave = squareWave[:(resolution*periods)]
return squareWave
# Generate all the time-ticks
def GenerateTime():
times = []
for t in range(periods * resolution):
times.append(t/resolution)
print(len(times))
return(times)
def CapVoltage(wave, times):
cP = wave[0] # Start voltage-supply
v0 = 0 # Start voltage
cT = 0 #Start time
volt = []
for p in range(len(wave)):
# If the voltage-supply changes, recalculate startvalues
if wave[p] != cP:
v0 = volt[-1] # New start voltage, uses the last voltage calculated
if wave[p] == 0:
v0 = diodeVoltage
cP = wave[p] # Variable so the array is not accessed.
cT = times[p] # Offset time for each period
# Calculate the voltage over the CAPACITOR with the start values
volt.append(cP + (v0 - cP) * math.exp(-(times[p] - cT)))
return(volt)
SquareWave = CreateSquareWave()
time = GenerateTime()
CapWave = CapVoltage(SquareWave, time)
plt.figure(figsize=(15,5))
plt.plot(time, SquareWave, time, CapWave)
plt.xlabel("Time [τ]")
plt.ylabel("Voltage [V]")
plt.legend(["Supply voltage", "Capacitor voltage"], loc="lower right")
plt.savefig(filename + ".png", dpi = 300)
plt.show()

BIN
D2/Grafer/SimuleringPy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

BIN
D2/Grafer/Test.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

5
D2/Howto.txt Normal file
View File

@ -0,0 +1,5 @@
-Opprett bruker på sharelatex.com (Bruk stud. mail)
-Opprett et tomt dokument og kopier over innholdet i designnotat.tex filen.
(designnotat.tex kan åpnes i TextEdit/Notepad eller lignende)
-Last opp figurene og kompilér

View File

@ -0,0 +1,39 @@
/* Program to measure the frequenncy of a input, on digital pin 8
* Made by Oyvind Skaaden
*/
#include <FreqMeasure.h> // Library for measure
#define out 4 // The pin the transistor is controlled by
float rpm = 40000; // The limit for when to open the transistor
bool ledUnderRPM = true; // Change this to light the LED should light when the rpm are over rpm
float freq = rpm / 60;
void setup() {
Serial.begin(57600);
FreqMeasure.begin();
}
double sum=0;
int count=0;
void loop() {
if (FreqMeasure.available()) {
// average several reading together
sum = sum + FreqMeasure.read();
count = count + 1;
if (count > 30) {
float frequency = FreqMeasure.countToFrequency(sum / count);
Serial.print(frequency);
if (frequency < freq) { // If the measured frequency is below the RPM do this
digitalWrite(out, ledUnderRPM);
Serial.println(" ON");
}
else{
digitalWrite(out, !ledUnderRPM);
Serial.println(" OFF");
}
sum = 0;
count = 0;
}
}
}

View File

@ -0,0 +1,253 @@
:100000000C9458000C9480000C9480000C94800098
:100010000C9480000C9480000C9480000C94800060
:100020000C9480000C9480000C9491020C9480003D
:100030000C9480000C940B030C9480000C948000B2
:100040000C94EF010C9480000C945F020C94390224
:100050000C9480000C9480000C9480000C94800020
:100060000C9480000C948000000000002500280003
:100070002B00040404040404040402020202020229
:10008000030303030303010204081020408001025C
:1000900004081020010204081020000000080002DB
:1000A000010000030407000000000000000022031C
:1000B00011241FBECFEFD8E0DEBFCDBF11E0A0E01E
:1000C000B1E0EEE8FFE002C005900D92AA32B10760
:1000D000D9F722E0AAE2B1E001C01D92A231B20735
:1000E000E1F710E0C8E5D0E004C02197FE010E94CE
:1000F000BA07C735D107C9F70E945B030C94C5073F
:100100000C940000EEE9F0E09491EAE8F0E024912C
:10011000E6E7F0E0E491EE2309F43CC0992339F1DD
:10012000933091F038F49130A9F0923001F594B504
:100130009F7D12C0973091F09830A1F09430B9F4BF
:10014000909180009F7D03C0909180009F77909355
:1001500080000DC094B59F7794BD09C09091B00008
:100160009F7703C09091B0009F7D9093B000F0E026
:10017000EE0FFF1FE859FF4FA591B4919FB7F89478
:10018000811104C08C912095282302C0EC912E2B64
:100190002C939FBF0895CF92DF92EF92FF920F931F
:1001A0001F93CF93DF936C017A018B01C0E0D0E005
:1001B000CE15DF0581F0D8016D918D01D601ED914D
:1001C000FC910190F081E02DC6010995892B11F079
:1001D0002196EECF7E01C701DF91CF911F910F9144
:1001E000FF90EF90DF90CF900895089580E090E029
:1001F0000895FC01538D448D252F30E0842F90E02D
:10020000821B930B541710F0CF9608950197089511
:10021000FC01918D828D981761F0828DDF01A80F0E
:10022000B11D5D968C91928D9F5F9F73928F90E030
:1002300008958FEF9FEF0895FC01918D828D98179F
:1002400031F0828DE80FF11D858D90E008958FEFDC
:100250009FEF0895FC01918D228D892F90E0805CA5
:100260009F4F821B91098F739927089581E791E031
:100270000E942A0121E0892B09F420E0822F0895B1
:10028000FC01848DDF01A80FB11DA35ABF4F2C9133
:10029000848D90E001968F739927848FA689B78902
:1002A0002C93A089B1898C91837080648C93938DF9
:1002B000848D981306C00288F389E02D80818F7D9C
:1002C00080830895EF92FF920F931F93CF93DF9354
:1002D000EC0181E0888F9B8D8C8D981305C0E88997
:1002E000F989808185FD26C0F62E0B8D10E00F5F09
:1002F0001F4F0F731127E02E8C8DE8120CC00FB624
:1003000007FCFACFE889F989808185FFF5CFCE0116
:100310000E944001F1CF8B8DFE01E80FF11DE35AE1
:10032000FF4FF0829FB7F8940B8FEA89FB89808199
:1003300080620AC09FB7F894EE89FF896083E889DC
:10034000F98980818370806480839FBF81E090E021
:10035000DF91CF911F910F91FF90EF900895CF9370
:10036000DF93EC01888D8823C9F0EA89FB898081BD
:1003700085FD05C0A889B9898C9186FD0FC00FB68F
:1003800007FCF5CF808185FFF2CFA889B9898C91D0
:1003900085FFEDCFCE010E944001E7CFDF91CF91E5
:1003A000089580E090E0892B29F00E9436018111A8
:1003B0000C9400000895009769F0FC010190002062
:1003C000E9F73197AF01481B590BBC0181E791E078
:1003D0000C94CB0080E090E008950E94C0071F922B
:1003E0000F920FB60F9211242F933F938F939F93E9
:1003F000AF93BF9380916D0190916E01A0916F01B9
:10040000B091700130916C0123E0230F2D3720F45F
:100410000196A11DB11D05C026E8230F0296A11D5E
:10042000B11D20936C0180936D0190936E01A09398
:100430006F01B09370018091680190916901A09162
:100440006A01B0916B010196A11DB11D80936801F5
:1004500090936901A0936A01B0936B01BF91AF9132
:100460009F918F913F912F910F900FBE0F901F90F2
:1004700018951F920F920FB60F9211242F933F934E
:100480004F935F936F937F938F939F93AF93BF939C
:10049000EF93FF9381E791E00E944001FF91EF917C
:1004A000BF91AF919F918F917F916F915F914F918C
:1004B0003F912F910F900FBE0F901F9018951F9294
:1004C0000F920FB60F9211242F938F939F93EF9358
:1004D000FF93E0918101F09182018081E091870199
:1004E000F091880182FD12C0908180918A018F5F16
:1004F0008F7320918B01821751F0E0918A01F0E017
:10050000EF58FE4F958F80938A0101C08081FF9143
:10051000EF919F918F912F910F900FBE0F901F9091
:1005200018951F920F920FB60F9211240F931F93DD
:100530002F933F934F935F936F937F938F939F93EB
:10054000AF93BF93EF93FF93409186005091870044
:10055000B09B04C041150FEF5007F0F180912E01C0
:1005600090912F01A0E0B0E0DC019927882760E09E
:1005700070E0842B952BA62BB72B40912A0150912C
:100580002B0160912C0170912D018C019D01041BA8
:10059000150B260B370BB901A80180932A01909304
:1005A0002B01A0932C01B0932D01809161018F5FED
:1005B0008C3008F080E0909160018917C9F014E058
:1005C000819FF0011124E05DFE4F408351836283DF
:1005D0007383809361010CC081E086BB80912E0102
:1005E00090912F01019690932F0180932E01B6CF09
:1005F000FF91EF91BF91AF919F918F917F916F91FB
:100600005F914F913F912F911F910F910F900FBECE
:100610000F901F9018951F920F920FB60F921124F2
:100620008F939F9380912E0190912F01019690932B
:100630002F0180932E019F918F910F900FBE0F90ED
:100640001F901895E1E7F1E01382128288EE93E0A3
:10065000A0E0B0E084839583A683B78384E091E033
:100660009183808385EC90E09587848784EC90E08B
:100670009787868780EC90E0918B808B81EC90E06F
:10068000938B828B82EC90E0958B848B86EC90E050
:10069000978B868B118E128E138E148E8BEA9AEAAC
:1006A000A6E2B4E480930E0290930F02A09310028E
:1006B000B09311020895CF93DF93CDB7DEB7A39720
:1006C0000FB6F894DEBF0FBECDBF789484B58260BC
:1006D00084BD84B5816084BD85B5826085BD85B5E6
:1006E000816085BD80916E00816080936E00109264
:1006F00081008091810082608093810080918100DF
:10070000816080938100809180008160809380006F
:100710008091B10084608093B1008091B0008160CD
:100720008093B00080917A00846080937A008091F9
:100730007A00826080937A0080917A008160809351
:100740007A0080917A00806880937A001092C100CC
:10075000E0918101F091820182E08083E09181014A
:10076000F09182011082E0917D01F0917E01108272
:10077000E0917F01F091800180E1808310928901F6
:10078000E0918501F091860186E08083E09183010C
:10079000F0918401808180618083E0918301F091F8
:1007A0008401808188608083E0918301F0918401DD
:1007B000808180688083E0918301F0918401808151
:1007C0008F7D8083809180008091810010928100D4
:1007D00010928000109285001092840081E286BB06
:1007E00080936F0010922F0110922E0110922A0117
:1007F00010922B0110922C0110922D011092610188
:100800001092600181EC8093810080916101909150
:100810006001891708F4845F891B09F44AC190912B
:100820006101809160019817A1F08F5F8C3008F012
:1008300080E094E0899FF0011124E05DFE4F40814B
:1008400051816281738180936001342F252FCB0108
:1008500004C03FEF2FEF8FEF9FEF632F722F0E94A7
:100860006F062091640130916501409166015091BD
:1008700067010E945D056B017C01609364017093C8
:1008800065018093660190936701609162017091A8
:1008900063016F5F7F4F70936301609362016F31FB
:1008A00071050CF406C1072E000C880B990B0E94F1
:1008B00071069B01AC01C701B6010E94CE050E94E2
:1008C00040060E946F069B01AC0160E074E284E781
:1008D0009BE40E94CE056B017C019B01AC010E9450
:1008E0009307882319F082E191E01AC0460157016D
:1008F000E894B7F82FEF3FEF4FE75FE7C501B4018A
:100900000E94930781110FC02FEF3FEF4FE75FE782
:10091000C501B4010E94C90518162CF486E191E0C6
:100920000E94DB019BC02FEF3FEF4FE75FE4C70161
:10093000B6010E94210718161CF48AE191E0F0CF5D
:100940002FEF3FEF4FE75FECC701B6010E94C905EB
:1009500087FDF3CF20E030E0A901C701B6010E9476
:10096000C90587FF09C06DE281E791E00E9462013D
:10097000C701B601905802C0C701B6012AE037EDA1
:1009800043EA5BE30E945D052B013C010E944006A7
:100990004B015C010E946F069B01AC01C301B201D7
:1009A0000E945C052B013C0119A28E010F5D1F4FB7
:1009B0000AA31BA3C501B4012AE030E040E050E0E7
:1009C0000E94980749015A01605DF80162938F0106
:1009D000232B242B252B71F7CF010E94DB016EE224
:1009E00081E791E00E94620113E01150B9F120E02B
:1009F00030E040E251E4C301B2010E9426074B01FE
:100A00005C010E9440069B0140E050E019A22AA030
:100A10003BA03B01042F552ECA01B9012AE030E06A
:100A200040E050E00E949807605DF10162931F0171
:100A3000211531054105510579F7CF010E94DB01F0
:100A4000B301802F952D0E946F069B01AC01C5015B
:100A5000B4010E945C052B013C01C7CFA7019601A0
:100A600060910E0270910F0280911002909111021C
:100A70000E942107181634F481E00E9482008EE162
:100A800091E005C080E00E94820085E291E00E9432
:100A9000DB0182E291E00E94DB011092640110927E
:100AA0006501109266011092670110926301109225
:100AB00062010E94D101A9CE5058BB27AA270E94EB
:100AC00074050C94E7060E94D90638F00E94E006EF
:100AD00020F039F49F3F19F426F40C94D6060EF456
:100AE000E095E7FB0C94D006E92F0E94F80658F336
:100AF000BA17620773078407950720F079F4A6F503
:100B00000C941A070EF4E0950B2EBA2FA02D0B01B2
:100B1000B90190010C01CA01A0011124FF27591B42
:100B200099F0593F50F4503E68F11A16F040A22F48
:100B3000232F342F4427585FF3CF469537952795B9
:100B4000A795F0405395C9F77EF41F16BA0B620BB8
:100B5000730B840BBAF09150A1F0FF0FBB1F661FFF
:100B6000771F881FC2F70EC0BA0F621F731F841F42
:100B700048F4879577956795B795F7959E3F08F068
:100B8000B0CF9395880F08F09927EE0F979587952A
:100B900008950E94AC0608F481E008950E94E205E1
:100BA0000C94E7060E94E00658F00E94D90640F037
:100BB00029F45F3F29F00C94D00651110C941B07C7
:100BC0000C94D6060E94F80668F39923B1F35523D6
:100BD00091F3951B550BBB27AA2762177307840750
:100BE00038F09F5F5F4F220F331F441FAA1FA9F3E6
:100BF00035D00E2E3AF0E0E832D091505040E695D4
:100C0000001CCAF72BD0FE2F29D0660F771F881F34
:100C1000BB1F261737074807AB07B0E809F0BB0B27
:100C2000802DBF01FF2793585F4F3AF09E3F51053B
:100C300078F00C94D0060C941B075F3FE4F3983EC9
:100C4000D4F3869577956795B795F7959F5FC9F724
:100C5000880F911D9695879597F90895E1E0660FA5
:100C6000771F881FBB1F621773078407BA0720F01E
:100C7000621B730B840BBA0BEE1F88F7E095089587
:100C80000E94000788F09F5798F0B92F9927B75115
:100C9000B0F0E1F0660F771F881F991F1AF0BA9520
:100CA000C9F714C0B13091F00E941A07B1E008955D
:100CB0000C941A07672F782F8827B85F39F0B93F4F
:100CC000CCF3869577956795B395D9F73EF49095D3
:100CD0008095709561957F4F8F4F9F4F0895E89451
:100CE00009C097FB3EF490958095709561957F4F74
:100CF0008F4F9F4F9923A9F0F92F96E9BB27939522
:100D0000F695879577956795B795F111F8CFFAF431
:100D1000BB0F11F460FF1BC06F5F7F4F8F4F9F4F62
:100D200016C0882311F096E911C0772321F09EE8C0
:100D3000872F762F05C0662371F096E8862F70E026
:100D400060E02AF09A95660F771F881FDAF7880F00
:100D50009695879597F90895990F0008550FAA0B56
:100D6000E0E8FEEF16161706E807F907C0F01216BE
:100D70001306E407F50798F0621B730B840B950BC1
:100D800039F40A2661F0232B242B252B21F4089516
:100D90000A2609F4A140A6958FEF811D811D0895B3
:100DA00097F99F6780E870E060E008959FEF80EC1E
:100DB000089500240A9416161706180609060895C1
:100DC00000240A9412161306140605060895092E27
:100DD0000394000C11F4882352F0BB0F40F4BF2B96
:100DE00011F460FF04C06F5F7F4F8F4F9F4F0895D6
:100DF00057FD9058440F551F59F05F3F71F04795CC
:100E0000880F97FB991F61F09F3F79F087950895B0
:100E1000121613061406551FF2CF4695F1DF08C0CF
:100E2000161617061806991FF1CF869571056105EC
:100E300008940895E894BB2766277727CB0197F994
:100E400008950E94AC0608F48FEF08950E943907B8
:100E50000C94E7060E94D90638F00E94E00620F0C4
:100E6000952311F00C94D0060C94D60611240C9402
:100E70001B070E94F80670F3959FC1F3950F50E091
:100E8000551F629FF001729FBB27F00DB11D639F3C
:100E9000AA27F00DB11DAA1F649F6627B00DA11DE2
:100EA000661F829F2227B00DA11D621F739FB00D88
:100EB000A11D621F839FA00D611D221F749F3327F8
:100EC000A00D611D231F849F600D211D822F762F91
:100ED0006A2F11249F5750409AF0F1F088234AF06E
:100EE000EE0FFF1FBB1F661F771F881F91505040DA
:100EF000A9F79E3F510580F00C94D0060C941B0777
:100F00005F3FE4F3983ED4F3869577956795B79560
:100F1000F795E7959F5FC1F7FE2B880F911D96957A
:100F2000879597F908950E94AC06880B990B089550
:100F3000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FDD
:100F4000EE1FFF1FA217B307E407F50720F0A21B4F
:100F5000B30BE40BF50B661F771F881F991F1A94BC
:100F600069F760957095809590959B01AC01BD01E6
:100F7000CF010895EE0FFF1F0590F491E02D099425
:0E0F800081E090E0F8940C94C507F894FFCF40
:100F8E00000000006201CB00F900AF012A01080148
:100F9E001C016E616E00696E66006F766600204FF2
:0A0FAE004E000D0A00204F464600D9
:00000001FF

View File

@ -0,0 +1,287 @@
:100000000C9458000C9480000C9480000C94800098
:100010000C9480000C9480000C9480000C94800060
:100020000C9480000C9480000C9491020C9480003D
:100030000C9480000C940B030C9480000C948000B2
:100040000C94EF010C9480000C945F020C94390224
:100050000C9480000C9480000C9480000C94800020
:100060000C9480000C948000000000002500280003
:100070002B00040404040404040402020202020229
:10008000030303030303010204081020408001025C
:1000900004081020010204081020000000080002DB
:1000A000010000030407000000000000000022031C
:1000B00011241FBECFEFD8E0DEBFCDBF11E0A0E01E
:1000C000B1E0EEE8FFE002C005900D92AA32B10760
:1000D000D9F722E0AAE2B1E001C01D92A231B20735
:1000E000E1F710E0C8E5D0E004C02197FE010E94CE
:1000F000BA07C735D107C9F70E945B030C94C5073F
:100100000C940000EEE9F0E09491EAE8F0E024912C
:10011000E6E7F0E0E491EE2309F43CC0992339F1DD
:10012000933091F038F49130A9F0923001F594B504
:100130009F7D12C0973091F09830A1F09430B9F4BF
:10014000909180009F7D03C0909180009F77909355
:1001500080000DC094B59F7794BD09C09091B00008
:100160009F7703C09091B0009F7D9093B000F0E026
:10017000EE0FFF1FE859FF4FA591B4919FB7F89478
:10018000811104C08C912095282302C0EC912E2B64
:100190002C939FBF0895CF92DF92EF92FF920F931F
:1001A0001F93CF93DF936C017A018B01C0E0D0E005
:1001B000CE15DF0581F0D8016D918D01D601ED914D
:1001C000FC910190F081E02DC6010995892B11F079
:1001D0002196EECF7E01C701DF91CF911F910F9144
:1001E000FF90EF90DF90CF900895089580E090E029
:1001F0000895FC01538D448D252F30E0842F90E02D
:10020000821B930B541710F0CF9608950197089511
:10021000FC01918D828D981761F0828DDF01A80F0E
:10022000B11D5D968C91928D9F5F9F73928F90E030
:1002300008958FEF9FEF0895FC01918D828D98179F
:1002400031F0828DE80FF11D858D90E008958FEFDC
:100250009FEF0895FC01918D228D892F90E0805CA5
:100260009F4F821B91098F739927089581E791E031
:100270000E942A0121E0892B09F420E0822F0895B1
:10028000FC01848DDF01A80FB11DA35ABF4F2C9133
:10029000848D90E001968F739927848FA689B78902
:1002A0002C93A089B1898C91837080648C93938DF9
:1002B000848D981306C00288F389E02D80818F7D9C
:1002C00080830895EF92FF920F931F93CF93DF9354
:1002D000EC0181E0888F9B8D8C8D981305C0E88997
:1002E000F989808185FD26C0F62E0B8D10E00F5F09
:1002F0001F4F0F731127E02E8C8DE8120CC00FB624
:1003000007FCFACFE889F989808185FFF5CFCE0116
:100310000E944001F1CF8B8DFE01E80FF11DE35AE1
:10032000FF4FF0829FB7F8940B8FEA89FB89808199
:1003300080620AC09FB7F894EE89FF896083E889DC
:10034000F98980818370806480839FBF81E090E021
:10035000DF91CF911F910F91FF90EF900895CF9370
:10036000DF93EC01888D8823C9F0EA89FB898081BD
:1003700085FD05C0A889B9898C9186FD0FC00FB68F
:1003800007FCF5CF808185FFF2CFA889B9898C91D0
:1003900085FFEDCFCE010E944001E7CFDF91CF91E5
:1003A000089580E090E0892B29F00E9436018111A8
:1003B0000C9400000895009769F0FC010190002062
:1003C000E9F73197AF01481B590BBC0181E791E078
:1003D0000C94CB0080E090E008950E94C0071F922B
:1003E0000F920FB60F9211242F933F938F939F93E9
:1003F000AF93BF9380916D0190916E01A0916F01B9
:10040000B091700130916C0123E0230F2D3720F45F
:100410000196A11DB11D05C026E8230F0296A11D5E
:10042000B11D20936C0180936D0190936E01A09398
:100430006F01B09370018091680190916901A09162
:100440006A01B0916B010196A11DB11D80936801F5
:1004500090936901A0936A01B0936B01BF91AF9132
:100460009F918F913F912F910F900FBE0F901F90F2
:1004700018951F920F920FB60F9211242F933F934E
:100480004F935F936F937F938F939F93AF93BF939C
:10049000EF93FF9381E791E00E944001FF91EF917C
:1004A000BF91AF919F918F917F916F915F914F918C
:1004B0003F912F910F900FBE0F901F9018951F9294
:1004C0000F920FB60F9211242F938F939F93EF9358
:1004D000FF93E0918101F09182018081E091870199
:1004E000F091880182FD12C0908180918A018F5F16
:1004F0008F7320918B01821751F0E0918A01F0E017
:10050000EF58FE4F958F80938A0101C08081FF9143
:10051000EF919F918F912F910F900FBE0F901F9091
:1005200018951F920F920FB60F9211240F931F93DD
:100530002F933F934F935F936F937F938F939F93EB
:10054000AF93BF93EF93FF93409186005091870044
:10055000B09B04C041150FEF5007F0F180912E01C0
:1005600090912F01A0E0B0E0DC019927882760E09E
:1005700070E0842B952BA62BB72B40912A0150912C
:100580002B0160912C0170912D018C019D01041BA8
:10059000150B260B370BB901A80180932A01909304
:1005A0002B01A0932C01B0932D01809161018F5FED
:1005B0008C3008F080E0909160018917C9F014E058
:1005C000819FF0011124E05DFE4F408351836283DF
:1005D0007383809361010CC081E086BB80912E0102
:1005E00090912F01019690932F0180932E01B6CF09
:1005F000FF91EF91BF91AF919F918F917F916F91FB
:100600005F914F913F912F911F910F910F900FBECE
:100610000F901F9018951F920F920FB60F921124F2
:100620008F939F9380912E0190912F01019690932B
:100630002F0180932E019F918F910F900FBE0F90ED
:100640001F901895E1E7F1E01382128288EE93E0A3
:10065000A0E0B0E084839583A683B78384E091E033
:100660009183808385EC90E09587848784EC90E08B
:100670009787868780EC90E0918B808B81EC90E06F
:10068000938B828B82EC90E0958B848B86EC90E050
:10069000978B868B118E128E138E148E8BEA9AEAAC
:1006A000A6E2B4E480930E0290930F02A09310028E
:1006B000B09311020895CF93DF93CDB7DEB7A39720
:1006C0000FB6F894DEBF0FBECDBF789484B58260BC
:1006D00084BD84B5816084BD85B5826085BD85B5E6
:1006E000816085BD80916E00816080936E00109264
:1006F00081008091810082608093810080918100DF
:10070000816080938100809180008160809380006F
:100710008091B10084608093B1008091B0008160CD
:100720008093B00080917A00846080937A008091F9
:100730007A00826080937A0080917A008160809351
:100740007A0080917A00806880937A001092C100CC
:10075000E0918101F091820182E08083E09181014A
:10076000F09182011082E0917D01F0917E01108272
:10077000E0917F01F091800180E1808310928901F6
:10078000E0918501F091860186E08083E09183010C
:10079000F0918401808180618083E0918301F091F8
:1007A0008401808188608083E0918301F0918401DD
:1007B000808180688083E0918301F0918401808151
:1007C0008F7D8083809180008091810010928100D4
:1007D00010928000109285001092840081E286BB06
:1007E00080936F0010922F0110922E0110922A0117
:1007F00010922B0110922C0110922D011092610188
:100800001092600181EC8093810080916101909150
:100810006001891708F4845F891B09F44AC190912B
:100820006101809160019817A1F08F5F8C3008F012
:1008300080E094E0899FF0011124E05DFE4F40814B
:1008400051816281738180936001342F252FCB0108
:1008500004C03FEF2FEF8FEF9FEF632F722F0E94A7
:100860006F062091640130916501409166015091BD
:1008700067010E945D056B017C01609364017093C8
:1008800065018093660190936701609162017091A8
:1008900063016F5F7F4F70936301609362016F31FB
:1008A00071050CF406C1072E000C880B990B0E94F1
:1008B00071069B01AC01C701B6010E94CE050E94E2
:1008C00040060E946F069B01AC0160E074E284E781
:1008D0009BE40E94CE056B017C019B01AC010E9450
:1008E0009307882319F082E191E01AC0460157016D
:1008F000E894B7F82FEF3FEF4FE75FE7C501B4018A
:100900000E94930781110FC02FEF3FEF4FE75FE782
:10091000C501B4010E94C90518162CF486E191E0C6
:100920000E94DB019BC02FEF3FEF4FE75FE4C70161
:10093000B6010E94210718161CF48AE191E0F0CF5D
:100940002FEF3FEF4FE75FECC701B6010E94C905EB
:1009500087FDF3CF20E030E0A901C701B6010E9476
:10096000C90587FF09C06DE281E791E00E9462013D
:10097000C701B601905802C0C701B6012AE037EDA1
:1009800043EA5BE30E945D052B013C010E944006A7
:100990004B015C010E946F069B01AC01C301B201D7
:1009A0000E945C052B013C0119A28E010F5D1F4FB7
:1009B0000AA31BA3C501B4012AE030E040E050E0E7
:1009C0000E94980749015A01605DF80162938F0106
:1009D000232B242B252B71F7CF010E94DB016EE224
:1009E00081E791E00E94620113E01150B9F120E02B
:1009F00030E040E251E4C301B2010E9426074B01FE
:100A00005C010E9440069B0140E050E019A22AA030
:100A10003BA03B01042F552ECA01B9012AE030E06A
:100A200040E050E00E949807605DF10162931F0171
:100A3000211531054105510579F7CF010E94DB01F0
:100A4000B301802F952D0E946F069B01AC01C5015B
:100A5000B4010E945C052B013C01C7CFA7019601A0
:100A600060910E0270910F0280911002909111021C
:100A70000E942107181634F481E00E9482008EE162
:100A800091E005C080E00E94820085E291E00E9432
:100A9000DB0182E291E00E94DB011092640110927E
:100AA0006501109266011092670110926301109225
:100AB00062010E94D101A9CE5058BB27AA270E94EB
:100AC00074050C94E7060E94D90638F00E94E006EF
:100AD00020F039F49F3F19F426F40C94D6060EF456
:100AE000E095E7FB0C94D006E92F0E94F80658F336
:100AF000BA17620773078407950720F079F4A6F503
:100B00000C941A070EF4E0950B2EBA2FA02D0B01B2
:100B1000B90190010C01CA01A0011124FF27591B42
:100B200099F0593F50F4503E68F11A16F040A22F48
:100B3000232F342F4427585FF3CF469537952795B9
:100B4000A795F0405395C9F77EF41F16BA0B620BB8
:100B5000730B840BBAF09150A1F0FF0FBB1F661FFF
:100B6000771F881FC2F70EC0BA0F621F731F841F42
:100B700048F4879577956795B795F7959E3F08F068
:100B8000B0CF9395880F08F09927EE0F979587952A
:100B900008950E94AC0608F481E008950E94E205E1
:100BA0000C94E7060E94E00658F00E94D90640F037
:100BB00029F45F3F29F00C94D00651110C941B07C7
:100BC0000C94D6060E94F80668F39923B1F35523D6
:100BD00091F3951B550BBB27AA2762177307840750
:100BE00038F09F5F5F4F220F331F441FAA1FA9F3E6
:100BF00035D00E2E3AF0E0E832D091505040E695D4
:100C0000001CCAF72BD0FE2F29D0660F771F881F34
:100C1000BB1F261737074807AB07B0E809F0BB0B27
:100C2000802DBF01FF2793585F4F3AF09E3F51053B
:100C300078F00C94D0060C941B075F3FE4F3983EC9
:100C4000D4F3869577956795B795F7959F5FC9F724
:100C5000880F911D9695879597F90895E1E0660FA5
:100C6000771F881FBB1F621773078407BA0720F01E
:100C7000621B730B840BBA0BEE1F88F7E095089587
:100C80000E94000788F09F5798F0B92F9927B75115
:100C9000B0F0E1F0660F771F881F991F1AF0BA9520
:100CA000C9F714C0B13091F00E941A07B1E008955D
:100CB0000C941A07672F782F8827B85F39F0B93F4F
:100CC000CCF3869577956795B395D9F73EF49095D3
:100CD0008095709561957F4F8F4F9F4F0895E89451
:100CE00009C097FB3EF490958095709561957F4F74
:100CF0008F4F9F4F9923A9F0F92F96E9BB27939522
:100D0000F695879577956795B795F111F8CFFAF431
:100D1000BB0F11F460FF1BC06F5F7F4F8F4F9F4F62
:100D200016C0882311F096E911C0772321F09EE8C0
:100D3000872F762F05C0662371F096E8862F70E026
:100D400060E02AF09A95660F771F881FDAF7880F00
:100D50009695879597F90895990F0008550FAA0B56
:100D6000E0E8FEEF16161706E807F907C0F01216BE
:100D70001306E407F50798F0621B730B840B950BC1
:100D800039F40A2661F0232B242B252B21F4089516
:100D90000A2609F4A140A6958FEF811D811D0895B3
:100DA00097F99F6780E870E060E008959FEF80EC1E
:100DB000089500240A9416161706180609060895C1
:100DC00000240A9412161306140605060895092E27
:100DD0000394000C11F4882352F0BB0F40F4BF2B96
:100DE00011F460FF04C06F5F7F4F8F4F9F4F0895D6
:100DF00057FD9058440F551F59F05F3F71F04795CC
:100E0000880F97FB991F61F09F3F79F087950895B0
:100E1000121613061406551FF2CF4695F1DF08C0CF
:100E2000161617061806991FF1CF869571056105EC
:100E300008940895E894BB2766277727CB0197F994
:100E400008950E94AC0608F48FEF08950E943907B8
:100E50000C94E7060E94D90638F00E94E00620F0C4
:100E6000952311F00C94D0060C94D60611240C9402
:100E70001B070E94F80670F3959FC1F3950F50E091
:100E8000551F629FF001729FBB27F00DB11D639F3C
:100E9000AA27F00DB11DAA1F649F6627B00DA11DE2
:100EA000661F829F2227B00DA11D621F739FB00D88
:100EB000A11D621F839FA00D611D221F749F3327F8
:100EC000A00D611D231F849F600D211D822F762F91
:100ED0006A2F11249F5750409AF0F1F088234AF06E
:100EE000EE0FFF1FBB1F661F771F881F91505040DA
:100EF000A9F79E3F510580F00C94D0060C941B0777
:100F00005F3FE4F3983ED4F3869577956795B79560
:100F1000F795E7959F5FC1F7FE2B880F911D96957A
:100F2000879597F908950E94AC06880B990B089550
:100F3000A1E21A2EAA1BBB1BFD010DC0AA1FBB1FDD
:100F4000EE1FFF1FA217B307E407F50720F0A21B4F
:100F5000B30BE40BF50B661F771F881F991F1A94BC
:100F600069F760957095809590959B01AC01BD01E6
:100F7000CF010895EE0FFF1F0590F491E02D099425
:0E0F800081E090E0F8940C94C507F894FFCF40
:100F8E00000000006201CB00F900AF012A01080148
:100F9E001C016E616E00696E66006F766600204FF2
:0A0FAE004E000D0A00204F464600D9
:107E0000112484B714BE81FFF0D085E080938100F7
:107E100082E08093C00088E18093C10086E0809377
:107E2000C20080E18093C4008EE0C9D0259A86E02C
:107E300020E33CEF91E0309385002093840096BBD3
:107E4000B09BFECF1D9AA8958150A9F7CC24DD24C4
:107E500088248394B5E0AB2EA1E19A2EF3E0BF2EE7
:107E6000A2D0813461F49FD0082FAFD0023811F036
:107E7000013811F484E001C083E08DD089C08234E0
:107E800011F484E103C0853419F485E0A6D080C0E4
:107E9000853579F488D0E82EFF2485D0082F10E0AE
:107EA000102F00270E291F29000F111F8ED06801E7
:107EB0006FC0863521F484E090D080E0DECF843638
:107EC00009F040C070D06FD0082F6DD080E0C81688
:107ED00080E7D80618F4F601B7BEE895C0E0D1E017
:107EE00062D089930C17E1F7F0E0CF16F0E7DF06D8
:107EF00018F0F601B7BEE89568D007B600FCFDCFD4
:107F0000A601A0E0B1E02C9130E011968C91119780
:107F100090E0982F8827822B932B1296FA010C0160
:107F200087BEE89511244E5F5F4FF1E0A038BF0790
:107F300051F7F601A7BEE89507B600FCFDCF97BE46
:107F4000E89526C08437B1F42ED02DD0F82E2BD052
:107F50003CD0F601EF2C8F010F5F1F4F84911BD097
:107F6000EA94F801C1F70894C11CD11CFA94CF0C13
:107F7000D11C0EC0853739F428D08EE10CD085E9AC
:107F80000AD08FE07ACF813511F488E018D01DD067
:107F900080E101D065CF982F8091C00085FFFCCF94
:107FA0009093C60008958091C00087FFFCCF809118
:107FB000C00084FD01C0A8958091C6000895E0E648
:107FC000F0E098E1908380830895EDDF803219F02E
:107FD00088E0F5DFFFCF84E1DECF1F93182FE3DFCA
:107FE0001150E9F7F2DF1F91089580E0E8DFEE27F6
:047FF000FF270994CA
:027FFE00040479
:0400000300007E007B
:00000001FF

66
D2/clangTex.tex Normal file
View File

@ -0,0 +1,66 @@
\usepackage{xcolor}
\usepackage{listings}
\usepackage{listingsutf8}
\definecolor{mGreen}{rgb}{0,0.6,0}
\definecolor{mGray}{rgb}{0.5,0.5,0.5}
\definecolor{mPurple}{rgb}{0.58,0,0.82}
\definecolor{backgroundColour}{rgb}{0.95,0.95,0.92}
\lstdefinestyle{CStyle}{
commentstyle=\color{mGreen},
keywordstyle=\color{magenta},
stringstyle=\color{mPurple},
basicstyle=\footnotesize,
frame=single,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
language=C
}
\lstdefinestyle{PyStyle}{
commentstyle=\color{mGreen},
keywordstyle=\color{magenta},
stringstyle=\color{mPurple},
basicstyle=\footnotesize,
frame=single,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
language=Python
}
\lstset{literate=
{á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1
{Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1
{à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1
{À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1
{ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1
{Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1
{â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1
{Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1
{Ã}{{\~A}}1 {ã}{{\~a}}1 {Õ}{{\~O}}1 {õ}{{\~o}}1
{œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1
{ű}{{\H{u}}}1 {Ű}{{\H{U}}}1 {ő}{{\H{o}}}1 {Ő}{{\H{O}}}1
{ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1
{}{{\euro}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1
{»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1
}
%numberstyle=\tiny\color{mGray},
%numbers=left,
%backgroundcolor=\color{backgroundColour},

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

8193
D2/filer/1000HzCSV.csv Normal file

File diff suppressed because it is too large Load Diff

8193
D2/filer/500hzCSV.csv Normal file

File diff suppressed because it is too large Load Diff

BIN
D2/pics/blokk.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
D2/pics/krets.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

BIN
D2/pics/krets2.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 KiB

BIN
D2/pics/krets2.xcf Normal file

Binary file not shown.

BIN
D2/skop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

BIN
D3/D3_ØyvindSkaaden.pdf Normal file

Binary file not shown.

323
D3/D3_ØyvindSkaaden.tex Normal file
View File

@ -0,0 +1,323 @@
%Dokumentinnstillinger:---------------------------------
%Ved å google flitting kan du finne ut hva de forskjellige tingene her betyr, og hvordan du kan gjøre eventuelle endringer.
\documentclass[11pt,norsk]{elsys-design}
\usepackage{subfig}
\tikzset{opampdownlbl/.style={
below,
draw=none,
append after command={
(\tikzlastnode.north) edge ([shift={(-5pt,0pt)}]\tikzlastnode.north)
edge ([shift={(+5 pt,0 pt)}]\tikzlastnode.north)
}},
opampuplbl/.style ={
above,
draw=none,
append after command={
(\tikzlastnode.south) edge ([shift={(-5pt,0pt)}]\tikzlastnode.south)
edge ([shift={(+5pt,0pt)}]\tikzlastnode.south)
}}
}
\heading{Designnotat}
\title{Trekant-oscillator}
\author{Øyvind Skaaden}
\version{2.0}
\date{\today}
\begin{document}
\maketitle
%Automatisk generert innholdsfortegnelse:------------------
\toc
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
Vi vil ta for oss design av et system som vist i \figref{pic:blokkskjema}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.8\textwidth]{pics/blokkskjema.png}
\caption{Blokkskjema for trekant-oscillator.}
\label{pic:blokkskjema}
\end{figure}
Systemet skal kun ha en driftsspenning, og skal produsere et trekantsignal med en ønsket frekvens $f_0 $, eller periode $T_0 = \frac{1}{f_0} $ på utgangen $v_2$. Det skal kun være et avvik på $\Delta f_{max} = 10\ 000 $ ppm. Amplituden er ikke viktig i dette systemet.
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
Det er flere måter å generere en trekantpuls, men i dette designet skal operasjonsforsterkere brukes, opamp fra nå av. Det vil bli tatt utgangspunkt i et teknisk notat \cite{notat}.
Vi tar utgangspunk i figur 1 i det tekniske notatet, se \figref{fig:trekantkrets}.
\begin{figure}[htbp]
\centering
\begin{circuitikz}
\draw
(0,0) node[op amp,yscale=-1](opamp){}
(opamp.+) to [short,-] ++(-1,0)
to [R,l_=$R_1$,-] ++(0,-2)
to [short,-] ++(0,-1) coordinate(v2v3)
(opamp.+) to [short,*-] ++(0,1.5) coordinate(leftR)
to [R,l=$R_2$] (leftR-|opamp.out)
to [short,-*] (opamp.out) node[below]{$v_1$} coordinate(V1)
(opamp.-) to node[ground]{} ++(0,-1)
(opamp.up) ++(0,-.5) node[opampdownlbl]{$-V$} -- (opamp.up)
(opamp.down) ++(0,.5) node[opampuplbl]{$+V$} -- (opamp.down)
(opamp.+) to node[below]{$v_3$}(opamp.+)
(5,-0.5) node[op amp](opamp){}
(opamp.-) to[R,l_=$R_3$,-] (V1)
(opamp.-) to[short,*-] ++(0,1.5) coordinate(leftC)
to [C,l^=$C_1$] (leftC-|opamp.out)
to [short,-*] (opamp.out)
to [short,-o] ++(1,0) node[right]{$v_2$}
(opamp.+) to node[ground]{} ++(0,-1)
(opamp.out) to [short,-] ++(0,-2)
to [short,-] (v2v3)
;
\end{circuitikz}
\caption{Skjema for prinsipiell løsning.}
\label{fig:trekantkrets}
\end{figure}
I denne kretsen vil punktet $v_2 $ ha trekantpulsform, sentrert rundt $0$V, fordi vi kretsen ``integrerer'' en konstant spenning.
Vi kan se på det som å integrere en konstant, det vil bli en linje med stigningstall lik konstanen som blir integrert.
Vi bruker dette signalet videre, slik at kretsen bli selv-drivende, slik at vi får et pulstog og ikke bare en enkelt puls.
Signalet vil bevege seg til opampen til venstre bli til et fikantsignal (fordi vi forsterker til metning av opamp), som igjen vil drive opampen til høyre, som genererer trekantsignalet. Det er mulig å se hvordan spenningene $v_1$ og $v_2$ er i forhold til hverandre i \figref{graph:pyGraph}.
Her er motstandene $R_1 $ og $R_2 $ en spenningsdeler mellom $v_1$ og $v_2$ som fører til inngangspenningen $v_3 $. $v_3 $ har formen til $v_2$, men vil ha en mindre amplitude grunnet spenningsdeleren.
Opampen som ligger etter $v_3 $ er en komparator. $v_1$ vil gå mot driftsspenning $+V$ dersom $+$ inngangen eller $v_3$ er større enn $-$ (jord), og bevege seg mot $-V$ dersom $v_3$ er lavere enn jord (negativ spenning).
Den høyre delen, med en opamp, en motstand $R_3 $ og kondensator $C_1 $ er en integrator, som sett i \figref{fig:integrator} eller i \cite{integrator}. Integratoren tidsintegrerer signalet som kommer ut fra $v_1$ og inn på $-$ på opampen. Det vil si at utgangssignalet $v_2$ vil bevege seg mot spenningen på $v_1$, over en periode som er lik tidskonstanten $\tau = R_3 \cdot C_1$.
\begin{figure}[ht]
\centering
\begin{circuitikz}
\draw
(5,-0.5) node[op amp](opamp){}
(opamp.-) to[R,l_=$R_3$,-o]++(-2,0) coordinate(Vi) node[left]{$v_1$}
(opamp.-) to[short,*-] ++(0,1.5) coordinate(leftC)
to [C,l^=$C_1$] (leftC-|opamp.out)
to [short,-*](opamp.out)
to [short,-o] ++(1,0) node[right]{$v_2$}
(opamp.+) to node[ground]{} ++(0,-1)
;
\end{circuitikz}
\caption{Skjema for en integrator.}
\label{fig:integrator}
\end{figure}
Dersom vi integrerer en firkantpuls vil vi få en trekantpuls.
Vi vet fra \cite{integrator} at spenningen $v_2$ i integrator som i \figref{fig:integrator} er gitt ved (\ref{eq:integrator}).
\begin{align}
v_2 = -\frac{1}{R_3 \cdot C_1}\int_0^t v_1 \ \text{d}t
\label{eq:integrator}
\end{align}
Der $v_1$ er inngangsspenningen.
Her vil $\tau$ si hvor lang til det tar for spenningen $v_2$ når metning/driftsspenning dersom inngangsignalet $v_1$ er en firkantpuls.
Vi ønsker at trekantpulsen på $v_2$ både skal gå opp mot positiv driftsspenning og ned mot negativ driftsspenning på en periode.
Ettersom det integratoren bruker en tid $\tau$ for å bevege seg enten opp eller ned, må den totale tiden for en periode, eller én enkelt trekantpuls være $ T = 2\tau $.
Dermed må tiden $ \tau = \frac{1}{2} T $.
Vi ønsker å gå både opp og ned fordi vi ønsker å få et symetrisk og kontinuerlig trekantsignal.
Da må vi starte og stoppe på samme sted, sånn at pulstoget ikke blir forskjøvet opp eller ned i spenning.
Vi kan velge $R_1$ og $R_2$ slik at spenningen $v_3$ ikke blir for stor. Visse opamper kan ha spenningsområder der de begynner å få uønsket opførsel, vi må bare passe på at vi ikke overstiger denne terskelspenningen, $V_T$. Vi må derfor opprettholde (\ref{eq:terskel}).
\begin{align}
|v_3| < V_T \label{eq:terskel}
\end{align}
Vi har dermed formelen (\ref{eq:tidskonstant}).
\begin{align}
\tau &= \frac{1}{2} T = \frac{1}{2f} \label{eq:tidskonstant}
\end{align}
Der $f$ er ønsket frekvens, $T$ er ønsket periode og $\tau$ er tidskonstanten til integratoren.
$R_1 $ og $R_2 $ kan velges slik at $v_3$ holder seg innenfor en terskelspenning, og at $R_2 > R_1$.
\section{Realisering og test}
\label{sec:realisering}
Trekantgeneratoren i dette designet har en ønsket frekvens på $f_0 = 3000$Hz. Vi kan da regne ut en tau ut i fra dette tallet.
\begin{align}
\tau = \frac{1}{2 \cdot 3000 \text{Hz}} = \frac{1}{6} \cdot 10^{-3} \ \text{s} = \frac{1}{6}\ \text{ms} \approx 1.67\ \text{ms}
\end{align}
Siden $\tau = R_3\cdot C_1 $ kan vi velge en av verdiene $R_3 $ eller $C_1 $ for å finne den andre.
Setter $C = 68$nF. Da blir
\begin{align*}
R &= \frac{\tau}{C} \\
R &= \frac{\frac{1}{6} \cdot 10^{-3} \ \text{s}}{68 \cdot 10^{-9}\text{F}} \\
R &\approx 2451\Omega
\end{align*}
Opampen som brukes i kretsen er en LF353P opamp. Den kan oppføre seg ulineært dersom spenningene inn på $+$ og $-$ har en amplitude på over $4.2\text{V}$, $V_T = 4.2$V.
Vi har driftsspenninger $+V=5$V og $-V=-5$V. Bruker Kirchoffs' spennignslov og spenningsdeling og velger $R_1 = 4\text{k}7\Omega $ og $R_2 = 10\text{k}\Omega $ slik at spenningen $|v_3| < 4.2\text{V}$, og da opprettholdes (\ref{eq:terskel}).
Vi har da komponentverdier som sett i Tabell \ref{tab:kompnenter}.
\begin{table}[htbp]
\centering
\caption{Utregnede komponentverdier.}
\begin{tabular}{|c|c|}
\hline\hline
Komponent & Verdi \\\hline
\hline
$R_1$ & $4.7\text{k}\Omega$ \\
$R_2$ & $10\text{k}\Omega$ \\
$R_3$ & $2.5\text{k}\Omega$ \\
$C_1$ & $68$nF \\
OpAmp & LF353P \\ \hline
\hline
\end{tabular}
\label{tab:kompnenter}
\end{table}
Kobler opp kretsen etter figur \ref{fig:trekantkrets} med verdier fra tabell \ref{tab:kompnenter}.
Siden motstanden $R_3 = 2\text{k}5\Omega$ ikke er en standard motstand bruker vi flere andre typer. Resultatet er følgende
$$ R_3 = 2\text{k}2\Omega + 270\Omega = 2470\Omega$$.
Etter målinger med denne motstandsverdien, finner vi at frekvensen var litt for rask. Etter videre testing finner vi at ved motstandsverdien $R_3 = 2509\Omega$ er frekvensen $f_0 = 2.999$kHz.
Nye motstandsverdier er beskrevet i (\ref{eq:motstandsverdi}).
\begin{align}
R_3 = 2.2\text{k}\Omega + 270\Omega + 39\Omega = 2509\Omega \label{eq:motstandsverdi}
\end{align}
Alle komponentverdier er i Tabell \ref{tab:kompnenterFerdig}.
\begin{table}[ht]
\centering
\caption{Utregnede komponentverdier.}
\begin{tabular}{|c|c|}
\hline\hline
Komponent & Verdi \\\hline
\hline
$R_1$ & $4.7\text{k}\Omega$ \\
$R_2$ & $10\text{k}\Omega$ \\
$R_3$ & $2.2\text{k}\Omega + 270\Omega + 39\Omega = 2509\Omega$ \\
$C_1$ & $68$nF \\
OpAmp & LF353P \\ \hline
\hline
\end{tabular}
\label{tab:kompnenterFerdig}
\end{table}
Skjema for ferdig krets i \figref{fig:trekantkretsFerdig}.
\begin{figure}[ht]
\centering
\begin{circuitikz}
\draw
(0,0) node[op amp,yscale=-1](opamp){}
(opamp.+) to [short,-] ++(-1,0)
to [R,l_=$4.7\text{k}\Omega$,-] ++(0,-2)
to [short,-] ++(0,-1) coordinate(v2v3)
(opamp.+) to [short,*-] ++(0,1.5) coordinate(leftR)
to [R,l=$10\text{k}\Omega$] (leftR-|opamp.out)
to [short,-*] (opamp.out) node[below]{$v_1$} coordinate(V1)
(opamp.-) to node[ground]{} ++(0,-1)
(opamp.up) ++(0,-.5) node[opampdownlbl]{$-V$} -- (opamp.up)
(opamp.down) ++(0,.5) node[opampuplbl]{$+V$} -- (opamp.down)
(opamp.+) to node[below]{$v_3$}(opamp.+)
(8.5,-0.5) node[op amp](opamp){}
(opamp.-) to[R,l_=$39\Omega$,-] ++(-2,0)
to[R,l_=$270\Omega$,-] ++(-2,0)
to[R,l_=$2.2\text{k}\Omega$,-] (V1)
(opamp.-) to[short,*-] ++(0,1.5) coordinate(leftC)
to [C,l^=$68$nF] (leftC-|opamp.out)
to [short,-*] (opamp.out)
to [short,-o] ++(1,0) node[right]{$v_2$}
(opamp.+) to node[ground]{} ++(0,-1)
(opamp.out) to [short,-] ++(0,-2)
to [short,-] (v2v3)
;
\end{circuitikz}
\caption{Skjema for den ferdige kretsen med komponentverdier.}
\label{fig:trekantkretsFerdig}
\end{figure}
Med dette koblet opp som vist i figur \ref{pic:ferdigKrets}.
\begin{figure}[ht]
\centering
\subfloat[Ferdig fungerende krets.]{\includegraphics[width=0.45\textwidth]{pics/RenKrets.png}\label{pic:renKrets}}
\hfill
\subfloat[Ferdig fungerende krets med navn.]{\includegraphics[width=0.45\textwidth]{pics/KretsMedNavn.png}\label{pic:kretsMedNavn}}
\caption{Ferdig krets, med og uten navn.}
\label{pic:ferdigKrets}
\end{figure}
Kretsen ble også målt med oscilloscop for å sjekke frekvensen. Se \figref{graph:pyGraph}.
\begin{figure}
\centering
\includegraphics[width=\textwidth]{grafer/Trekantpuls3k.png}
\caption{Måligner av frekvens og utseende på spenninger $v_2$ (trekantpuls) og $v_1$ (firkantpuls).}
\label{graph:pyGraph}
\end{figure}
Målt frekvens er på $f = 2.9999$kHz eller $f = 2999.9$Hz. Dette er innenfor avviket på $\Delta f = 10\ 000$ ppm unna $3000$Hz.
\clearpage
\section{Konklusjon}
\label{sec:konklusjon}
Målet var $3000$Hz, og kretsen klarte å produsere en trekantpuls som hadde en frekvens på $2999.9$Hz. Noe som også er godt innenfor avviket på $10\ 000$ ppm.
\section{Takk}
Takk til Ulrik Bredland for bra samarbeid og gode diskusjoner.
%Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
\phantomsection
\addcontentsline{toc}{section}{Referanser}
\begin{thebibliography}{99}
\bibitem{notat}
Torstein Bolstad,
\emph{Teknisk notat: Trekantgenerator},
NTNU,
TTT4260 Elektronisk sysdemdesign og -analyse,
2019.
\bibitem{integrator}
Wikipedia contributors. (2019, April 4). Op amp integrator. In Wikipedia, The Free Encyclopedia. Retrieved 13:02, April 28, 2019, from \url{https://en.wikipedia.org/w/index.php?title=Op_amp_integrator&oldid=891001432}
\end{thebibliography}{}
\clearpage
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\end{document}

View File

@ -0,0 +1,248 @@
%Dokumentinnstillinger:---------------------------------
%Ved å google flitting kan du finne ut hva de forskjellige tingene her betyr, og hvordan du kan gjøre eventuelle endringer.
\documentclass[11pt,norsk]{elsys-design}
\usepackage{subfig}
\tikzset{opampdownlbl/.style={
below,
draw=none,
append after command={
(\tikzlastnode.north) edge ([shift={(-5pt,0pt)}]\tikzlastnode.north)
edge ([shift={(+5 pt,0 pt)}]\tikzlastnode.north)
}},
opampuplbl/.style ={
above,
draw=none,
append after command={
(\tikzlastnode.south) edge ([shift={(-5pt,0pt)}]\tikzlastnode.south)
edge ([shift={(+5pt,0pt)}]\tikzlastnode.south)
}}
}
\heading{Designnotat}
\title{Trekant-oscillator}
\author{Øyvind Skaaden}
\version{1.0}
\date{\today}
\begin{document}
\maketitle
%Automatisk generert innholdsfortegnelse:------------------
\toc
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
Vi vil ta for oss design av et system som vist i \figref{pic:blokkskjema}
\begin{figure}[htbp]
\centering
\includegraphics[width=0.7\textwidth]{pics/blokkskjema.png}
\caption{Blokkskjema for trekant-oscillator.}
\label{pic:blokkskjema}
\end{figure}
Systemet skal kun ha en driftsspenning, og skal produsere en trekantpuls med frekvens $f_0 $, eller periode $T_0 = \frac{1}{f_0} $. Det skal kun være et avvik på $\Delta f_{max} = 10\ 000 $ ppm. Amplituden er ikke viktig i dette systemet.
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
Det er flere måter å generere en trekantpuls, men i dette designet skal operasjonsforsterkere brukes, opamp fra nå av. Det vil bli tatt utgangspunkt i et teknisk notat \cite[notat]{notat} og oppgave 3 på øving 3 \cite[øving 3]{oving3} for å beskrive en prinsipiell løsning.
I både det tekniske notatet og øvingen er kretsen i \figref{fig:trekantkrets}.
\begin{figure}[htbp]
\centering
\begin{circuitikz}
\draw
(0,0) node[op amp,yscale=-1](opamp){}
(opamp.+) to [short,-] ++(-1,0)
to [R,l_=$R_1$,-] ++(0,-2)
to [short,-] ++(0,-1) coordinate(v2v3)
(opamp.+) to [short,*-] ++(0,1.5) coordinate(leftR)
to [R,l=$R_2$] (leftR-|opamp.out)
to [short,-*] (opamp.out) node[below]{$v_1$} coordinate(V1)
(opamp.-) to node[ground]{} ++(0,-1)
(opamp.up) ++(0,-.5) node[opampdownlbl]{$-V$} -- (opamp.up)
(opamp.down) ++(0,.5) node[opampuplbl]{$+V$} -- (opamp.down)
(opamp.+) to node[below]{$v_3$}(opamp.+)
(5,-0.5) node[op amp](opamp){}
(opamp.-) to[R,l_=$R$,-](V1)
(opamp.-) to[short,*-] ++(0,1.5) coordinate(leftC)
to [C,l^=$C$] (leftC-|opamp.out)
to [short,-*](opamp.out)
to [short,-o] ++(1,0) node[right]{$v_2$}
(opamp.+) to node[ground]{} ++(0,-1)
(opamp.out) to [short,-] ++(0,-2)
to [short,-](v2v3)
;
\end{circuitikz}
\caption{Skjema for prinsipiell løsning.}
\label{fig:trekantkrets}
\end{figure}
I denne kretsen vil punktet $v_2 $ ha trekantpulsform, sentrert rundt $0$V. Dette signalet blir brukt til å drive kretsen.
Her er motstandene $R_1 $ og $R_2 $ en spenningsdeler for inngangspenningen $v_3 $. $v_3 $ har formen til $v_2$, men lavere grunnet spenningsdeleren.
Opampen som ligger etter $v_3 $ er en komparator og $v_1$ vil da gå mot driftsspenning $+V$ dersom $+ $ inngangen eller $v_3 $ er større enn $-$ (jord) og mot $-V$ dersom $v_3$ er lavere enn jord (negativ spenning).
Den høyre delen, med en opamp, en motstand $R$ og kondensator $C$ er en integrator. Den vil integrere inngangssignalet med hensyn på tidskonstanten $\tau$ som oppstår mellom $R$ og $C$.
Dersom vi integrerer en firkantpuls vil vi få en trekantpuls.
Vi vet fra øving 3 at spenningen $v_o $ i integrator som i \figref{fig:integrator} er gitt ved
\begin{align}
v_o = -\frac{1}{\tau}\int v_i \ \text{d}t
\label{eq:integrator}
\end{align}
Der $v_i$ er inngangsspenningen.
\begin{figure}[htbp]
\centering
\begin{circuitikz}
\draw
(5,-0.5) node[op amp](opamp){}
(opamp.-) to[R,l_=$R$,-o]++(-2,0) coordinate(Vi) node[left]{$v_i$}
(opamp.-) to[short,*-] ++(0,1.5) coordinate(leftC)
to [C,l^=$C$] (leftC-|opamp.out)
to [short,-*](opamp.out)
to [short,-o] ++(1,0) node[right]{$v_o$}
(opamp.+) to node[ground]{} ++(0,-1)
;
\end{circuitikz}
\caption{Skjema for en integrator.}
\label{fig:integrator}
\end{figure}
Her vil $\tau$ si hvor lang til det tar for spenningen $v_o $ når metning/driftsspenning. Vi ønsker at denne både skal gå opp og ned på en periode. Dermed må $ T = 2\tau \Leftrightarrow \tau = \frac{1}{2} T $. Vi ønsker å gå både opp og ned fordi vi ønsker å få en symetrisk og kontinuerlig trekantpuls. Da må vi starte og stoppe på samme sted.
Vi kan velge $R{_1}$ og $R{_2}$ slik at spenningen $v{_3}$ ikke overstiger en terskelspenning der opampen begynner å oppføre seg merkelig.
Vi har dermed formelen
\begin{align}
\tau &= \frac{1}{2} T = \frac{1}{2f} \nonumber \\
&\Updownarrow \nonumber \\
f &= \frac{1}{2\tau} = \frac{1}{2RC}
\end{align}
Der $f$ er ønsket frekvens, $T$ er ønsket periode og $\tau$ er tidskonstanten til integratoren.
$R_1 $ og $R_2 $ kan velges slik at $v_3$ holder seg innenfor en terskelspenning, og at $R_2 > R_1$
\section{Realisering og test}
\label{sec:realisering}
Trekantgeneratoren i dette designet har en ønsket frekvens på $3000$Hz. Vi kan da regne ut en tau ut i fra dette tallet.
$$ \tau = \frac{1}{2 \cdot 3000 \text{Hz}} = \frac{1}{6} \cdot 10^{-3} \ \text{s} = \frac{1}{6}\ \text{ms} $$
Siden $\tau = RC $ kan vi velge en av verdiene $R$ eller $C$ for å finne den andre.
Setter $C = 68$nF. Da blir
\begin{align*}
R &= \frac{\tau}{C} \\
R &= \frac{\frac{1}{6} \cdot 10^{-3} \ \text{s}}{68 \cdot 10^{-9}\text{F}} \\
R &\approx 2451\Omega
\end{align*}
Vi kan runde dette opptil $2500\Omega = 2\text{k}5\Omega$
Opampen som brukes i kretsen er en LF353P opamp. Den oppfører seg litt merkelig dersom spenningene inn på $+$ og $-$ er over $|4.2\text{V}|$.
Vi har driftsspenninger $+V=5$V og $-V=-5$V. Velger derfor $R_1 = 4\text{k}7\Omega $ og $R_2 = 10\text{k}\Omega $ slik at spenningen $v_3 < |4.2\text{V}|$.
Vi har da komponentverdier
\begin{table}[htbp]
\centering
\begin{tabular}{|c|c|}
\hline\hline
Komponent & Verdi \\\hline
\hline
$R_1$ & $4\text{k}7\Omega$ \\
$R_2$ & $10\text{k}\Omega$ \\
$R$ & $2\text{k}5\Omega$ \\
$C$ & $68$nF \\
OpAmp & LF353P \\ \hline
\hline
\end{tabular}
\caption{Utregnede komponentverdier.}
\label{tab:kompnenter}
\end{table}
Kobler opp kretsen etter figur \ref{fig:trekantkrets} med verdier fra tabell \ref{tab:kompnenter}.
Siden motstanden $R = 2\text{k}5\Omega$ ikke er en standard motstand bruker vi flere andre typer. Resultatet er følgende
$$ R = 2\text{k}2\Omega + 270\Omega + 39\Omega = 2509\Omega$$
Med dette koblet opp som vist i figur \ref{pic:ferdigKrets}
\begin{figure}[htbp]
\centering
\subfloat[Ferdig fungerende krets.]{\includegraphics[width=0.45\textwidth]{pics/RenKrets.png}\label{pic:renKrets}}
\hfill
\subfloat[Ferdig fungerende krets med navn.]{\includegraphics[width=0.45\textwidth]{pics/KretsMedNavn.png}\label{pic:kretsMedNavn}}
\caption{Ferdig krets, med og uten navn.}
\label{pic:ferdigKrets}
\end{figure}
Kretsen ble også målt med oscilloscop for å sjekke frekvensen. Se figur
\begin{figure}
\centering
\includegraphics[width=\textwidth]{grafer/Trekantpuls3k.png}
\caption{Måligner av frekvens og utseende på spenninger $v_2$ (trekantpuls) og $v_1$ (firkantpuls).}
\label{graph:pyGraph}
\end{figure}
Målt frekvens er på $2.9999$kHz eller $2999.9$Hz. Dette er innenfor avviket på $10\ 000$ ppm unna $3000$Hz.
\clearpage
\section{Konklusjon}
\label{sec:konklusjon}
Ettersom kretsen var uhyre nærme målet på $3000$Hz, kan vi si at kretsen fungerte veldig bra. Målet var $3000$Hz, og kretsen klarte å produsere en trekantpuls som hadde en frekvens på $2999.9$Hz. Noe som også er godt innenfor avviket på $10\ 000$ ppm.
\section{Takk}
Takk til Ulrik Bredland for bra samarbeid og gode diskusjoner.
%Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
\phantomsection
\addcontentsline{toc}{section}{Referanser}
\begin{thebibliography}{99}
\bibitem{notat}
Torstein Bolstad,
\emph{Teknisk notat: Trekantgenerator},
NTNU,
TTT4260 Elektronisk sysdemdesign og -analyse,
2019.
\bibitem{oving3}
ELSYS,
\emph{Øving 3},
NTNU,
TTT4260 Elektronisk sysdemdesign og -analyse,
2019.
\end{thebibliography}{}
\clearpage
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\end{document}

BIN
D3/Design_3.pdf Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

8193
D3/grafer/Trekantpuls3k.csv Normal file

File diff suppressed because it is too large Load Diff

BIN
D3/grafer/Trekantpuls3k.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

39
D3/grafer/graphs.py Normal file
View File

@ -0,0 +1,39 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 13 16:30:58 2019
@author: oyvind
"""
import csv
import matplotlib.pyplot as plt
header = []
data = []
filename = "Trekantpuls3k"
with open(filename + ".csv") as csvfile:
csvreader = csv.reader(csvfile)
header = next(csvreader)
for dataplot in csvreader:
print(dataplot)
values = [float(value) for value in dataplot]
data.append(values)
time = [p[0] * 1000 for p in data]
ch1 = [p[1] for p in data]
ch2 = [p[2] for p in data]
plt.figure(figsize=(12,5))
plt.plot(time,ch1, time,ch2)
plt.xlabel("Tid (ms)")
plt.ylabel("Spenning (V)")
plt.legend(["Trekantpuls","Firkantpuls"], loc="upper right")
plt.savefig(filename + ".png", dpi=300)
plt.show()

BIN
D3/pics/IMG-3083.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
D3/pics/IMG-3083.xcf Normal file

Binary file not shown.

BIN
D3/pics/IMG-3084.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

BIN
D3/pics/IMG-3084.xcf Normal file

Binary file not shown.

BIN
D3/pics/KretsMedNavn.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

BIN
D3/pics/RenKrets.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
D3/pics/blokkskjema.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

57
D3/python/TrekantOsc.py Normal file
View File

@ -0,0 +1,57 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Apr 28 16:08:42 2019
@author: oyvind
"""
import matplotlib.pyplot as plt
freq = 1000
period = 10**3 / freq
cycles = 2
resolution = 1000
upperVolt = 1
lowerVolt = -1
def GenTime():
time = []
for t in range(2 * resolution * cycles):
time.append(t * period / (2 * resolution))
return time
def GenSquare():
square = []
for s in range(cycles):
for h in range(resolution):
square.append(upperVolt)
for h in range(resolution):
square.append(lowerVolt)
return square
def GenCenter(times):
center = []
for i in times:
center.append(0)
return center
time = GenTime()
square = GenSquare()
center = GenCenter(time)
plt.figure(figsize=(12,5))
plt.plot(time, square)
plt.hlines(0, time[0], time[-1], color='k',linestyles='dashed')
plt.title("Test")
plt.xlabel("Tid [ms]")
plt.ylabel("Spenning [V]")
plt.legend(["Pulstog, " + r'$v_1$', "Utgående spenning, " + r'$v_2$', "Terskelspenning, " + r'$V_T$'], loc="upper right")
#plt.savefig(filename + ".png", dpi = 300)
plt.show()

BIN
D4/D4_ØyvindSkaaden.pdf Normal file

Binary file not shown.

392
D4/D4_ØyvindSkaaden.tex Normal file
View File

@ -0,0 +1,392 @@
%Dokumentinnstillinger:---------------------------------
%Ved å google flitting kan du finne ut hva de forskjellige tingene her betyr, og hvordan du kan gjøre eventuelle endringer.
\documentclass[11pt,norsk]{elsys-design}
\usepackage{subfig}
\usepackage{mathtools}% automatically loads amsmath
\usepackage{wrapfig,lipsum,booktabs}
\tikzset{opampdownlbl/.style={
below,
draw=none,
append after command={
(\tikzlastnode.north) edge ([shift={(-5pt,0pt)}]\tikzlastnode.north)
edge ([shift={(+5 pt,0 pt)}]\tikzlastnode.north)
}},
opampuplbl/.style ={
above,
draw=none,
append after command={
(\tikzlastnode.south) edge ([shift={(-5pt,0pt)}]\tikzlastnode.south)
edge ([shift={(+5pt,0pt)}]\tikzlastnode.south)
}}
}
\heading{Designnotat}
\title{Pipetonefilter}
\author{Øyvind Skaaden}
\version{2.0}
\date{\today}
\begin{document}
\maketitle
%Automatisk generert innholdsfortegnelse:------------------
\toc
%Selve rapporten:------------------------------------------
\section{Problembeskrivelse}
\label{sec:innledning}
Vi skal ta for oss et system som beskrevet i figur \ref{fig:blokkdiagram}:
\begin{figure}[htbp]
\centering
\includegraphics[width=0.9\textwidth]{pics/Pipetonefilter.png}
\caption{Blokkdiagram over systemet.}
\label{fig:blokkdiagram}
\end{figure}
Systemet skal fungere som et pipetonefilter for å fjerne uønsket støy på et lydsignal. Vi ønsker at filteret kun skal fjerne den uønskede støyen og la resten av lydsignalet bevege seg gjennom filteret uendret.
Systemet skal ta inn et signal $v_1$, og sende ut et signal $v_2$ som har fjernet den uønskede støyen.
\section{Prinsipiell løsning}
\label{sec:prinsipielllosning}
For å fjerne støy på en spesifikk frekvens kan vi bruke et båndstopp-filter. Det kan designes slik at det ressonerer med en bestemt frekvens og dermed stopper den frekvensen fra å slippe gjennom. Et bånd er i denne sammenhengen et område rundt en stoppfrekvens $f_0$, der bredden er $\pm\Delta f$ rundt et punkt $f_0$. Den slipper gjennom alle frekvenser utenom frekvensen $f_0$ og et område rundt $\Delta f$. Se figur \ref{fig:bandstop}, der den røde linjen er forholdet mellom frekvens og demping.
\begin{figure}[htbp]
\centering
\includegraphics[width=0.8\textwidth]{pics/Bandstop.png}
\caption{Frekvensdiagram for båndstoppfilter.}
\label{fig:bandstop}
\end{figure}
En krets som kan skape en slik oppførsel er en båndstoppkrets som vist i figur \ref{circ:1BSF}.
\begin{figure}[htbp]
\centering
\begin{circuitikz}
\draw
(0,3) coordinate(vinn)
to [R, l=$R_1$,o-*] ++(3,0) coordinate(R1)
to [C, l=$C_1$] ++(0,-1)
to [american inductor, l=$L_1$,-*] ++(0,-2) coordinate(L1)
to [short,-o] (0,0)
(R1) to [short, -o] ++(3,0) coordinate(vout)
(L1) to [short, -o] ++(3,0)
(vinn) to [open, v=$V_{inn}$] ++(0,-3)
(vout) to [open, v=$V_{ut}$] ++(0,-3)
;
\end{circuitikz}
\caption{Skjema for en båndstoppkrets.}
\label{circ:1BSF}
\end{figure}
Siden både kondensatorer og spoler har en impedans som er frekvensavhengig kan vi finne frekvensen da begge resonnerer, altså når de begge får en lav reell impedanse til sammen.
Dersom vi tar utgangspunkt i skjemaet i \figref{circ:1BSF}. Da har impedansene:
\begin{itemize}
\item Motstand: $Z_{R_1} = R_1$
\item Kondensator: $Z_{C_1} = -j\frac{1}{\omega C_1}$
\item Spole: $Z_{L_1} = j\omega L_1$
\end{itemize}
Der $Z_{R_1}$, $Z_{C_1}$, $Z_{L_1}$ er impedansene, $j$ er det komplekse tallet $j = \sqrt{-1}$ og $\omega$ er vinkelhastigheten, kan også skrives som i (\ref{eq:vinkelhastighet}), der $f$ er frekvensen.
\begin{align}
\omega = 2\pi f
\label{eq:vinkelhastighet}
\end{align}
Vi kan da se på hvordan den komplekse amplituden til $V_{ut}$ oppfører seg. Vi bruker Kirchofs' spenningslov om spenningsdeling.
\begin{align}
V_{ut} &= |H(\omega)|\cdot V_{inn} \\
\intertext{Her er $|H(\omega)|$ amplituderesponsen (amplituden til frekvensresponsen)}
V_{ut} &= \frac{|Z_{C_1}+Z_{L_1}|}{|Z_{R_1}+Z_{C_1}+Z_{L_1}|}\cdot V_{inn} \label{eq:impedanseStart} \\
&= \frac{\left|j\omega L_1 + \frac{1}{j\omega C_1}\right|}
{\left|R_1 + j\omega L_1 + \frac{1}{j\omega C_1}\right|} \cdot V_{inn} \\
&= \frac{\left(\omega L_1 - \frac{1}{\omega C_1}\right)}
{\sqrt{\left(R_1\right)^2 + \left(\omega L_1 - \frac{1}{\omega C_1}\right)^2}} \cdot V_{inn} \\
&= \frac{1}
{\sqrt{\frac{\left(R_1\right)^2}{\left(\omega L_1 - \frac{1}{\omega C_1}\right)^2} + 1}} \cdot V_{inn}
\label{eq:amplituderespons}
\end{align}
Vi kan i (\ref{eq:amplituderespons}) se at utgangssignalet er avhengig av $R_1$, $L_1$ og $C_1$. Merk at dersom vi velger motstanden $R_1 = 0\Omega$ vil signalet ut være likt inn, $V_{ut} = V_{inn}$. Vi må derav velge en $R_1$ tilstrekkelig stor.
Ettersom vi ønsker å dempe inngangsignalet når kretsen resonnerer, altså at $V_{ut}\rightarrow 0$, kan vi se på når telleren i (\ref{eq:impedanseStart}) er lik $0$.
\begin{align}
j\left(\omega L_1 - \frac{1}{\omega C_1}\right) &= 0 \\
\omega L_1 + \frac{1}{\omega C_1} &= 0 \\
\omega &= \frac{1}{\sqrt{L_1C_1}} \\
\shortintertext{Bytter ut $\omega = 2\pi f_0$}
f_0 = \frac{1}{2\pi\sqrt{L_1C_1}} \label{eq:frekvensResonnans}
\end{align}
Vi har nå en måte å regne ut den resonnerende frekvensen til en krets som i figur \ref{circ:1BSF}.
Vi ser at motstanden $R_1$ ikke er i likning (\ref{eq:frekvensResonnans}), men den er i nevneren i (\ref{eq:amplituderespons}).
Dersom vi ønsker $V_{ut}$ så liten som mulig må vi kun velge en tilstrekkelig stor motstand, slik at uttykket beveger seg raskere mot $0$.
Den kan også gjøres varierbar ved å bruke en variabel motstand.
Ved den resonnerende frekvensen, vil leddet med spolen $L_1$ og kondensatorem $C_1$ ha en veldig liten reel impendanse, med andre ord; veldig lite motstand.
Ved Kirchoffs spenningslov vil da mesteparten av spenningen ligge over motstanden $R_1$ dersom den er større enn motstanden til spolen og kondensatoren.
For å få en tilstrekkelig stor demping av frekvensen, må vi velge en stor nok motstand $R_1$, men i følge (\ref{eq:amplituderespons}) vil denne også gjøre området $\Delta f$ bredere.
Vi kan tenke oss at amplituderesponsen til et system er en trampoline, dersom vi trykker ned et sted på trampolinen vil vi ``dempe'' området vi trykker ned.
Dersom vi deretter trykker enda hardere, vil vi også ta med oss et område rundt der vi trykker.
Dette området blir større desto hardere vi trykker.
Det samme gjelder systemet vi jobber med nå, desto mer vi demper, desto større område demper vi også. Dersom dempingen øker vil også $\Delta f$ også øke.
Vi velger derfor $R_1$ slik at vi oppnår ønsket demping av støyen vi prøver å fjerne.
Vi ønsker å ikke endre på andre deler av lydsignalet vårt enn støyen. Et problem med å bruke en krets som i figur \ref{circ:1BSF} er at den har får en veldig stor $\Delta f$ ved de dempingsnivåene vi ønsker.
For å forebygge dette, kan vi legge flere av den typen krets i serie, som beskrevet i kapittel 4 i \textit{Enkle prinsipper for støyfjerning} av Lars Lundheim \cite{notat}. Dempingen vil ikke bare summeres, men den vil bli tilnærmet multiplisert.
Siden hver av filterene krever en del strøm, er det lurt å legge inn en buffer, slik at vi ikke endrer på signalet fordi vi ikke klarer å levere tilstrekkelig med strøm.
Vi ønsker også å høre på resultatet etter fjærning av støy, så vi trenger også en buffer eller forsterker for å drive en høyttaler.
Som buffer kan vi bruke operasjonsforsterkere, opamper, for å ta inn et signal og sende ut det samme signalet, men med mulighet til å levere mye mer strøm. Vi bruker to opamper i denne kretsen, $OP_1$ og $OP_2$.
Den ferdige kretsen blir da som i figur \ref{circ:ferdigKrets}.
\begin{figure} [htbp]
\centering
\begin{circuitikz}
\draw
% Første filter og inngang
(0,3) coordinate(v1)
to [R, l=$R_1$,o-*] ++(3,0) coordinate(R1)
to [C, l=$C_1$] ++(0,-1)
to [american inductor, l=$L_1$,-*] ++(0,-2) coordinate(L1)
to [short,-o] (0,0)
(v1) to [open, v=$V_{inn}$] ++(0,-3)
% Buffer 1
(R1)+(2.5,0) node[op amp,yscale=-0.5,xscale=0.5](op1){}
(op1.up)+(0,0.6) node[label={[font=\footnotesize]above:$OP_1$}] {}
(op1.+) to [short] ++(-0.5,0)
to [short] ++(0,-0.245)
to [short] (R1)
(op1.out) to [short, *-] ++(0,-0.7)
to [short] ++(-1.19, 0)
to [short] (op1.-)
% Andre filter
(op1.out)
to [R, l=$R_2$,-*] ++(3,0) coordinate(R2)
to [C, l=$C_2$] ++(0,-1)
to [american inductor, l=$L_2$,-*] ++(0,-2) coordinate(L2)
to [short] (L1)
% Buffer 2
(R2)+(2.5,0) node[op amp,yscale=-0.5,xscale=0.5](op2){}
(op2.up)+(0,0.6) node[label={[font=\footnotesize]above:$OP_2$}] {}
(op2.+) to [short] ++(-0.5,0)
to [short] ++(0,-0.245)
to [short] (R2)
(op2.out) to [short, *-] ++(0,-0.7)
to [short] ++(-1.19, 0)
to [short] (op2.-)
% Utgang
(op2.out) to [short, -o] ++(1,0) coordinate(v2)
(v2) +
(0,-3) to [short, o-] (L2)
(v2) to [open, v=$V_{ut}$] ++(0,-3)
;
\end{circuitikz}
\caption{Fullstendig krets.}
\label{circ:ferdigKrets}
\end{figure}
Her vil komponentene $C_1 = C_2$ og $L_1 = L_2$. Motstandene settes slik at vi oppnår ønsket demping av støy. Utgangen kan også drive en høyttaler.
\section{Realisering og test}
\label{sec:realisering}
\subsection{Realisering}
Det første som gjøres er å finne ut hvilken frekvens som skal fjernes. Måler lydsignalet. \figref{pic:maalingAvTopp} viser frekvensdiagrammet til $V_{inn}$, støyet ligger på frekvensen $f_0 = 2.53$kHz.
\begin{figure}[ht]
\centering
\includegraphics[width=\textwidth]{pics/MaalingAvTopp.png}
\caption{Frekvensdiagram av $V_{inn}$.}
\label{pic:maalingAvTopp}
\end{figure}
For å realisere kretsen i figur \ref{circ:ferdigKrets}, må vi velge noen komponenter.
Ettersom $R_1$ og $R_2$ kun bestemmer hvor mye demping som blir gjort, og at vi ikke kan bestemme bredden, velges det å bruke variable motstander med en motstandsverdi på $10\text{k}\Omega$.
Vi vet også at $C_1 = C_2$ og $L_1 = L_2$. Vi velger en spole med verdi $L_1 = L_2 = 100\text{mH}$. Vi kan da bruke (\ref{eq:frekvensResonnans}) for å finne $C_1$ og $C_2$.
\begin{align*}
f_0 &= \frac{1}{2\pi\sqrt{L_1C_1}} \\
C_1 &= \frac{1}{L\left(2\pi f\right)^2} \\
C_1 &= \frac{1}{100\text{mH}\left(2\pi\cdot 2.53\text{kHz} \right)^2} \\
C_1 &\approx 39.6\text{nF}
\end{align*}
\begin{wraptable}{r}{8cm}
\caption{Komponentverdier.}
\begin{tabular}{|c|c|}
\hline\hline
Komponent & Verdi \\\hline
\hline
$R_1$ & $10\text{k}\Omega$ (Variabel motstand) \\
$R_2$ & $10\text{k}\Omega$ (Variabel motstand) \\
$L_1$ & $100\text{mH}$ \\
$L_2$ & $100\text{mH}$ \\
$C_1$ & $33$nF \\
$C_2$ & $33$nF \\
OpAmp & LF353P \\ \hline
\hline
\end{tabular}
\label{tab:kompnenter}
\end{wraptable}
Den nærmeste standardverdien på kondensatoren er $33$nF, tester om denne verdien demper støyen tilstrekkelig.
Frekvensen som dempes vil endres litt grunnet endring av kondensator, sjekker hvor langt unna. Tar utgangspunkt i (\ref{eq:frekvensResonnans}).
\begin{align}
f_0 &= \frac{1}{2\pi\sqrt{L_1C_1}} \nonumber\\
&= \frac{1}{2\pi\sqrt{100\text{mH}\cdot 33\text{nF}}}\nonumber\\
&\approx 2.77\text{kHz}
\end{align}
Siden vi demper så mye som vi gjør, vil området som dempes være ganske stort. $\pm200$Hz av $f_0$ er innenfor området som dempes.
Vi bruker også operasjonsforsterkeren (opamp) LF353P, som har to opamper innebygget.
Da har vi alle komponentene listet i tabell \ref{tab:kompnenter}.
\vspace*{1cm}
Kretsen er da som følger, skjema i figur \ref{circ:ferdigKretsKomponenter} og ferdig oppkoblet i figur \ref{pic:kretsIRL}.
\begin{figure} [htbp]
\centering
\begin{circuitikz}
\draw
% Første filter og inngang
(0,3) coordinate(v1)
to [vR, l=$10\text{k}\Omega$,o-*] ++(3,0) coordinate(R1)
to [C, l=$33\text{nF}$] ++(0,-1)
to [american inductor, l=$100\text{mH}$,-*] ++(0,-2) coordinate(L1)
to [short,-o] (0,0)
(v1) to [open, v=$V_{inn}$] ++(0,-3)
% Buffer 1
(R1)+(2.5,0) node[op amp,yscale=-0.5,xscale=0.5](op1){}
(op1.up)+(0,0.6) node[label={[font=\footnotesize]above:LF353P}] {}
(op1.+) to [short] ++(-0.5,0)
to [short] ++(0,-0.245)
to [short] (R1)
(op1.out) to [short, *-] ++(0,-0.7)
to [short] ++(-1.19, 0)
to [short] (op1.-)
% Andre filter
(op1.out)
to [vR, l=$10\text{k}\Omega$,-*] ++(3,0) coordinate(R2)
to [C, l=$33\text{nF}$] ++(0,-1)
to [american inductor, l=$100\text{mH}$,-*] ++(0,-2) coordinate(L2)
to [short] (L1)
% Buffer 2
(R2)+(2.5,0) node[op amp,yscale=-0.5,xscale=0.5](op2){}
(op2.up)+(0,0.6) node[label={[font=\footnotesize]above:LF353P}] {}
(op2.+) to [short] ++(-0.5,0)
to [short] ++(0,-0.245)
to [short] (R2)
(op2.out) to [short, *-] ++(0,-0.7)
to [short] ++(-1.19, 0)
to [short] (op2.-)
% Utgang
(op2.out) to [short, -o] ++(1,0) coordinate(v2)
(v2) +
(0,-3) to [short, o-] (L2)
(v2) to [open, v=$V_{ut}$] ++(0,-3)
;
\end{circuitikz}
\caption{Fullstendig krets med komponentverdier.}
\label{circ:ferdigKretsKomponenter}
\end{figure}
\begin{figure}[htbp]
\centering
\includegraphics[width=\textwidth]{pics/Oversikt.JPG}
\caption{Ferdig oppkoblet krets, med komponenter. Den midterste/bakerste variable motstanden er kun for å regulere volumet, uviktig for kretsen.}
\label{pic:kretsIRL}
\end{figure}
\clearpage
\subsection{Test}
For å teste om kretsen fungerte som forventet, er det to hovedtester. Den subjektive, om pipetonen har forsvunnet, og den objektive, om vi har fjernet den veldig spisse toppen som var i figur \ref{pic:maalingAvTopp}.
Det ble gjort to forsøk; et uten noe endring av signalet, og et med demping av signalet. Pipetonen er vedlig definert før demping, men etter er den nesten ikke hørbar. Lyden mister litt klarhet, fordi vi må dempe den spesifikke frekvensen så mye at andre ting også blir litt dempet. Det er ikke ellers noe dårligere lyd.
Siden dette er veldig subjektivt om lyden er bra eller ikke, er det ikke noen tall som er relevante for resultatet.
Ved målinger ser vi at toppen har forsvunnet; vi har dempet pipetonen ca $35$dB, og at vi demper et lite område rundt den frekvensen vi ønsket å fjerne. Se \figref{graph:sammenligningDemping} for sammenligning frekvensdiagrammet til det udempede og dempede signalet.
\textbf{Merk: }\textit{De spisse frekvensene som ligger over den frevkvensen vi ønsket å fjerne er overtoner av den originale pipetonen. De er ikke merkbare i forhold til hvordan grunntonen var før den ble dempet. Disse kan fjernes på tilsvarende måte som grunntonen. }
\begin{figure}[ht]
\centering
\includegraphics[width=\textwidth]{pics/MaalingAvTopp.png}
\includegraphics[width=\textwidth]{pics/MaalingV2Dempet.png}
\caption{Øvre bilde: Frekvensdiagram for $V_{ut}$ før demping. Nedre bilde: Frekvensdiagram for $V_{ut}$ etter demping.}
\label{graph:sammenligningDemping}
\end{figure}
\section{Konklusjon}
\label{sec:konklusjon}
Designet av en krets som fjernet en pipetone fungerte som forventet.
Pipetonen ble fjernet uten at det andre signalet ble for mye forstyrret.
\section{Takk}
Takk til Ulrik Bredland for bra samarbeid og gode diskusjoner.
%Bibliografi: Legg til flere elementer ved å legge til flere \bibitem:--------
\phantomsection
\addcontentsline{toc}{section}{Referanser}
\begin{thebibliography}{99}
\bibitem{notat}
Lundheim L.,
\textit{Teknisk notat:Enkle prinsipper for støyfjerning},
Elsys-2016-LL-2,
NTNU,
2016.
\bibitem{filter}
Eriksen J. A. \& Brastad L.,
\textit{Filterkretser},
Prosjekt i faget FY1013,
NTNU,
2005,
Hentet fra \url{http://web.phys.ntnu.no/~stovneng/FY1013_2005/prosjekt/filterkretser.pdf}.
\end{thebibliography}{}
\clearpage
\appendix
%Tillegg. Flere tillegg legges til ved å lage flere sections:-----------------
\end{document}

BIN
D4/Design_4.pdf Normal file

Binary file not shown.

14
D4/ReserveTing.tex Normal file
View File

@ -0,0 +1,14 @@
\begin{align}
H &= \frac{V_{ut}}{V_{inn}} \label{eq:frekvensresponsStart}\\
|H| &= \sqrt{\text{Re}\left(H\right)^2 + \text{Im}\left(H\right)^2} \label{eq:amplituderesponsStart}
\end{align}
Vi kan bare regne ut $H$ direkte, fordi vi bare deler vekk $V_{inn}$
\begin{align}
H &= \frac{-j\frac{1}{\omega C} + j\omega L}{R-j\frac{1}{\omega C} + j\omega L} \nonumber\\
&\phantom{1}\vdots \qquad\text{Regner ut og forenkler uttrykket} \nonumber\\
H &= \frac{\left(\omega L - \frac{1}{\omega C}\right)^2}{R^2 + \left(\omega L - \frac{1}{\omega C}\right)^2} + j\frac{R\left(\omega L - \frac{1}{\omega C}\right)}{R^2 + \left(\omega L - \frac{1}{\omega C}\right)^2}
\end{align}
Finner deretter amplituderesponsen

BIN
D4/Teknisk notat 4.pdf Normal file

Binary file not shown.

Binary file not shown.

BIN
D4/files/Lydsignal_108.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
D4/pics/Bandstop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

BIN
D4/pics/MaalingAvTopp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
D4/pics/MaalingAvTopp.xcf Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

BIN
D4/pics/MaalingV2Dempet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
D4/pics/Oversikt.JPG Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

BIN
D4/pics/Pipetonefilter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

View File

@ -1,3 +1,3 @@
# TTT4260
# TTT4160
Kilden til designprosjekt 1-4 i TTT4160 Elektronisk systemdesign og analyse. Ferdige PDFer er også her.
Kilden til designprosjekt 1-4 i TTT4160 Elektronisk systemdesign og analyse

220
elsys-design.cls Normal file
View File

@ -0,0 +1,220 @@
\NeedsTeXFormat{LaTeX2e}
\LoadClassWithOptions{article}
\ProvidesClass{homework}[2014/12/16 Class file for homework assignments]
% ----- Options ---------------------------------------------------------------
\newcommand\@opanon{0}
\DeclareOption{anonymous}{\renewcommand\@opanon{1}}
\newcommand\@opnewpage{0}
\DeclareOption{newpage}{\renewcommand\@opnewpage{1}}
\newcommand\@oplargemargins{0}
\DeclareOption{largemargins}{\renewcommand\@oplargemargins{1}}
\ProcessOptions
% ----- Packages --------------------------------------------------------------
% Better fonts with accents
\RequirePackage[T1]{fontenc}
\RequirePackage{babel}
% Required for starred commands
\RequirePackage{suffix}
% Math and electronic symbols
\RequirePackage{amsmath}
\RequirePackage{amsfonts}
\RequirePackage{amsthm}
\RequirePackage{amssymb}
\RequirePackage{mathrsfs}
\RequirePackage{centernot}
\RequirePackage{siunitx}
\RequirePackage{textcomp}
\RequirePackage{gensymb}
% Nice lists
\RequirePackage{enumerate}
\RequirePackage{enumitem}
% Nice images, figures, and listings
\RequirePackage{graphicx}
\RequirePackage{grffile}
\RequirePackage[all]{xy}
\RequirePackage{wrapfig}
\RequirePackage{fancyvrb}
\RequirePackage{listings}
% Drawing
\RequirePackage{pgf}
\RequirePackage{tikz}
\RequirePackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{arrows}
% Electronic drawing
\RequirePackage[european, american currents, american voltages,siunitx]{circuitikz}
\newcommand*{\eq}{=}
% Conditionals
\RequirePackage{ifthen}
% Header & Page Setup
\RequirePackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
\RequirePackage{fancyhdr}
\ifthenelse{\equal{\@oplargemargins}{1}}{}{\RequirePackage{fullpage}}
% Links
\RequirePackage[hidelinks]{hyperref}
% ----- Questions -------------------------------------------------------------
\newcounter{questionCounter}
\newcounter{partCounter}[questionCounter]
% Prefix for questions
\newcommand{\questiontype}[0]{Question}
% Use this if your "written" questions are all under one section
% For example, if the homework handout has Section 5: Written Questions
% and all questions are 5.1, 5.2, 5.3, etc. set this to 5
% Use for 0 no prefix. Redefine as needed per-question.
\newcommand{\writtensection}[0]{0}
% Numbered question
\providecommand{\question}{}
\renewcommand{\question}[0]{%
% Emit \newpage if option `newpage` is present
\ifthenelse{\equal{\@opnewpage}{1}}{%
\newpage
}{}
% Wrap in minipage so that we don't get a line break enywhere in between
\begin{minipage}{\linewidth}%
\stepcounter{questionCounter}%
\vspace{.2in}%
\ifx\writtensection\undefined{}
\noindent{\bf \questiontype\ \arabic{questionCounter}.}%
\else
\ifnum\writtensection=0
\noindent{\bf \questiontype\ \arabic{questionCounter}.}%
\else
\noindent{\bf \questiontype\ \writtensection.\arabic{questionCounter}}%
\fi
\vspace{0.3em} \hrule \vspace{.1in}%
\end{minipage}
}
% Named question, takes one argument
\WithSuffix\providecommand\question*{}
\WithSuffix\renewcommand\question*[1]{%
% Emit \newpage if option `newpage` is present
\ifthenelse{\equal{\@opnewpage}{1}}{%
\newpage%
}{}%
% Wrap in minipage so that we don't get a line break enywhere in between
\begin{minipage}{\linewidth}%
\addtocounter{questionCounter}{1}%
\setcounter{partCounter}{0}%
\vspace{.2in}%
\noindent{\bf \arabic{questionCounter}. #1}%
\vspace{0.3em} \hrule \vspace{.1in}%
\end{minipage}
}
% Override normal section defintions
\renewcommand{\section}[0]{\question}
\WithSuffix\newcommand\section*[1]{\question*{#1}}
% ----- Question Parts --------------------------------------------------------
\newenvironment{alphaparts}[0]{%
\begin{enumerate}[label=\textbf{(\alph*)}]%
}{\end{enumerate}}
\newenvironment{arabicparts}[0]{%
\begin{enumerate}[label=\textbf{\arabic{questionCounter}.\arabic*})]%
}{\end{enumerate}}
\newcommand{\questionpart}[0]{\item}
% ----- Induction Environment -------------------------------------------------
\newenvironment{induction}[0]{%
\begin{description}
}{\end{description}}
\newcommand{\basecase}{\item[Base Case]\mbox{}\\}
\newcommand{\indhyp}{\item[Induction Hypothesis]\mbox{}\\}
\newcommand{\indstep}{\item[Induction Step]\mbox{}\\}
% ----- Answer Box ------------------------------------------------------------
\newcommand{\answerbox}[1]{%
\begin{framed}
\vspace{#1}
\end{framed}}
% ----- Page Setup ------------------------------------------------------------
% Use block style paragraphs
\setlength{\parindent}{0pt}
\setlength{\parskip}{5pt plus 1pt}
\def\indented#1{\list{}{}\item[]}
\let\indented=\endlist
% ----- Title & Header --------------------------------------------------------
\pagestyle{empty}
\pagestyle{fancy}
%\if\@opanon%
\ifthenelse{\equal{\@opanon}{0}}{%
\renewcommand{\maketitle}[0]{%
% Setup header
\setlength{\headheight}{15.2pt}
\setlength{\headsep}{0.2in}
\lhead{\hwclass{} \hwlecture\hwsection}%
\chead{\hwname{} (\hwemail)}%
\rhead{\hwtype{} \hwnum}%
% Setup hrule in header
\renewcommand{\headrulewidth}{0pt}
\headrule{}
% Don't put header on first page
\thispagestyle{plain}
\begin{center}
{\Large \hwclass{} \hwtype{} \hwnum}
\hwname{} (\hwemail)
\today
\end{center}
\renewcommand{\headrulewidth}{0.4pt}
}
}%
{%
\renewcommand{\maketitle}[0]{%
% Make all pages plain
\pagestyle{plain}
% Put header on it's own page
\begin{center}
{\Large \hwclass{} \hwtype{} \hwnum}
\hwname{} (\hwemail)
\today
\end{center}
\renewcommand{\headrulewidth}{0.4pt}
\newpage
}
}
% ----- For usage with pandoc converted documents -----------------------------
\providecommand{\tightlist}{%
\setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
% -----------------------------------------------------------------------------