Skrive analoge verdier

    Arduino Uno har ikke noen digital-til-analog-converter (DAC) innebygd, men det er mulig å "simulere" analoge spenninger ved å bruke PWM-utganger. PWM står for Pulse Width Modulation, eller puldsbreddemodulasjon på norsk. Det vil si at vi skriver pulser som skifter mellom 0V og 5V på utgangen, men at vi kan justere av- og på-tiden på pulsen. Dette forholdet kalles Duty Cycle, eller pulsforhold på norsk. Disse pulsene kan enten brukes direkte, til for eksempel kontroll av hastighet på en DC-motor, eller filtreres gjennom et RC-filter for å få en analog spenning.

    Uno'en har seks utganger som er spesielt beregnet for PWM. Disse er merket med en tilde ( ~ ) ved siden av pinnenummeret. Det er pinne 3, 5, 6, 9, 10 og 11.

    Arduino PWM

    Det er mulig å bruke PWM på andre pinner også, men da må pinnene styres direkte av programmet, noe som bruker mer CPU-tid. 
    De seks nevnte pinnene bruker de tre innebygde timerene (klokkene) til å styre pulsene, som gjør at CPU'en kan ta seg av andre ting.

     

    Oppkobling

    I dette eksempelet bruker vi en blå lysdiode og en seriemotstand. Her har vi valgt å koble lysdioden "aktiv høy", det vil si at lysdioden lyser når vi har høyt nivå (5V) på utgangen (i dette tilfellet pinne 10). Da er det viktig at du får Anoden til lysdioden nærmest utgangen. Anoden er den med lengst bein. Strømmen vil da gå gjennom lysdioden (fra anode til katode), gjennom seriemotstanden og til jord.
    PWM oppkobling

    Program

    Eksempel-programmet består av to løkker.  Den første for-løkka teller fra 0  og opp til 255. Tellerverdien brukes så til å sette "duty cycle" på PWM-utgangen på pinne tid, med funksjonen analogWrite(). Funksjonen tar to parametere, først pinnenummer og så et tall fra 0-255 for å sette pulsforholdet.

    Løkke nummer to fungerer på samme måte, bare at den teller fra 255 og ned til 0.

    void setup() {
    pinMode(10, OUTPUT); //Setter pinne 10 til utgang. Ikke noe spesielt for å bruke PWM
    }

    void loop() {
    //Starter på null og går opp til full intensitet
    for (int i=0; i<256;i++){
    analogWrite(10,i); // analogWrite setter pulsforholdet på pinne 10 med telle-variabelen i
    delay(10); // Liten pause
    }
    //Går fra full intensitet og ned til null
    for (int i=255; i>=0;i--){
    analogWrite(10,i); // analogWrite setter pulsforholdet på pinne 10 med telle-variabelen i
    delay(10); // Liten pause
    }
    }

    Resultat

    Effekten er litt vanskelig å få filmet med en mobiltelefon, og det ser ut som intensiteten er på fullt mye av tiden. Dette gjør seg best "live".

    PWM_med_Oscilloskop.mp4 (Musikk fra www.bensound.com)

     

    Oppgaver

    Oppgave 1:
    Bruk oppkoblingen fra eksempelet. I tillegg kan du koble til et potensiometer på A0, som vist her: Lese analoge verdier

    1: Bruk verdien du leser fra potensiometeret til å styre lysstyrken på lysdioden.

    2: Lyset oppfører seg litt rart. Hva kan det skyldes, og hvordan kan du løse dette?

     

    Løsningsforslag

    Søk på siden

    © Lilleholt.no 2020
    Free Joomla! templates by Engine Templates