<reponame>lucanatorvs/refactored-robot<filename>StageVerslag/Sources/Ontwerp_van_de_oplossing_en_de_benodigde_onderdelen.tex<gh_stars>0
\chapter{Ontwerp van de oplossing en de benodigde onderdelen}
\label{Ontwerp_van_de_oplossing_en_de_benodigde_onderdelen}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Uit het vooronderzoek is het Zero-EV modem gekozen (Zie hoofdstuk
\ref{De_gekozen_oplossing}). En er is bepaald dat er een oplossing nodig is om
dat modem samen te laten werken met het BMS van EMUS. De communicatie van het
BMS en van het modem is volgens het CAN-protocol. Dus er moet een manier worden
verzonnen om de juiste CAN berichten naar het modem te sturen.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Can berichten}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

De CAN-bus is een robuuste standaard waarmee microcontrollers in een auto data
kunnen uitwisselen. Die data word gestuurd in de vorm van berichten op de CAN
bus. Zo'n bericht heeft een CAN ID, wat aangeeft wat voor data het is, een
lengte en de data in het bericht zelf. Na contact te hebben gehad met Zero-EV,
hebben ze het \ac{dbc} bestand opgestuurd. Dit bestand kan worden gebruikt om
de CAN berichten te decoderen. Hierin staat informatie als: welk apparaat die
berichten genereert, voor welke apparaten die berichten bedoeld zijn, welke
bits en bytes in het CAN bericht welke data bevatten en de schaal en eenheid
van die data. \cite{DBC_File_Database_Intro}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Welke berichten moeten verstuurd worden}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Voor het doeleinde van het project is dit DBC-bestand gebruikt om de juiste CAN
berichten te genereren voor het CCS-modem. Door uit dat bestand te herleiden
welke berichten het CCS-modem verwacht te ontvangen, en wat er in die berichten
moet staan.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Test data}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Initieel tijdens de proof of consept fasen van dit idee stuurden we gewoon test
data naar het CCS-modem. Dat betekent dat we data stuurden in de CAN berichten,
zoals de accuspanning, die met de hand waren gemeten. Dit is echter niet hoe
het uiteindelijke product dient te functioneren. Er moet namelijk naar de CAN
bus van het BMS worden geluisterd om de juiste data te ontvangen.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsubsection{Uiteindelijke data}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

De CAN bericht die het BMS verstuurd zijn beschreven in een handleiding van het
BMS, en toen ontdekt was wat het format daarvan is, kon het BMS worden
uitgelezen. Deze data kan dan worden vertaald naar CAN-berichten die het CCS
modem begrijpt.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Elektronica}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Voor de elektronica is dus een microcontroller nodig die over de CAN-bus kan
communiceren. Er is voor een microcontroller gekozen die compatibel is met de
Arduino \ac{ide}. En daarmee dus met C++ kan worden geprogrammeerd. Hier is
voor gekozen omdat hiermee makkelijk te werken is er dus meer tijd kan worden
besteed aan het ontwerpen en schrijven van de firmware, en minder aan het
instellen en debuggen van de editor/IDE.

Voor de CAN-interface van de microcontroller is een MCP2515 module gekozen
omdat deze goed verkrijgbaar en goedkoop zijn en ook deze module goed kan
communiceren met de CAN-bus en de Arduino. \cite{canbord}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Software}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Deze module communiceert over via de \ac{spi} met de microcontroller. Om de
communicatie makkelijker en de code overzichtelijker te maken is een
bibliotheek van ``Autowp'' \cite{autowp} gebruikt samen met de standaard SPI
bibliotheek van Arduino. Het fijne van deze bibliotheek is dat je de
bits en bytes van de CAN-berichten helemaal zelf kan manipuleren, om zo de
gewenste berichten te krijgen. Een kopie van de firmware is te vinden in
bijlagen \ref{code}.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Prototype}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Voordat de uiteindelijke versie is gemaakt, zijn eerst alle onderdelen
tijdelijk aan elkaar gekopeld in een testopstelling. Pas toen werd
geconcludeerd dat de hardware van het prototype werkt, is het in een behuizing
ingebouwd.

Wel zijn net andere componenten gebruikt, maar die zijn behlave hun kleinere
formaat, voor deze doeleinde functioneel identiek aan het prototype.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Proefopstelling}
\label{sec:proefopstelling}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Het uiteidelijke product dient in een auto ingebouwd en getest te worden, maar
omdat het niet handig is om te testen met een volledige auto, is er een
proefopstelling gebouwd. Met alle onderdelen die nodig zijn om CCS werkend te
krijgen. Zie figuur \ref{fig:proefopstelling} voor een afbeelding van de
proefopstelling.

\begin{figure}[]
    \centering
    \includegraphics[width=0.45\textwidth]{proefopstelling}
    \caption{Proefopstellig voor het CCS-modem}
    \label{fig:proefopstelling}
\end{figure}