Obligatorisk oppgave nr.6
Temaet for denne obligatoriske oppgaven er servo- og DC-motorer. Noe av utstyret som brukes, fra og med oppgave 2 er ikke tilgjengelig i settet deres, men dere kan få det utlevert i resepsjonen i første etasje på IFI. Påregn å fremvise gyldig studentbevis. Lykke til!
Oppgave 1 — Pulsbreddemodulering
Bakgrunn: I denne oppgaven skal dere koble opp DC-motoren og implementere PWM på arduinoen. Slik ser oppkoblingen ut:
I denne oppgaven skal dere bruke følgende komponenter:
Komponent | Benevnelse |
---|---|
DC-motor* | M1 |
9V batteri | VCC1 |
Potensiometer | R1 |
L293D* | IC1 |
* Dere får utdelt M1
og IC1
i et sett
sammen med brakett resepsjonen i første etasje på IFI.
Oppgave 1 A)
Koble opp kretsen som vist ovenfor. Ta bilde av oppsettet med
postitlapp eller lignende, med dato og brukernavn. Lim inn bildet i
oblig6_<brukernavn>.pdf
.
OBS: Vær nøye med polaritet og å ikke kortslutte pins på Arduinoen. Utstyr kan bli ødelagt.
Oppgave 1 B)
Implementer PWM uten å benytte analogWrite()
men kun ved å benytte digitalWrite()
til pin 10. Bruk input
fra potensiometer for å endre duty cycle (det er greit om frekvensen
påvirkes). Programmet skal ikke inneholde blokkerende kode.
OBS: Driverkretsen tåler ikke mer enn 5 kHz (ref datablad). Vi anbefaler en frekvens på rundt 100 Hz.
Oppgave 1 C)
Bruk Analog Discovery 2 oscilloskopet og Waveforms programvaren til å plotte PWM-signalene.
- Koble utgangssignalene fra driveren til de positive sidene av
henholdsvis kanal 1 og 2 av oscilloskopet, og
gnd
til de negative sidene av begge kanalene. - Åpne programvaren og klikk på Scope-knappen.
- Juster potensiometeret til duty cycle er rundt 50 %.
Ta et skjermbilde av Waveforms som viser plottet av PWM-signalene og
lim inn bildet i oblig6_<brukernavn>.pdf
.
Oppgave 2 — Bygg din egen servo
I denne oppgaven skal dere bygge deres egne servo og bruke deres egen implementasjon av pulsbreddemodulasjon fra oppgave 2. Kretsen vil være veldig lik som i oppgave 2, men istedenfor å bruke potensiometeret til å regulere duty cycle, skal det brukes som en enkoder. Servoen vil kunne rotere rundt \(240^\circ\).
Komponent | Benevnelse |
---|---|
DC-motor* | M1 |
9V batteri** | VCC1 |
Potensiometer | R1, R2 |
L293D* | IC1 |
Motorbrakett* | Bracket |
Coupler* | Coupler |
* Dere får utdelt M1
, IC1
,
Bracket
og Coupler
i resepsjonen i første
etasje på IFI. ** Dere kan få utdelt inntil 2 ekstra batterier i
resepsjonen i første etasje på IFI.
Oppgave 2 A)
Koble opp kretsen som vist på koblingskjemaet under:
Sett sammen DC-motoren, motorbraketten og potensiometeret slik som vist under:
Dere finner mer detaljerte monteringsanvisninger for motorbraketten her.
Ta bilde av oppsettet med postitlapp eller lignende, med dato og
brukernavn. Lim inn bildet i
oblig6_<brukernavn>.pdf
.
OBS: Vær nøye med polaritet og å ikke kortslutte pins på Arduinoen. Utstyr kan bli ødelagt. Vær spesielt nøye med å koble til de to potensiometrene på en identisk måte, slik at når de er satt til samme posisjon, er motstanden den samme.
Oppgave 2 B)
Lag vinkelregulering av DC motor via potensiometer og implementer en PID-kontroller.
Implementer koden som styrer motoren slik at pekeren stopper i korrekt posisjon, som vist på bildet nedenfor. Bruk PWM-en dere implementerte selv i oppgave 2.
Malen for arduino-koden er tilgjengelig her, under mappen
oblig6. De manglende delene av koden er merket med en TODO
.
Det er viktig at du ikke modifiserer de eksisterende delene av
koden, siden den inneholder flere implementeringer av funksjoner som er
avgjørende for oppgaven samt sikkerhetsfunksjoner som hindrer at oppsett
blir ødelagt.
Oblig6-mappen inneholder også et Processing-program som lar deg endre
parametrene til PID-kontrolleren ved hjelp av et grafisk grensesnitt. Du
trenger ikke å endre koden, men du må installere et bibliotek kalt
ControlP5
ved å navigere til Sketch
–>
Import Library
–> Manage Libraries
–>
søk i ControlP5
–> Install
. Du bør
kun kjøre dette programmet sammen med arduino-koden din når du
har bekreftet at koden fungerer med standard PID-verdier gitt i
malen.
Juster PID-verdiene til du er fornøyd med ytelsen til kontrolleren. Inkluder disse verdiene i besvarelsen (poenget er ikke å komme opp med de ‘riktige’ verdiene, så ikke bruk for mye tid).
Levér koden i en egen
oblig6_2_<brukernavn>.ino
-fil.
Innlevering:
- Arduinokoden fra oppgave 1 skal leveres på formen
oblig6_1_<brukernavn>.ino
. - Arduinokoden fra oppgave 2 skal leveres på formen
oblig6_2_<brukernavn>.ino
. - Tekstlig besvarelse med illustrasjoner skal leveres i PDF-format på
formen
oblig6_<brukernavn>.pdf
.
Generelle krav til innlevering
- Sett dere inn i sikkerhetsrutiner for lab.
- IFIs retningslinjer for obligatoriske oppgaver finner dere her.
- Oppgavene skal løses individuelt med mindre annet er oppgitt i oppgaveteksten.
- Besvarelsene leveres i følgende format i Canvas:
- Tekstlig besvarelse skal leveres PDF format på
formen
oblig<nummer>_<brukernavn>.pdf
. (Se vår LaTeX-mal) - Arduinokode skal leveres på formen
<filnavn>.ino
. - Processingkode skal leveres på formen
<filnavn>.pde
. - Matlabkode skal leveres på formen
<filnavn>.m
. - Pythonkode skal leveres på formen
<filnavn>.py
.
- Tekstlig besvarelse skal leveres PDF format på
formen
- Plott må inkludere tittel og benevnelser på aksene. Man må også oppgi måleenhet i parentes hvis man plotter en fysisk størrelse (se eksempel i malene: Plotting i Python og Plotting i Matlab)
- Plotter dere flere kurver i samme plott må dere spesifisere kurvene med “legend” (se eksempel i malene)