\chapter{Systemkonstruktion}
% Change this
% I detta kapitel kommer designen av den PCB implementation som utvecklats beskrivas. 

%========================================================%
%                   Systembeskrivning                    %
%========================================================%
\section{Systembeskrivning}
I fig. \ref{fig:systembeskrivning} kan man se en övergripande bild av testsystemet som planerades. Man har en central styrenhet, i detta fall en Raspberry Pi, som styr flera periferienheter och som kan själv styras utifrån, genom ett trådlöst gränssnitt så som Bluetooth eller WiFi. Det är viktigt att skilja mellan olika spänningar i systemet då viss kringutrustning, speciellt analog elektronik som ADCs, kan behöva spänningskällor som inte finns i resten av systemet.

\begin{figure}[ht]
    \centering
    \includegraphics[width=\linewidth]{fig/diagram/systembeskrivning.pdf}
    \caption{Systembeskrivning. Pilarna beskriver dataflödet i systemet. Systemet är uppdelad med avseende på systemspänning, då en ADC kan kräva en bipolär spänningskälla för att även kunna mäta negativa spänningar.}
    \label{fig:systembeskrivning}
\end{figure}

%========================================================%
%                   ADC                                  %
%========================================================%
\section{ADC}
% Unipolar and bipolar power supplies give the exact same performance and usage conditions, though the former requires biasing the common-mode voltage of the patient body (Ucm = (AVDD+AVSS)/2 ).
% The human boy is prone to common-mode drifts because noise easily couples onto the body, much like an antenna. These common-mode drifts may push the input CM-voltage out of the measurable range of the ADC.
% The purpose of the internal BIAS drive amplifier is to bias the patient to maintain the othe elctrode common-mode voltages within the valid range.
% The valid input common-mode range is given by eq.(4).
% The input differential dynamic range is given by eq.(5). 2Vref/Gain 

% See 
% http://e2e.ti.com/support/data-converters/f/73/p/777781/2875264#2875264
% and
% http://e2e.ti.com/support/data-converters/f/73/p/272254/950977#950977

På flera sätt den viktigaste komponenten i systemet är analog-till-digital omvandlaren ADC:n; den komponent som ska läsa in information från den yttre miljön, i detta fall elektroder på huvudet, och omvandla den till en digital representation som kan behandlas av resten av systemet.

Det finns många olika sätt att implementera en ADC och de flesta metoder har både för- och nackdelar. Utmaningen blir då att välja den implementationen som har egenskaper som gynnar den specifika tillämpningen. Speciellt när man ska mäta känsliga, i den bemärkelsen att signalen lätt kan störas av brus, signaler, så är det mycket viktigt att välja en lösning som noggrant kan mäta signalen utan att själv införa för mycket brus. 

Tidigt så bestämdes det att man skulle använda en lösning som innefattar lågpass filter, analog \textit{instrumentförstärkare} och en \textit{sigma-delta} ($\Sigma \Delta$) ADC. Resonemanget är att LP-filtret sållar bort all information utanför frekvensbandet av intresse vid ca. 0-120Hz. Signalen som blir kvar för-förstärks sedan till en nivå som enklare kan mätas av en ADC. Ofta så har en ADC en fix spänningssving; ju mer av spannet signalen utnyttjar, desto noggrannare blir mätningen, sett till signal-to-noise ratio [SNR]. 

$\Sigma \Delta$ använder \textit{oversampling}, alltså att ADC:n samplar i en betydligt högre frekvens än Nyquistfrekvensen\footnote{Nyquistfrekvensen är enligt Nyquist-Shannon teoremet den den samplingsfrekvens som krävs för att kunna återskapa signalen, vilket gör att ingen signalinformation går förlorad. Nyquistfrekvensen är två gånger högre än den högsta frekvenskomponenten i signalen.
\[ f_N > 2\cdot f_{s_\text{max}} \] }. Fördelen med oversampling är att det gör att inherenta bruskällor, som \textit{kvantiseringsbrus}, kraftigt minskas. 

Kvantiseringsbrus är den momentana skillnaden mellan den riktiga analoga signalen och dess digitala representation i ADC:n. Om $\Delta$ är skillnaden mellan två digitala ”nivåer” så är det maximala kvantiseringsfelet alltså $\frac \Delta 2$. Brus som uppstår på det här viset kan anses vara ”vitt”, alltså att det lägger sig uniformt på över alla frekvenser inom frekvensbandet av intresse. Det som $\Delta \Sigma$ metoden ger möjlighet till är \textit{noise shaping}, att skifta bruskomponenter från lägre frekvenser till högre frekvenser, utanför signalbandet, där de sedan kan filtreras bort med ett digitalt filter, eftersom signalen är samplad vid det här laget.\cite[kap. 6]{franco_maloberti_2007}



% \subsection{TI ADS1299}
% {\Large DESCRIBE ADS1299 AND WHY IT IS SUITABLE}



%========================================================%
%                   DATAKOMMUNIKATION                    %
%========================================================%
\section{Datakommunikation inom systemet}
Mycket av designarbetet i projektet lades på att försöka lösa hur data skulle överföras mellan olika delar av systemet.

ADC:n som valdes, ADS1299, använder kommunikationsprotokollet SPI (Serial Peripheral Interface), ett tämligen enkelt protokoll, som i detta fall hade byggts ut med en extra DRDY (data ready) signal för att annonsera för \textit{master}-enheten att data finns tillgänglig att läsa. 
ADS1299 har en data buffer i form av ett skift-register där datan lagras efter varje inläsning. Detta måste läsas innan nästa inläsning, annars skrivs den över och kan ej återskapas. Eftersom detta inte får ske, ställer det \textit{hårda}\footnote{I facklig litteratur ang. realtidssystem skiljer man mellan tidskrav som är \textit{hårda} och \textit{mjuka}. I system med hårda tidskrav så har en viss data bara värde inom en viss tid, och blir värdelös om \textit{deadline} överskrids. Med mjuka tidskrav så tappar datan värde enligt någon tidsfunktion. I detta fall, om deadline överskrids så samplar man fel data, därav hårda tidskrav.} tidskrav på systemet.\cite[kap.~1.1]{tindell1995real}  

% \subsection{SPI protokollet}
% {\Large DESCRIBE THE SPI PROTOCOL HERE OBVS}

\subsection{SPI gränssnitt på ADS1299}
ADS1299 använder sig av 3-wire SPI, med en klocksignal (SCK), en chip-select signal ($\overline{CS}$) och en två-vägs datasignal. ADS1299 är en slavenhet i SPI-sammanhang och kräver därmed att masterenheten (Raspberry Pi) utför läsningen och eventuella skrivningar. Den kan med andra ord inte 'skicka' den inlästa datan till masterenheten utan måste aktivt läsas.

För att masterenheten skall kunna läsa vid rätt tillfälle, när datan har lästs in och omvandlats helt, så har chippet en extra 'Data Ready' ($\overline{\text{DRDY}}$) signal för att komplettera övriga SPI signaler, som annonserar att data finns att läsas.

När ADS1299 annonserar sin data måste alltså masterenheten läsa av hela buffern seriellt inom en viss tidsram som bestäms av sampeltakten på ADS. I nominella fallet är datatakten 250 Hz. Detta innebär att hela läsningen måste utföras inom 4ms från den tidpunkt att datan blev tillgänglig.

Den seriella läsningen av varje sampel har också en datatakt som bestäms av enheten som utför läsningen. Detta kan kallas för bithastigheten, eller \textit{baudrate} på engelska, som innebär hur många informationssymboler som kommuniceras per tid. 

ADS1299 har 8 inläsningskanaler med 24 bitars upplösning på varje kanal. Datan från kanalerna skickas tillsammans med ett 'status' meddelande, även den 24 bitar lång. Tillsammans innebär det att varje sampel som skickas innehåller 216 bitar, och om detta ska skickas 250 gånger i sekunden motsvarar detta \SI{54}{kbaud}.

\clearpage
\section{PCB design}
\textit{Printed circuit board} eller PCB (\textit{sv. mönsterkort}), är i enklaste fallet ett lager med isolerande material, oftast glasfiberepoxi, och ett tunt skikt med kopparfolie i ett visst mönster som utgör elektriska ledare i en krets. Kopparskikt kan finnas på båda sidorna av ett kretskort och även inne i det isolerande materialet för att få \textit{flerlagerskort}. Syftet med att använda en PCB gentemot andra former av prototypkrets såsom 'breadboards' och 'perfboards' är att det underlättar avsevärt i mera komplexa kretsar där komponenterna är mindre, har fler elektriska kopplingar och har en allmänt tätare integration. Genom att använda \textit{electrical design automation} (EDA) verktyg för PCB design så kan man också genom \textit{design rule checks} (DRC) verifiera kretsen på olika sätt innan den tillverkas.

\begin{figure}[ht]
    \centering
    \includegraphics[width=0.8\textwidth]{fig/diagram/PCB_layers_diagram.png}
    \cprotect\caption{Tvärsnitt av ett 4-lagers PCB med väsentliga områden markerade.\\Photo: Rainer Knäpper, Free Art License (\url{http://artlibre.org/licence/lal/en/}), \url{https://commons.wikimedia.org/wiki/File:Bga_und_via_IMGP4531_wp.jpg} }
    \label{fig:pcb_layers}
\end{figure}

I fig. \ref{fig:pcb_layers} ser man en typisk flerlagers PCB. Den har ett topp- och bottenskikt och två inre lager som inte syns utifrån. Olika lager kan kopplas genom att använda en \textit{via}, ett kopparplatterad borrhål som utgör en lodrät ledare. I figuren ser man hur lager 1 och bottenskiktet kopplas ihop. En via som enbart kopplar inre lager kallas för en 'buried' (sv. begravd) via då den inte kan kommas åt utifrån. Dessa brukar undvikas då de kan försvåra felsökning och dessutom inte kan åtgärdas ifall ett tillverkningsfel skulle uppstå. 

\subsection{Motivering}%{Behovet av en PCB}
I början av arbetet var förutsättningen att all hårdvara skulle byggas på \textit{breadboards}/prototypkort med diskreta, hålmonterade komponenter. Detta visade sig dock inte vara möjligt då komplexiteten och tätheten hos elektroniken skulle visa sig kräva en mer sofistikerad lösning. En annan avgörande faktor var signalintegritet. För ett system som mäter små, bruskänsliga signaler så vill man försöka minimera effekterna av induktiv och kapacitiv koppling så mycket som möjligt. Detta görs oftast genom att orientera komponenter och ledningar rätt och minska arean och omkretsen hos ledare. Detta kan självklart styras mycket mer noggrant på en PCB än på andra sorters prototypkort. % nao what

\subsection{Avgränsningar}
I detta fall var man begränsad både av tid men också kostnad. För att tillverkningskostnaden för en PCB ska hållas inom rimliga gränser så måste huvudparametrarna så som storlek, antal lager och strömkapacitet i ledare
inskränkas. Det beslutades därför innan designarbetet påbörjades att den skulle vara dubbelsidig, alltså ha två lager. Detta är vanligen det minsta antalet som behövs för att icke-triviala kretsar ska kunna kopplas utan att behöva \textit{jumpers}, vilket är korta ledare som monteras på i efterhand och som 'hoppar över' andra ledare. 

\subsection{EDA verktyg}
Mångfalden hos EDA program för PCB design är stor men är ofta lämpade för olika sortens design och industrier. Ett alternativ skulle ha kunnat vara Altium Designer, som används i professionella sammanhang och har flest funktioner, men bedömdes efter ett möte med en expert inom området vara för komplicerad för att lära sig att använda inom tiden som vi hade allokerat. 

Första designen gjordes med ett browser-baserat program vid namnet \textit{EasyEDA} (\url{https://easyeda.com/}) som ägs av företaget Shenzhen JLC Electronics Co., Ltd., som även driver PCB tillverningsföretaget JLCPCB (\url{https://jlcpcb.com}) och elektronikkomponentåterförsäljaren LCSC (\url{https://lcsc.com}). Detta gör att EasyEDA har kunnat integrera ett komponentbibliotek över komponenter från LCSC, samt automatiskt skapa en bill of materials (BOM) och en direktbeställning genom JLCPCB. Det förstnämnda är speciellt intressant då ett bibliotek över verifierade komponent 'footprints', kopparmönster som stämmer överens med ledarna på komponenten, kan avsevärt minska designtiden. Alternativet är att manuellt rita/infoga dessa 'footprints' från komponentdatabladet.  

Tyvärr fanns det begränsningar i EasyEDA som gjorde det svårt eller omöjligt att växla mellan olika rutnät för olika komponenter, skapa 'keep-out' områden, där alla form av ledare, även koppar 'pours' exkluderas och skapa icke-typiska hålformer genom PCB:n (i det här fallet skulle en flatkabel igenom kortet enligt designen för Raspberry Pi HATs \cite{raspberrypi_hats_2019}).

KiCad (\url{http://kicad-pcb.org/}) är en open-source PCB design programsvit som innefattar följande kärnprogram: schemaritningsverktyget Eeschema, layoutverktyget PcbNew och Gerbervisaren GerbView. Det finns även program som utökar funktionaliteten som en speciell komponenteditor byggd på PcbNew för att själv skapa komponenter som sedan kan användas i designen och en 3D visare. % och mycket mycket mer.... 
För ytterligare funktionalitet kan man komplettera programmet med insticksmoduler i form av \textit{Python}-skript.

KiCad har sammanfattningsvis funktioner som gör den jämförbar i vissa fall med rent kommerciell mjukvara utan den ingående komplexiteten som program som riktar sig åt experter har, som Altium Designer.

%Hur användes det i projektet.

\subsubsection{Versionshantering av KiCad filer med GIT}
KiCad har, i versionen som användes under detta arbete, ingen stöd för att välja sparfil, utan man har jobbat ständigt mot en och samma sparfil genom hela projektet. Detta har gjort det omöjligt att spara projektet vid ett visst tillstånd eller jobba på flera olika möjliga instanser samtidigt. För detta problem har GIT varit en naturlig lösning, med \textit{commits} som fångar projektets tillstånd vid en viss tidpunkt och \textit{branches} som tillåter flera olika 'förgreningar' från samma grundtillstånd, eller \textit{Master} i GIT terminologi.

Kicad sparar sin data i läsbar form, precis som källkod, vilket gör att GIT även kan använda sina sofistikerade funktioner för att lösa konflikter mellan inkompatibla versioner. 

\subsection{Bill of Materials (BOM)}
En s.k. \textit{Bill of Materials} är vanligtvis en lista över de komponenter som ingår i en design, vad de kostar och eventuellt en länk till en möjlig återförsäljare. PCB kostnaden ingår inte av skälet att priset kan variera kraftigt mellan olika fabriker och vilken slags beställning man ger då fabriker ger ofta mer förmånliga priser ju enklare PCB designen är att tillverka. En mängdbeställning som utnyttjar en hel skiva av PCB råmaterial ger ofta en bättre pris per enhet än små beställningar.

%{\Large INFOGA BOM HÄR} eller i bilagorna










% https://github.com/raspberrypi/hats







