Olimexino Model based software development for a microcontroller system Saving Energy in a Vehicle Practicum: Aansturing LED Saving Energy in a Vehicle Rick Gijsberts Versie 2.0 Inhoudsopgave 1. Doel van de practicum opdracht ........................................................................................................... 3 2. Voorwaarde om aan het practicum te beginnen .................................................................................. 3 3. Informatie over de gebruikte hardware ................................................................................................ 4 4. Het model in Simulink. (enkel een input) .............................................................................................. 5 5. Compileer het model en programmeer je Olimexino. .......................................................................... 8 6. Bekijk variabelen doormiddel van HANtune. ...................................................................................... 10 7. Bereid het model uit met een output. ................................................................................................ 13 8. Verbind input en output ...................................................................................................................... 17 9. Maak een automotive regeling (actieve licht regeling) ....................................................................... 18 Overzicht van afbeeldingen. Figure 1 Library Browser Analog Input .......................................................................................................... 5 Figure 2 Analog Input Block Parameters ....................................................................................................... 5 Figure 3 Analog Input without signal description ......................................................................................... 6 Figure 4 Analog Input with signal description ............................................................................................... 6 Figure 5 Matlab Command Window (add Signal) ......................................................................................... 7 Figure 6 Added signal visible in Workspace .................................................................................................. 7 Figure 7 Change Signal to Exported Global ................................................................................................... 7 Figure 8 Build button in Simulink .................................................................................................................. 8 Figure 9 Microboot waiting for target reset.................................................................................................. 8 Figure 10 Step 1 for bootloader mode. Press SW1 ....................................................................................... 9 Figure 11 Step 2 for bootloader mode. Press SW2 shortly while SW1 is still pressed .................................. 9 Figure 12 When SW1 is released, you can check if the bootloader is active. ............................................... 9 Figure 13 Add ASAP2 file to HANtune ......................................................................................................... 10 Figure 14 File location of ASAP2 file ............................................................................................................ 10 Figure 15 HANtune ASAP2 Elements ........................................................................................................... 10 Figure 16 Change GaugeViewer range ........................................................................................................ 11 Figure 17 HANtune dashboard with GaugeViewer ..................................................................................... 11 Figure 18 COM port of connected Olimexino ............................................................................................. 12 Figure 19 Setting the COM connection for HANtune .................................................................................. 12 Figure 20 Library Browser PWM Output ..................................................................................................... 13 Figure 21 PWM Module selection ............................................................................................................... 13 Figure 22 PWM channel selection ............................................................................................................... 14 Figure 23 PWM port selection..................................................................................................................... 14 Figure 24 Library Browser Constant ............................................................................................................ 15 Figure 25 Constant Block value ................................................................................................................... 15 Figure 26 Constant Block output data type................................................................................................. 16 Figure 27 Switch Block................................................................................................................................. 18 Figure 28 Constant Block ............................................................................................................................. 18 Olimexino Model based software Development 2 1. Doel van de practicum opdracht Het practicum is ingericht om kennis te maken met software tools die gebruikt worden software voor een microcontroller te ontwikkelen in een model based ontwikkel omgeving. Naast de eerste ervaring met Matlab Simulink, HANcoder en HANtune leer je wat een analoge spanning inhoudt als het gaat om sensoren en gebruik je PWM sturing om een LED te regelen. 2. Voorwaarde om aan het practicum te beginnen Je hebt een laptop met daarop geïnstalleerd: • • • • • • Matlab Simulink met de juiste plug-ins (software wordt geïnstalleerd tijdens AUM1-SEV-pr2-i) Vraag de docent welke versie van Matlab je moet hebben, meestal de voorlaatste versie. Een map met daarin HANcoder Een map met daarin HANtune (eventueel met snelkoppeling naar HANtune.exe) GNU ARM Toolchain geïnstalleerd OpenBLT USB driver geïnstalleerd (voor de standaard Olimexino) STM32CubeProgrammer (voor Olimexino F3) Je hebt een Olimexino die gekoppeld kan worden aan je laptop middels een USB kabel De sensor shield wordt tijdens het practicum ter beschikking gesteld. De practicum opstelling bestaat uit: • • • • • Een sensorshield 3 grove kabels Een potmeter sensor brick Een LDR sensor brick Een LED output brick De practicum opstelling wordt compleet geleverd in een enveloppe met daarin ook een gebruikers logboek. Vul deze voor het practicum in en doe hem terug in de enveloppe. Wees zuinig op de opstelling. Zorg altijd dat jouw Olimexino niet gekoppeld is aan een voeding (Accu, DC adapter of USB verbinding) alvorens je de sensorshield op de Olimexino drukt. Zorg bij het afnemen van de shield, dat deze recht van de Olimexino af gehaald wordt om te voorkomen dat er pinnen krom gaan. Olimexino Model based software Development 3 3. Informatie over de gebruikte hardware De fabrikant van de sensoren, LED en sensorshield (Itead) heeft een eigen Wiki omgeving ontwikkeld waar informatie te vinden is. Mocht de werking van de enkele componenten onduidelijk zijn, bekijk dan de Wiki. Algemene info over producten van Itead: https://www.itead.cc/wiki/Product Potmeter sensor brick: https://www.itead.cc/wiki/Rotary_Potentiometer_Brick LDR sensor brick: https://www.itead.cc/wiki/Light_Sensor_Brick LED brick: https://www.itead.cc/wiki/Lighting_Emitting_Diode_(LED) Sensorshield: https://www.itead.cc/wiki/ITEAD_Arduino_Sensor_Shield Olimexino Model based software Development 4 4. Het model in Simulink. (enkel een input) We gaan kennis maken met Simulink. Simulink is de omgeving waarin je je model ontwerpt. We starten met het openen van het template model. Doel is om de potmeter die gekoppeld is aan het sensorshield, in te lezen. Zoals je kunt zien is de sensor gekoppeld aan microcontroller ingang A0. Door simpelweg een Analog Input toe te voegen vanuit de bibliotheek, kun je een analoge spanning die aangeboden wordt op de sensor shield, door bijvoorbeeld een potmeter, inlezen. Open de Library Browser vanuit Simulink. Navigeer naar HANcoder STM32 Target -> Olimexino STM32 -> Analog Inputs. In het rechter veld verschijnt een blokje Analog Input. Sleep dit blokje naar je model. Figure 1 Library Browser Analog Input Configureer (dubbel klik op het blokje) je Analog Input zodat deze input A0 inleest. De output van het blokje (ingelezen analoge waarde) willen we met HANtune bekijken. Figure 2 Analog Input Block Parameters Tip! Lees altijd zorgvuldig de beschrijving van het functieblokje. Hierin staat uitgelegd wat het blokje doet, wat je in kunt stellen en welk signaal er in of uit gaat. Olimexino Model based software Development 5 Aangezien we het signaal niet gebruiken voor het regelsysteem, moeten we deze afsluiten met een terminator welke ook te vinden is in de Library Browser van Simulink. De terminator wordt vaak gebruikt en is dan ook te vinden onder Simulink -> Commonly Used Blocks. Verbind het Analog Input blokje met de Terminator. Figure 3 Analog Input without signal description Omdat we het signaal van A0 willen bekijken met HANtune, moeten we zorgen dat deze beschikbaar is om uit te lezen. In het model geven we het signaal eerst een duidelijke betekenisvolle naam. Dit doe je door dubbel te klikken op het lijntje. Bijvoorbeeld: Potmeter_out. Figure 4 Analog Input with signal description Als je je model bouwt, worden er twee belangrijke bestanden aangemaakt. Een zogenaamde S record file (.srec) en een ASAP2 file (.a2l) De S record file bevat het gecompileerde model. Dit is het bestandje dat de machinecode bevat die in de microcontroller geprogrammeerd wordt. De ASAP2 file bevat informatie over het gebouwde model met onder andere de signalen die we willen bekijken met behulp van HANtune. HANtune heeft dit bestand nodig om te weten welke signalen en/of parameters binnen de microcontroller beschikbaar zijn om uit te lezen of aan te passen. Olimexino Model based software Development 6 Als we een signaal of parameter binnen ons model zichtbaar willen maken of aan willen passen met behulp van HANtune, dan moet we dit signaal toevoegen aan de ASAP2 file. Het toevoegen van het signaal of parameter gebeurt binnen de Matlab Command Window. Voeg het signaal toe door het volgende commando te typen: Potmeter_Out = Simulink.Signal Figure 5 Matlab Command Window (add Signal) In de Workspace hoeven we enkel nog een eigenschap van het signaal te wijzigen (dubbelklik). Zorg dat het signaal bij van het type Exported Global is zodat het signaal toegevoegd wordt aan de ASAP2 file. Figure 6 Added signal visible in Workspace Figure 7 Change Signal to Exported Global Olimexino Model based software Development 7 5. Compileer het model en programmeer je Olimexino. Het Simulink model is klaar om gecompileerd en vervolgens geprogrammeerd te worden in de Olimexino. Dit proces verschilt tussen de standaard Olimexino en de Olimexino F3. Standaard Olimexino: Bouw je model (CTRL+B). Figure 8 Build button in Simulink Na een licentie melding, zal Matlab de GNU ARM Toolchain aanroepen om het model om te zetten naar machine code. Als het S record bestand gereed is, zal Matlab Microboot opstarten om de code in de Olimexino te programmeren. Reset je Olimexino en de software wordt geprogrammeerd. Figure 9 Microboot waiting for target reset Olimexino F3: Zorg dat de Olimexino F3 in bootloader modus gebracht wordt. Deze modus zorgt ervoor dat Matlab – Simulink de Olimexino F3 kan vinden nadat het model gebouwd is. Stap 1: Druk de knop SW1 in (aan de zijde van de USB kabel) en houd deze ingedrukt (afbeelding 10) Stap 2: Druk kort knop SW2 in (aan de zijde met het rode ledje) (afbeelding 11) Stap 3: Laat de knop SW1 weer los. De Olimexino F3 is nu in bootloader modus. Dit kan eventueel gecontroleerd worden in apparaatbeheer van Windows (afbeelding 12) Stap4: Bouw je model (CTRL+B). Olimexino Model based software Development 8 Figure 10 Step 1 for bootloader mode. Press SW1 Figure 11 Step 2 for bootloader mode. Press SW2 shortly while SW1 is still pressed Figure 12 When SW1 is released, you can check if the bootloader is active. Olimexino Model based software Development 9 6. Bekijk variabelen doormiddel van HANtune. We hebben de analoge input waaraan de potmeter gekoppeld is, toegevoegd aan ons model. We willen de ingelezen waarde nu visualiseren met behulp van HANtune. Open HANtune vanuit de map waarin deze opgeslagen is. Tip! Plaats de HANtune map in mijn documenten en maak van HANtune.exe een snelkoppeling voor op het bureaublad. Zodra HANtune geopend is, maak je een nieuw project aan. File -> New project Laad nu je ASAP2 file (.a2l) door met je rechtermuis op ASAP2 file te klikken. Je kunt je ASAP2 file vinden in de map vinden van waaruit je je template Simulink model geopend hebt. Figure 13 Add ASAP2 file to HANtune Figure 14 File location of ASAP2 file Je ASAP2 file moet nog geladen worden alvorens deze actief wordt. Klik met je rechter muisknop op de ASAP2 file en klik vervolgens op Load file of dubbel klik op de ASAP2 file. De ASAP2 file is nu actief en de signalen en parameters die Matlab heeft toegevoegd aan de file zijn nu actief binnen HANtune. We kunnen vervolgens een dashboard gaan bouwen. Klik aan de linkerzijde op ASAP Elements Figure 15 HANtune ASAP2 Elements Olimexino Model based software Development 10 Er zijn één parameter en 5 signalen beschikbaar in HANtune. Parameters kunnen we aanpassen binnen HANtune en zullen vervolgens direct terug gestuurd worden naar de Olimexino. Signalen kunnen alleen bekeken worden. We willen de potmeter zichtbaar maken met behulp van een GaugeViewer. Sleep het signaal Potmeter_Out naar het dashboard. Bij het loslaten van het signaal wordt gevraagd hoe het signaal weergegeven moet worden. Wij kiezen voor GaugeViewer. Indien je de GaugeViewer wilt verplaatsen, de afmeting wilt wijzigen of wilt verwijderen, druk dan op CTRL-R. Druk je nogmaals op CTRL-R, dan staan alle weergaven weer vast. Klik met je rechtermuisknop op de GaugeViewer om eigenschappen van de GaugeViewer aan te passen. Wij willen de display range aanpassen naar maximaal 4095 omdat dit de maximale resolutie is waarmee de microcontroller een analoge spanning om kan zetten in een digitale waarde. Figure 16 Change GaugeViewer range Figure 17 HANtune dashboard with GaugeViewer Tot slot moeten we verbinding maken met de Olimexino om het potmeter signaal daadwerkelijk uit te kunnen lezen. De Olimexino maakt gebruik van een seriële USB verbinding. Jouw laptop heeft de Olimexino een COM poort toegewezen. Bij het maken van een verbinding (F5) moet eenmalig bij Settings aangegeven worden welke COM poort toegewezen is. Om te achterhalen op welke COM poort jouw Olimexino zit, ga je naar: Configuratiescherm -> Apparaatbeheer -> Poorten (COM & LPT) Olimexino Model based software Development 11 Figure 18 COM port of connected Olimexino Kies als Connection type XCP on USB/UART. Bij dit voorbeeld zit de Olimexino op COM 5. Deze poort moeten we instellen bij Settings. Figure 19 Setting the COM connection for HANtune Tot slot maken we verbinding middels Connect & Request. Controleer of het signaal van de potmeter gevisualiseerd wordt binnen HANtune. Olimexino Model based software Development 12 7. Bereid het model uit met een output. We gaan terug naar ons model in Simulink om een output toe te voegen. We willen de intensiteit van de LED die gekoppeld is aan de shield kunnen regelen met een PWM signaal. Om een PWM output te kunnen genereren moeten we 2 functieblokken toevoegen. Één blok dient ter configuratie van de PWM module en het tweede blok genereert een PWM output op een specifieke uitgang. Open de Library Browser vanuit Simulink. Navigeer naar HANcoder STM32 Target -> Olimexino STM32 -> PWM Outputs. In het rechter veld verschijnen twee blokjes PWM Duty Cycle en PWM Init. Figure 20 Library Browser PWM Output Sleep beide blokjes in je model. Dubbelklik op PWM Init om de PWM module te configureren. De LED zit op uitgang D0. Deze uitgang kan ook gebruikt worden als communicatielijn. In dat geval is dit de RX lijn. Op de sensorshield lees je bij de vijfde grove connector, RX en TX. Door de LED te verbinden met deze connector, kunnen wij door een PWM signaal aan te bieden op D0, de LED volledig regelen. Selecteer de PWM module waarin D0 geconfigureerd wordt. Figure 21 PWM Module selection Olimexino Model based software Development 13 De module is geconfigureerd. We moeten enkel nog het kanaal selecteren waarop de PWM gegenereerd wordt. De PWM module is: TIM2: D2 & D3 & n/a & D0. Als we een PWM signaal willen generen voor D2 activeren we Channel 1, voor D3 activeren we Channel 2 etc. Aangezien we een signaal willen genereren op D0 moeten we dus Channel 4 activeren. Figure 22 PWM channel selection Klik op OK om de instellingen te bevestigen. We zijn nu zo ver dat we een PWM signaal kunnen genereren met het PWM Duty Cycle blokje. Open de configuratie van het blokje door er dubbel op te klikken. Selecteer de juiste Output pin en klik op ok. Figure 23 PWM port selection Olimexino Model based software Development 14 De output gaan we aansturen doormiddel van HANtune. Binnen het model moeten we een parameter creëren die we aan kunnen passen vanuit HANtune. Een parameter wordt gezien als een constante waarde in ons model. Het enige dat wij doen vanuit HANtune is deze waarde (indien wij dat willen) wijzigen naar een andere waarde. Voeg een parameter toe aan het model. Sleep een Constant blokje vanuit de Library Browser van Simulink in je model. Het Constant blokje wordt vaak gebruikt en is dan ook te vinden onder Simulink -> Commonly Used Blocks. Verbind vervolgens de uitgang van Constant met de ingang van het PWM blokje Figure 24 Library Browser Constant Open het blokje en geef de parameter (Constant Value) een betekenisvolle naam in dit geval LED_DutyCycle . De naam van deze parameter wordt zichtbaar in HANtune. Het is dan handig om te weten wat de parameter precies doet. Figure 25 Constant Block value Olimexino Model based software Development 15 Doel van de parameter is om een PWM signaal uit te sturen zodat we de LED van 0 tot 100% kunnen regelen. De digitale waarde die we naar het PWM blokje sturen loopt van 0 tot 1023 (digitale resolutie) en die komt overeen met een aansturing van 0 tot 100%. Deze informatie staat ook in het PWM blokje beschreven. Aangezien we een gehele waarde tussen 0 en 1023 sturen naar het PWM blokje, moeten we aangeven welk formaat getal er gestuurd wordt vanuit het Constant blokje naar het PWM blokje. Door de Output data type te wijzigen naar uint16, sturen we vanuit ons Constant blokje het juiste getal formaat richting het PWM blokje. Figure 26 Constant Block output data type Bouw je model. Simulink zal vragen welke waarde standaard aan je constante meegegeven moet worden. Simulink geeft standaard de waarde 0 mee. Klik op ok en wacht tot Microboot start en programmeer je Olimexino. In HANtune dien je je ASAP2 file opnieuw te laden omdat je model dat geprogrammeerd is in de microcontroller gewijzigd is. Dubbelklik op de ASAP2 file om het bestand te ontkoppelen. Dubbelklik vervolgens nogmaals om de gewijzigde ASAP2 file te herladen. Ga naar ASAP2 elements waar bij parameters LED_DutyCycle toegevoegd is. Sleep deze parameter in je project als SliderEditor. Pas de range van SliderEditor aan naar de maximale resolutie van het PWM blokje (1023). Dit doe je door met de rechtermuisknop op het slider gedeelte te klikken (het meest rechter deel van het blokje). Maak verbinding met de Olimexino (F5) en bedien de LED met behulp van de SliderEditor. Olimexino Model based software Development 16 8. Verbind input en output De volgende stap is om de input van de potmeter te verbinden met het PWM blokje zodat je doormiddel van de potmeter het PWM blokje kunt regelen. Verwijder het Constant blokje en de Terminator en koppel vervolgens de Analog Input aan de PWM Output. Programmeer je Olimexino en controleer of je regeling werkt. Als de Olimexino geprogrammeerd is zal je ontdekken dat slechts een klein gebied van de potmeter, de LED volledig regelt van 0 tot 100%. De microcontroller zet de analoge spanning van de potmeter om in een waarde van 0 tot 4095. Het PWM blokje wordt aangestuurd tussen 0 tot 1023. We moet het signaal dus door 4 delen om het hele bereik van de potmeter te gebruiken voor de aansturing van de LED. Plaats een Gain blokje tussen de Analog Input en de PWM Output. Met het Gain blokje kunnen we een signaal versterken/vermenigvuldigen. Gezien we het signaal willen delen door 4 moeten we het signaal, dus versterken met een factor ¼ = 0.25. Denk aan de Ouput data type van het Gain blokje… Olimexino Model based software Development 17 9. Maak een automotive regeling (actieve licht regeling) Moderne auto’s zijn vaak uitgerust met diverse comfortregelingen. Één van deze regelingen is het automatisch inschakelen van verlichting als het donker wordt of wanneer men een tunnel in rijdt. Op de sensorshield is naast de potmeter een LDR sensor gekoppeld. Deze sensor geeft een analoge spanning af afhankelijk van de hoeveelheid licht die op de Photosensor schijnt. Bekijk met behulp van HANtune het signaal dat deze sensor afgeeft. Bepaal zelf het punt waarbij de verlichting ingeschakeld moet worden en bouw voor deze toepassing een regeling met behulp van functie blokken. In de voorgaande hoofdstukken zijn alle stappen die je moet doorlopen uitgelegd. Kijk gerust terug voor specifieke informatie. Tip: De volgende functieblokken kunnen van pas komen en zijn allemaal beschikbaar in de Library Browser onder Simulink -> Commonly Used Blocks. Figure 27 Switch Block Figure 28 Constant Block Als je het regelsysteem werkend hebt, laat het model en systeem dan zien aan de practicum docent. Ben je klaar met het practicum, Ontkoppel dan de Olimexino van de laptop (spanningsloos) en haal voorzichtig het sensorshield los van de Olimexino. Doe de sensorshield inclusief sensoren en LED terug in de enveloppe samen met het gebruikers logboek. Olimexino Model based software Development 18