CVO CRESCENDO CENTRUM VOOR VOLWASSENENONDERWIJS
ZONVOLGSYSTEEM MET KALENDERPROGRAMMERING
Cursist:
Robbe Van Assche
Projectverantwoordelijke: Linda Van den Broeck
Bedrijf: CVO Crescendo Project ingediend tot het behalen van de titel van Gegradueerde in de Elektromechanica – HBO5 CVO Crescendo ■ Vaartdijk 86 ■ 2800 Mechelen ■ T 015 41 30 45 ■
Optie procesautomatisering
CVO CRESCENDO CENTRUM VOOR VOLWASSENENONDERWIJS
ZONVOLGSYSTEEM MET KALENDERPROGRAMMERING
Cursist:
Robbe Van Assche
Projectverantwoordelijke: Linda Van den Broeck
Bedrijf: CVO Crescendo Project ingediend tot het behalen van de titel van Gegradueerde in de Elektromechanica – HBO5 CVO Crescendo ■ Vaartdijk 86 ■ 2800 Mechelen ■ T 015 41 30 45 ■
Optie procesautomatisering
VOORWOORD Een opleiding in avondschool is geen evident gegeven. Naast de 40-uren werkweek en de dagtaken nog tijd vinden om les te volgen en te studeren is een verwezenlijking op zichzelf. Toch is het me gelukt om deze combinatie te volbrengen met naar mijn gevoel weinig extra moeite. De interesse in de leerstof samenhangend met de manier waarop deze aangebracht is, heeft dit nagenoeg pijnloos gemaakt. Als er retrospectief wordt gekeken naar de voorbije 3 jaar, zijn er serieuze sprongen op vlak van zowel carrière als van intellect genomen. Graag wil ik Jo en Linda hiervoor bedanken om dit mogelijk te maken. Zij voeren hun ‘job’ uit, maar er zijn verschillende manieren om dit aan te pakken. Verder heb ik geluk gehad dat ik in mijn eindwerk een interessegebied verder heb mogen ontwikkelen dat reeds ontwikkeld is via deze opleiding. Elektronica is toch wel een grote portie van de opleiding, waarbij vooral vermogenelektronica de favoriet was. De mechanische ondersteuning die door mijn vader is verzorgd tijdens het eindwerk was ook niet onbelangrijk, waarvoor dank. Nu is het tijd voor een toekomst waarbij ik mijn kennis en kunde verder kan uitbreiden en andere academische uitdagingen kan aangaan. Robbe Van Assche
“De auteur geeft de toelating dit afstudeerwerk voor consultatie beschikbaar te stellen en delen van het afstudeerwerk te kopiëren voor eigen gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit dit afstudeerwerk” Mechelen, 3 juni 2013 Robbe Van Assche
“The author gives permission to make this thesis available for consultation and to copy parts of this thesis for personal use. Every other use is limited by the Belgian copyright, in particular regarding the obligation to make an explicit reference to this work.” Mechelen, 3 juni 2013 Robbe Van Assche
SAMENVATTING Een zonvolgsysteem met kalenderprogrammering is een geautomatiseerde opstelling die de meest optimale positie van een zonnepaneel instelt. Het vermogen dat uit het zonnepaneel gehaald kan worden onder de vorm van elektrische energie wordt hierbij geoptimaliseerd. De positie wordt berekend door met 3 parameters rekening te houden: datum, tijd en locatie. Er worden formules gebruikt om de stand van de zon op dat exacte moment te bepalen. Als het zonnepaneel ingesteld wordt zodat de zonnestralen loodrecht op zijn oppervlak invallen, kan ervan uitgaan worden dat de meest optimale opbrengst verwezenlijkt wordt. Door formules te gebruiken worden de invoerparameters omgevormd tot twee hoeken. Deze hoeken beschrijven eenduidig de positie van de zon. Het betreft hier de azimut en zenit. Ze worden gebruikt om het zonnepaneel in te stellen. Als één of meerdere van de parameters tijd, datum of locatie verandert, worden de azimut en zenit herrekend waarop het zonnepaneel correct ingesteld wordt. Hierdoor wordt er optimaal gebruik gemaakt van de zonne-energie. Invoer gebeurt door het gebruik van de HMI, die de gegevens naar de PLC doorgeeft. De PLC is verantwoordelijk voor de uitvoer van de Azimut en Zenit. Er zijn verschillende formules in de PLC geprogrammeerd, zodat deze twee hoeken door de PLC berekend kunnen worden. Vervolgens stuurt de PLC zijn gegevens door naar de zonnemodule. Deze zonnemodule stuurt twee stappenmotoren aan die de positie van het zonnepaneel bepalen. Hierdoor kan het einddoel bekomen worden: de elektrische energie maximaliseren die uit de zonnestralen gehaald kan worden.
INHOUD Voorwoord ........................................................................................................................................................................... 5 Samenvatting....................................................................................................................................................................... 6 Nomenclatuur ..................................................................................................................................................................... 9 Verklaringen ................................................................................................................................................................... 9 Afkortingen ..................................................................................................................................................................... 9 Vertalingen ....................................................................................................................................................................10 Hoofdstuk 1: INLEIDING ................................................................................................................................................ 1 1.1
ALGEMEENHEDEN ........................................................................................................................................ 1
1.2
PLC ....................................................................................................................................................................... 2
1.3
HMI....................................................................................................................................................................... 2
1.4
Zonnemodule ................................................................................................................................................... 3
1.4.1
Automatische modus .......................................................................................................................... 3
1.4.2
Manuele modus ..................................................................................................................................... 5
Hoofdstuk 2: OMGEVINGSKARAKTERISTIEKEN ................................................................................................. 6 2.1
ALGEMEENHEDEN ........................................................................................................................................ 6
2.2
Locatie................................................................................................................................................................. 7
Hoofdstuk 3: ZONNECOLLECTOREN......................................................................................................................... 8 3.1
ALGEMEENHEDEN ........................................................................................................................................ 8
3.2
Zonnecollectoren............................................................................................................................................ 9
3.2.1 3.3
Fotovoltaïsche systemen ................................................................................................................... 9
Zonnevolgers .................................................................................................................................................14
Hoofdstuk 4: ZONNEMODULE ...................................................................................................................................19 4.1
ALGEMEENHEDEN ......................................................................................................................................19
4.2
Elektronica ......................................................................................................................................................20
4.2.1
Overzicht ................................................................................................................................................20
4.2.2
Microcontroller ...................................................................................................................................22
4.2.3
Motorsturing ........................................................................................................................................24
4.2.4
Printplaat ...............................................................................................................................................25
4.2.5
Voeding ...................................................................................................................................................27
4.3
Programmatie ................................................................................................................................................27
4.3.1
Registers.................................................................................................................................................28
4.3.2
I/O expanders ......................................................................................................................................29
4.3.3
Aansturing stappenmotoren..........................................................................................................33
4.4
Kostprijs ...........................................................................................................................................................33
4.5
Realisatie .........................................................................................................................................................34
Hoofdstuk 5: PLC & INTERFACE ...............................................................................................................................35 5.1
ALGEMEENHEDEN ......................................................................................................................................35
5.2
Netwerk............................................................................................................................................................35
5.3
PLC .....................................................................................................................................................................37
5.3.1
Programmatie ......................................................................................................................................38
5.4
HMI.....................................................................................................................................................................40
5.5
Realisatie .........................................................................................................................................................41
BESLUIT...............................................................................................................................................................................42 Bibliografie .........................................................................................................................................................................42 Lijst van grafieken/ tabellen/ figuren ....................................................................................................................42 6
Bijlagen ......................................................................................................................................................................44 6.1
Bijlage A: Zonneberekeningen ................................................................................................................44
6.1.1
Inleiding .................................................................................................................................................44
6.2
Berekeningen .................................................................................................................................................45
6.3
Bijlage B: Gebruikersbundel ....................................................................................................................49
NOMENCLATUUR V Ω A
Spanning [Volt] Weerstand [Ohm] Stroom [Ampère]
VERKLARINGEN ! !
Topologie: De structuur van een netwerk. Periferisch: Apparatuur die geen deel uitmaakt van de centrale verwerkingseenheid doch wel daarmee is verbonden.
AFKORTINGEN ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
NOAA: ‘National Oceanic And Atmospheric Administration’ NB: ‘Noorderbreedte’, varieert van 0° tot -90° ZB: ‘Zuiderbreedte’, varieert van 0° tot -90° OL: ‘Oosterlengte’, varieert van 0° tot 180° WL: ‘Westerlengte’, varieert van 0° tot -180° GPS: ‘Global Positioning System’ LCD: ‘Liquid Crystal Display’ GUI: ‘Graphical User Interface’ HMI: ‘Human Machine Interface’ PLC: ‘Programmable Logic Controller’ LASER: ‘Light Amplification by Stimulated Emission of Radiation’ PCB: ‘Printed Circuit Board’ IC: ‘Integrated Circuit’ LED: ‘Light Emitting Diode’ IDE: ‘Integrated development environment’ USB: ‘Universal Serial Bus’ SMD: ‘Surface Mountable Device’ TQFP: ‘Thin Quad Flat Pack’ ADC : ‘Analog to Digital Converter’ PWM: ‘Pulse Width Modulation’ I2C: ‘Inter Integrated Circuit Bus’ TWI: ‘Two Wire Interface’ SPI: ‘Serial Peripheral Interface’ UART: ‘Universal Asynchronous Receiver Transmitter’ RISC: ‘Reduced Instruction Set Computer’ EEPROM: ‘Electric Erasable Programmable Read Only Memory’ ALU: ‘Arithmetic Logic Unit’ DIP: ‘Dual in-line package’ RMS: ‘Root Mean Square’ SRAM: ‘Static Random Acces Memory’ SCK: ‘System Clock’ CS: ‘Chip Select’ MOSI: ‘Master Out Slave In’ MISO: ‘Master In Slave Out’
VERTALINGEN ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
Hemisphere: ‘Halfrond’ Equinox: ‘Nachtevening’ Solstice: ‘Zonnestilstand’ Equator: ‘Evenaar’ Equitorial plane: ‘Equatoriaal vlak’ Meridian: ‘Meridiaan’ Latitude: ‘Breedteligging’ Longitude: ‘Lengteligging’ Irradiance: ‘Irradiatie’ Observer: ‘Observator’ North pole: ‘Noordpool’ South pole: ‘Zuidpool’ Wavelength: ‘Golflengte’ Idle: ‘Rusttoestand’ Silicon: ‘Silicium’
1
HOOFDSTUK 1: INLEIDING 1.1
ALGEMEENHEDEN
Dit eindwerk is de synthese van een 3 jaar durende opleiding waar de instrumenten aangereikt werden om elk technisch probleem aan te pakken. Deze instrumenten strekken zich uit van een grondige theoretische achtergrond tot een praktische kennis van de materialen en werking. Als graduaat elektromechanica is het de bedoeling dat een breed spectrum van problemen aangepakt kan worden. Gaande van een grote elektrische motor, tot een klein proportioneel regelventiel. Dit eindwerk belicht echter maar een klein stuk van dit breed technisch spectrum. Als elektromechanicus leer je dat alles verbonden is met elkaar, om zo een overzicht te behouden over het volledige systeem. Hierdoor kunnen de theoretische principes die in de opleiding naar voor komen, hergebruikt worden voor andere disciplines. Het principe van de werking van een LASER (Light Amplification by Stimulated Emission of Radiation) is bijvoorbeeld vergelijkbaar met een operationele versterker die een positieve terugkoppeling heeft. De groene revolutie is tegenwoordig ‘hot topic’ en heeft ook mijn interesse gewekt. De keuze van het eindwerk is gemaakt met de samenhangende uitdagingen in het achterhoofd. Van een zonvolgsysteem zijn de technische uitwerkingen eindeloos, ze zijn echter door de financiële middelen beperkt. De interface van de zonnevolger gebeurt via een HMI (Human Machine Interface). Dit is een grafisch scherm met aanraakbediening, om de koppeling tussen mens en machine mogelijk te maken. In dit geval kan informatie in de vorm van afbeeldingen en tekst worden weergegeven, daarenboven kunnen er ook commando’s via de aanraaklaag en de toetsbediening doorgegeven worden. De PLC (Programmable Logic Controller) ontvangt en verwerkt de informatie van de HMI. Het is de PLC die naar de stuurmodule de stand voor de 2 motoren doorstuurt. Op zijn beurt stelt de stuurmodule deze waarden in. De uitgestuurde waarden worden niet gecontroleerd. Hierdoor is het regelsysteem een open lus.
Hoofdstuk 1: INTRODUCTIE
2
Figuur 1: Topologie netwerk
In Figuur 1 kan je de topologie van de opstelling terugvinden. De opbouw van het netwerk bestaat uit de PLC, de HMI en de zonnemodule. Aan de PLC is een in- en uitgangsbank gekoppeld waarnaar verwezen wordt als decentrale periferie. Hierdoor is het mogelijk om de locatie van het systeem op een bepaalde afstand van de logische controller te plaatsen.
1.2
PLC
De PLC zorgt voor alle logische verwerkingen en berekeningen. In dit project wordt de invoer van datum, tijd en locatie door middel van de HMI naar de PLC doorgeven. Op deze gegevens worden welbepaalde berekeningen uitgevoerd. Hieruit komen twee hoeken die de positie van de zon bepalen. Dit wordt doorgegeven aan de zonnemodule. Via een netwerkinterface communiceert deze PLC met de HMI en met zijn periferische in- en uitgangen. De periferische in- en uitgangen zijn in dit project noodzakelijk om extra in- en uitgangen te creëren. Voor de nodige in -en uitgangen is de PLC ontoereikend. De periferische uitbreidingskaarten kunnen zowel analoge als digitale signalen behandelen. Via de in- en uitgangen communiceert de PLC met de zonnemodule. Hierdoor is een soort van parallelle interface gecreëerd. Het gebruik van deze parallelle communicatie laat toe de positie van de motoren, de status van het systeem en de bedieningsimpulsen door te geven.
1.3
HMI
De HMI is een aanraakscherm dat de communicatie tussen mens en machine verzorgt. Op dit scherm is alle informatie aangaande de status en stand van de motor gevisualiseerd. Welbepaalde parameters worden ingegeven op de HMI. Dit omvat de datum, tijd en locatie op de aardbol. Extra functionaliteit is toegevoegd, om manuele bediening mogelijk te maken. Hierbij is bijvoorbeeld een storm -en schoonmaakstand mogelijk. Dit zijn vooraf ingestelde hoeken waarnaar het zonnepaneel beweegt indien deze geselecteerd zijn. De HMI heeft een LCD-scherm (Liquid Crystal Display) met een extra aanraaklaag. Door de coördinaten van de aangeraakte positie te koppelen aan de grafische informatie die op het LCDscherm weergegeven wordt, kunnen vooraf ingestelde acties uitgevoerd worden. De software van Siemens verzorgt deze koppeling voor de ontwerper. De opmaak van de GUI (Graphical User Interface) is eenvoudig, enkel de visuele inhoud en de uitgevoerde acties dienen gespecifieerd te worden.
Hoofdstuk 1: INTRODUCTIE
1.4
3
ZONNEMODULE De zonnemodule is een module die twee motoren, een stuurprint en een zonnepaneel bevat. Een verduidelijking vind je in Figuur 2. Om een zonnepaneel beweegbaar te maken zijn twee motoren, een mechanische constructie, een motorsturing en het zonnepaneel nodig. In de mechanische constructie bevinden zich de toerentalreducering van de motoren, de eindschakelaars, diverse bedieningselementen en de stuurelektronica.
Figuur 2: Inhoud van de zonnemodule
De stappenmotoren die gebruikt worden in de module, kunnen op verschillende manieren aangestuurd worden. Met de beschikbare apparatuur was het niet mogelijk om de aansturing van de stappenmotoren rechtstreeks via de PLC te verzorgen. De stuurmodules zijn aan te kopen, maar kosten veel geld. Hierdoor is er besloten om een volledige oplossing te ontwerpen. De module is een volledig onafhankelijke module die twee modi heeft. Het kan enerzijds informatie ontvangen van de PLC en anderzijds in een manuele modus werken. In de manuele modus is het mogelijk om als gebruiker door middel van twee potentiometers de hoek van de twee motoren in te stellen. In de automatische modus worden de hoeken door de PLC bepaald.
1.4.1 AUTOMATISCHE MODUS De zonnemodule kan in twee richtingen communiceren met de PLC. Deze bidirectionele communicatie is een samenstelling van meerdere unidirectionele signaallijnen. Unidirectionele communicatie van de PLC naar de zonnemodule: ! !
Positie in graden van de twee motoren. Startcommando voor iedere motor.
Unidirectionele communicatie van de zonnemodule naar de PLC: !
Status van iedere motor.
Hoofdstuk 1: INTRODUCTIE
4
De zonnemodule wacht op het startcommando voor iedere motor. Als het startcommando wordt gegeven, wordt de positie uitgelezen via de parallelle bus en de motor wordt gepositioneerd naar de uitgelezen stand. Tijdens de herpositionering van de motor, geeft de zonnemodule zijn statusverandering door naar de PLC. Indien de PLC dit startcommando geeft neemt hij een statusverandering van de zonnemodule waar. Deze statusverandering wil voor de PLC zeggen dat de motor zijn ingestelde hoek op dat moment wijzigt. Omdat het zonnepaneel aan de motor vasthangt, verandert de positie van het zonnepaneel. Als de motor in zijn gewenste stand staat, weet de PLC dit doordat de status van de zonnemodule wederom veranderd is. Indien de motor zich niet herpositioneert, kan dit gedetecteerd en weergegeven worden op de HMI. Het volledige systeem werkt in automatische modus volgens de volgende sequentie: Stap 1: Invoer van de locatie, datum en tijd via de HMI. Stap 2: De PLC maakt de nodige berekeningen. Stap 3: De uitkomst van de berekeningen van de PLC zijn de zenit en azimut. Stap 4: De zenit en azimut worden doorgestuurd naar de zonnemodule. Stap 5: Zonnemodule stelt de zenit en azimut in en geeft terugkoppeling naar de PLC. Stap 6: De PLC krijgt de terugkoppeling, weet wanneer de motoren worden verplaatst en wanneer ze op hun eindpositie terecht komen. Stap 7: De gewenste hoek is ingesteld. Stap 8: Wanneer de berekende hoek een te groot verschil vertoont met de werkelijk ingestelde hoek, regelt de PLC de zonnemodule terug bij. Hierop worden stappen 2-7 opnieuw doorlopen. Een schematische beschrijving van dit stappenverloop vindt je in Figuur 3 terug.
Figuur 3: Sequentie automatische modus
Hoofdstuk 1: INTRODUCTIE
5
1.4.2 MANUELE MODUS Om de zonnemodule niet volledig afhankelijk te maken van de connectie met de PLC, is er een manuele modus ingebouwd. Deze modus stelt de gebruiker in staat om de positionering van de twee motoren te bepalen. Deze optie maakt testopstellingen zonder PLC mogelijk. Zoals eerder vermeld, kan de stand van de motoren met twee potentiometers ingesteld worden. Deze potentiometers stellen een analoge waarde in die door de zonnemodule op een resolutie van 10-bits wordt ingelezen. Hierop zet de module deze digitale waarde om naar een hoek en wordt deze berekende hoek ingesteld.
+5 10K Potentiometer R1
NAAR ADC
Een potentiometer wordt aan beide zijden verbonden met de voedingspanning. Door de loper te verplaatsen is er een spanningsdeler gecreëerd. Dit is een gevolg van de weerstandsverhouding die verandert. Hierdoor is de spanning op de loper ten opzichte van de massa regelbaar. De aansluitingen van een potentiometer is terug te vinden in Figuur 4.
GND Figuur 4: Principe van een potentiometer
Een resolutie van 10-bit doelt op het volledige bereik van de voedingspanning, die door de ADC omgezet wordt in een 10-bits waarde. Een 10-bitswaarde gaat decimaal van waarde 0 tot 210-1. Indien de voedingspanning 5V bedraagt, komt de digitale waarde 1024 overeen met de analoge spanning 5V, de digitale waarde 0 komt overeen met de analoge spanning 0V. Als een voedingspanning van 5V aangelegd wordt, dan stelt iedere bit 5V/1024 of 4,883mV voor. De software verschaalt dit bereik van 0 tot 1024 op een lineair wijze naar 0 tot 180. Hierdoor is het mogelijk de gewenste hoek in graden in te stellen met de potentiometer. In Figuur 5 is te zien dat bij een omzetting van een analoge naar een digitale waarde er stapsgewijs tewerk gegaan wordt. Hierdoor bepaald de grootte van de stappen de resolutie van de omzetting. Een groter aantal stappen heeft tot gevolg dat het bereik in een groter aantal delen wordt verdeeld. Hierdoor stijgt de resolutie. Figuur 5: Resolutie van een meetwaarde
6
HOOFDSTUK 2: OMGEVINGSKARAKTERISTIEKEN 2.1
ALGEMEENHEDEN
Als basisparameters zijn er de tijd, datum en locatie op de wereldbol. Met deze gegevens wordt de positie van de zon bepaalt. Deze positie wordt via formules omgevormd naar de twee hoeken die de stappenmotoren dienen in te nemen. De berekeningen die op de 3 basisparameters uitgevoerd worden, gebeuren door de PLC. Om de theorie achter deze berekeningen te begrijpen, is het nodig om dieper op deze materie in te gaan. Het samenstellen van de formules geeft verschillende resultaten die niet voldoen aan de nodige nauwkeurigheid. Het NOAA (National Oceanic And Atmospheric Administration) heeft een Excel-bestand ter beschikking die de nodige berekeningen bevat. Om de complexiteit van het project niet op te voeren, zijn de formules van het NOAA gebruikt. Deze zijn omgezet naar wiskundige formules. Na deze omzetting zijn de wiskundige formules geprogrammeerd in de PLC. De nauwkeurigheid van de tussenresultaten speelt hierbij een belangrijke rol. De tussenresultaten bestaan uit kommagetallen met veel beduidende cijfers, wat de programmatie bemoeilijkt. Om afrondingsfouten te vermijden is er in de PLC gekozen om een 32-bit formaat te gebruiken voor de tussenresultaten. De berekeningen zijn als bijlage toegevoegd. De cursussen met achterliggende theorie en principes staan op de bijgevoegde CDROM. De theorie die achter de berekeningen schuilt, is uiterst interessant. Enkele voorbeelden: -De duurtijd van een dag varieert, waardoor hij niet steeds exact 24uur is. Dit is te wijten aan de elliptische baan die de aarde rond de zon maakt, waarbij de invloed van de verschillende zwaartekrachten op welbepaalde krachtmomenten de resultante anders beïnvloeden. -De invloed van de seizoenen, wat een gevolg is van de verschuiving van 23,5° die de as van de aarde maakt ten opzichte van een as, loodrecht op het elliptisch vlak, heeft een effect op de positie die de zon heeft ten opzichte van de aarde in een tijdsverloop van een jaar.
Hoofdstuk 2: OMGEVINGSKARAKTERISTIEKEN
2.2
7
LOCATIE
Het geografische coördinatenstelsel wordt gebruikt om een locatie op de aarde uniek te bepalen. De drie parameters die nodig zijn om de locatie te bepalen zijn de breedte-, lengte- en hoogteligging. Om het stelsel te vereenvoudigen, kan de hoogteligging weggelaten worden. Met de breedte- en lengtebepaling is het voor de zonneberekeningen mogelijk om een locatie eenduidig te bepalen.
Figuur 6: Geografische coördinatenstelsel
In Figuur 6 kan je een verduidelijking zien van het geografische coördinatenstelsel. De aarde wordt in twee verdeeld door de evenaar (Equator) en de Greenwich meridiaan (Greenwich meridian). Met deze doorsneden zijn nulpunten gecreëerd. Vanaf de nulmeridiaan verdeelt de bol zich in graden. De telling van de lengtegraad gebeurt vanaf de Greenwich meridiaan. Lengtegraad λ in Figuur 6 gaat van 0° tot 180° in het oostelijk halfrond. In het westelijk halfrond varieert de lengtegraad van 0° tot -180°. Breedtegraad ϕ in Figuur 6 gaat van 0° tot 90° in het noordelijke halfrond, terwijl de breedtegraad varieert van 0° tot -90° in het westelijke halfrond. De hoogtegraad is de lengte van het middelpunt van de aarde tot de plaats op het oppervlakte van de bol. Deze afstand wordt in Figuur 6 voorgesteld door de afstand |CG| en |OC|. In de praktijk wordt er gerefereerd naar de zeespiegel. Hierbij is een vaste afstand van |CG| bepaalt en als ‘nulpunt’ genomen. Hoogten kunnen dan in meters uitgedrukt worden vanaf dit punt, omdat ze relatief ten opzichte van dit ‘nulpunt’ refereren. In de praktische uitwerking van dit project, worden de hoogtegraden niet gebruikt. Een voorbeeld: de locatie van Brussel in coördinaten beschreven geeft 50,846667 NB (ϕ) en 4,354722 OL (λ). In de berekeningen komt de breedte- en lengtegraad resp. naar voren komen als ‘latitude’ en ‘longitude’.
8
HOOFDSTUK 3: ZONNECOLLECTOREN 3.1
ALGEMEENHEDEN
Zonnecollectoren zijn energieomvormers. Ze vormen elektromagnetische energie van de zon om naar een andere energievorm. De zon zendt energie onder de vorm van elektromagnetische straling uit naar alle richtingen. Deze energie wordt in verschillende frequenties uitgestuurd. Naar gelang de frequentieband, identificeert men dit als een andere ´soort´ straling. Gamma- stralen hebben als inhoud elektromagnetische straling van zeer hoge frequenties, terwijl infrarode straling een elektromagnetische straling is met een spectrale inhoud van een lagere frequentie. De energie van de zon legt een lange weg af totdat ze op het aardoppervlak terechtkomt. Tijdens deze verplaatsing, worden er bepaalde frequenties geabsorbeerd door de verschillende media waar het zonlicht door schijnt. Om de verschillende berekeningsmethoden te standaardiseren wordt er gebruik gemaakt van een gemiddelde zonnestraling, ook wel gemiddelde insolatie of irradiatie genoemd. De gemiddelde irradiatie kan je in Grafiek 1 terugvinden. Exact uitgedrukt is dit de totale gemiddelde spectrale inhoud van de elektromagnetische straling die op de aarde binnenvalt op een gemiddelde afstand van de aarde tot de zon. Deze constante bedraagt 1366,1W/m2.
Grafiek 1: Zonneconstante van 1366,1W/m2
Hoofdstuk 3: ZONNECOLLECTOREN
3.2
9
ZONNECOLLECTOREN
Er bestaan diverse energieconvertoren die zonne-energie omvormen. Om zonnecollectoren te behandelen zonder onnodig uit te breiden, is gekozen om enkel fotovoltaïsche collectoren te bespreken. De efficiëntie van fotovoltaïsche cellen ligt ver onder de efficiëntie van bijvoorbeeld parabolische collectoren. Parabolische collectoren zijn gemaakt van spiegels die de zonnestralen op een welbepaald punt richten. Hierbij reflecteren ze de volledige spectrale inhoud vanaf het oppervlakte van de spiegels tot op dit brandpunt. De volledige energie van de zon wordt hierdoor benut en net daarom worden deze technieken gebruikt voor grote installaties, waarbij de efficiëntie een grote rol speelt.
3.2.1 FOTOVOLTAÏSCHE SYSTEMEN Een fotovoltaïsche cel is een element dat de elektromagnetische energie van het zonlicht omvormt naar elektrische energie, waarbij er geen gebruik gemaakt wordt van bewegende onderdelen. Hieruit komt voort dat deze systemen weinig onderhoud vereisen en een lange levensduur hebben. Tijdens de werking van deze zonnecellen stoten ze geen CO2 uit, waardoor de term ‘groene energie’ naar boven komt. Er moet echter opgemerkt worden dat de fabricage van deze panelen ook een bepaalde energie vergt. Net zoals de permanente magneten die deel uitmaken van een generator die in een windmolen gebruikt is, is het delven en het verwerken van de grondstoffen zeer energievretend. Hierdoor dient de term ‘groene energie’ met een korrel zout genomen te worden, omdat naar het totale plaatje gekeken dient te worden. De fotovoltaïsche cellen bestaan al enkele decennia. Het keerpunt waarbij de nodige energie om het paneel te maken kleiner werd dan de energie die een zonnecel opbrengt heeft echter lang op zich laten wachten. In Figuur 12 kan je de evolutie van de efficiëntie die de zonnecellen bezitten terugvinden. De werking van een zonnecel rust op twee gedopeerde halfgeleiders, namelijk van het p- en ntype. Door de inwerking van de elektromagnetische straling en de fotonen op het oppervlakte van de zonnecel, staat er door de compositie van specifieke p- en n-type materialen een spanning over de anode en kathode. Meerdere pn-juncties worden ook gebruikt. Uit de zonnecel volgt gelijkspanning en -stroom die ten gevolge van deze excitatie van elektronen plaatsvindt. De elektrische energievorm is het bruikbare product dat door een zonnecel geleverd wordt. De fotovoltaïsche cellen kunnen opgebouwd zijn uit één of meerdere lagen. Deze lagen vormen juncties van p- en n-type materiaal. Deze lagen worden steeds op een substraat bevestigd. Glas, metaalfolie of welbepaalde polymeren kunnen hiervoor gebruikt worden. Een cel kan uit verschillende materialen gemaakt worden, waarbij vooral de opbrengst, levensduur en kostprijs de belangrijkste factoren zijn. Enkele van deze materialen zijn silicium, cadmium, telluride, koper, indium, gallium en selenide. Er worden composities gemaakt zoals Cadmiumsulfide (CdS), Kopersulfide (Cu2S), Galliumarsenide (GaAs), Koper indium gallium selenide (CuIGaSe2), Koper telluride (CuTe). Een halfgeleider is gekarakteriseerd door een vrij nauwe energiekloof. Deze energiekloof of ‘band gap’ is terug te vinden in Figuur 7. Typisch is dit een fractie van een elektronvolt tot enkele elektronvolts. Elektronen kunnen door een foton geëxciteerd worden van de valentie- naar de geleidingsband. Na de excitatie is er een elektron-gat paar gemaakt. Het elektron-gat paar houdt een substantieel deel van de energie afkomstig van het foton vast. Na het maken van dit elektron-
Hoofdstuk 3: ZONNECOLLECTOREN
10
gat paar scheidt de pn-junctie het geëxciteerde elektron met het bijhorende gat van elkaar. Hierdoor is een spanningsverschil opgebouwd tussen de p- en n-junctie.
Figuur 7: Verschillende energieopbouw tussen geleider, halfgeleider en isolator (a) Voor geleiders (conductors), is het grootste ingenomen energieniveau in het midden van de energieband gesitueerd. (b) Voor halfgeleiders (semiconductor) is het hoogste ingenomen energieniveau gelijk aan het bovenste energieniveau van de bandkloof. De energiekloof tussen de geleidingsband is echter zeer klein. (c) Als de energiekloof zeer groot is, is het materiaal een isolator (insulator).
Figuur 8: Bandkloven bij enkele halfgeleiders De golflengte van licht in correspondentie met de energiekloof is eveneens weergegeven. De meeste halfgeleiders die in een zonnecel gebruikt worden, hebben een energiekloof (Eg) die met de fotonen overeenkomen die zich in het bijna-infrarode of het zichtbare licht bevinden.
Hoofdstuk 3: ZONNECOLLECTOREN
11
De zonnecel opgebouwd van kristallijn silicium was de eerste praktische zonnecel. Deze is uitgevonden in 1954. Dit type zonnecel heeft op schaal van massaproductie in zijn huidige vorm, met het huidige productieprocedé, een efficiëntie van 14-20%. De kristallijne cellen hebben nog steeds de hoogste efficiëntie tussen de verschillende zonnecellen met een enkele laag. Ze bezitten 75% marktaandeel. Er bestaan mono-, polykristallijne en amorfe zonnecellen. De amorfe ‘thinfilm’ silicium zonnecellen zijn goedkoper te produceren, maar bezitten slechts een efficiëntie van 6-10%. Tussen de kristallijne en amorfe zonnecellen liggen de CIGS (Koper Indium Gallium Selenide) en CdTe-CdS (Cadmium Telluride-Cadmium Selenide) zonnecellen. Deze hebben typisch een rendement van 10%.
Figuur 9: Overzicht van de verschillende zonnecellen
Figuur 10: Opbouw van verschillende zonnecellen
Hoofdstuk 3: ZONNECOLLECTOREN
12
In Figuur 10 vindt je enkele voorbeelden terug van composities die gebruikt worden in zonnecellen. Door het gebruik van verschillende juncties wordt de residuele elektromagnetische energie, die door de voorgaande laag komt, omgezet in een spanning. Hierbij is een welbepaalde laag geoptimaliseerd om een welbepaalde golflengte op te nemen en de resterende golflengtes door te laten. Er kan verder nog opgemerkt worden dat er bij de modules van mono- en polykristallijne opbouw een verschil tussen de diverse cellen is. Omdat de mono-kristallijne cellen op een cilindrische wafer gemaakt worden, blijft bij het versnijden tot cellen een deel van de wafer over. Omdat de wafer van polykristallijne cellen echter een rechthoekige vorm heeft, is hier geen overschot. Dit verschil in vorm van de wafer is te zien in de opbouw van de modules. Waar de cellen van de mono kristallijne module (a) een octogonale vorm hebben, bezitten de cellen van een polykristallijne module (b) een rechthoekige vorm. Dit is weergegeven in Figuur 11.
Figuur 11: Verschil tussen mono- en polykristallijne modules
In Figuur 12 kan je een overzicht vinden van de verschillende fotovoltaïsche technieken met hun bijhorende efficiënties. Hierbij is duidelijk te merken dat de technieken met meerdere juncties een positieve invloed hebben op de efficiëntie. Op economisch vlak hangt het ervan af of de toegevoegde efficiëntie ook een afname in totale kostprijs met zich meebrengt. Omdat deze zonnecellen een hoge absorptie coëfficiënt bezitten, is het benodigde materiaal kleiner, wat de eenheidsprijs ook lager maakt.
Hoofdstuk 3: ZONNECOLLECTOREN
Figuur 12: Technologische evolutie van de zonnecel
13
Hoofdstuk 3: ZONNECOLLECTOREN
3.3
14
ZONNEVOLGERS
Zoals de naam al zegt, is een zonnevolger een systeem dat gemaakt is om de zon te volgen. Hiervoor bestaan verschillende systemen. Het meest optimale systeem zorgt ervoor dat de elektromagnetische stralen loodrecht op het zonnepaneel terechtkomen. Indien dit niet het geval is treden er zogenaamde cosinusverliezen op. Dit wil zeggen dat er maar een deel van de totale energie opgevangen wordt. In Figuur 13 is dit verduidelijkt: als GBn niet gelijk is aan GB, treden er cosinusverliezen op.
Figuur 13: Cosinusverliezen
Bij een statisch systeem wordt het zonnepaneel onder een welbepaalde hoek β geplaatst zodat de cosinusverliezen beperkt blijven op een welbepaalde locatie op de aarde. Hiervoor bestaan berekeningen waarbij de breedte- en lengtegraad in rekening gebracht worden. Een extra parameter is de positie van de piek in insolatie in de tijdspanne van een jaar. Een voorbeeld hiervan zijn zonneboilers die op een dak gemonteerd zijn, waarbij men in de winterperiode een zo hoog mogelijk rendement wil behalen. Hierdoor heeft de ruimte die verwarmd wordt meer energie ter beschikking. Door de hellingshoek β te veranderen, kan men de piek verschuiven om zo de meest optimale efficiëntie in te stellen die de toepassing vergt. Richtwaarden zijn 30-40°. Een zonvolgsysteem kan in diverse opstellingen uitgevoerd worden. De kostprijs is hierbij de grootste drijfveer. Men heeft enerzijds de kostprijs van het systeem en anderzijds de opbrengst van het systeem. Bij een zonnestudie wordt er in kaart gebracht wat de maximale opbrengst is op een specifieke locatie, voor ieder zonvolgsysteem. Er zijn principieel 4 verschillende volgsystemen.
Hoofdstuk 3: ZONNECOLLECTOREN
15
Een volledig volgend zonvolgsysteem dient twee bewegingen van de zon bij te houden: azimut en zenit. De azimut is de hoek die de zon inneemt op het vlak van de evenaar, gerekend vanaf het noorden met de klok mee. Zenit is de elevatie van de zon. In Figuur 14 zijn diverse parameters gedefinieerd. Wat hier interessant is, is de verandering van de declinatie δ. In Figuur 15 kan je zien dat er een verandering van de declinatie optreedt door de verschuiving van de rotatie-as van de aarde ten opzichte van een as loodrecht op het rotatievlak van de aarde om de zon. Deze verandering van declinatie is de verandering van δ.
Figuur 14: Zonneparameters
Figuur 15: Jaarlijkse variatie van declinatie
Hoofdstuk 3: ZONNECOLLECTOREN
16
Door de verandering van de declinatie δ, verandert de zon van hoogte in de lucht als men vanuit het perspectief van iemand op het aardoppervlakte kijkt. Om deze omzetting van perspectief te differentiëren, spreekt men van de zenit. Dit is de hoek die de zon maakt met de as noord-zuid. Dit is terug te vinden onder de parameter ϕ in Figuur 16.
Figuur 16: Zenit ϕ van de zon
Een zonnevolger dient de zenit en azimut te bepalen en te volgen. Het is mogelijk om deze waarden te meten met een pyrometer, of te berekenen. In Figuur 17 worden de 4 verschillende zonvolgsystemen opgelijst. Het meest optimale systeem is de volledige zonnevolger die de verandering van de azimut en zenit bijhoudt (a). Een ander systeem kan enkel de azimut bijhouden (b). Hierbij is de impact op het systeem direct zichtbaar, omdat er maar één motor aanwezig is. Een opstelling die rond de as west-oost (c) en noord-zuid (d) de zon volgt, is ook mogelijk. Bij een volledige zonnevolger die zowel de azimut als de zenit volgt, kan men een maximum aan insolatie bereiken. De variatie van de insolatie tijdens de winter en zomer ligt hier op het maximaal haalbare. Dit is te zien in Grafiek 2. Als enkel de azimut gevolgd wordt, ziet men ten opzichte van deze maximum insolatie een verlies ten gevolge van de beruchte cosinusverliezen. In Grafiek 3 is dit merkbaar. Het is merkbaar dat de zonnevolger is geoptimaliseerd zodat er ’s middags geen verliezen plaatsvinden. Hier vinden geen verliezen ten opzichte van de volledige zonnevolger plaats. Een zonnestudie is op basis van deze insolatie-data een keuze maken tussen de verschillende systemen met de kostprijs als doelstelling.
Hoofdstuk 3: ZONNECOLLECTOREN
Figuur 17: Zonvolgsystemen
Grafiek 2: Insolatie bij volledige zonnevolger
17
Hoofdstuk 3: ZONNECOLLECTOREN
Grafiek 3: Insolatie bij azimut-volger
18
19
HOOFDSTUK 4: ZONNEMODULE 4.1
ALGEMEENHEDEN
De praktische uitwerking van dit project heeft als basis een beweegbare lamp die in de entertainmentsector gebruikt werd. De beweging van de lamp wordt verzorgd door stappenmotoren. Iedere stappenmotor is bevestigd op een afzonderlijke as. Deze assen staan loodrecht op elkaar. Het geheel kan hierdoor perfect dienst doen als volledige zonnevolger. De ene motor kan de beweging van de azimut voor zijn rekening nemen, terwijl de andere motor de zenit kan instellen. Het dient ook mogelijk te zijn om commando’s van de PLC door te sturen naar de zonnemodule om de gewenste hoeken in te stellen. Er zijn bij deze module zowel hardware- als softwarematige uitdagingen. Het hardwarematige gedeelte omvat vooral de elektronische schakelingen en de mechanische constructie van alle componenten. Voor deze elektronische schakeling is besloten om een volledige printplaat te ontwerpen die aan de noden voldoet. Deze printplaat bestaat uit twee koperlagen met een kern uit glasvezel. Een professionele firma fabriceert deze printplaat. Het softwarematige aspect omvat de programmatuur van de microcontroller die de volledige module voor zijn rekening neemt. Om zeker te zijn dat het concept werkt, wordt er eerst een ‘proof of concept’ opgebouwd, waarbij de werking van de soft- en hardware aangetoond wordt. De volgende stap is het ontwerp van een printplaat of PCB (Printed Circuit Board). De opbouw van de gemaakte printplaat volgt hierna, wat inhoud dat de componenten gesoldeerd worden op de plaatsen waar het koper bloot is gelaten. De verbindingen met de motoren en het monteren van alle componenten in een aangepaste mechanische structuur is de laatste stap. Het ontwerpen van een printplaat wordt in een elektronische opleiding volledig uitgelegd. Voorgaande ervaring was niet aanwezig bij het begin van het project. Er is gekozen voor ‘surface mount’ vormfactoren om de inbouwhoogte en printgrootte te minimaliseren. Hierdoor is bijvoorbeeld een weerstand met de vormfactor ‘0603’ 0,76mm breed en 1,5mm lang is. Dat dit een uitdaging is, dient niet gezegd te worden.
Hoofdstuk 4: ZONNEMODULE
4.2
20
ELEKTRONICA
4.2.1 OVERZICHT Het ontwerp van de zonnemodule dient aan enkele voorwaarden te voldoen. : - De stuurprint moet galvanisch gescheiden zijn van de PLC; - De zonnemodule moet door een PLC aangestuurd worden; - De zonnemodule moet onafhankelijk kunnen werken. Voor de communicatie met de PLC is een seriële bus met een eigen protocol mogelijk. De voornaamste reden om hier gebruik van te maken, is de besparing aan het aantal in- en uitgangen. Dit kan echter zeer complex worden. Daarom is er besloten om een parallelle bus te maken voor de informatieoverdracht. Er is gekozen om de stand van de motor in graden door te sturen van de PLC naar de zonnemodule. Een startsignaal dient begeleidend bijgevoerd te worden per motor en een statussignaal per motor is eveneens noodzakelijk. Door 7 datalijnen te gebruiken kunnen er 27 combinaties gemaakt worden. Als er softwarematig in de microcontroller 27 vermenigvuldigd wordt met 2, komt men aan 256. Hierdoor is een resolutie van 2 graden mogelijk. Door de 7 datalijnen per motor plus het begeleidende start- en statussignaal komt het totaal op 9 signalen per motor. In totaal vergt het systeem 16 uitgangen en 2 ingangen van de PLC. Dit resulteert in 16 ingangen en 2 uitgangen op de zonnemodule. Je vindt een verduidelijking in Figuur 18.
Figuur 18: Communicatielijnen
Een andere vereiste is het galvanisch gescheiden systeem. Dit wordt verzorgd door ‘optocouplers’ te gebruiken. Een ‘optocoupler’ is de combinatie van een LED (Light Emitting Diode) en een fototransistor. Als de LED aangestuurd wordt, gaat de fototransistor in geleiding en is het signaal doorgegeven. Door deze schakeling is het mogelijk om licht als communicatiemedium te gebruiken. Het resultaat is dat de elektrische kring van de diode elektrisch gescheiden is van de elektrische kring waar de fototransistor een deel van maakt. Eventuele fouten of overspanningen van de zonnemodule of de PLC worden niet overgezet op elkaar. Een verduidelijking van een signaal dat van de PLC komt en dat naar de microcontroller gaat, is terug te vinden in Figuur 19. Hierbij limiteert de weerstand A de stroom door de diode. 24V/3kΩ = 8mA. De stroom die door de LED loopt bedraagt 8mA. Op de uitgang verzorgt A’ de functie van ‘pull-up weerstand’. Hierbij zorgt A’ ervoor dat er 5V op signaallijn ‘MOT1_MUX0’ terechtkomt. Als de fototransistor in geleiding gaat, wordt het signaal op ‘MOT1_MUX0’ 0V. Voor de pull-up-weerstand wordt 1kΩ
Hoofdstuk 4: ZONNEMODULE
21
gebruikt, en niet de typische waarde van 10kΩ, om zoveel mogelijk dezelfde waarden te gebruiken. Dit heeft een vermindering van de materiaallijst tot gevolg.
+5
A' 0603 1K
MOT1_MUX0_PLC
U10
A
MOT1_MUX0
0603 3K MOT1_MUX0 GND2
GND
Figuur 19: Opto coupler ingang
Voor Figuur 20 geldt hetzelfde principe, hier wordt echter de diode aangestuurd door de microcontroller. Er wordt opgemerkt dat de voeding van de microcontroller zich op een hoogte van 5V bevindt en de voeding van de PLC op 24V-0,7V. Hierbij is de voeding van de PLC niet exact 24V omdat er zich in de stuurkast een diode bevindt dat voeden vanaf de stuurmodule naar de stuurkast onmogelijk maakt. De spanningsval over de pn-junctie van een diode met typenummer 1N4007 bedraagt ongeveer 0,7V.
PLC
MOT1_RD
U29
J
J' 0603 3K
MOT1_RD_PLC
0603 1K MOT1_RD GND
GND2
Figuur 20: Opto coupler uitgang
Om aan de laatste voorwaarde te voldoen, kan de module manueel bediend worden door middel van potentiometers om de hoeken in te stellen. De werking van de potentiometers is echter reeds uitgelegd in 1.4.2 Manuele modus op pagina 5.
Hoofdstuk 4: ZONNEMODULE
22
4.2.2 MICROCONTROLLER Door reeds opgebouwde ervaring met het Arduino-platform, is besloten om dit te gebruiken als basis. De module dient een geïntegreerd systeem te zijn, omdat het later als didactische opstelling in het CVO blijft staan. Hierdoor is de chip van de Arduino gebruikt, om het systeem compatibel te maken met de Arduino IDE (Integrated development environment). Een IDE is een softwareomgeving waarin de software geschreven kan worden. Het is mogelijk om via een extra programmeermodule de microcontroller te programmeren. Een Arduino-bord heeft een geïntegreerde USB-poort (Universal Serial Bus), waardoor enkel een USB-kabel nodig is. De bewuste microcontroller is de ATMega328p-AU. De vormfactor van deze geïntegreerde schakeling is een SMD (Surface Mount Device), waarvan de footprint een TQFP32 (Thin Quad Flat Pack) is. In Figuur 21 vindt je de aansluitingen van de chip. Hierbij is het zichtbaar dat er 3 pinbanken beschikbaar zijn. Pin-bank B, C en D. Pin-bank C bevat voornamelijk de poorten die met de ADC (Analog to Digital Converter) verbonden zijn: PC5, PC4, PC3, PC2, PC1, PC0. PC6 is de reset pin. Pin-bank B en D zijn digitale banken. Verder zijn er diverse aansluitingen voor de voedingspanning VCC en de massa-aansluiting GND. Voor de ADC is er een aparte voeding AVCC en spanningsreferentie AREF. Deze mogen op dezelfde potentiaal als VCC aangelegd worden. Verder bezit de microcontroller over 2 aansluitingen voor het oscillatie-kristal. Dit kristal brengt de snelheid waarmee de microcontroller werkt van 1MHz die de interne RC-oscillator voorziet, naar 16Mhz. Dit kristal wordt in een pi-netwerk aangesloten met twee condensatoren. Deze aansluitingen zijn PB6 en PB7, en worden geconfigureerd als XTAL1 en XTAL2. Indien er bij een bepaalde pin PCINTxx staat, wil dit zeggen dat er een ‘pin change interrupt’ waargenomen kan worden. De hardware matige interrupts worden gekenmerkt door INTx. Deze pinnen hebben de mogelijkheid om de microcontroller te onderbreken en een welbepaalde code uit te voeren bij een verandering van de status. De status van de pin wordt geïnterpreteerd als een logische 0 als het onder 20-30% van VCC is, en als een logische 1 als de spanning zich boven 60-70% van VCC bevindt. PWM-functionaliteit (Pulse Width Modulation), is dan weer terug te vinden bij de OCxA of OCxB notering, wat er op doelt dat deze functionaliteit aan interne timer A of B gekoppeld is. De seriële datacommunicaties ‘I2C’, ‘SPI’ en ‘UART’ zijn ook aanwezig in deze microcontroller. ‘I2C’ is ontwikkeld door Philips en kan door redenen van patenten niet gebruikt worden door Atmel. Hierdoor refereert Atmel hiernaar als TWI. I2C staat voor ‘Inter Integrated Circuit Bus’. De variant van Atmel, TWI, staat voor ‘Two Wire Interface’. ‘SPI’, wat gebruikt wordt om de programmeercode in de microcontroller te krijgen, staat voor ‘Serial Peripheral Interface’. Deze seriële datatechniek wordt ook gebruikt om te communiceren met enkele componenten in dit project. Als laatste is er de ‘UART’ mogelijkheid. Dit staat voor ‘Universal Asynchronous Receiver Transmitter’, maar wordt ook vernoemd als ‘RS232’. De Arduino bezit een chip dat deze ‘RS232/UART’ omzet naar ‘USB’, om via dit serieel protocol de programmeercode te uploaden naar de chip. Om van deze mogelijkheid gebruik te kunnen maken is het echter noodzakelijk dat er reeds een stuk code op de chip aanwezig is. Deze speciale code die het programmeren via ‘UART/RS232’ mogelijk maakt, wordt de ‘bootloader’ genoemd.
Hoofdstuk 4: ZONNEMODULE
23
Figuur 21: ATmega328p-AU pinout
De verschillende datacommunicaties hebben specifieke datalijnen die gekoppeld zijn aan de softwarematige functionaliteit binnenin de microcontroller. Hieronder vindt je een opsomming van de gebruikte datalijnen met hun corresponderende aansluitingen op de microcontroller. Een toelichting over de werking van I2C en RS232 is in dit project echter niet aan de orde. Om deze reden wordt er hierover niet verder uitgewijd. SPI is echter wel een deel van dit project, maar dit wordt samen met de programmatietechniek uitgebreid uitgelegd in 4.3.2 I/O expanders. ! ! !
I2C: SDA (PC4), SCL (PC5) SPI: MOSI (PB3), MISO (PB4), SCK (PB5) RS232/UART: TXD (PD1), RXD(PD0)
Verder is de architectuur van deze microcontroller gebaseerd op een 8-bit RISC-processor (Reduced Instruction Set Computer). De registers, wat banken zijn waar data in weggeschreven wordt, zijn van 8-bit lengte. Omdat er 32KB EEPROM (Electric Erasable Programmable Read Only Memory) aanwezig is in de microcontroller, heeft ieder van deze 32 000 banken van 8-bitlengte een verschillend adres. Een 8-bit microcontroller houdt ook in dat er een 8-bit ALU (Arithmetic Logic Unit) aanwezig is. De ALU is de eenheid die de berekeningen maakt. Iedere instructie is een combinatie van een vermenigvuldiging, deling, optelling of een aftrekking. De 8-bit-ALU kan in één cyclus van de klok op twee 8-bit waarden een bewerking uitvoeren.
Hoofdstuk 4: ZONNEMODULE
24
4.2.3 MOTORSTURING Om de stappenmotoren aan te sturen wordt er gebruik gemaakt van 2 H-bruggen. Een H-brug is een schakeling waarbij 4 vermogen-transistors gebruikt worden om een welbepaald spanningsverschil over twee klemmen te plaatsen. In Figuur 22 kan je de topologie van een dubbele H-brug terugvinden. Deze opstelling wordt gebruikt om de twee spoelen van de bipolaire stappenmotor aan te sturen. Om beweging in de stappenmotor te krijgen, dienen de spanningen over de spoelen in een welbepaalde volgorde te variëren. Hierbij vormen transistorparen Q1-Q4, Q2-Q3, Q5-Q8 en Q6-Q7 koppels. Dit betekent dat hetzelfde stuursignaal naar deze transistoren gestuurd wordt. De aansturing kan met een 4- of 8-stapssequenties werken. De stappenmotor heeft een welbepaalde resolutie, bijvoorbeeld 1,8 graden per stap. In de 4-stapssequentie komt iedere stap overeen met deze resolutie. Als de stappenmotor in de 8-stapssequentie aangestuurd wordt, is de stapresolutie verhoogt tot 0,9° per stap. In Tabel 1 vindt je de twee mogelijke stapsequenties terug. In Figuur 22 worden transistoren gebruikt die interne vrijloopdioden bezitten. De H-brug die gebruikt is in de L298P chips zijn hier niet mee uitgerust. Om de transistoren toch te beschermen, zijn er ‘schottky-diodes’ aanwezig. Dit zijn diodes met een lage spanningsval en een snelle schakel- en recuperatietijd. Het verschil in spanningsval is significant. Waar de spanningsval bij een standaard diode 700mV bedraagt, is de spanningsval bij de ‘schottky-diode’ 170mV.
Figuur 22: Principe dubbele H-brug Tabel 1: Stapsequenties bipolaire stappenmotoren
4-stapssequentie Stap Q1-Q4 1 AAN 2 AAN 3 UIT 4 UIT
Q2-Q3 UIT UIT AAN AAN
Q5-Q8 AAN UIT UIT AAN
Q6-Q7 UIT AAN AAN UIT
8-stapssequentie Stap Q1-Q4 1 AAN 2 AAN 3 AAN 4 UIT 5 UIT 6 UIT 7 UIT 8 UIT
Q2-Q3 UIT UIT UIT UIT AAN AAN AAN UIT
Q5-Q8 AAN UIT UIT UIT UIT UIT AAN AAN
Q6-Q7 UIT UIT AAN AAN AAN UIT UIT UIT
Hoofdstuk 4: ZONNEMODULE
25
Als de 4- of 8-stapssequentie wordt gevolgd van resp. stap 1 tot stap 4, of van stap 1 tot stap 8, draait de stappenmotor kloksgewijs. Er dient opgemerkt te worden dat in het geval de laatste stap van de sequentie bereikt wordt, er naar de eerste stap terug gegaan wordt om zo een vloeiende opeenvolging van stappen te verwezenlijken. Indien de sequentie in tegengestelde zin wordt doorlopen, draaien de motoren in tegengestelde zin.
4.2.4 PRINTPLAAT Om de gebruiker een praktische gebruikersinterface te verschaffen, is een bedieningspaneel opgemaakt. In Figuur 23 vindt je dit bedieningspaneel terug. Ook hier is op de printplaat aan zowel de voor- als achterkant een koperlaag aanwezig. Met de schakelaars die in een zwarte DIP (Dual in-line package) uitgevoerd zijn, is het mogelijk om de verschillende instellingen van de zonnemodule te selecteren. Deze functionaliteiten zijn terug te vinden in Bijlage B: Gebruikersbundel. Op dit bedieningspaneel is eveneens een microcontroller gemonteerd. Deze microcontroller heeft geen functie, maar kan naar de toekomst toe gebruikt worden bij eventuele uitbreiding van de zonnemodule. Naast de markering ‘D11’ zijn 3 LEDs terug te vinden. Deze witte LEDs zijn verbonden met het zonnepaneel om een belasting op het zonnepaneel te kunnen simuleren.
Figuur 23: Bedieningsprint zonnemodule
In Figuur 24 kan je het ontwerp van de stuurprint terugvinden. Deze PCB neemt de motorsturing en de communicatie met de PLC voor zijn rekening. Dit ontwerp is geflankeerd door een foto van de printplaat waar de elektronische componenten gemonteerd zijn. In Bijlage B: Gebruikersbundel zijn deze ontwerpen samen met het elektronische schema terug te vinden. De stuurprint bevat een transformator met meerdere wikkelingen. Via twee ‘buck-convertoren’ wordt de gelijkgerichte en afgevlakte spanning van de transformator naar een gepaste spanning gebracht en gestabiliseerd. Voor de 5V spanning van de microcontroller is een ‘buck’- of ‘stepdown’ convertor gebruikt. Voor de elektrische kring die het vermogen naar de motoren verzorgt is eveneens een ‘buck-convertor’ aanwezig. De gestabiliseerde uitgangsspanning van deze omvormer bedraagt 15V.
Hoofdstuk 4: ZONNEMODULE
26
Figuur 24: Stuurprint zonnemodule
De stuurprint bevat 18 communicatiesignalen naar de PLC, de bedieningssignalen en de nodige signalen voor de H-bruggen. Omdat de microcontroller onvoldoende in- en uitgangspinnen ter beschikking heeft, wordt er gebruik gemaakt van zogenoemde ‘I/O Expanders’. Deze uitbreidingschips bezitten 8 in- of uitgangen, het is mogelijk om deze pinnen als ingang én als uitgang te gebruiken. Dit is een vrij courante functionaliteit, omdat het hierdoor mogelijk is om zeer flexibel om te springen met digitale signalen.
Hoofdstuk 4: ZONNEMODULE
27
4.2.5 VOEDING De onderste helft van de printplaat in Figuur 24 is uitsluitend bedoeld om de microcontroller en de motoren te voeden. Het vermogen is afkomstig van de transformator die aan de primaire zijde met de netspanning verbonden is. Er zijn 3 aparte secundaire windingen die 24V, 12V en 7V ter beschikking stellen. Dit zijn RMS-waarden (Root Mean Square). Zowel de 12V- als de 7V-winding wordt naar buiten gebracht. De spanning van deze twee windingen doorloopt elk een aantal stappen alvorens de gewenste spanning beschikbaar staat voor de overige elektronica. De stappen die deze twee spanningen doorlopen zijn dezelfde. Het enige verschil zijn de waarden die de componenten hebben. Zo worden bijvoorbeeld elektrolytische condensatoren gebruikt die een hogere maximale spanning hebben bij de 12V-rail ten opzichte van de 7V-rail. In Figuur 25 staat een overzicht van de verschillende stappen die gevolgd worden.
Figuur 25: Overzicht Voedingsgedeelte
4.3
PROGRAMMATIE
Om een cyclisch programma in de microcontroller te krijgen, wordt een C-programmeertaal gebruikt. Er is geprogrammeerd in de programmeeromgeving van Atmel. Zoals reeds aangehaald is de Arduino IDE compatibel met de IDE van Atmel. De programmeertaal die Atmel hanteert gebruikt dezelfde syntax, bestandstypes en functies als de C-programmeertaal. De toolchain van Atmel is ‘open-source’, dit wilt zeggen dat alle informatie en programma’s vrijgegeven zijn onder een welbepaalde licentie. Deze licentie ondersteunt het gratis verspreiden hiervan. Hierdoor zijn programma’s zoals de Arduino IDE mogelijk zijn. De C-taal, wordt geïnterpreteerd en doorloopt diverse stappen die uitkomen tot een bestand waarin alle instructies voor de microcontroller aanwezig zijn. In Figuur 26 staat een overzicht van dit proces.
Figuur 26: Toolchain
Hoofdstuk 4: ZONNEMODULE
28
4.3.1 REGISTERS De microcontroller heeft meerdere registers aan boord. Deze registers hebben een lengte van 8bit. Hieruit komt de naam 8-bit microcontroller.
Figuur 27: 8-bit registers
In Figuur 27 staat een voorbeeld van twee registers. Zoals je merkt is de grootte van elk register 8 bit en heeft elk register een welbepaald adres. De adressering is eigen aan de architectuur van de microcontroller. Het bezitten van SRAM (Static Random Acces Memory), EEPROM of een ander type bepaalt de geheugencontroller, die op zijn beurt een welbepaalde adressering vergt. Een voorbeeld van hexadecimale notering van adres 0x05 en 0x04 kan je terugvinden in Figuur 27. Door de prefix ‘0x’ voor een welbepaalde hexadecimale waarde te zetten, wordt er gedefinieerd dat het om een hexadecimale notatie gaat. Het aantal cijfers na de prefix bepaalt de bitlengte van de adresseringsregisters. Het adres 0x00 tot en met het adres 0xFF kan in een 8-bitswaarde opgeslagen worden. Een 16-bitsregister heeft adresseringen van 0x0000 tot en met 0xFFFF. De weergegeven registers in Figuur 27 die PORTB en DDRB genoemd worden hebben als functie de pinconfiguratie in te stellen. De notatie B slaat op het register dat bij de pin-bank B hoort. De status van pin PB0 staat dus op bit 0 van register PORTB. Een voorbeeld: PIND0 bevat de status van fysieke pin PD0. Analoog hiermee staat de status van pin PD6 op bit 6 van het register PIND. DDRx is de afkorting voor ‘Data Direction Register’. ! ! !
PINx register: Bevat de status van de fysieke pin. DDRx register: Configuratie of een fysieke pin een in-of uitgang is. PORTx register: Dubbele functie. Indien een pin geconfigureerd is als ingang, komt de instelling van deze bit overeen met het activeren van een pullup-weerstand op de fysieke pin. Als de pin geconfigureerd is als een uitgang, heeft het schrijven naar dit register het resultaat dat de spanning op de uitgang 5V is bij een logische 1, of 0V bij een logische 0.
Het manipuleren van deze registers gebeurt op een welbepaalde manier. Er wordt gebruik gemaakt van zogenaamde ‘bitwise operations’. Een voorbeeld van een ‘bitwise operation’ is . Deze uitdrukking komt overeen met de binaire waarde 0010 0000. Het aantal stappen waarmee de linkerwaarde verschoven wordt, is bepaald door de rechterwaarde. Stel: register DDRB heeft als inhoud 0000 0000. Om van de 5e pin op de pin-bank B een ingang te maken voeren we een logische-of functie uit met register DDRB en de pin die we hoog willen zetten. Concreet geeft dit de logische-of functie van binaire waarde 0000 0000 en 0010 0000. Het resultaat van deze logische-of functie is 0010 0000 en dit is de nieuwe waarde van het register. Analoog hiermee kan een uitgang ook laag gezet worden. Stel: de inhoud van register DDRB heeft een binaire
Hoofdstuk 4: ZONNEMODULE
29
waarde van 1111 1111. Het inverse van 0010 0000 samen met de logische-en vergelijking met het register heeft als resultaat het laag zetten van een welbepaalde bit. Concreet is dit de logische en-functie van de binaire waarde 1101 1111 en 1111 1111. Het resultaat van deze bewerking is dus 1101 1111. Deze bewerkingen worden gebruikt om een specifieke bit in te stellen in een register, met de behoud van de informatie die in de andere bits aanwezig is. De of-functie wordt met operand “|” uitgevoerd, de inverse functie met de operand “~”, de logische-en functie wordt met “&” beschreven en de exclusieve of-functie wordt met de operand “^” uitgevoerd. Als alles op een rijtje wordt gezet, komt alles neer op de bewerkingen in Figuur 28. De waarde 5 wordt vervangen door een variabele. Hierdoor kan er gewerkt worden met namen in plaats van getallen.
Figuur 28: Bewerkingen met bits
4.3.2 I/O EXPANDERS Het aantal fysieke in-en uitgangen van de microcontroller zijn beperkt. Voor de stuursignalen van de communicatie, de aansturing van de H-bruggen en de signalen van het interfacepaneel zijn extra in- en uitgangen nodig. Deze extra uitgangen zijn verwezenlijkt met een welbepaalde IC. Deze chip heeft de mogelijkheid om 8 pinnen afzonderlijk te configureren. Hierop kunnen er verschillende dingen ingesteld worden. De keuze of een pin een in- of uitgang is kan geselecteerd worden, interne pullup-weerstanden kunnen gebruikt worden, … De communicatie tussen de MCP23S08-chip en de microcontroller verloopt via een serieel protocol. Een SPI-bus wordt hiervoor gebruikt. Er bestaan ook I/O-uitbreidingschips die via een I2C-bus werken. De SPI-bus gebruikt dezelfde draden die eveneens gebruikt worden om de programmatiecode naar de microcontroller door te sturen. Een SPI-bus vergt een extra datalijn waarbij geselecteerd wordt dat de chips aangesproken worden met seriële data. Een SPI-bus gebruikt één datalijn minder dan de I2C-bus. Zoals in 4.2.2 Microcontroller aangehaald is, heeft een SPI-bus de volgende configuratie: !
SPI: MOSI (PB3), MISO (PB4), SCK (PB5)
De CS-lijn wordt zelf gekozen op de microcontroller en heeft geen vaste aansluiting. Een overzicht van de datalijnen kan je vinden in Figuur 29. Hierbij is de microcontroller de ‘master’ en 4 I/O expanders zijn de ‘slaves’. Er zijn 4 datalijnen. Op de SCK-lijn (Serial Clock) wordt de SPI-klok gezet. De MOSI-lijn (Master Out Slave In) wordt gebruikt om data van de ‘master’ naar de ‘slaves’ te sturen. De MISO-lijn (Master In Slave Out) dient om data van de ‘slaves’ naar de ‘master’ te sturen. De CS-lijn (Chip Select) werkt als een ‘enable-pin’ voor de slaves. Deze lijn is laag-actief. Als de spanning op de CS-lijn van 5V naar 0V overgaat, weten de ‘slaves’ dat SPI-communicatie gaat beginnen. De MCP23S08-chip bezit twee pinnen die dienen als adressering. Op deze pinnen
Hoofdstuk 4: ZONNEMODULE
30
komt 0V overeen met een logische 0 en 5V overeen met een logische 1. Hiermee is het mogelijk om 1 van de 4 adressen in te stellen.
Figuur 29: SPI communicatiestructuur
Als de CS-lijn laag gebracht wordt, kan de microcontroller met de I/O expanders communiceren. Via de SPI-data stuurt de microcontroller een adres uit, zodat de gewenste ‘slave’ geselecteerd kan worden. Dankzij de adressering kunnen er zich 4 ‘slaves’ een CS-lijn delen, zij kunnen zich van elkaar differentiëren door de adressering. Als een 5-de ‘slave’ nodig is, dient deze op een aparte CS-lijn aangesloten te worden. De SCK-, MISO- en MOSI-lijnen zijn wel gemeenschappelijk. De I/O expanders bezitten 11 registers. De registers vindt je in Figuur 30 . Hierbij zie je de ‘POR/RST value’, dit is de waarde die de registers innemen als de microcontroller opgestart of gereset wordt.
Figuur 30: Registers MCP23S08
De adressering van de I/O expanders gebeurt met pin A1 en pin A0 op de chip. In het aanspreken van de chip wordt dit gebruikt. Hieraan wordt in de ‘Opcode’ een referentie toegevoegd waarmee de ‘slave’ weet of er data uit de registers gelezen of geschreven wordt. In Figuur 31 zie je transitie van de CS-lijn. Op de MOSI-lijn wordt vervolgens via het volgende protocol data uitgeklokt. Een logische 0 komt hier wederom overeen met 0V en een logische 1 met 5V. Eerst dient de ‘Opcode’ verstuurt te worden, waarna gespecifieerd wordt welk register de ‘master’ wilt aanspreken. Na deze twee bytes wordt bij een uitlezing een lege byte verstuurd en bij een schrijfactie de gewenste
Hoofdstuk 4: ZONNEMODULE
31
data voor dat register. De afbakening van een bit gebeurt met de SCK-lijn. Als de transitie op de SCK-lijn een negatieve of positieve flank heeft, wordt er naar de MOSI-lijn gekeken door de ‘slave’.
Figuur 31: SPI data op de MOSI-lijn
Deze beschrijving van de SPI-bus dient omgezet te worden in programmatie. Concreet betekent dit dat enkele stappen gevolgd dienen te worden. Vooraleerst dienen in de microcontroller enkele instellingen te gebeuren aangaande SPI. Erna wordt iedere I/O expander aangestuurd om de nodige registers goed in te stellen. Dit houdt bijvoorbeeld in dat de juiste pinnen als een in-of uitgang ingesteld worden. Na deze actie zijn de I/O expanders klaar voor gebruik. Je vindt een programmatorisch voorbeeld van de SPI-configuratie voor de microcontroller in Figuur 32.
Figuur 32: SPI-configuratie
In Figuur 33 is een voorbeeld gegeven van de commando’s die uitgevoerd worden bij de initialisatie van de ‘slaves’. De CS-lijn wordt laag gezet, waarna de microcontroller de SPIcommunicatie start, gevolgd door de ‘Opcode’ van de specifieke ‘slave’. Het adres van register ‘IODIR’ wordt doorgestuurd gevolgd door de standaard inhoud van het register ‘IODIR’. Na deze 3 bytes wordt de CS-lijn terug hoog gezet en is de communicatie beëindigd. Om eventuele fouten te voorkomen wordt er 10 milliseconden gewacht alvorens nieuwe pakketten te sturen. In Figuur 34 is een voorbeeld van deze communicatie gegeven. Kanaal 1 komt overeen met de SCK-lijn en kanaal 2 komt overeen met de MOSI-lijn.
Figuur 33: Configuratie MCP23S08
Hoofdstuk 4: ZONNEMODULE
32
Figuur 34: SPI-bus SCK-lijn en MOSI-lijn
De SPI-bus werkt in het eindresultaat met een frequentie van 8MHz. Een bewijs hiervan is terug te vinden in Figuur 35. Hier wordt de frequentie van de SCK-lijn gemeten.
Figuur 35: Klokfrequentie SPI-bus
Hoofdstuk 4: ZONNEMODULE
33
4.3.3 AANSTURING STAPPENMOTOREN De stappenmotoren worden via de L298P chip aangestuurd. In deze chips zitten twee Hbrugschakelingen in. Om de tijd te bepalen die gewacht dient te worden tussen twee stappen, wordt er gebruik gemaakt van timers. De timers hebben in de microcontroller specifieke registers om ze in te stellen. Zo kan er gespecifieerd worden aan welke frequentie deze timers werken. Dit kan ingesteld worden door middel van ‘clock dividers’. In dit project is de klokfrequentie van het oscillatorkristal de basis voor de timers. De basisklokfrequentie wordt met 1024 gedeeld. Deze verlaagde kloksnelheid dient als klokfrequentie voor de timers. De wachttijd tussen het schakelen van de stappen is de eerste 10 stappen variabel. De eerste stap duurt 16ms. Dit loopt steeds op, tot een staptijd wordt bereikt op de 11e stap van 2ms. Er dient wel bij vermeld te worden dat de motor in halve-stapmodus werkt, ook gekend als 8stapssequentie.
4.4
KOSTPRIJS
De zonnemodule heeft een prijskaartje van € 144,13. Dit omvat de fabricagekost van de 2 PCB’s en de componenten. Een gedetailleerd overzicht is terug te vinden in Tabel 2. Tabel 2: Overzicht gebruikte materialen
Item PCB 250mm*93mm PCB 100mm*50mm Microcontroller I/O Expander Crystal Weerstanden Condensatoren MLLC Condensatoren ELCO Optocouplers L298N Inductoren LED IC SMPS 2 Schottky Diode Diodebrug
Referentienummer
ATMEGA328P-AU-ND MCP23S08-E/SO-ND 535-10226-1-ND KIT-RMCF0603FT-04-ND 709-1110-ND 338-2222-ND 859-LTV-816S 497-3624-1-ND SDR-LAB2-ND 511-8003-KIT-ND 497-12083-1-ND RB056L-40TE25CT-ND 905-KBL408G
Aantal 1 1 1 4 1 100 24 6 18 2 2 9 2 18 2
PPE incl BTW € 56,271 € 2,401 € 3,134 € 1,100 € 0,424 € 0,024 € 0,040 € 0,535 € 0,149 € 5,760 € 0,368 € 0,306 € 2,214 € 0,284 € 0,692
Prijs totaal € 56,27 € 2,67 € 3,13 € 4,40 € 0,42 € 2,42 € 0,96 € 3,21 € 2,68 € 11,52 € 0,74 € 2,76 € 4,43 € 5,11 € 1,38
Zonnecel Soldeerpasta Power LED DIP switch
619-750-00030 SMD291AX10-ND 720-LRTBC9TPCWD5725A 506-1825360-3
1 0,5 3 2
€ 29,990 € 20,413 € 0,220 € 0,584
€ 29,99 € 10,21 € 0,66 € 1,17 € 144,13
Hoofdstuk 4: ZONNEMODULE
4.5
REALISATIE
In Figuur 36 vindt je een foto van de afgewerkte zonnemodule.
Figuur 36: Zonnemodule
34
35
HOOFDSTUK 5: PLC & INTERFACE 5.1
ALGEMEENHEDEN
De opleiding elektromechanica optie proces automatisering is gericht op de industrie. In deze industrie, hetzij voeding, chemie, petrochemie of farmaceutische industrie, worden welbepaalde elektromagnetische componenten gebruikt in de automatisering van het productieprocedé. Deze automatisering wordt voornamelijk verwezenlijkt door diverse PLC’s die met elkaar verbonden zijn in een welbepaald netwerk. Om de rekeneenheid, het aan te sturen systeem en de bediening op verschillende locaties te kunnen plaatsen, wordt er gebruik gemaakt van een datacommunicatie waarbij de rekeneenheid, het aan te sturen systeem en de bediening een welbepaalde afstand van elkaar geplaatst kunnen worden. De rekeneenheid is in dit geval de PLC, het systeem is de zonnemodule en de bediening wordt verzorgd door de HMI. In een werkelijke situatie zijn meerdere systemen met lokale bediening, een controleruimte waarbij het hele proces geobserveerd en aangestuurd wordt en een ruimte waar de PLC’s gehuisvest zijn geen uitzondering. In werkelijke situaties wordt er ook gebruik gemaakt van stuurkasten die in de omgeving van het aangestuurde systeem gepositioneerd zijn. Om net deze netwerkstructuur te simuleren is er gebruik gemaakt van een centrale eenheid met decentrale periferie. Dit alles is in een stuurkast gemonteerd.
5.2
NETWERK
Bij de keuze van het systeem dient er rekening gehouden te worden met de compatibiliteit tussen de verschillende componenten. Hierbij dient zowel het communicatiemiddel als de software waarin de programmatie gebeurd compatibel te zijn. Er is gekozen voor een ‘S7-1200’-PLC. De decentrale periferie wordt verzorgd door een ‘ET200S’-module waar meerdere uitbreidingsmodules aan gekoppeld zijn. De HMI is een ‘KTP600’-model, die een 6” scherm bezit. Elk element heeft een Profinet-interface, waarmee een netwerk gemaakt kan worden. Een voorloper van Profinet is Profibus. Profibus is een tweedraads-netwerk waarbij RS-485 als basis gebruikt wordt. RS485 is een differentiële databus, waarbij de signalen naar elkaar gerefereerd zijn. Dit is een voordeel bij installaties waarbij er storing van kabels die vermogen transporteren zich op de datalijnen overzet. Als er een referentie naar de massa gebruikt wordt, veranderd bij een seriële datalijn de potentiaal, wat een laag signaal een hoog signaal kan
Samenvatting
36
maken. Bij differentiële datalijnen is enkel de verschilspanning tussen de lijnen van belang. Als er een spanning geïnduceerd wordt op een datakabel van RS-485, verhoogt de potentiaal van beide datalijnen. Hierdoor is er geen verschil in differentiële spanning, wat de data niet compromitteert. Een voorbeeld van een datacommunicatie op het RS-485 principe vindt je in Figuur 37.
Figuur 37: RS-485 voorbeeld
Naar profinet wordt ook gerefereerd als industriële ethernet. In feite is dit een zeer goede benaming, omdat het ethernet-principe als basis is genomen. De compatibiliteit van aansluitconnectoren en kabels zorgt ervoor dat van de reeds bestaande netwerk-materialen gebruik kan worden gemaakt. Industriële ethernet hanteert echter strenge normen aangaande data-integriteit, waardoor de kwaliteit van de kabels hoog ligt. Concreet betekent dit dat CAT5kabels niet voldoende zijn, maar afgeschermde CAT6-kabels dienen gebruikt te worden. De diverse componenten hebben ook een hogere weerstand tegen hoge temperatuurverschillen, chemicaliën, extreme vibratie en vochtige omgevingen. De aansluitingen, het protocol, de snelheid van transmissie, bedrijfszekerheid en veiligheid verschillen bij industriële ethernet echter van traditionele ethernet. Hierdoor is het noodzakelijk om speciale apparatuur te gebruiken die gebruikt worden om het aantal aansluitingen uit te breiden. De belangrijkste elementen van industriële ethernet zijn bedrijfszekerheid en het ‘real-time’ doorsturen van data. Het laatste bedoelt dat de data overgestuurd wordt met een vertraging die een maximale tijd heeft zodat de informatie die de ontvanger ontvangt nagenoeg op hetzelfde moment wordt verzonden bij de verzender. Hier is de temperatuursregeling van een oven een voorbeeld. Als de temperatuur er te lang over doet om tot bij de ontvanger, wat in dit geval de regelaar is, toe te komen, kan er geen stabiele regelkring verwezenlijkt worden.
Samenvatting
5.3
37
PLC
Het volledige zonvolgsysteem is opgebouwd rond de ‘S7-1200’-PLC. In Figuur 38 vindt je hiervan een foto. De PLC heeft digitale in-en uitgangsbanken en een analoge uitbreidingsmodule. In dit project worden deze in-en uitgangen niet gebruikt, omdat de decentrale opstelling gesimuleerd is. Hierdoor verloopt alle aansturing via het Profinet-netwerk. De zonnemodule wordt aangestuurd via de in- en uitgangen die aanwezig zijn op de ET200S-periferie. Hierbij zijn diverse modules aangekoppeld die ofwel ingangen of uitgangen bezitten. Het ET200S-geheel bestaat uit deze uitbreidingsmodules, een voedingsmodule en een interfacemodule. Dit alles is ingebouwd in de stuurkast.
Figuur 38: 'S7-1200'-PLC
Figuur 39: ET200S decentrale periferie
Samenvatting
38
5.3.1 PROGRAMMATIE De programmatie die geschreven wordt voor de PLC heeft een welbepaalde structuur. Om hier een concreet voorbeeld van te geven, wordt er kort een overzicht gegeven van de stappen die genomen worden. Er is gedifferentieerd tussen omzettingen, wiskundige berekeningen, parameters, HMIprogrammatie en automatisering. De omzettingen houden functies in die gegevens omvormen van formaat. Bijvoorbeeld een omzetting van radialen naar graden. Verder zijn er de wiskundige berekeningen die algemene berekeningen maken. Bij de parameters worden alle zonneberekeningen berekend. Voor iedere formule die terug te vinden is in Bijlage A: Zonneberekeningen bestaat een ‘FC’-functie. Deze ‘FC’-functies worden door een enkele ‘FB’functie samengehouden, in deze ‘FB’ functie wordt iedere parameter berekend en weggeschreven naar een merker. Verder bestaan er ‘FB’-functies die de afhandeling van de HMI-functies voor hun rekening nemen en als laatste is er een ‘FB’-functie die de automatisering voor zijn rekening neemt.
5.3.1.1
Omzettingen en algemene berekeningen In Figuur 40 zie je een overzicht van de functies die toegewijd zijn aan de omzettingen van diverse waarden en functies die welbepaalde berekeningen uitvoeren. In deze functies wordt er steeds een parameter ingegeven, waar na berekening een of meerdere parameters ter beschikking staan voor verder gebruik in de programmatie.
Figuur 40: Omzetting- en berekeningsfuncties
5.3.1.2
Parameters In
Figuur 42 is een deel van de functies terug te vinden die de parameters bevatten. Deze functies berekenen de waarden die noodzakelijk zijn voor de ingestelde hoek te berekenen. In Figuur 41 is de ‘FB’-functie terug te vinden waar alle parameters in verzameld zijn. Deze functie schrijft de berekende waarde weg naar merkers.
Figuur 41: Algemene functieblok parameters
Figuur 42: Parameterfuncties
De inhoud van deze ‘FC’-functies is vergelijkbaar. De eerste stap is het berekenen van de nodige variabelen die gebruikt worden in de functie. Hierbij is als voorbeeld de functie ‘EQ OF TIME’ genomen. Zoals in Figuur 43 zichtbaar is, wordt er een andere ‘FC’-functie gebruikt omdat deze
Samenvatting
39
waarde nodig is in de functie. Na deze stap wordt de effectieve berekening uitgevoerd. Door berekeningsblokken te gebruiken is er een eenvoudige programmatiestructuur verkregen zoals zichtbaar is in Figuur 44. De diverse parameters worden hier ingegeven en hebben een interne referentie IN1, IN2, … De berekeningsblok heeft een uitkomst waarmee verdere berekeningen kunnen uitgevoerd worden. De berekening die in deze blok uitgevoerd is gaat als volgt: (SIN(IN1)*IN2)-(SIN(IN3)*IN4)+(SIN(IN3)*COS(IN1)*IN5*IN6*IN2)-(SIN(IN7)*IN8*IN9)(SIN(IN10)*IN11*IN12). Door deze structuur te gebruiken is het voor de programmeur gemakkelijk om het overzicht te behouden en aanpassingen zijn eenvoudig te maken.
Figuur 43: Voorbeeld berekenen nodige variabelen
Figuur 44: Berekeningsblok parameterfunctie
5.3.1.3
HMI-programmatie
Voor de programmatie van de HMI is er een gedeelte van het TIA-programma waarin de GUI ontworpen wordt. Om de functionaliteit van de interface te verwezenlijken zijn er echter berekeningen nodig die uitgevoerd dienen te worden. Deze gebeuren in de ‘FB’-blokken die terug te vinden zijn in Figuur 45.
Figuur 45: HMI-blokken
Samenvatting
5.3.1.4
40
Automatisering
Om het automatiseringsgedeelte af te handelen is er één enkele blok gedediceerd voor de automatisering. Deze is terug te vinden in Figuur 46.
Figuur 46: Automatiserings-blok
5.3.1.5
Datablokken
Verder is er gebruik gemaakt van diverse datablokken die specifieke parameters bevatten, dit is terug te vinden in Figuur 47. Hierbij is het mogelijk om startparameters bij te houden, maar ook een locatie verschaffen voor waarden die tijdens de werking van het systeem opgeslagen dienen te worden.
Figuur 47: Datablokken
5.4
HMI
De KTP-600 werkt met een resistief aanraakscherm. Hierbij wordt er voor de X- en de Y-as een circuit gemaakt waarbij de aangeraakte positie een analoge waarde teruggeeft naar de HMI. Dit is hetzelfde principe als bij de potentiometer, waarbij een spanningsdeler gecreëerd wordt. Een algoritme in de PLC koppelt deze positie dan aan een actie. Deze actie is zelf in te stellen. In Figuur 48 vindt u een foto van de HMI met het beginscherm. Een overzicht van de verschillende schermen is te vinden in Bijlage B: Gebruikersbundel.
Figuur 48: HMI
Samenvatting
5.5
REALISATIE
De stuurkast waar alle componenten in gemonteerd zijn vindt je in Figuur 49.
Figuur 49: Stuurkast zonvolgsysteem
41
Samenvatting
42
BESLUIT Het is mogelijk om de zon te volgen met een combinatie van de PLC en stappenmotoren. Het project ter afsluiting van mijn opleiding heeft in totale tijdspanne 6 maanden in beslag genomen. Hierbij was planning een zeer groot aspect. Het proces dat nodig was om tot het eindresultaat te komen is uiterst interessant gebleken, waarbij mijn persoonlijke technische kennis een serieuze ‘boost’ gekregen heeft. De voorbije 3 jaar heeft perspectief gebracht en op technisch en academisch vlak deuren geopend.
BIBLIOGRAFIE http://en.wikipedia.org/wiki/Coordinate_system http://en.wikipedia.org/wiki/Spherical_coordinate_system http://nl.wikipedia.org/wiki/Foton http://nl.wikipedia.org/wiki/Band_gap http://en.wikipedia.org/wiki/RS-485 http://www.nrel.gov/ http://pranjalchaubey.wordpress.com/2010/11/25/tool-chain/ Cisco - Industrial Ethernet: A Control Engineer’s Guide Solar Energy Engineering - Processes and Systems Malestrom ISBN 978-0-12-374501-9 2009 Physics of Solar Energy C. Julian Chen ISBN 978-0-470-64780-6
2011
ALGEMENE REFERENTIES Siemens - http://www.siemens.com/entry/cc/en/ Altium Designer - http://www.altium.com/ Atmel - http://www.atmel.com/ National Oceanic and Atmospheric Administration - http://www.noaa.gov/ Inkscape - http://inkscape.org/ Kleurpalletten - http://www.colourlovers.com/
LIJST VAN GRAFIEKEN/ TABELLEN/ FIGUREN Grafiek 1: Zonneconstante van 1366,1W/m2 ........................................................................................................ 8 Grafiek 2: Insolatie bij volledige zonnevolger .....................................................................................................17 Grafiek 3: Insolatie bij azimut-volger......................................................................................................................18 Tabel 1: Stapsequenties bipolaire stappenmotoren .........................................................................................24 Tabel 2: Overzicht gebruikte materialen ...............................................................................................................33 Figuur 1: Topologie netwerk ........................................................................................................................................ 2 Figuur 2: Inhoud van de zonnemodule .................................................................................................................... 3 Figuur 3: Sequentie automatische modus ............................................................................................................... 4 Figuur 4: Principe van een potentiometer .............................................................................................................. 5 Figuur 5: Resolutie van een meetwaarde ................................................................................................................ 5 Figuur 6: Geografische coördinatenstelsel ............................................................................................................. 7
Samenvatting
43
Figuur 7: Verschillende energieopbouw tussen geleider, halfgeleider en isolator..............................10 Figuur 8: Bandkloven bij enkele halfgeleiders ....................................................................................................10 Figuur 9: Overzicht van de verschillende zonnecellen ....................................................................................11 Figuur 10: Opbouw van verschillende zonnecellen ..........................................................................................11 Figuur 11: Verschil tussen mono- en polykristallijne modules ...................................................................12 Figuur 12: Technologische evolutie van de zonnecel.......................................................................................13 Figuur 13: Cosinusverliezen .......................................................................................................................................14 Figuur 14: Zonneparameters......................................................................................................................................15 Figuur 15: Jaarlijkse variatie van declinatie.........................................................................................................15 Figuur 16: Zenit ϕ van de zon ....................................................................................................................................16 Figuur 17: Zonvolgsystemen ......................................................................................................................................17 Figuur 18: Communicatielijnen .................................................................................................................................20 Figuur 19: Opto coupler ingang .................................................................................................................................21 Figuur 20: Opto coupler uitgang ...............................................................................................................................21 Figuur 21: ATmega328p-AU pinout ........................................................................................................................23 Figuur 22: Principe dubbele H-brug ........................................................................................................................24 Figuur 23: Bedieningsprint zonnemodule ............................................................................................................25 Figuur 24: Stuurprint zonnemodule........................................................................................................................26 Figuur 25: Overzicht Voedingsgedeelte .................................................................................................................27 Figuur 26: Toolchain ......................................................................................................................................................27 Figuur 27: 8-bit registers .............................................................................................................................................28 Figuur 28: Bewerkingen met bits .............................................................................................................................29 Figuur 29: SPI communicatiestructuur ..................................................................................................................30 Figuur 30: Registers MCP23S08................................................................................................................................30 Figuur 31: SPI data op de MOSI-lijn .........................................................................................................................31 Figuur 32: SPI-configuratie .........................................................................................................................................31 Figuur 33: Configuratie MCP23S08 .........................................................................................................................31 Figuur 34: SPI-bus SCK-lijn en MOSI-lijn ...............................................................................................................32 Figuur 35: Klokfrequentie SPI-bus ...........................................................................................................................32 Figuur 36: Zonnemodule ..............................................................................................................................................34 Figuur 37: RS-485 voorbeeld .....................................................................................................................................36 Figuur 38: 'S7-1200'-PLC .............................................................................................................................................37 Figuur 39: ET200S decentrale periferie.................................................................................................................37 Figuur 40: Omzetting- en berekeningsfuncties...................................................................................................38 Figuur 41: Algemene functieblok parameters.....................................................................................................38 Figuur 42: Parameterfuncties ....................................................................................................................................38 Figuur 43: Voorbeeld berekenen nodige variabelen ........................................................................................39 Figuur 44: Berekeningsblok parameterfunctie...................................................................................................39 Figuur 45: HMI-blokken ...............................................................................................................................................39 Figuur 46: Automatiserings-blok..............................................................................................................................40 Figuur 47: Datablokken ................................................................................................................................................40 Figuur 48: HMI..................................................................................................................................................................40 Figuur 49: Stuurkast zonvolgsysteem ....................................................................................................................41
Bijlagen
44
6 BIJLAGEN 6.1
BIJLAGE A: ZONNEBEREKENINGEN
6.1.1 INLEIDING Verschillende zonneparameters zijn nodig om de azimut en zenit te berekenen. Deze zijn hieronder te vinden. De formules zijn uit een Excel-bestand van het NOAA (National Oceanic And Atmospheric Administration) gehaald. Om deze waarden een grootteorde mee te geven, is voor iedere waarde een berekening uitgevoerd voor de drie parameters datum, tijd en locatie. Ze bedragen 1/09/2013, om 12:00:00 met als coördinaten 51,017723NB en 4,479227OL. Dit zijn de coördinaten van CVO Crescendo. Na de omzetting van de gregoriaanse tijdsrekening naar de Juliaanse, zijn alle gegevens aanwezig om de berekeningen uit te voeren. Juliaanse dag: 2456536,96. Juliaanse eeuw: 0,13667237. Enkele opmerkingen bij de berekeningen: !
Er wordt gebruik gemaakt van een bewerking MOD(x;y). Dit doelt op een deling van x/y waarvan de restwaarde het resultaat is.
!
De bewerking x ∗ #
!
!
$
%&'
( is een omzetting van graden naar radialen. Terwijl x ∗ # %&'
$
(
een omzetting van radialen naar graden is. ‘Julian Century’ staat voor Juliaanse Eeuw, ‘Julian day’ staat voor Juliaanse dag. De huidige tijdsrekening is in gregoriaanse tijd. Iedere gregoriaanse tijd heeft een overeenkomstige dag in de juliaanse kalender. Bij de omzetting van de gregoriaanse naar de juliaanse is er echter een tijdspanne van 10 dagen waar er geen juliaanse dag bestaat. Het gemak bij het formaat van de Juliaanse tijdsrekening in berekeningen, is de reden van het gebruik van deze oude tijdsrekening. De astronomische eenheid [AU] is de gemiddelde afstand tussen de aarde en de zon. Deze bedraagt 149 597 870 700 meter.
Bijlage A: Zonneberekeningen
6.2
45
BEREKENINGEN
6.2.1.1
Geometric mean longitude from the Sun [GRADEN]
)*+ #,280,46646 + 456789 ;<9=5>? ∗ @36000,76983 + 456789 ;<9=5>? ∗ 0,0003032DE; 360( Berekende waarde: 160,777019°
6.2.1.2
Geometric mean anomaly of the sun [GRADEN]
357,52911 + 456789 ;<9=5>? ∗ @35999,05029 − 0,0001537 ∗ 456789 ;<9=5>?D Berekende waarde: 5277,604647°
6.2.1.3
Sun equation of center P
sin MN<*) )<89 89*) O59 ∗ #%&'(Q ∗ ,1,914602 − 456789 ;<9=5>? ∗ @0,004817 + P
0,000014 ∗ 456789 ;<9=5>?DE + sin M@2 ∗ N<*) )<89 89*) O59D ∗ #%&'(Q ∗ R@0,019993 − 0,000101 ∗ 456789 ;<9=5>?D + sin M@3 ∗ N<*) )<89 89*) O59D ∗ P
#%&'(QS ∗ 0,000289 Berekende waarde: -1,59803883
6.2.1.4
True longitude of the sun [GRADEN]
N<*) )<89 6*9N O59 + O59
Berekende waarde: 159,1789801°
6.2.1.5
True anomaly of the sun [GRADEN]
N<*) )<89 89*) O59 + O59 Berekende waarde: 5276,006608°
6.2.1.6
Radial vector of the sun [ASTRONOMISCHE EENHEDEN]
,%,'''''%'%&∗@%VWXXWYZ W[\Z] ^\_`Z∗WXXWYZ W[\Z] ^\_`ZDE #%aWXXWYZ W[\Z] ^\_`Z∗bcdMefY Z\fW [Y^g∗#
h (Q( ijk
Berekende waarde: 1,009146 AU 1,009146 AU * 149 597 870 700m = 150 966 092 825,4222 meter.
6.2.1.7
Apparent longitude of the sun [GRADEN]
O59 =>5< 6*9N − 0,00569 − 0,00478 ∗ sin M@125,04 − 1934,136 ∗ 456789 ;<9=5>?D ∗ P
#%&'(Q Berekende waarde: 159,17641°
6.2.1.8
Mean oblique ecliptic [GRADEN] #ni,oojpqrstuv wxvyrz{∗,o|,ji}~qrstuv wxvyrz{∗@k,kkk}pqrstuv wxvyrz{∗k,kkijiÄDE(
23 +
lma
|k
m'
Berekende waarde: 23,4375138°
6.2.1.9
Oblique correction [GRADEN]
Bijlage A: Zonneberekeningen
46
Ö (S )<89 *Å67T <;67Ç=7; + 0,00256 ∗ cos R125,04 − 1934,136 ∗ 456789 ;<9=5>? ∗ # 180 Berekende waarde: 23,4355729°
6.2.1.10 Sun right ascension [GRADEN] ê ê (Q∗dëíMìîï ñóó ãâïò∗# (Q ijk ijk ê bcd@ìîï ñóó ãâïò∗ D ijk
bcdMâäãåç éâèè∗#
ÜtanV%
ô∗
%&' P
Berekende waarde: 160,7630078°
6.2.1.11 Sun declination [GRADEN] P (Q ∗ sin MO59 8ÇÇ 6*9N %&'
#sinV% #sin M*Å67; ;*>> ∗ #
P %&' (Q(( ∗ %&' P
∗#
Berekende waarde: 8,128020092°
6.2.1.12 var y (tussenwaarde) âäãåç éâèè
#tan M#
l
l
P
( ∗ %&'Q(
Berekende waarde: 0,04302049
6.2.1.13 Equation of time [MINUTEN] P
4 ∗ ÜRö8> ? ∗ sin R2 ∗ M@N<*) )<89 6*9N O59D ∗ %&'QS − 2 ∗ <;;<9= <8>=õ *>Å7= ∗ P
sin M@N<*) )<89 89*) O59D ∗ #%&'(Q + 4 ∗ <;;<9= <8>=õ *>Å7= ∗ ö8> ? ∗ P (Q ∗ %&'
sin M@N<*) )<89 89*) O59D ∗ #
P (QS − %&'
cos R2 ∗ M@N<*) )<89 6*9N O59D ∗ # P
0,5 ∗ ö8> ? l ∗ sin R4 ∗ M@N<*) )<89 6*9N O59D ∗ #%&'(QS − 1,25 ∗ P %&' (QSS ∗ ô %&' P
<;;<9= <8>=õ *>Å7= l ∗ sin R2 ∗ M@N<*) )<89 89*) O59D ∗ # Berekende waarde: 0,032713084 minuten. ≅ 2seconden.
6.2.1.14 HA sunrise [GRADEN] cosV% Ü
ê (Q ijk ê bcdM@ãñüåüD∗# (Q ijk
bcdM@ù',&ûûD∗#
P
P
∗ cos M@O59 +<;679D ∗ #%&'(Q − tan M@68=7=5+
tan M@O59 +<;6798=7*9D ∗ #%&'(Qô ∗
%&' P
Berekende waarde: 101,5267919°
6.2.1.15 Solar noon [LOKALE STANDAARD TIJD] @¢l'V£∗ãâïòåüV°ç ⧠üå•°aüå•° ¶âï°∗m'D %££'
Berekende waarde: 12:42:03
Bijlage A: Zonneberekeningen
47
6.2.1.16 Sunrise time [LOKALE STANDAARD TIJD] ìâãñè ïââïVßñ ìîïèåì°∗£ %££'
Berekende waarde: 5:55:57
6.2.1.17 Sunset time [LOKALE STANDAARD TIJD] ìâãñè ïââïaßñ ìîïèåì°∗£ %££'
Berekende waarde: 19:28:10
6.2.1.18 Sunlight duration [MINUTEN] 8 ∗ õ8 O59>7O< Berekende waarde: 812,2143349 minuten ≅ 13u 32min 13seconden.
6.2.1.19 True solar time [MINUTEN] )*+@@=7)< ∗ 1440 +
6.2.1.20 Hour angle [GRADEN] üèî° ìâãñè üå•° £
7U #
> 0( =õ<9 ™
üèî° ìâãñè üå•° £
+ 180´ <6O< ™
üèî° ìâãñè üå•° £
− 180´
Berekende waarde: -10,5138217°
6.2.1.21 Solar zenith angle [GRADEN] P (Q ∗ %&'
#cosV% #sin M@68=7=5+
P P (Q + cos M@68=7=5+
sin M@O59 +<;679D ∗ #
P
P
cos M@O59 +<;679D ∗ #%&'(Q ∗ cos M@õ*5> 89N6
6.2.1.22 Solar elevation angle [GRADEN] 90 − O*68> ®<97=õ 89N6< Berekende waarde: 46,2369481°
%&' P
Bijlage A: Zonneberekeningen
48
6.2.1.23 Solar azimuth angle [GRADEN KLOKSGEWIJS VANAF HET NOORDEN] 7U@õ*5> 89N6< > 0D=õ<9 )*+ ¨≠¨Ücos
%&' (Æ + P
#
V%
Ü
ê ê ê (Q∗bcdM@ìâãñè ¶°ïåüß ñïòã°D∗# (Q(VdëíM@ìîï †°éãåïD∗# (Q ijk ijk ijk ê ê #bcdM@ãñüåüD∗# (Q∗dëíM@ìâãñè ¶°ïåüß ñïòã°D∗# (Q( ijk ijk
#dëíM@ãñüåüD∗#
ôô ∗
180Ø ; 360Æ
<6O< )*+ ¨≠540 −
¨Ücos
V%
Ü
ê ê ê (Q∗bcdM@ìâãñè ¶°ïåüß ñïòã°D∗# (Q(VdëíM@ìîï †°éãåïD∗# (Q ijk ijk ijk ê ê #bcdM@ãñüåüD∗# (Q∗dëíM@ìâãñè ¶°ïåüß ñïòã°D∗# (Q( ijk ijk
#dëíM@ãñüåüD∗#
ôô ∗
%&' (ÆØ ; 360Æ P
#
Berekende waarde: 164,8609943
6.2.1.24 Refraction Bij het neervallen van de zonnestralen op het oppervlakte van het zonnepaneel, weerkaatst een stuk van de zonnestralen. Om dit fenomeen te compenseren, worden er extra berekeningen uitgevoerd. De ‘Solar Elevation Angle’ wordt hierop aangepast. Een geoptimaliseerde waarde wordt hierdoor berekend. Omdat de nauwkeurigheid van de opstelling dit niet verlangt is dit niet omgezet.
Bijlage B: Gebruikersbundel
6.3
49
BIJLAGE B: GEBRUIKERSBUNDEL
Om het onderhoud en de eventuele aanpassingen van het systeem naar de gebruiker toe te vergemakkelijken, zijn de schema’s, de programmatuur en de handleiding apart gebundeld. De schema’s omvatten de elektrische en elektronische schema’s. De handleiding is een aanvulling op de paper. Hierin is de praktische informatie gespecifieerd voor de correcte bediening van het geheel. Voor details en werking wordt er verwezen naar de paper. De elektrische schema’s bevatten de schema’s van de stuurkast. Deze schema’s zijn in het softwarepakket Eplan P8 1.7 gemaakt. De elektronische schema’s zijn gemaakt met het softwarepakket Altium Designer 10. De nodige bestanden om de printplaten opnieuw te kunnen fabriceren zijn eveneens bijgevoegd. RS-274X Extended Gerber-bestanden samen met de ‘drill-files’ worden gebruikt om de PCB-fabrikant de nodige informatie te verschaffen. Uiteraard zijn de digitale versies op de bijgevoegde CD-ROM terug te vinden. Op softwarematig niveau is er enerzijds de programmatie van de PLC in het softwarepakket TIA Portal 11 V2. Dit omvat de volledige configuratie van het netwerk en uitbreidingsmodules. Bij aanpassing van de hardware is het mogelijk om de software up-to-date te maken met de nieuwe infrastructuur. Anderzijds is er de programmatie van de microcontroller. Het is niet noodzakelijk dat de microcontroller op een later tijdstip aangepast wordt, deels omdat dit niet in de eindtermen van de opleiding zit. Er dient wel vermeld te worden dat voor de aanpassing van deze software er een specifieke programmeermodule nodig is. Deze programmeermodule vormt de nodige signalen van de PC om naar een formaat dat aangepast is voor de microcontroller. Het is mogelijk om hiervoor een ontwikkelbord van het type ‘Arduino’ te gebruiken. De programmeercode bevat het hoofdbestand, waarbij een ‘header-file’ en een ‘C-file’ zijn ingevoegd. Dit zijn drie verschillende bestanden die op een specifieke wijze gestructureerd zijn om een overzicht te behouden over het geheel.
CVO CRESCENDO CENTRUM VOOR VOLWASSENENONDERWIJS
ZONVOLGSYSTEEM MET KALENDERPROGRAMMERING
BIJLAGE B: Gebruikersbundel
Cursist:
Robbe Van Assche
Projectverantwoordelijke: Linda Van den Broeck
Bedrijf: CVO Crescendo Project ingediend tot het behalen van de titel van Gegradueerde in de Elektromechanica – HBO5 CVO Crescendo ■ Vaartdijk 86 ■ 2800 Mechelen ■ T 015 41 30 45 ■
Optie procesautomatisering
“De auteur geeft de toelating dit afstudeerwerk voor consultatie beschikbaar te stellen en delen van het afstudeerwerk te kopiëren voor eigen gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit dit afstudeerwerk” Mechelen, 13 juni 2013 Robbe Van Assche
“The author gives permission to make this thesis available for consultation and to copy parts of this thesis for personal use. Every other use is limited by the Belgian copyright, in particular regarding the obligation to make an explicit reference to this work.” Mechelen, 13 juni 2013 Robbe Van Assche
INHOUD Bijlage B: Gebruikersbundel ......................................................................................................................................... 1 1.
Gebruikershandleiding ..................................................................................................................................... 1 1.1
Omschrijving ............................................................................................................................................... 1
1.2
Stuurkast ....................................................................................................................................................... 1
1.3
Zonnemodule .............................................................................................................................................. 1
i.
PLC ............................................................................................................................................................................ 2
ii.
HMI............................................................................................................................................................................ 2
iii. Zonnemodule ........................................................................................................................................................ 5 Lijst van grafieken/ tabellen/ figuren ...................................................................................................................... 7
1
BIJLAGE B: GEBRUIKERSBUNDEL 1. GEBRUIKERSHANDLEIDING 1.1
OMSCHRIJVING
Deze bundel is een handleiding voor het gebruik van het “Zonvolgsysteem met kalenderprogrammering”. Hierin zijn de schema’s en de programmatie gebundeld, samen met een gebruikershandleiding. Het Zonvolgsysteem bestaat uit diverse componenten. Er is de stuurkast, die de PLC en decentrale periferie huisvest. Dit is gekoppeld aan een HMI om de gebruikersinterface te verwezenlijken. Een zonnemodule stelt de gewenste zonnehoeken in, hetzij manueel, hetzij via de PLC. Deze twee componenten van het systeem zijn gekoppeld via 25-pins kabels. Voor de ingangen en voor de uitgangen is een aparte kabel voorzien. De verbindingskabel voor de ingangen heeft mannelijke ‘DB25’-connectoren aan weerszijden. Deze voor de ingangen heeft vrouwelijke ‘DB25’-connectoren.
1.2
STUURKAST De stuurkast bevat de PLC, ET200S en HMI. Elke aansluitklem van de PLC en decentrale periferie is aangesloten op rangeerklemmen die gemonteerd zijn in de stuurkast. Het is mogelijk om vanaf deze klemmen sensoren en actuatoren aan te sluiten. In dit geval zijn de signalen doorverbonden naar een tweede klemmenstrook waar op zijn beurt de 25-aderige kabels aangesloten zijn. De bijgeleverde schema’s geven verduidelijking. 1.3
ZONNEMODULE
De elektronische schema’s zijn gemaakt met het softwarepakket Altium Designer 10. De nodige bestanden om de printplaten opnieuw te kunnen fabriceren zijn eveneens bijgevoegd. RS-274X Extended Gerber-bestanden samen met de ‘drill-files’ worden gebruikt om de PCB-fabrikant de nodige informatie te verschaffen. Uiteraard zijn de digitale versies op de bijgevoegde CD-ROM terug te vinden
2 Het is niet noodzakelijk dat de microcontroller op een later tijdstip aangepast wordt, deels omdat dit niet in de eindtermen van de opleiding zit. Er dient wel vermeld te worden dat voor de aanpassing van deze software er een specifieke programmeermodule nodig is. Deze programmeermodule vormt de nodige signalen van de PC om naar een formaat dat aangepast is voor de microcontroller. Het is mogelijk om hiervoor een ontwikkelbord van het type ‘Arduino’ te gebruiken. De programmeercode bevat het hoofdbestand, waarbij een ‘header-file’ en een ‘Cfile’ zijn ingevoegd. Dit zijn drie verschillende bestanden die op een specifieke wijze gestructureerd zijn om een overzicht te behouden over het geheel.
i.
PLC
De PLC is geprogrammeerd en vormt de ingestelde parameters van de HMI om naar hoeken voor de zonnemodule. Dit is volledig automatisch en hoeft geen aanpassingen door de gebruiker.
ii.
HMI
De diverse schermen die de gebruikersinterface opmaken werken als volgt: Beginscherm Hier kan de selectie gebeuren tussen de verschillende menu’s. Diagnostiek, Onderhoud, Instellingen, automatisch en manueel. De berekende hoeken zijn zichtbaar per motor. Er wordt echter onderscheid gemaakt tussen berekende hoek en ingestelde hoek. De ingestelde hoeken kunnen enkel variëren tussen 0 en 180 graden. Als de berekende hoek onder 0 of boven 180 graden gaat, wordt dit weergegeven, maar de motor wordt hier niet op aangepast. Diagnostiek De berekende tussenwaarden zijn zichtbaar bij de diagnostiekpagina’s. Hierdoor is een vergelijking met calculatiebestanden mogelijk. Mogelijke problemen in de programmatuur is hierdoor eenvoudig te herkennen. Onderhoud Er is een schoonmaakstand en een stormstand ingebouwd. Deze standen simuleren vooraf ingestelde hoeken, die in specifieke gevallen opgeroepen kunnen worden. Verder is een testprint voorzien, die aan de PLC gekoppeld kan worden. Testprint Van de communicatielijn tussen de PLC en de zonnemodule kan iedere in-en uitgang getest worden. Instellingen De invoerparameters kunnen op deze pagina ingesteld worden. De tijd, datum en locatie van het CVO is reeds ingesteld. Automatisch De automatische aansturing van de zonnemodule. De invoerparameters zijn zichtbaar, maar deze kunnen niet aangepast worden.
3 Manueel In het manuele menu is dezelfde functionaliteit mogelijk als bij het automatische menu, hier is echter een mogelijkheid om de invoerparameters aan te passen. Per motor kan de waarde van de in te stellen hoek eveneens overschreven worden.
Figuur 1: Beginscherm HMI
Figuur 2: Diagnostiek pagina 1 HMI
Figuur 3: Diagnostiek pagina 2 HMI
4
Figuur 4: Onderhoud pagina HMI
Figuur 5: Testprint pagina HMI
Figuur 6: Instellingen pagina HMI
5
Figuur 7: Automatisch pagina HMI
Figuur 8: Manueel pagina HMI
iii.
ZONNEMODULE
De zonnemodule heeft een manuele en automatische modus. De manuele modus steunt volledig op de twee potentiometers. Door de stand van deze potentiometers te veranderen, verandert de hoek van de respectievelijke motor. De automatische modus steunt uitsluitend op externe signalen, die door de PLC gegeven worden.
6
Figuur 9: Frontplaat zonnemodule
De instellingen die door het bedieningspaneel ingesteld kunnen worden zijn als volgt: DIP schakelaars: Bij de DIP-schakelaars is het aanzetten van de schakelaar de bovenste positie. ! ! ! ! ! ! ! !
A: Manueel/automatisch selectie. B: Reset microcontroller C: Geen functie D: Geen functie E: Aanschakelen van 15V spanning voor motoren F: Geen functie G: Geen functie H: Aanschakelen van 5V spanning voor microcontroller
Status LED’s: ! ! ! ! !
D1: Manuele modus geselecteerd. Dit is een groene LED. D2: Automatische modus geselecteerd. Dit is een rode LED. D3: Motor 1 is actief. Dit is een oranje LED. D4: Motor 2 is actief. Dit is een oranje LED. D5: Ready: De motoren zijn ingesteld. Dit is een groene LED.
Er dient opgemerkt te worden dat voor het gebruiken van deze module eerst de E-schakelaar en erna de H-schakelaar dient opgezet te worden. Dit heeft te maken met de DC/DC convertor van het vermogen. Deze convertor zal niet op een correcte manier functioneren als deze sequentie van inschakelen niet wordt aangehouden.
7
LIJST VAN GRAFIEKEN/ TABELLEN/ FIGUREN Figuur 1: Beginscherm HMI .......................................................................................................................................... 3 Figuur 2: Diagnostiek pagina 1 HMI .......................................................................................................................... 3 Figuur 3: Diagnostiek pagina 2 HMI .......................................................................................................................... 3 Figuur 4: Onderhoud pagina HMI ............................................................................................................................... 4 Figuur 5: Testprint pagina HMI ................................................................................................................................... 4 Figuur 6: Instellingen pagina HMI .............................................................................................................................. 4 Figuur 7: Automatisch pagina HMI ............................................................................................................................ 5 Figuur 8: Manueel pagina HMI..................................................................................................................................... 5 Figuur 9: Frontplaat zonnemodule ............................................................................................................................ 6
0
1
2
3
4
5
6
7
8
9
F26_001
CVO Crescendo Vaartdijk 86 2800 Mechelen Phone. 015/41 30 45 - Fax : 015/28 20 49
Company / customer Project description Drawing number Commission
Robbe Van Assche Zonvolgsysteem met kalenderprogrammering 00001 Stuurkast
Manufacturer (company)
CVO Crescendo
Path
CD-ROM
Project name
Zonvolgsysteem
Make Type Place of installation
CVO Crescendo
Responsible for project Part feature Created on
14/05/2013
Edit date
14/05/2013
by (short name) Ribster
Number of pages
4
2
Modification
Date
Name
Date Ed. Appr Original
11/06/2013 Ribster
Stuurkast
CVO Crescendo
Zonvolgsysteem met kalenderprogrammering Replaced by
Replaced by
= Zonvolgsysteem + Stuurkast
Title page 00001
Page Page
1 4
Modification
-PPI_INPUT_2
4.0 /
Date Name Date Ed. Appr Original 11/06/2013 Ribster Replaced by Replaced by
Stuurkast
Zonvolgsysteem met kalenderprogrammering CVO Crescendo
35
35
36
Klemmenstrook 00001
/
PE AC2
/
40
AC1
39
/
/
-PPI_INPUT_24V / 4.2
-PPI_OUTPUT_0V / 4.2
-ET200S_PSU_24V/
-ET200S_PSU_0V/
-ET200S_I_CHD- /
-ET200S_I_CHC-
-ET200S_I_CHB- /
-ET200S_I_CHA-
-ET200S_H_CHD- /
-ET200S_H_CHC- /
-ET200S_H_CHB- /
-ET200S_H_CHA- /
-ET200S_G_CHD- /
-ET200S_G_CHC- /
-ET200S_G_CHB- /
-ET200S_G_CHA- /
-ET200S_F_CHD- /
-ET200S_F_CHC- /
L1
2.5
White
2.5
White
2.5
Black
2.5
Black
2.5
DarkBlue
2.5
DarkBlue
/
-ET200S_F_CHB- /
-ET200S_F_CHA-
-ET200S_E_0V/
-ET200S_D_0V /
7
/
38
/ PSU1_24V_2
37
/ PSU1_0V_2
36
/ PSU1_24V_1
/ PSU1_0V_1
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
-ET200S_C_0V /
-ET200S_B_0V/
-ET200S_A_0V /
6
W1 ÖLFLEX CLASSIC 100 H 3G2,5 450 V
-ET200S_I_CHD+ /
35
2.5
34
4.3 / -PPI_OUTPUT_18
-ET200S_I_CHC+ /
34
2.5
34
Black
33
4.3 / -PPI_OUTPUT_16
-ET200S_I_CHB+ /
33
2.5
33
Black
32
4.3 / -PPI_OUTPUT_15
31
-ET200S_I_CHA+ /
32
2.5
-ET200S_E_24V/
-ET200S_D_24V /
32
Black
31
4.2 / -PPI_OUTPUT_14
30
-ET200S_H_CHD+ /
-ET200S_H_CHC+ /
-ET200S_H_CHB+ /
-ET200S_H_CHA+ /
-ET200S_G_CHD+ /
-ET200S_G_CHC+ /
-ET200S_G_CHB+ /
-ET200S_G_CHA+ /
-ET200S_F_CHD+ /
-ET200S_F_CHC+ /
-ET200S_F_CHB+ /
-ET200S_F_CHA+ /
-ET200S_E_CHD /
-ET200S_E_CHC /
-ET200S_E_CHB /
-ET200S_E_CHA /
-ET200S_D_CHD /
-ET200S_D_CHC /
-ET200S_D_CHB /
-ET200S_D_CHA /
31
2.5
/
-ET200S_C_CHD /
-ET200S_C_CHC
2.5
DarkBlue
2.5
DarkBlue
2.5
DarkBlue
5
Black
29
4.2 / -PPI_OUTPUT_12
28
30
2.5
27
30
Black
26
29
4.2 / -PPI_OUTPUT_11
25
28
2.5
24
27
29
Black
23
26
28
4.2 / -PPI_OUTPUT_10
22
25
27
2.5
21
24
26
Black
20
23
25
4.0 / -PPI_OUTPUT_2
19
22
24
2.5
18
21
23
Black
17 20
22
4.1 / -PPI_OUTPUT_9
16 19
21
2.5
15
4
Black
14 18
20
4.1 / -PPI_OUTPUT_8
13 17
19
2.5
12 16
18
Black
11 15
17
4.1 / -PPI_OUTPUT_7
10 14
16
2.5
9 13
15
Black
8 12
14
4.1 / -PPI_OUTPUT_6
7 13
2.5
6 11
12
Black
5 10
11
4.1 / -PPI_OUTPUT_5
4 10
2.5
3
-ET200S_C_CHB /
-ET200S_C_24V / 9
Black
9
-ET200S_C_CHA
8
4.0 / -PPI_OUTPUT_4
8
-ET200S_B_CHD /
7
2.5
7
-ET200S_B_CHC /
6
3
Black
6
-ET200S_B_CHB /
-ET200S_B_24V/ 5
/
5
-ET200S_B_CHA /
2 4
-ET200S_A_CHD /
3
/
2 4
Black
1 3
2
2.5
1
-ET200S_A_CHC
-ET200S_A_24V / 2
Black
Etage 1
-ET200S_A_CHB /
/ 1
2.5
X1
1
4.0 / -PPI_OUTPUT_3
Etage 2
Black
-ET200S_A_CHA
X1
2.5
Black
X1
4.0 / -PPI_OUTPUT_1
-PPI_INPUT_1
4.0 /
0 8 9
N
x2
x1 1N4007
V1
Etage 0 41 42 43
BN 2,5 GNYE 2,5 BU 2,5
36
1 = Zonvolgsysteem + Stuurkast
3
Page Page 2 4
Modification
X1 44
Date 45 46 47
Name 48 49 50
Date Ed. Appr Original 51 52
11/06/2013 Ribster 53 54 55
Replaced by
56 57 58
-S7-1200_DI_a.1 / -S7-1200_DI_a.2 / -S7-1200_DI_a.3 / -S7-1200_DI_a.4 / -S7-1200_DI_a.5 / -S7-1200_DI_a.6 / -S7-1200_DI_a.7 / -S7-1200_DI_b.0 / -S7-1200_DI_b.1 / -S7-1200_DI_b.2 / -S7-1200_DI_b.3 / -S7-1200_DI_b.4 / -S7-1200_DI_b.5 / -S7-1200_AI_2M -S7-1200_AI_0 -S7-1200_AI_1
-S7-1200_AQ_0M / -S7-1200_AQ_0 / -S7-1200_DQ_1L / -S7-1200_DQ_a.0 / -S7-1200_DQ_a.1 / -S7-1200_DQ_a.2 / -S7-1200_DQ_a.3 / -S7-1200_DQ_a.4 / -S7-1200_DQ_2L / -S7-1200_DQ_a.5 / -S7-1200_DQ_a.6 / -S7-1200_DQ_a.7 / -S7-1200_DQ_b.0 / -S7-1200_DQ_b.1 /
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
DarkBlue
59 60
DarkBlue
61
Replaced by
DarkBlue
62
DarkBlue
63
Stuurkast
Zonvolgsysteem met kalenderprogrammering
DarkBlue
DarkBlue
64 65
DarkBlue
66
DarkBlue
67
CVO Crescendo
DarkBlue
68
DarkBlue
69
DarkBlue
DarkBlue
70 71
DarkBlue
72
DarkBlue
73 74
2.5
2.5
2.5
2.5
4
2.5
2.5
2.5
2.5
2.5
2.5
/
3
2.5
2.5
2.5
2.5
2.5
2
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
/
-S7-1200_DI_a.0 /
DarkBlue
1
/
-S7-1200_DI_M /
DarkBlue
2.5
DarkBlue
0 5 6 7 8
Klemmenstrook 00001
9
Etage 0 75
2 = Zonvolgsysteem + Stuurkast
4
Page Page 3 4
X2
Modification 1 2
Date 3 4
Name 5 6 7
Date Ed. Appr Original 8
DB25_MALE_14 DB25_MALE_15 DB25_MALE_16 DB25_MALE_17 DB25_MALE_18 DB25_MALE_19 DB25_MALE_20 DB25_MALE_21 DB25_MALE_22 DB25_MALE_23 DB25_MALE_24 DB25_MALE_25
/ / / / / / / / / / /
0.5
9
11/06/2013 Ribster 10 11 12 13
Replaced by 14 15 16 17 18
Replaced by 19 20
Stuurkast
Zonvolgsysteem met kalenderprogrammering 21 22 23
DB25_FEMALE_23 DB25_FEMALE_24 DB25_FEMALE_25
/ / /
0.5
23
24
24
0.5
Red
0.5
White
0.5
Blue
0.5
Green
24
0.5
22
0.5
DB25_FEMALE_22 /
0.5 Red
23
Red
21
0.5
20
22
Green
DB25_FEMALE_21 /
0.5 White
21
0.5
DB25_FEMALE_20 /
Blue
0.5
-PPI_OUTPUT_4 / 2.4 -PPI_OUTPUT_5 / 2.4 -PPI_OUTPUT_6 / 2.5 -PPI_OUTPUT_7 / 2.5 -PPI_OUTPUT_8 / 2.5 -PPI_OUTPUT_9 / 2.5 -PPI_OUTPUT_10 / 2.6 -PPI_OUTPUT_11 / 2.6 -PPI_OUTPUT_12 / 2.6 -PPI_OUTPUT_0V / 2.8 -PPI_OUTPUT_14 / 2.6 -PPI_OUTPUT_15 / 2.6 -PPI_OUTPUT_16 / 2.6
Black
Black
Black
Black
Black
Black
Black
Black
Black
Black
Black
Black
2.5
Black
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
2.5
-PPI_OUTPUT_18 / 2.7
-PPI_OUTPUT_3 / 2.4
Black
2.5
3
Blue
19
0.5
DB25_FEMALE_19 /
0.5 Green
20
White
18
0.5
DB25_FEMALE_18 /
19
Red
17
0.5
DB25_FEMALE_17 /
0.5 Red
18
Green
16
Blue
DB25_FEMALE_16 /
0.5 White
17
0.5
DB25_FEMALE_15 /
0.5 Blue
16
0.5
DB25_FEMALE_14
/
0.5 Green
-PPI_OUTPUT_2 / 2.5
Black
2
White
15
0.5
DB25_FEMALE_13
/
15
Red
14
0.5
-PPI_INPUT_24V / 2.8
0.5 Red
14
Green
13
0.5
12 2.5
0.5 White
13
Blue
11
0.5
DB25_FEMALE_12
/
0.5 Blue
12
White
Black
0.5 Green
11
0.5
DB25_FEMALE_11
/
0.5 Red
-PPI_OUTPUT_1 / 2.4
Black
2.5
Black
1
Green
10
0.5
DB25_FEMALE_10
DB25_FEMALE_9
/ /
DB25_FEMALE_8
/
0.5 White
10
White
9
0.5
DB25_FEMALE_7
/
0.5 Blue
9
Blue
8
Green
DB25_FEMALE_6
/
0.5 Green
8
/
DB25_MALE_9
/
0.5
7
Red
DB25_FEMALE_5
/
0.5 Red
7
DB25_MALE_13
DB25_MALE_8
/
0.5
6
White
DB25_FEMALE_4
/
0.5 White
6
/
DB25_MALE_7
/
0.5
5
Blue
DB25_FEMALE_3
/
0.5 Blue
5
DB25_MALE_12
DB25_MALE_6
/
0.5
4
Green
DB25_FEMALE_2
/
Green
0.5
Red
4
/
DB25_MALE_5
/
0.5
3
Red
2.5
DB25_FEMALE_1
3
DB25_MALE_11
DB25_MALE_4
/
0.5
2
White
-PPI_INPUT_2 / 2.0
Black
/
2
/
DB25_MALE_3
/
0.5
1
Blue
-PPI_INPUT_1 / 2.0
2.5
Black
1
DB25_MALE_10
DB25_MALE_2
/
Green
X2
0.5
Red
X2
/
DB25_MALE_1
/
0 4 5
CVO Crescendo
6 7 8
Klemmenstrook 00001
9
Etage 0 25
Etage 1 25
Etage 2 25
3 = Zonvolgsysteem + Stuurkast
Page Page 4 4
1
2
3
4
+24
T1
CR1 2KBP04
J24_1
R1 0603 1K2
U4 GEN_POWER
A LED +24V 0603
Socket
1 2 3 4
+24
OUT VCC SYNCH GND EN Fsw COMP FB
0603 xR
+12 CR2 2KBP04
J12_1
0603 xpF
A
C13 Case G 220µF
C15 0603 1000pF
R14 0603 1K
D1 RB056L-40
GND
R23 0603 1K2
R16 0603 4K99 R17 0603 1K
R20 0603 1K
R21 0603 1K
LED +14V 0603
GND
R12 0603 7.5K
J12_2 GND
B
R7 0603 7.5K R8 0603 7.5K
0603 xpF
LED +12V 0603
Socket
GND
C7
R3 0603 1K2
Inductor Iron 82µH
+14
C9
R4
Socket
L2 C11 0603 4700pF
R6 0603 7.5K
L7986TA
J24_2 GND
R2 0603 1K2
8 7 6 5
GND
B
Socket U5 P1
N
GEN_POWER
3 2 1 Header 3
1 2 3 4
+12
OUT VCC SYNCH GND EN Fsw COMP FB
8 7 6 5 R9 0603 7.5K
L7986TA L1
GND
0603 xR
0603 xpF
R10 0603 7.5K
C1 Case P 1000µF
C3 Case X 100µF
C5 0603 xpF
0603 xpF
C16 0603 1000pF
R15 0603 1K37
R11 0603 7.5K
R18 0603 4K99
R22 0603 1K2
LED +5V 0603
R19 0603 1K37
C GND
GND
R13 0603 7.5K
GND
GND
+12
DC/DC CONVERTER C2 Case P 1000µF
D
C14 Case G 220µF
D2 RB056L-40
C8 C
Inductor Iron 100µH
+5
C10
R5
+24
L3 C12 0603 4700pF
C4 Case X 100µF
C6 0603 xpF D
GND
RECTIFIER 1
CVO Crescendo Eindwerk Robbe Van Assche Zonvolgsysteem Size: A4 Number: 1 Revision: B HBO 5: Graduaat EM Date: 9/06/2013 Time: 19:40:44 Sheet 1 of 5 2012-2013 File: E:\Dropbox\School\02 CVO Crescendo\2012-2013\Eindwerk\Zonnevolger\Papers\PCB - 1.SchDoc Title
2
Vermogengedeelte
3
4
1
2
3
GND P5 A
MOT1_C1_2 MOT1_C1_1 MOT1_CT
C17 0603 +5 xpF
U8 MOT1_C2_1
1 2 3 4 5 6 7 8 9 10 11 12
MOT1_C2_2 GND
MOT1_OUT1 MOT1_OUT2 MOT1_OUT3 MOT1_OUT4
7 9 13 15
MOT1_ENA 8 MOT1_ENB 14
MOTOR 1
GND GND GND GND
1 10 11 20
IN1 IN2 IN3 IN4
VSS VS
EN A EN B
OUT1 OUT2 OUT3 OUT4 ISEN A ISEN B
GND GND GND GND
12 6 4 5 16 17
+14
C19 0603 xpF
MOT1_C1_1 +14 MOT1_C1_2 MOT1_C2_1 MOT1_C2_2
2 19
4
D3 RB056L-40 MOT1_C1_1
D5 RB056L-40 MOT1_C1_2
D7 RB056L-40 MOT1_C2_1
D9 RB056L-40 MOT1_C2_2
D4 RB056L-40
D6 RB056L-40
D8 RB056L-40
D10 RB056L-40
A
GND GND GND
NC NC
3 18
GND GND
GND
+14
L298P P8 B
MOT2_C1_1 MOT2_C2_1 MOT2_CT
C18 0603 +5 xpF
U9 MOT2_C1_2
1 2 3 4 5 6 7 8 9 10 11 12
MOT2_C2_2 GND
MOT2_OUT1 MOT2_OUT2 MOT2_OUT3 MOT2_OUT4
7 9 13 15
MOT2_ENA 8 MOT2_ENB 14
MOTOR 2
GND GND GND GND
1 10 11 20
IN1 IN2 IN3 IN4
VSS VS
EN A EN B
OUT1 OUT2 OUT3 OUT4 ISEN A ISEN B
GND GND GND GND
NC NC
12 6 4 5 16 17
C20 0603 xpF
MOT2_C1_1 +14 MOT2_C1_2 MOT2_C2_1 MOT2_C2_2
2 19
D11 RB056L-40 MOT2_C1_1
D13 RB056L-40 MOT2_C1_2
D15 RB056L-40 MOT2_C2_1
D17 RB056L-40 MOT2_C2_2
D12 RB056L-40
D14 RB056L-40
D16 RB056L-40
D18 RB056L-40
GND
GND GND
3 18
B
GND GND
POWER STAGE
L298P
C
C
GND P7 MOT1_MUX0_PLC MOT1_MUX1_PLC MOT1_MUX2_PLC MOT1_MUX3_PLC MOT1_MUX4_PLC MOT1_MUX5_PLC MOT1_MUX6_PLC MOT1_START_PLC MOT1_RD_PLC
1 2 3 4 5 6 7 8 9 10 11 12 13
GND2 GND2
P10 14 15 16 17 18 19 20 21 22 23 24 25 26
MOT2_MUX0_PLC MOT2_MUX1_PLC MOT2_MUX2_PLC MOT2_MUX3_PLC MOT2_MUX4_PLC MOT2_MUX5_PLC MOT2_MUX6_PLC MOT2_START_PLC MOT2_RD_PLC
PLC PLC
+5 +5 +5 +5 +5 +14 +14 +14 +14 +14
1 3 5 7 9 11 13 15 17 19
P2 2 4 6 8 10 12 14 16 18 20
GND GND GND GND GND GND GND GND GND GND
POWER_OUT
PLC COMM
GEN_MAN GEN_OFF GEN_POWER RESET LED_MAN LED_MOT1 LED_MOT2 LED_READY RES1_DIG MOT1_POT MOT2_POT RES2_DIG RES3_DIG RES4_DIG
1 3 5 7 9 11 13 15 17 19 21 23 25 27
+5 2 4 6 8 10 12 14 16 18 20 22 24 26 28
GND GND +24 GND GND GND GND GND GND GND GND GND GND GND
RES5_ANA RES1_ANA RES3_ANA
P3 1 3 5 7 9 11 13 15 17
2 4 6 8 10 12 14 16 18
RES6_ANA RES2_ANA RES4_ANA
SPARE_ANA
SELECTS D
D
CONNECTORS 1
2
CVO Crescendo Eindwerk Robbe Van Assche Zonvolgsysteem Size: A4 Number: 2 Revision: B HBO 5: Graduaat EM Date: 9/06/2013 Time: 19:41:47 Sheet 2 of 5 2012-2013 File: E:\Dropbox\School\02 CVO Crescendo\2012-2013\Eindwerk\Zonnevolger\Papers\PCB - 2.SchDoc Title
Vermogen en connectoren
3
4
1
2
+5
U1 6 4
A
3
C23 0603 xpF
+5 C26 0603 xpF
18 +5 C27 0603 xpF
GND GND
20
AREF
C28 0603 xpF
GND
GND P4 MISO SCK RESET
1 3 5
MOSI
ICSP GND
B GND GND GND
ADC6 ADC7 PC0 (ADC0/PCINT8) PC1 (ADC1/PCINT9) PC2 (ADC2/PCINT10) PC3 (ADC3/PCINT11) PC4 (ADC4/SDA/PCINT12) PC5 (ADC5/SCL/PCINT13) PC6 (RESET/PCINT14) PD0 (RXD/PCINT16) PD1 (TXD/PCINT17) PD2 (INT0/PCINT18) PD3 (PCINT19/OC2B/INT1) PD4 (PCINT20/XCK/T0) PD5 (PCINT21/OC0B/T1) PD6 (PCINT22/OC0A/AIN0) PD7 (PCINT23/AIN1)
+5 2 4 6
U2
VCC VCC AVCC
3 5 21
GND GND GND
4
PB0 (PCINT0/CLKO/ICP1) PB1 (PCINT1/OC1A) PB2 (PCINT2/SS/OC1B) PB3 (PCINT3/OC2A/MOSI) PB4 (PCINT4/MISO) PB5 (SCK/PCINT5) PB6 (PCINT6/XTAL1/TOSC1) PB7 (PCINT7/XTAL2/TOSC2)
19 RES5_ANA 22 RES6_ANA 23 24 25 26 27 28 29
RES1_ANA RES2_ANA RES3_ANA RES4_ANA MOT1_POT MOT2_POT RESET
30 31 32 1 2 9 10 11
GEN_MAN GEN_OFF MOT1_START MOT2_START MOT1_RD MOT2_RD LED_READY LED_MOT2
12 13 14 15 16 17 7 8
LED_MOT1 LED_MAN SS MOSI MISO SCK Y1 1 2
SS
7
SCK 1 MOSI 2 MISO 3
+5 R58 0603 GND 10K GND
5 4 6 8
+5 C21 0603 xpF
GND
18 9
7
SCK 1 MOSI 2 MISO 3
+5
R59 +5 0603 10K GND
XTAL
5 4 6
ATmega328P-AU
GND
SCK SI SO A0 A1
GP0 GP1 GP3 GP2 GP4 GP5 GP6 GP7
8
+5
C30 0603 18pF GND
MOT1_OUT1 MOT1_OUT2 MOT1_OUT3 MOT1_OUT4 MOT1_ENA MOT1_ENB MOT1_CT RES1_DIG
SS
7
SCK 1 MOSI 2 MISO 3
+5
R60 0603 GND +5 10K
5 4 6
RESET INT
8
+5 C24 0603 xpF
VDD VSS
GND
C22 0603 xpF
18 9
CS SCK SI SO A0 A1
GP0 GP1 GP3 GP2 GP4 GP5 GP6 GP7
18 9
CS SCK SI SO A0 A1
GP0 GP1 GP3 GP2 GP4 GP5 GP6 GP7
10 11 13 12 14 15 16 17
MOT1_MUX0 MOT1_MUX1 MOT1_MUX2 MOT1_MUX3 MOT1_MUX4 MOT1_MUX5 MOT1_MUX6 RES3_DIG
10 11 13 12 14 15 16 17
MOT2_MUX0 MOT2_MUX1 MOT2_MUX2 MOT2_MUX3 MOT2_MUX4 MOT2_MUX5 MOT2_MUX6 RES4_DIG
A
RESET INT VDD VSS MCP23S08-E/SO
10 11 13 12 14 15 16 17
MOT2_OUT1 MOT2_OUT2 MOT2_OUT3 MOT2_OUT4 MOT2_ENA MOT2_ENB MOT2_CT RES2_DIG
U7 SS
7
SCK 1 MOSI 2 MISO 3
+5 R61 0603 10K
RESET
+5 +5
5 4 6
INT
8
+5 VDD VSS MCP23S08-E/SO
MCU
10 11 13 12 14 15 16 17
MCP23S08-E/SO U3 SS
C29 0603 18pF
U6
CS
GND
C25 0603 xpF
18 9
CS SCK SI SO A0 A1
GP0 GP1 GP3 GP2 GP4 GP5 GP6 GP7
B
RESET INT VDD VSS MCP23S08-E/SO
I/O BANKS
C
C
D
D CVO Crescendo Eindwerk Robbe Van Assche Zonvolgsysteem Size: A4 Number: 3 Revision: B HBO 5: Graduaat EM Date: 9/06/2013 Time: 19:42:38 Sheet 3 of 5 2012-2013 File: E:\Dropbox\School\02 CVO Crescendo\2012-2013\Eindwerk\Zonnevolger\Papers\PCB - 3.SchDoc Title
1
2
Microcontroller & Expansie
3
4
2
+5
+5
A' 0603 10K
U10
MOT1_MUX0_PLC A
MOT1_MUX0
GND2 +5
MOT1_MUX1
MOT1_START_PLC
0603 1K
MOT1_START
MOT2_MUX2_PLC
GND2
MOT2_START_PLC
0603 1K
GND2
MOT2_START
MOT2_MUX3_PLC
0603 1K
+5
GND2 PLC
MOT1_MUX3
0603 1K
GND2
MOT1_RD_PLC
MOT2_MUX4_PLC
0603 1K
+5
GND2 PLC
MOT1_MUX4
0603 1K
GND2
MOT2_RD_PLC
MOT2_MUX5_PLC
0603 1K
+5
U15
MOT1_MUX5_PLC F
MOT2_RD GND
GND2 +5
MOT1_MUX5
MOT2_MUX0_PLC
0603 1K
U19
L
GND2
0603 10K
MOT2_MUX0
MOT2_MUX6_PLC
U25
R
R' 0603 10K
MOT2_MUX6
0603 1K
MOT1_MUX5
MOT2_MUX0 GND
C
GND +5
L'
0603 1K GND2
MOT2_MUX5
MOT2_MUX5
GND
F' 0603 10K
0603 10K
U24
Q
Q'
B
0603 1K
MOT1_MUX4 GND2
GND +5
K' 0603 10K
U30
K
MOT2_RD
MOT2_MUX4
MOT2_MUX4
GND
E' 0603 10K
U14
MOT1_MUX4_PLC E
MOT1_RD GND
0603 10K
U23
P
P'
0603 1K
MOT1_MUX3 GND2
GND +5
J' 0603 10K
U29
J
MOT1_RD
MOT2_MUX3
MOT2_MUX3 GND
D' 0603 10K
U13
MOT1_MUX3_PLC D
MOT2_START GND
0603 10K
U22
O
O'
0603 1K
MOT1_MUX2 GND2
GND +5
I' 0603 10K
U28
I
MOT2_MUX2 GND
+5
MOT1_MUX2
MOT2_MUX2
0603 1K
C' 0603 10K
U12
MOT1_MUX2_PLC C
N' 0603 10K
U21
N
MOT1_START GND
GND +5
H' 0603 10K
U27
H
MOT1_MUX1 +5
A
GND2
0603 1K GND2
MOT2_MUX1
MOT2_MUX1 GND
B' 0603 10K
U11
MOT1_MUX1_PLC B
0603 10K
U20
M
MOT1_MUX6 GND
+5
C
MOT2_MUX1_PLC
MOT1_MUX6
M'
0603 1K
MOT1_MUX0
B
+5
0603 1K GND2
4
G' 0603 10K
U16
MOT1_MUX6_PLC G
0603 1K
A
3
INPUT / OUTPUT PLC
1
GND2
MOT2_MUX6 GND
GND2
GND
D
D CVO Crescendo Eindwerk Robbe Van Assche Zonvolgsysteem Size: A4 Number: 4 Revision: B HBO 5: Graduaat EM Date: 9/06/2013 Time: 19:42:10 Sheet 4 of 5 2012-2013 File: E:\Dropbox\School\02 CVO Crescendo\2012-2013\Eindwerk\Zonnevolger\Papers\PCB - 4.SchDoc Title
1
2
Optocouplers
3
4
1
2
3
4
S1
R8 0603 xK D8 0603
1 2
4 3
K10 R10 0603 xK
D9 0603
D10 0603
S1_3 S1_4
1 2
4 3 SW DIP-2 S3
S1_5 S1_6
1 2
4 3 SW DIP-2 S4
S1_7 S1_8
1 2
4 3 R
P5
B +5 C1 0603 xpF GND
C2 0603 xpF GND
6 4
+5
18 C3 0603 xpF
GND
+5
20
U1 VCC VCC AVCC AREF
C4 0603 xpF GND
PC0 (ADC0/PCINT8) PC1 (ADC1/PCINT9) PC2 (ADC2/PCINT10) PC3 (ADC3/PCINT11) PC4 (ADC4/SDA/PCINT12) PC5 (ADC5/SCL/PCINT13) PC6 (RESET/PCINT14) PD0 (RXD/PCINT16) PD1 (TXD/PCINT17) PD2 (INT0/PCINT18) PD3 (PCINT19/OC2B/INT1) PD4 (PCINT20/XCK/T0) PD5 (PCINT21/OC0B/T1) PD6 (PCINT22/OC0A/AIN0) PD7 (PCINT23/AIN1)
C
GND GND GND
ADC6 ADC7
3 5 21
GND GND GND
PB0 (PCINT0/CLKO/ICP1) PB1 (PCINT1/OC1A) PB2 (PCINT2/SS/OC1B) PB3 (PCINT3/OC2A/MOSI) PB4 (PCINT4/MISO) PB5 (SCK/PCINT5) PB6 (PCINT6/XTAL1/TOSC1) PB7 (PCINT7/XTAL2/TOSC2)
1 2 3 4 5 6 7 8
19 22 23 24 25 26 27 28 29 RESET 30 31 32 1 B 2 9 R 10 11 12 13 14 15 16 17 7 8
1 2 3 4 5 6 7 8 Header 8 P6
G MOSI MISO SCK
ATmega328P-AU
1
Y1
C5 0603 18pF
SW DIP-2
2
VR1
+5
Vin Vout GND Volt Reg
R11
R_LED
1
G_LED
2
B_LED
3
D11 A1 A2
C1 1: RED 2: GREEN C2 3: BLUE
A3
C3
P4 1 3
GND MISO SCK RESET
R18 0603 xK
B
B_LED
4
GND
5 6
VCC
P3 1 3 5
C
2 4
Header 2X2
ICSP
GND +5
2 4 6
MOSI
GND
D CVO Crescendo Eindwerk Robbe Van Assche Zonvolgsysteem Size: A4 Number: 5 Revision: B HBO 5: Graduaat EM Date: 12/06/2013 Time: 2:12:01 Sheet 5 of 5 2012-2013 File: E:\Dropbox\School\02 CVO Crescendo\2012-2013\Eindwerk\Zonnevolger\Papers\PCB - 5.SchDoc Title
2
Q3 PNP
0603 xK
Enhanced optical Power LED (ThinFilm / ThinGaN)
VCC
Header 6
+5
R15
G_LED
0603 R12 xK 0603 xK
GND
B
A
R17 0603 xK
R_LED
VCC
Q2 PNP
0603 xK
R16 0603 xK
FRONTPANEL
Header 10X2A
+5
R14
G
A10 A9 A8 A7 A6 A5 A4 A3 A2 A1
20 10 19 9 18 8 17 7 16 6 15 5 14 4 13 3 12 2 11 1
C6 0603 18pF
GND
1
1 2 3 4 5 6
XTAL
D
4 3
P2
K10 K9 K8 K7 K6 K5 K4 K3 K2 K1
Header 11
Q1 PNP
0603 xK
Header 8 P7
R13
GND1
1 2
1 2 3 4 5 6 7 8 9 10 11
+5
SW DIP-2 S5 S1_9 S1_10
P1
GND1 S1_1 S1_2 S1_3 S1_4 S1_5 S1_6 S1_7 S1_8 S1_9 S1_10
SW DIP-2 S2
A10
D7 0603
R9 0603 xK
A9
D6 0603
K9
K8
K7
K6 D5 0603
R7 0603 xK
A8
D4 0603
R6 0603 xK
A6
D3 0603
R5 0603 xK
A7
R4 0603 xK
A5
D2 0603
K5
K4 R3 0603 xK
A2
D1 0603
A1
K3 R2 0603 xK
A4
R1 0603 xK
A3
K1
A
K2
S1_1 S1_2
Frontpanel
3
4
(FSCFSöMFTTUVVSQSJOU[POWPMHTZTUFFN
#PUUPNMBZFS
5PQMBZFS
E:\Dropbox\School\02 CVO Crescendo\2012-2013\... 2012-2013\Eindwerk CVO-Crescendo 2012-2013.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
/* * Eindwerk_CVO_Crescendo_2012_2013.c * * Created: 25-1-2013 20:39:45 * Author: Robbe Van Assche */ #define F_CPU 16000000L // De frequentie van de uC vastleggen in de eenheid LONG. #include // Bibliotheek inladen #include // Bibliotheek inladen #include <stdlib.h> // Bibliotheek inladen #include <stdint.h> // Bibliotheek inladen #include // Bibliotheek inladen uint8_t MOT2_TIMER_CYCLE = 0; // Instelling startwaarde aantal cycles motor 1 uint16_t MOT2_TIMER_TIMES = 0; // Instelling startwaarde variabele motor 1 uint8_t MOT1_TIMER_CYCLE = 0; // Instelling startwaarde aantal cycles motor 2 uint16_t MOT1_TIMER_TIMES = 0; // Instelling startwaarde variabele motor 1 #include "Pinassignment.h" // Headerfile inladen #include "Functions.c" // Functies inladen // Interrupt Service Routine voor de ADC sampling ISR(ADC_vect){ uint8_t Laag = ADCL; // Waarde van de laatste 8bits wegschrijven ADCResult = (ADCH<<8) | Laag; /* 16-bit waarde maken waarbij 2 bit van de 10-bit resolutie voor de 8-bit laagste resolutie wordt gezet */ switch (ADMUX) // Wisselen tussen ADC sampling { case 0x46: // Als ADC van motor 1 ingesteld is, gebruik dit geval /* Als de manuele modus geselecteerd is, wordt de analoge waarde geconverteerd naar graden en weggeschreven naar een waarde Deze waarde wordt later afgevraagd. De sampling van motor 2 wordt ingesteld. */ if (GEN_MANUAL==1){ADCMOT1 = ADCTODEGREE(ADCResult);}ADMUX = 0x47; break; case 0x47: // Als ADC van motor 2 ingesteld is, gebruik dit geval if (GEN_MANUAL==1){ADCMOT2 = ADCTODEGREE(ADCResult);}ADMUX = 0x46; break; } ADCSRA |= (1<
1
E:\Dropbox\School\02 CVO Crescendo\2012-2013\... 2012-2013\Eindwerk CVO-Crescendo 2012-2013.c 75 MOT2_EN_TIMER = 1; // Als timerwaarde doorlopen is, laat motor toe om te werken. 76 TCCR1B &= ~(1<
2
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Pinassignment.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
// PINASSIGNMENT ATmega328p /* Pin 19 22 20 18 3 5 21 12 13 14 15 16 17 7 8 23 24 25 26 27 28 29 30 31 32 1 2 9 10 11 4 6
Naam ADC ADC AREF AVCC GND GND GND PB PB PB PB PB PB PB PB PC PC PC PC PC PC PC PD PD PD PD PD PD PD PD VCC VCC
Bit Ext. Int. 6 7
Toepassing Project RES5_ANA RES6_ANA
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 0 1 2 3 4 5 6 7
LED_MOT1 LED_MAN SS MOSI MISO SCK XTAL1 XTAL2 RES1_ANA RES_2_ANA RES3_ANA RES4_ANA MOT1_POT MOT2_POT RESET GEN_MAN GEN_OFF MOT1_START MOT2_START MOT1_RD MOT2_RD LED_READY LED_MOT2
0 1
*/
/*Iedere pin heeft een referentie. *Door gebruik te maken van 1<
1
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Pinassignment.h 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
/* Device MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 MCP23S08 */
# 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4
A1A0 00 10 00 11 00 12 00 13 00 14 00 15 00 16 00 17 01 10 01 11 01 12 01 13 01 14 01 15 01 16 01 17 10 10 10 11 10 12 10 13 10 14 10 15 10 16 10 17 11 10 11 11 11 12 11 13 11 14 11 15 11 16 11 17
Pin Naam IO Toepassing project X MOTOR 1 - OUT 1 X MOTOR 1 - OUT 2 X MOTOR 1 - OUT 4 X MOTOR 1 - OUT 3 X MOTOR 1 - ENABLE A X MOTOR 1 - ENABLE B X MOTOR 1 - CT X RES1_DIG X MOTOR 2 - OUT 1 X MOTOR 2 - OUT 2 X MOTOR 2 - OUT 4 X MOTOR 2 - OUT 3 X MOTOR 2 - ENABLE A X MOTOR 2 - ENABLE B X MOTOR 2 - CT X RES2_DIG X MOTOR 1 - MUX 0 X MOTOR 1 - MUX 1 X MOTOR 1 - MUX 2 X MOTOR 1 - MUX 3 X MOTOR 1 - MUX 4 X MOTOR 1 - MUX 5 X MOTOR 1 - MUX 6 X RES3_DIG X MOTOR 2 - MUX 0 X MOTOR 2 - MUX 1 X MOTOR 2 - MUX 2 X MOTOR 2 - MUX 3 X MOTOR 2 - MUX 4 X MOTOR 2 - MUX 5 X MOTOR 2 - MUX 6 X RES4_DIG
/*Het adres van iedere I/O expander. *Dit is de opcode met het adres ingebakken. *Als dit wordt verstuurd, weet de juiste slave wat te doen. */ // ADRES EXPANDING DEVICES #define EXP1_REF 0x40 #define EXP1R_REF 0x41 #define EXP2_REF 0x42 #define EXP2R_REF 0x43 #define EXP3_REF 0x44 #define EXP3R_REF 0x45 #define EXP4_REF 0x46 #define EXP4R_REF 0x47 // De referenties naar de verschillende banken van de I/O expanders #define EXP_B_IODIR 0x00 #define EXP_B_IPOL 0x01 #define EXP_B_GPINTEN 0x02 #define EXP_B_DEFVAL 0x03 #define EXP_B_INTCON 0x04 #define EXP_B_IOCON 0x05 #define EXP_B_GPPU 0x06 #define EXP_B_INTF 0x07 #define EXP_B_INTCAP 0x08 #define EXP_B_GPIO 0x09 #define EXP_B_OLAT 0x0A #define EXP_B_DUMMY 0xFF
/*De vooringestelde waarden voor de registers worden vastgelegd. */ // PRESETS // DEVICE ONE #define EXP_1_IODIR 0x00 // 0x00 #define EXP_1_IPOL 0x00 // 0x00
2
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Pinassignment.h 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
#define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define
EXP_1_GPINTEN 0x00 // 0x00 EXP_1_DEFVAL 0x00 // 0x00 EXP_1_INTCON 0x00 // 0x00 EXP_1_IOCON 0x28 // 0x28 EXP_1_GPPU 0x00 // 0x00 EXP_1_INTF 0x00 // 0x00 EXP_1_INTCAP 0x00 // 0x00 EXP_1_GPIO 0x00 // 0x00 EXP_1_OLAT 0x00 // 0x00 // DEVICE TWO EXP_2_IODIR 0xC0 // 0xC0 EXP_2_IPOL 0x00 // 0x00 EXP_2_GPINTEN 0x00 // 0x00 EXP_2_DEFVAL 0x00 // 0x00 EXP_2_INTCON 0x00 // 0x00 EXP_2_IOCON 0x28 // 0x28 EXP_2_GPPU 0xC0 // 0xC0 EXP_2_INTF 0x00 // 0x00 EXP_2_INTCAP 0x00 // 0x00 EXP_2_GPIO 0x00 // 0x00 EXP_2_OLAT 0x00 // 0x00 // DEVICE THREE EXP_3_IODIR 0xFF // 0xFF EXP_3_IPOL 0x00 // 0x00 EXP_3_GPINTEN 0x00 // 0x00 EXP_3_DEFVAL 0x00 // 0x00 EXP_3_INTCON 0x00 // 0x00 EXP_3_IOCON 0x28 // 0x28 EXP_3_GPPU 0xFF // 0xFF EXP_3_INTF 0x00 // 0x00 EXP_3_INTCAP 0x00 // 0x00 EXP_3_GPIO 0x00 // 0x00 EXP_3_OLAT 0x00 // 0x00 // DEVICE FOUR EXP_4_IODIR 0x7F // 0x7F EXP_4_IPOL 0x00 // 0x00 EXP_4_GPINTEN 0x00 // 0x00 EXP_4_DEFVAL 0x00 // 0x00 EXP_4_INTCON 0x00 // 0x00 EXP_4_IOCON 0x28 // 0x28 EXP_4_GPPU 0xFF // 0xFF EXP_4_INTF 0x00 // 0x00 EXP_4_INTCAP 0x00 // 0x00 EXP_4_GPIO 0x00 // 0x00 EXP_4_OLAT 0x00 // 0x00
// Het gebruik van variabelen voor de registermapping van de I/O expanders. // DEVICE 1 IO unsigned char EXP_MOT1_OUT1 = 0; unsigned char EXP_MOT1_OUT2 = 1; unsigned char EXP_MOT1_OUT3 = 2; unsigned char EXP_MOT1_OUT4 = 3; unsigned char EXP_MOT1_ENA = 4; unsigned char EXP_MOT1_ENB = 5; unsigned char EXP_MOT1_CT = 6; unsigned char EXP_RES1_DIG = 7; // DEVICE 2 IO unsigned char EXP_MOT2_OUT1 = 0; unsigned char EXP_MOT2_OUT2 = 1; unsigned char EXP_MOT2_OUT3 = 2; unsigned char EXP_MOT2_OUT4 = 3; unsigned char EXP_MOT2_ENA = 4; unsigned char EXP_MOT2_ENB = 5; unsigned char EXP_MOT2_CT = 6; unsigned char EXP_RES2_DIG = 7; // DEVICE 3 IO unsigned char EXP_MOT1_MUX0 unsigned char EXP_MOT1_MUX1 unsigned char EXP_MOT1_MUX2 unsigned char EXP_MOT1_MUX3
= = = =
0; 1; 2; 3;
3
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Pinassignment.h 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
unsigned unsigned unsigned unsigned
char char char char
EXP_MOT1_MUX4 = 4; EXP_MOT1_MUX5 = 5; EXP_MOT1_MUX6 = 6; EXP_RES3_DIG = 7;
// DEVICE 4 IO unsigned char EXP_MOT2_MUX0 = 0; unsigned char EXP_MOT2_MUX1 = 1; unsigned char EXP_MOT2_MUX2 = 2; unsigned char EXP_MOT2_MUX3 = 3; unsigned char EXP_MOT2_MUX4 = 4; unsigned char EXP_MOT2_MUX5 = 5; unsigned char EXP_MOT2_MUX6 = 6; unsigned char EXP_RES4_DIG = 7;
//MOT1 VARIABELEN uint8_t MOT1 = 1; #define DELAY_MOT1_0 35 #define DELAY_MOT1_1 50 #define DELAY_MOT1_TH_1 56 #define DELAY_MOT1_2 65 #define DELAY_MOT1_TH_2 55 #define DELAY_MOT1_3 80 #define DELAY_MOT1_TH_3 50 #define DELAY_MOT1_4 90 #define DELAY_MOT1_TH_4 45 #define DELAY_MOT1_5 120 #define DELAY_MOT1_TH_5 40 #define DELAY_MOT1_6 160 #define DELAY_MOT1_TH_6 35 #define DELAY_MOT1_7 180 #define DELAY_MOT1_TH_7 30 #define DELAY_MOT1_8 200 #define DELAY_MOT1_TH_8 25 #define DELAY_MOT1_9 220 #define DELAY_MOT1_TH_9 15 #define DELAY_MOT1_10 255 #define DELAY_MOT1_TH_10 10 // Threshold uint8_t TIMES_MOT1 = 0; uint8_t END_MOT1; uint8_t MOT1_RICHTING_DOWN = 0; uint8_t MOT1_RICHTING_UP = 1; uint8_t MOT1_RICHTING_INIT = 0; volatile uint16_t MOT1_DEGREE; volatile uint16_t MOT1_STEPS; static volatile uint16_t MOT1_DEGREE_NEW; static volatile uint16_t MOT1_STEPS_NEW; static volatile uint8_t MOT1_STAND = 1; static volatile uint8_t MOT1_EN_TIMER = 1; volatile uint8_t MOT1_EN = 1; uint8_t MOT1_ON = 0; uint16_t MOT1_STEPS_INIT = 180;
//MOT2 VARIABELEN uint8_t MOT2 = 2; #define DELAY_MOT2_0 35 #define DELAY_MOT2_1 50 #define DELAY_MOT2_TH_1 56 #define DELAY_MOT2_2 65 #define DELAY_MOT2_TH_2 55 #define DELAY_MOT2_3 80 #define DELAY_MOT2_TH_3 50 #define DELAY_MOT2_4 90 #define DELAY_MOT2_TH_4 45 #define DELAY_MOT2_5 120 #define DELAY_MOT2_TH_5 40 #define DELAY_MOT2_6 160 #define DELAY_MOT2_TH_6 35 #define DELAY_MOT2_7 180 #define DELAY_MOT2_TH_7 30 #define DELAY_MOT2_8 200
4
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Pinassignment.h 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327
#define #define #define #define #define
5
DELAY_MOT2_TH_8 25 DELAY_MOT2_9 220 DELAY_MOT2_TH_9 15 DELAY_MOT2_10 255 DELAY_MOT2_TH_10 10
uint8_t TIMES_MOT2 = 0; uint8_t END_MOT2; uint8_t MOT2_RICHTING_DOWN = 0; uint8_t MOT2_RICHTING_UP = 1; uint8_t MOT2_RICHTING_INIT = 0; volatile uint16_t MOT2_DEGREE; volatile uint16_t MOT2_STEPS; static volatile uint16_t MOT2_DEGREE_NEW; volatile uint16_t MOT2_STEPS_NEW; static volatile uint8_t MOT2_STAND = 1; static volatile uint8_t MOT2_EN_TIMER = 1; static volatile uint8_t MOT2_EN = 1; uint8_t MOT2_ON = 0; uint16_t MOT2_STEPS_INIT = 30; // //GENERAL uint8_t GEN_MANUAL; uint8_t GEN_OF_ALL; uint8_t INIT = 0; uint8_t INIT_DONE = 0; uint8_t data1; uint8_t data2; uint8_t data3; uint8_t data4; uint16_t GRADEN; const uint16_t MOT_DEGREE_STEPS[] = {0, 5, 11, 85, 91, 96, 101, 107, 112, 117, 123, 128, 133, , 197, 203, 208, 213, 219, 224, 229, 235, 240, , 304, 309, 315, 320, 325, 331, 336, 341, 347, , 411, 416, 421, 427, 432, 437, 443, 448, 453, , 517, 523, 528, 533, 539, 544, 549, 555, 560, , 624, 629, 635, 640, 645, 651, 656, 661, 667, , 731, 736, 741, 747, 752, 757, 763, 768, 773, , 837, 843, 848, 853, 859, 864, 869, 875, 880, , 944, 949, 955, 960}; uint16_t DEGREE; uint8_t MANUEEL; uint8_t OFF; uint8_t MOT_PRESET = 1; uint8_t READY = 0; static volatile uint16_t ADCResult; static volatile uint8_t MOT_ADC_STEP = 11; static volatile uint8_t MOT_ADC_DEGREE = 2;
16, 21, 27, 32, 37, 139, 144, 149, 155, 245, 251, 256, 261, 352, 357, 363, 368, 459, 464, 469, 475, 565, 571, 576, 581, 672, 677, 683, 688, 779, 784, 789, 795, 885, 891, 896, 901,
43, 48, 53, 59, 64, 160, 165, 171, 176, 267, 272, 277, 283, 373, 379, 384, 389, 480, 485, 491, 496, 587, 592, 597, 603, 693, 699, 704, 709, 800, 805, 811, 816, 907, 912, 917, 923,
69, 75, 80, 181, 187, 192 288, 293, 299 395, 400, 405 501, 507, 512 608, 613, 619 715, 720, 725 821, 827, 832 928, 933, 939
328 329 330 331 332 333 334 335 336 337 uint16_t ADCMOT1 = 0; 338 uint16_t ADCMOT2 = 0; 339 uint16_t MANUEEL_TIMES = 0; 340 // Declaratie van de functies 341 void SS_LOW(void); 342 void SS_HIGH(void); 343 char SPI_Transmit(char cData); 344 void INITIALIZE_EXPANDERS(void); 345 void INITIALIZE(void); 346 uint16_t READ_MUX(char motor); 347 void START_TIMER_MOT(int motor); 348 uint8_t READ_MANUEEL(void); 349 void READ(void); 350 void WRITE(void); 351 void WRITE_MOTOR(char motor, char One, char Two, char Three, char Four, char enable_one, char enable_two); 352 void WRITE_STANDEN_REVA(unsigned char motor, unsigned char richting, unsigned char stand); 353 uint16_t NULLOUT(void); 354 void delay_ms(uint16_t count); 355 void delay_us(uint16_t count); 356 void PROG_REVA(void); 357 void MOT1_WRITE_STEPS(void); 358 void MOT2_WRITE_STEPS(void); 359 void PROG_MANUEEL_REVA(void); 360 void PROG_AUTOMATISCH_REVA(void);
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Pinassignment.h 361 uint16_t BINAIRTODEGREE(uint16_t binair); 362 void TOGGLE_TIMERVAL(uint8_t motor); 363 // Einde van de functiedeclaratie
6
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 1 void INITIALIZE(void){ 2 /* 3 Het initialiseren van alle nodige functies wordt hier gedaan. 4 De instelling van de in- en uitgangen. 5 Het opzetten van de SPI-communicatie 6 Pullup-weerstanden instellen 7 Analoog naar digitale conversie opzetten 8 Tenslotte worden de I/O expanders geinitialiseerd. Uitleg in de functie zelf. 9 */ 10 // LEDS 11 DDRB |= 1<
1
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
SPI_Transmit(EXP3R_REF); // Stuur de referentie van de expander SPI_Transmit(EXP_B_GPIO); // Selecteer de GPIO bank (General Purpose I/O) data3 = SPI_Transmit(EXP_B_DUMMY); // Stuur een dummybyte en schrijf teruggekregen waarde van expander weg SS_HIGH(); // Zet chipselect hoog DEGREE = 0x0000; // Maak de variabele leeg GRADEN = 0x0000; // Maak de variabele leeg GRADEN = (!((data3 & (1 << EXP_MOT1_MUX6)))<<6) | (!((data3 & (1 << EXP_MOT1_MUX5)))<<5) | (!((data3 & (1 << EXP_MOT1_MUX4)))<<4) | (!((data3 & (1 << EXP_MOT1_MUX3)))<<3) | (!((data3 & (1 << EXP_MOT1_MUX2)))<<2) | (!((data3 & (1 << EXP_MOT1_MUX1)))<<1) | (!((data3 & (1 << EXP_MOT1_MUX0)))<<0); /* De verschillende ingangsbits van de MUX in een byte steken */ DEGREE = BINAIRTODEGREE(GRADEN); // Binaire waarde omvormen naar graden. } // MOTOR 2 if (motor == 2){ // Als variabele 2 meegegeven is data4 = 0x00; // Maak de variabele leeg SS_LOW(); // Zet chip select laag SPI_Transmit(EXP4R_REF); // Stuur de referentie van de expander SPI_Transmit(EXP_B_GPIO); // Selecteer de GPIO bank (General Purpose I/O) data4 = SPI_Transmit(EXP_B_DUMMY); // Stuur een dummybyte en schrijf teruggekregen waarde van expander weg SS_HIGH(); // Zet chipselect hoog DEGREE = 0x0000; // Maak de variabele leeg GRADEN = 0x0000; // Maak de variabele leeg GRADEN = (!((data4 & (1 << EXP_MOT2_MUX6)))<<6) | (!((data4 & (1 << EXP_MOT2_MUX5)))<<5) | (!((data4 & (1 << EXP_MOT2_MUX4)))<<4) | (!((data4 & (1 << EXP_MOT2_MUX3)))<<3) | (!((data4 & (1 << EXP_MOT2_MUX2)))<<2) | (!((data4 & (1 << EXP_MOT2_MUX1)))<<1) | (!((data4 & (1 << EXP_MOT2_MUX0)))<<0); /* De verschillende ingangsbits van de MUX in een byte steken */ DEGREE = BINAIRTODEGREE(GRADEN); // Binaire waarde omvormen naar graden. } return (DEGREE); // Geef het aantal graden terug naar diegene dat de functie opgeroepen heeft.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 } 118 119 void START_TIMER_MOT(int motor){ 120 /* 121 De motor wordt gestart. Hierbij 122 */ 123 if (motor == 1){ // Als meegegeven waarde 1 is 124 MOT1_EN_TIMER = 0; // Motor niet toelaten om te werken 125 TCNT0 = 0; // Buffer waarde van timer op 0 zetten 126 // TCCR0B – Timer/Counter Control Register B 127 TCCR0B |= 1< 16MHz/1024 = 15, 625kHz 129 } 130 else if (motor == 2){ // Als meegegeven waarde 2 is 131 MOT2_EN_TIMER = 0; // Motor niet toelaten om te werken 132 TCNT1 = 0; // Buffer waarde van timer op 0 zetten 133 TCCR1B |= 1< 16MHz/1024 = 15, 625kHz 135 } 136 } 137 uint8_t READ_MANUEEL(void){ 138 /* 139 De stand van de manuele pin wordt uitgelezen 140 */ 141 if (PIND & (1 << GEN_MAN)){ 142 MANUEEL = 0; 143 }
2
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
else { MANUEEL = 1; } return MANUEEL; } uint8_t READ_OFF(void){ /* De stand van de generale off-pin wordt uitgelezen Deze is niet gebruikt. */ if (PIND & (1 << GEN_OFF)){ OFF = 0; } else { OFF = 1; } return OFF; } uint8_t READ_END(uint8_t motor){ // READ ENDCONTACTS /* De eindeloopcontacten van de stappenmotoren worden gelezen. */ SS_LOW(); // Chipselect low SPI_Transmit(EXP2R_REF); SPI_Transmit(EXP_B_GPIO); data2 = SPI_Transmit(EXP_B_DUMMY); SS_HIGH(); if (motor == 2) { if (data2 & (1<<EXP_RES2_DIG)){ return 1; } else{ return 0; } } if (motor == 1) { if (data2 & (1<<EXP_MOT2_CT)){ return 1; } else{ return 0; } } } void TOGGLE_TIMERVAL(uint8_t motor){ /* Deze functie veranderd de tijd die de timer wacht tussen de pulsen. * Door deze tijd te veranderen is een snelheidsregeling gemaakt * Mij herpositionering is de startcycle steeds 10 * Na enkele iteraties wordt er sneller en sneller gegaan * Hierdoor worden er geen stappen overgeslagen. */ if (motor == 1) { switch(MOT1_TIMER_CYCLE){ case 0: OCR0A = DELAY_MOT1_0; break; case 1: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_1) { MOT1_TIMER_CYCLE = 0; OCR0A = DELAY_MOT1_0; } break; case 2: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_2) { MOT1_TIMER_CYCLE = 1; OCR0A = DELAY_MOT1_1; } break;
3
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291
case 3: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_3) { MOT1_TIMER_CYCLE = 2; OCR0A = DELAY_MOT1_2; } break; case 4: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_4) { MOT1_TIMER_CYCLE = 3; OCR0A = DELAY_MOT1_3; } break; case 5: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_5) { MOT1_TIMER_CYCLE = 4; OCR0A = DELAY_MOT1_4; } break; case 6: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_6) { MOT1_TIMER_CYCLE = 5; OCR0A = DELAY_MOT1_5; } break; case 7: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_7) { MOT1_TIMER_CYCLE = 6; OCR0A = DELAY_MOT1_6; } break; case 8: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_8) { MOT1_TIMER_CYCLE = 7; OCR0A = DELAY_MOT1_7; } break; case 9: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_9) { MOT1_TIMER_CYCLE = 8; OCR0A = DELAY_MOT1_8; } break; case 10: if (MOT1_TIMER_TIMES>DELAY_MOT1_TH_10) { MOT1_TIMER_CYCLE = 9; OCR0A = DELAY_MOT1_9; } break; } MOT1_TIMER_TIMES++; } else if (motor == 2) { switch(MOT2_TIMER_CYCLE){ case 0: OCR1A = DELAY_MOT2_0; break; case 1: if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_1) { MOT2_TIMER_CYCLE = 0; OCR1A = DELAY_MOT2_0; } break; case 2: if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_2)
4
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 292 { 293 MOT2_TIMER_CYCLE = 1; 294 OCR1A = DELAY_MOT2_1; 295 } 296 break; 297 case 3: 298 if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_3) 299 { 300 MOT2_TIMER_CYCLE = 2; 301 OCR1A = DELAY_MOT2_2; 302 } 303 break; 304 case 4: 305 if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_4) 306 { 307 MOT2_TIMER_CYCLE = 3; 308 OCR1A = DELAY_MOT2_3; 309 } 310 break; 311 case 5: 312 if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_5) 313 { 314 MOT2_TIMER_CYCLE = 4; 315 OCR1A = DELAY_MOT2_4; 316 } 317 break; 318 case 6: 319 if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_6) 320 { 321 MOT2_TIMER_CYCLE = 5; 322 OCR1A = DELAY_MOT2_5; 323 } 324 break; 325 case 7: 326 if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_7) 327 { 328 MOT2_TIMER_CYCLE = 6; 329 OCR1A = DELAY_MOT2_6; 330 } 331 break; 332 case 8: 333 if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_8) 334 { 335 MOT2_TIMER_CYCLE = 7; 336 OCR1A = DELAY_MOT2_7; 337 } 338 break; 339 case 9: 340 if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_9) 341 { 342 MOT2_TIMER_CYCLE = 8; 343 OCR1A = DELAY_MOT2_8; 344 } 345 break; 346 case 10: 347 if (MOT2_TIMER_TIMES>DELAY_MOT2_TH_10) 348 { 349 MOT2_TIMER_CYCLE = 9; 350 OCR1A = DELAY_MOT2_9; 351 } 352 break; 353 } 354 MOT2_TIMER_TIMES++; 355 } 356 } 357 void READ(void){ 358 // Alle waarden uitlezen 359 GEN_MANUAL = READ_MANUEEL(); 360 GEN_OF_ALL = READ_OFF(); 361 END_MOT1 = READ_END(1); 362 END_MOT2 = READ_END(2); 363 if (END_MOT2) 364 { 365 MOT2_DEGREE=0;
5
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 366 } 367 } 368 void WRITE(void){ 369 // Alle waarden wegschrijven 370 switch (GEN_MANUAL) 371 { 372 case 0: 373 PORTB &= ~(1<90) 425 { 426 PORTB |= (1<90) 434 { 435 PORTD |= (1<
6
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 440 } 441 442 if ((ADCMOT1>120)&(ADCMOT2>120)) 443 { 444 PORTD |= (1<
7
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584
// STEP FOUR WRITE_MOTOR(MOT1, MOT1_STAND = 4; break; case 2: // STEP ONE WRITE_MOTOR(MOT1, MOT1_STAND = 1; break; case 3: // STEP TWO WRITE_MOTOR(MOT1, MOT1_STAND = 2; break; case 4: // STEP THREE WRITE_MOTOR(MOT1, MOT1_STAND = 3; break; case 5: WRITE_MOTOR(MOT1, break;}
0, 1, 1, 0, 1, 1);
1, 0, 1, 0, 1, 1);
1, 0, 0, 1, 1, 1);
0, 1, 0, 1, 1, 1);
0, 0, 0, 0, 0, 0);
} START_TIMER_MOT(1); } else if (motor == 2){ if (richting == 1){ switch (stand){ case 1: // STEP TWO WRITE_MOTOR(MOT2, 1, 0, 0, 1, 1, MOT2_STAND = 2; break; case 2: // STEP THREE WRITE_MOTOR(MOT2, 0, 1, 0, 1, 1, MOT2_STAND = 3; break; case 3: // STEP FOUR WRITE_MOTOR(MOT2, 0, 1, 1, 0, 1, MOT2_STAND = 4; break; case 4: // STEP ONE WRITE_MOTOR(MOT2, 1, 0, 1, 0, 1, MOT2_STAND = 1; break; case 5: WRITE_MOTOR(MOT2, 0, 0, 0, 0, 0, break;} } else if (richting == 0){switch (stand) { case 1: // STEP FOUR WRITE_MOTOR(MOT2, 0, 1, 1, 0, 1, 1); MOT2_STAND = 4; break; case 2: // STEP ONE WRITE_MOTOR(MOT2, 1, 0, 1, 0, 1, 1); MOT2_STAND = 1; break; case 3: // STEP TWO WRITE_MOTOR(MOT2, 1, 0, 0, 1, 1, 1); MOT2_STAND = 2; break; case 4: // STEP THREE WRITE_MOTOR(MOT2, 0, 1, 0, 1, 1, 1); MOT2_STAND = 3; break;
1);
1);
1);
1);
0);
8
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 585 case 5: 586 WRITE_MOTOR(MOT2, 0, 0, 0, 0, 0, 0); 587 break;} 588 } 589 START_TIMER_MOT(2); 590 } 591 } 592 void WRITE_STANDEN_REVB(unsigned char motor, unsigned char richting, unsigned char stand){ 593 /*Single step, half step 594 *Hier wordt de 8-stapssequentie gehanteerd. 595 *Motor, richting en stand wordt meegegeven. 596 *Op basis hiervan wordt de correcte volgende stap geselecteerd en naar de expanders gestuurd. 597 */ 598 if (motor == 1){ 599 if (richting == 0){ 600 switch (stand){ 601 case 1: 602 // STEP TWO 603 WRITE_MOTOR(MOT1, 1, 0, 0, 0, 1, 1); 604 MOT1_STAND = 2; 605 break; 606 case 2: 607 // STEP THREE 608 WRITE_MOTOR(MOT1, 1, 0, 0, 1, 1, 1); 609 MOT1_STAND = 3; 610 break; 611 case 3: 612 // STEP FOUR 613 WRITE_MOTOR(MOT1, 0, 0, 0, 1, 1, 1); 614 MOT1_STAND = 4; 615 break; 616 case 4: 617 // STEP FIVE 618 WRITE_MOTOR(MOT1, 0, 1, 0, 1, 1, 1); 619 MOT1_STAND = 5; 620 break; 621 case 5: 622 // STEP SIX 623 WRITE_MOTOR(MOT1, 0, 1, 0, 0, 1, 1); 624 MOT1_STAND = 6; 625 break; 626 case 6: 627 // STEP SEVEN 628 WRITE_MOTOR(MOT1, 0, 1, 1, 0, 1, 1); 629 MOT1_STAND = 7; 630 break; 631 case 7: 632 // STEP EIGHT 633 WRITE_MOTOR(MOT1, 0, 0, 1, 0, 1, 1); 634 MOT1_STAND = 8; 635 break; 636 case 8: 637 // STEP ONE 638 WRITE_MOTOR(MOT1, 1, 0, 1, 0, 1, 1); 639 MOT1_STAND = 1; 640 break; 641 642 643 644 case 9: 645 WRITE_MOTOR(MOT1, 0, 0, 0, 0, 0, 0); 646 break; 647 } 648 } 649 else if (richting == 1){ 650 switch (stand){ 651 case 1: 652 // STEP EIGHT 653 WRITE_MOTOR(MOT1, 0, 0, 1, 0, 1, 1); 654 MOT1_STAND = 8; 655 break; 656 657 case 2: 658 // STEP ONE
9
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732
WRITE_MOTOR(MOT1, 1, 0, 1, 0, 1, 1); MOT1_STAND = 1; break; case 3: // STEP TWO WRITE_MOTOR(MOT1, 1, 0, 0, 0, 1, 1); MOT1_STAND = 2; break; case 4: // STEP THREE WRITE_MOTOR(MOT1, 1, 0, 0, 1, 1, 1); MOT1_STAND = 3; break; case 5: // STEP FOUR WRITE_MOTOR(MOT1, 0, 0, 0, 1, 1, 1); MOT1_STAND = 4; break; case 6: // STEP FIVE WRITE_MOTOR(MOT1, 0, 1, 0, 1, 1, 1); MOT1_STAND = 5; break; case 7: // STEP SIX WRITE_MOTOR(MOT1, 0, 1, 0, 0, 1, 1); MOT1_STAND = 6; break; case 8: // STEP SEVEN WRITE_MOTOR(MOT1, 0, 1, 1, 0, 1, 1); MOT1_STAND = 7; break; case 9: WRITE_MOTOR(MOT1, 0, 0, 0, 0, 0, 0); break; } } START_TIMER_MOT(1); } else if (motor == 2){ if (richting == 0){ switch (stand){ case 1: // STEP TWO WRITE_MOTOR(MOT2, MOT2_STAND = 2; break; case 2: // STEP THREE WRITE_MOTOR(MOT2, MOT2_STAND = 3; break; case 3: // STEP FOUR WRITE_MOTOR(MOT2, MOT2_STAND = 4; break; case 4: // STEP FIVE WRITE_MOTOR(MOT2, MOT2_STAND = 5; break; case 5: // STEP SIX WRITE_MOTOR(MOT2, MOT2_STAND = 6;
1, 0, 0, 0, 1, 1);
1, 0, 0, 1, 1, 1);
0, 0, 0, 1, 1, 1);
0, 1, 0, 1, 1, 1);
0, 1, 0, 0, 1, 1);
10
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806
break; case 6: // STEP SEVEN WRITE_MOTOR(MOT2, 0, 1, 1, 0, 1, 1); MOT2_STAND = 7; break; case 7: // STEP EIGHT WRITE_MOTOR(MOT2, 0, 0, 1, 0, 1, 1); MOT2_STAND = 8; break; case 8: // STEP ONE WRITE_MOTOR(MOT2, 1, 0, 1, 0, 1, 1); MOT2_STAND = 1; break;
case 9: WRITE_MOTOR(MOT2, 0, 0, 0, 0, 0, 0); break; } } else if (richting == 1){ switch (stand){ case 1: // STEP EIGHT WRITE_MOTOR(MOT2, 0, 0, 1, 0, 1, 1); MOT2_STAND = 8; break; case 2: // STEP ONE WRITE_MOTOR(MOT2, 1, 0, 1, 0, 1, 1); MOT2_STAND = 1; break; case 3: // STEP TWO WRITE_MOTOR(MOT2, 1, 0, 0, 0, 1, 1); MOT2_STAND = 2; break; case 4: // STEP THREE WRITE_MOTOR(MOT2, 1, 0, 0, 1, 1, 1); MOT2_STAND = 3; break; case 5: // STEP FOUR WRITE_MOTOR(MOT2, 0, 0, 0, 1, 1, 1); MOT2_STAND = 4; break; case 6: // STEP FIVE WRITE_MOTOR(MOT2, 0, 1, 0, 1, 1, 1); MOT2_STAND = 5; break; case 7: // STEP SIX WRITE_MOTOR(MOT2, 0, 1, 0, 0, 1, 1); MOT2_STAND = 6; break; case 8: // STEP SEVEN WRITE_MOTOR(MOT2, 0, 1, 1, 0, 1, 1); MOT2_STAND = 7; break;
11
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 807 case 9: 808 WRITE_MOTOR(MOT2, 0, 0, 0, 0, 0, 0); 809 break; 810 } 811 } 812 START_TIMER_MOT(2); 813 } 814 } 815 uint16_t NULLOUT(void){ 816 /*De motor wordt naar de eindcontacten teruggestuurd. 817 *Dan wordt er een welbepaalde waarde teruggestapt 818 *Hierna is de initialisatie gedaan 819 *Return 1 820 */ 821 if (INIT==0) 822 { 823 if (END_MOT1) 824 { 825 // INITIALIZATION DONE 826 if (END_MOT2) 827 { 828 MOT2_ON=0; 829 if (MOT_PRESET == 1){ 830 MOT1_ON=1; 831 WRITE(); 832 for (int i=0;i<MOT1_STEPS_INIT;) 833 { 834 835 switch (MOT1_EN_TIMER) 836 { 837 case 1: 838 WRITE_STANDEN_REVB(MOT1, MOT1_RICHTING_UP, MOT1_STAND); 839 TOGGLE_TIMERVAL(1); 840 START_TIMER_MOT(1); 841 i++; 842 break; 843 } 844 } 845 MOT1_ON=0; 846 MOT2_ON=1; 847 WRITE(); 848 for (int i=0;i<MOT2_STEPS_INIT;) 849 { 850 MOT2_TIMER_TIMES = 0; 851 switch (MOT2_EN_TIMER) 852 { 853 case 1: 854 WRITE_STANDEN_REVB(MOT2, MOT2_RICHTING_UP, MOT2_STAND); 855 TOGGLE_TIMERVAL(2); 856 START_TIMER_MOT(2); 857 i++; 858 break; 859 } 860 } 861 MOT2_ON=0; 862 WRITE(); 863 MOT_PRESET = 0; 864 } 865 866 // PRESETS DONE 867 INIT = 1; 868 MOT1_DEGREE=0; 869 MOT1_DEGREE_NEW = MOT1_DEGREE; 870 MOT2_DEGREE=0; 871 MOT2_DEGREE_NEW = MOT2_DEGREE; 872 return 1; 873 } 874 else 875 { 876 MOT1_ON=0; 877 MOT2_ON=1; 878 WRITE(); 879 switch (MOT2_EN_TIMER) 880 {
12
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928
13
case 1: WRITE_STANDEN_REVB(MOT2, MOT2_RICHTING_INIT, MOT2_STAND); TOGGLE_TIMERVAL(2); START_TIMER_MOT(2); break; } } } else { MOT1_ON=1; WRITE(); switch (MOT1_EN_TIMER) { case 1: WRITE_STANDEN_REVB(MOT1, MOT1_RICHTING_INIT, MOT1_STAND); TOGGLE_TIMERVAL(1); START_TIMER_MOT(1); break; } } } } void delay_ms(uint16_t count) { // Deze functie maakt het mogelijk om een variabele waarde te gebruiken in een delay. // Dit is niet gebruikt in het project. Enkel voor testdoeleinden while(count--) { _delay_ms(1); } } void delay_us(uint16_t count) { // Deze functie maakt het mogelijk om een variabele waarde te gebruiken in een delay. // Dit is niet gebruikt in het project. Enkel voor testdoeleinden while(count--) { _delay_us(1);
} } void PROG_MANUEEL_REVA(void){ /*Manueel programma * *De ingestelde waarde is volgens de waarde van de ADC. * */ switch(MANUEEL_TIMES){ case 0: MOT1_DEGREE_NEW = ADCMOT1; if (((MOT1_DEGREE_NEW+10)>MOT1_DEGREE)|((MOT1_DEGREE_NEW-10)<MOT1_DEGREE)|(MOT1_DEGREE_NEW= =0)|(MOT1_DEGREE_NEW==180)) 929 { 930 MOT1_WRITE_STEPS(); 931 } 932 933 MOT2_DEGREE_NEW = ADCMOT2; 934 if (((MOT2_DEGREE_NEW+10)>MOT2_DEGREE)|((MOT2_DEGREE_NEW-10)<MOT2_DEGREE)|(MOT2_DEGREE_NEW= =0)|(MOT2_DEGREE_NEW==180)) 935 { 936 MOT2_WRITE_STEPS(); 937 } 938 MANUEEL_TIMES++; 939 break; 940 941 case 200: 942 MANUEEL_TIMES = 0; 943 break; 944 945 default: 946 MANUEEL_TIMES++; 947 break; 948 } 949 } 950 void PROG_AUTOMATISCH_REVA(void){ 951 /*Automatische modus 952 *
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021
14
*De waarde wordt uit de mux gehaald en wordt ingesteld. * */ if (MOT1_EN) { READY=0; PORTD |= (1<<MOT1_RD); WRITE(); MOT1_DEGREE_NEW = READ_MUX(1); MOT1_WRITE_STEPS(); MOT1_EN=0; READY=1; WRITE(); } if (MOT2_EN) { READY=0; PORTD |= (1<<MOT2_RD); WRITE(); MOT2_DEGREE_NEW = READ_MUX(2); MOT2_WRITE_STEPS(); MOT2_EN=0; READY=1; WRITE(); } } uint16_t BINAIRTODEGREE(uint16_t binair){ /*Binaire waarden omzetten naar graden */ char waarde[16]; uint16_t output=0; itoa(binair, waarde, 10); if (atoi(waarde)==0){output=0;} else if (atoi(waarde)>90){output=180;} else {output=atoi(waarde)*2;} return output; } uint16_t ADCTODEGREE(uint16_t binair){ /*ADC waarden omzetten naar graden */ char waarde[16]; uint16_t output=0; itoa(binair, waarde, 10); if (atoi(waarde)==0){output=0;} else if (atoi(waarde)>=990){output=180;} else{for(int i=0;i<91;i++){ if ((atoi(waarde)>(MOT_ADC_STEP*i))&atoi(waarde)<((MOT_ADC_STEP*(i+1))+1)){output= MOT_ADC_DEGREE*i;} }} return output; } void MOT1_WRITE_STEPS(void){ if (MOT1_TIMER_CYCLE != 10) { MOT1_TIMER_CYCLE = 10; // HOOGSTE STAPTIJD INSTELLEN MOT1_TIMER_TIMES = 0; OCR0A = DELAY_MOT1_10; // STAPTIJD NAAR TIMER WEGSCHRIJVEN } MOT1_ON = 1; // Led van motor 1 hoog MOT2_ON = 0; // Led van motor 2 laag READY = 0; // Ready led laag WRITE(); // Verander de leds van stand MOT1_STEPS = MOT_DEGREE_STEPS[MOT1_DEGREE]; // Aantal stappen uit de array halen die overeen stemmen met het aantal graden. -- Conversie graden naar # stappen MOT1_STEPS_NEW = MOT_DEGREE_STEPS[MOT1_DEGREE_NEW]; // Aantal stappen uit de array halen die overeen stemmen met het aantal graden. -- Conversie graden naar # stappen while(MOT1_STEPS_NEW>MOT1_STEPS)// Als deze afvraging niet voldaan is, blijft deze loop doorlopen. (Hierdoor kunnen er dus geen 2 motoren tegelijk aan zijn) { switch (MOT1_EN_TIMER) // Als de motor toegelaten is om te werken { case 1: WRITE_STANDEN_REVB(MOT1, MOT1_RICHTING_UP, MOT1_STAND); // Verander de schakelaars van de H -brug
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095
15
TOGGLE_TIMERVAL(1); // Timertijd aanpassen voor rampup START_TIMER_MOT(1); // Start de timer, hierdoor moet de motor een bepaalde tijd wachten. MOT1_STEPS++; // Incrementeer de stapwaarde break; } } while(MOT1_STEPS_NEW<MOT1_STEPS) { switch (MOT1_EN_TIMER) { case 1: WRITE_STANDEN_REVB(MOT1, MOT1_RICHTING_DOWN, MOT1_STAND); TOGGLE_TIMERVAL(1); START_TIMER_MOT(1); MOT1_STEPS--; break; } } if (MOT1_STEPS==MOT1_STEPS_NEW) // Als het aantal stappen bereikt is { MOT1_DEGREE = MOT1_DEGREE_NEW; // Conversie van het aantal stappen naar graden uit array halen. MOT1_ON = 0; // Led van motor 1 laag READY = 1; // Ready led hoog WRITE(); // Verander de leds van stand } } void MOT2_WRITE_STEPS(void){ // DUPLICAAT VAN MOT1_WRITE_STEPS -- Commentaar daar. if (MOT2_TIMER_CYCLE!=10) { MOT2_TIMER_CYCLE = 10; // HOOGSTE STAPTIJD INSTELLEN MOT2_TIMER_TIMES = 0; OCR1A = DELAY_MOT2_10; // STAPTIJD NAAR TIMER WEGSCHRIJVEN } MOT2_ON = 1; MOT1_ON = 0; READY=0; WRITE(); MOT2_STEPS = MOT_DEGREE_STEPS[MOT2_DEGREE]; MOT2_STEPS_NEW = MOT_DEGREE_STEPS[MOT2_DEGREE_NEW]; while(MOT2_STEPS_NEW>MOT2_STEPS){ switch (MOT2_EN_TIMER) { case 1: WRITE_STANDEN_REVB(MOT2, MOT2_RICHTING_UP, MOT2_STAND); TOGGLE_TIMERVAL(2); START_TIMER_MOT(2); MOT2_STEPS++; break; } } while(MOT2_STEPS_NEW<MOT2_STEPS){ switch (MOT2_EN_TIMER) { case 1: WRITE_STANDEN_REVB(MOT2, MOT2_RICHTING_DOWN, MOT2_STAND); TOGGLE_TIMERVAL(2); START_TIMER_MOT(2); MOT2_STEPS--; break; } } if (MOT2_STEPS==MOT2_STEPS_NEW) { MOT2_DEGREE = MOT2_DEGREE_NEW; MOT2_ON = 0; READY=1; WRITE(); } } void INITIALIZE_EXPANDERS(void){ /* Initialisatie van de expanders. * CS LOW
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169
* Referentie voor de juiste expander. (Verschil tussen read en write) * Selectie van het juiste register. Bvb. IODIR, IOCON, GPIO * Standaard waarde voor register wegschrijven. * CS HIGH * Wacht 10 microseconden. * Volgende register wordt weggeschreven */ // DEVICE ONE SS_LOW(); SPI_Transmit(EXP1_REF); SPI_Transmit(EXP_B_IODIR); SPI_Transmit(EXP_1_IODIR); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP1_REF); SPI_Transmit(EXP_B_IOCON); SPI_Transmit(EXP_1_IOCON); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP1_REF); SPI_Transmit(EXP_B_GPIO); SPI_Transmit(EXP_1_GPIO); SS_HIGH(); //DEVICE TWO _delay_us(10); SS_LOW(); SPI_Transmit(EXP2_REF); SPI_Transmit(EXP_B_IODIR); SPI_Transmit(EXP_2_IODIR); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP2_REF); SPI_Transmit(EXP_B_IOCON); SPI_Transmit(EXP_2_IOCON); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP2_REF); SPI_Transmit(EXP_B_GPPU); SPI_Transmit(EXP_2_GPPU); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP2_REF); SPI_Transmit(EXP_B_GPIO); SPI_Transmit(EXP_2_GPIO); SS_HIGH(); //DEVICE THREE _delay_us(10); SS_LOW(); SPI_Transmit(EXP3_REF); SPI_Transmit(EXP_B_IODIR); SPI_Transmit(EXP_3_IODIR); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP3_REF); SPI_Transmit(EXP_B_IOCON); SPI_Transmit(EXP_3_IOCON); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP3_REF); SPI_Transmit(EXP_B_GPPU); SPI_Transmit(EXP_3_GPPU); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP3_REF); SPI_Transmit(EXP_B_GPIO); SPI_Transmit(EXP_3_GPIO);
16
E:\Dropbox\School\02 CVO Crescendo\2012-2013\...\Eindwerk CVO-Crescendo 2012-2013\Functions.c 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214
SS_HIGH(); //DEVICE FOUR _delay_us(10); SS_LOW(); SPI_Transmit(EXP4_REF); SPI_Transmit(EXP_B_IODIR); SPI_Transmit(EXP_4_IODIR); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP4_REF); SPI_Transmit(EXP_B_IOCON); SPI_Transmit(EXP_4_IOCON); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP4_REF); SPI_Transmit(EXP_B_GPPU); SPI_Transmit(EXP_4_GPPU); SS_HIGH(); _delay_us(10); SS_LOW(); SPI_Transmit(EXP4_REF); SPI_Transmit(EXP_B_GPIO); SPI_Transmit(EXP_4_GPIO); SS_HIGH(); } void SS_LOW(void){ /*Chip select pin wordt laag geschreven */ PORTB &= ~(1<<SPI_CS); } void SS_HIGH(void){ /*Chip select pin wordt hoog geschreven */ PORTB |= (1<<SPI_CS); } char SPI_Transmit(char cData){ /*Dubbelt als data versturen en data ontvangen. *Maakt gebruik van de SPI-registers. */ SPDR = cData; while(!(SPSR & (1<<SPIF))); return SPDR; }
17