09.03.2014 Views

styring av motor med 68HC11 - Institutt for teknisk kybernetikk - NTNU

styring av motor med 68HC11 - Institutt for teknisk kybernetikk - NTNU

styring av motor med 68HC11 - Institutt for teknisk kybernetikk - NTNU

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>NTNU</strong><br />

<strong>Institutt</strong> <strong>for</strong> <strong>teknisk</strong> <strong>kybernetikk</strong><br />

Øving 2<br />

Sanntidsprogrammering<br />

VUE 3001-1<br />

Øving <strong>med</strong> embedded mikrokontroller<br />

(<strong>styring</strong> <strong>av</strong> <strong>motor</strong> <strong>med</strong> <strong>68HC11</strong>)<br />

Denne øvingen er hentet fra faget SIE 3020 Industriell data<strong>styring</strong>. I sin opprinnelige <strong>for</strong>m skulle<br />

studentene programmere det meste <strong>av</strong> systemet selv. Men <strong>med</strong> den <strong>av</strong>satte tiden vi har i dette<br />

kurset vil vi gi mye <strong>av</strong> programkoden på <strong>for</strong>hånd. Se vedlagt diskett.<br />

På disketten ligger det en fil io.c (og tilsvarende header-fil) <strong>med</strong> alle inn\ut-rutinene dere har<br />

bruk <strong>for</strong>. Der ligger det også en fil main.c som bl. a. inneholder noen initialiseringer og en fil<br />

rti.c som inneholder <strong>av</strong>bruddsrutinen. Alle de tre filene legger dere til prosjektet deres. Dere kan<br />

tilføye koden deres i filen rti.c.<br />

På disketten ligger også løsnings<strong>for</strong>slag <strong>for</strong> oppg<strong>av</strong>ene. oi.c og main.c er den samme <strong>for</strong> alle<br />

oppg<strong>av</strong>ene. Bytt bare ut rti.c <strong>med</strong> løsnings<strong>for</strong>slaget <strong>for</strong> vedkommende deloppg<strong>av</strong>e.<br />

Oppkobling <strong>av</strong> hardware vil være gjort på <strong>for</strong>hånd. Skum der<strong>for</strong> bare raskt igjennom (eller hopp<br />

over) det som har <strong>med</strong> oppkoblinger å gjøre når dere leser oppg<strong>av</strong>eteksten. Spør gjerne hvis noe<br />

er uklart.<br />

Oppg<strong>av</strong>e 3 krever litt reguleringsteknikk og er frivillig.


<strong>NTNU</strong><br />

<strong>Institutt</strong> <strong>for</strong> <strong>teknisk</strong> <strong>kybernetikk</strong><br />

Knut Reklev, Vemund Reggestad 1999<br />

Vemund Reggestad 2000<br />

Fag SIE3020<br />

Industriell data<strong>styring</strong><br />

Øving 5<br />

Obligatorisk øving<br />

Innlevering innen mandag 28. feb<br />

Praktiske opplysninger<br />

Vi skal i denne øvingen studere et styresystem basert på en mikrokontroller.<br />

Den fysiske prosessen vi skal styre er den samme som vi analyserte i øving 2. Prosessen bestod<br />

<strong>av</strong> en <strong>motor</strong> <strong>med</strong> driver og måleinstrumenter som vist i figuren.<br />

Enkoder<br />

ω<br />

Driver Motor Tacho<br />

Kvadraturteller<br />

Øvingen skal kjøres på sanntidslabben (3. etg. elektroblokk D). Øvingen består <strong>av</strong> 3 oppg<strong>av</strong>er<br />

og strekker seg over tre uker (ca. 24 øvingstimer). Øvingen utføres i grupper på 2 studenter.<br />

Øvingen godkjennes enten på labben eller det leveres en samlet besvarelse <strong>for</strong> hele øvingen.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 2<br />

Innholds<strong>for</strong>tegnelse<br />

Praktiske opplysninger 1<br />

Innholds<strong>for</strong>tegnelse 2<br />

Oversikt over labben 3<br />

Introduksjon til laboppg<strong>av</strong>en. 3<br />

Hardwaret på labben 4<br />

Mikrokontrollerkortet KM HC11 5<br />

Mikrokontrolleren MC<strong>68HC11</strong> 7<br />

Software & Utviklingsmiljø 7<br />

Intro til IAR Embedded Workbench 7<br />

XCL–fila 8<br />

Litt om debugging 8<br />

Hjelp til labboppg<strong>av</strong>en 9<br />

Beskrivelse <strong>av</strong> de ulike typene IO. 10<br />

Analog Ut 10<br />

Analog Input 10<br />

Digital IO 11<br />

Motoren og driverkretsene. 12<br />

Om <strong>motor</strong>en 12<br />

Styring <strong>av</strong> Motor 12<br />

Kvadraturteller og Enkoder 13<br />

Tacho 13<br />

Tilkoplinger på Modul-Boks 13<br />

Oppg<strong>av</strong>e 1) 15<br />

Oppg<strong>av</strong>e 2) 15<br />

Oppg<strong>av</strong>e 3) 16<br />

Hjelp til reguleringen. 17


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 3<br />

Introduksjon til laboppg<strong>av</strong>en.<br />

Oversikt over labben<br />

Målet <strong>med</strong> labben er å programmere et reguleringssystem <strong>for</strong> posisjons<strong>styring</strong> <strong>av</strong> en liten DC<br />

elektro<strong>motor</strong>. Reguleringssystemet skal programmeres i C og kjøre på en liten mikrokontroller.<br />

Denne måten å realisere reguleringssystemer på har blitt mer og mer vanlig i de siste årene.<br />

Denne figuren viser hvordan det ferdige reguleringssystmet skal se ut. Her er det altså det som<br />

er merket <strong>med</strong> Software som dere skal lage.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 4<br />

Hardwaret på labben<br />

Motor<br />

Enkoder<br />

Tacho<br />

ω<br />

Driver<br />

På driverkortet til <strong>motor</strong>en ligger en kvadraturteller som er koblet på utgangen til enkoderen.<br />

Kvadraturtelleren inneholder logikk som teller opp/ned et register i henhold til de to signalene<br />

fra enkoderen. På driverkortet ligger det også en kraft<strong>for</strong>sterker som gir kraft til <strong>motor</strong>en. Dri-<br />

Kvadraturteller<br />

Driverkort til <strong>motor</strong><br />

Oscilloskop<br />

D/A<br />

KM HC11<br />

Mikrokontrollerkort<br />

A/D<br />

Signalgenerator<br />

Serielinje<br />

PC<br />

Figuren over viser labb-oppstillingen. Øverst har vi <strong>motor</strong>en <strong>med</strong> påmontert enkoder og tacho.<br />

Tachoen måler hastigheten til <strong>motor</strong>en og gir en spenning proporsjonalt <strong>med</strong> turtallet.<br />

Enkoderen gir ut to pulssignaler som <strong>for</strong>teller hvor mange grader <strong>motor</strong>en har dreid (500 pulser<br />

per omdreining). Fasen mellom de to pulssignalene angir retningen <strong>for</strong> bevegelsen. (Når flanken<br />

på signal 1 kommer før flanken på signal 2 går <strong>motor</strong>en i positiv retning.)<br />

signal 1<br />

signal 2<br />

positiv omdreining<br />

negativ omdreining


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 5<br />

verkortet er plassert inni boksen merket “modul IO” på labben.<br />

Fra driverkortet skal vi ta signalene inn på et mikrokontrollerkort. Mikrokontrollerkortet er kjernen<br />

i styresystemet. Det er her regulatoralgoritmene skal kjøres.<br />

Utvikling og debugging <strong>for</strong>egår via en PC og den ferdige koden lastes ned på mikrokontrolleren<br />

over en serielinje.<br />

For å studere oppførselen til systemet bruker vi en signalgenerator <strong>for</strong> å generere referansesignal<br />

og et oscilloskop <strong>for</strong> å se på responsen.<br />

Mikrokontrollerkortet KM HC11<br />

Dette kortet inneholder alt dere trenger <strong>av</strong> analog og digital IO <strong>for</strong> å løse denne labben. På kortet<br />

sitter det en MC<strong>68HC11</strong> prosessor hvor selve regulator algoritmen skal kjøres. De ulike IO enhetene<br />

er memory-mappet inn i adresseområdet til denne prosessoren.<br />

Adressemapp på KM HC11 kortet:<br />

Adresse blokker<br />

Spesielle adresser i blokkene<br />

Adresser Blokk Adresse Innhold<br />

0-FF eller 0-1FF Intern RAM Variable, stack osv.<br />

ligger her.<br />

200-3FFF Ekstern RAM 200-3DFF Kode segmentet til<br />

bruker programmet<br />

3E00-3FFF<br />

ROM-monitor variable<br />

4000-AFFF<br />

B000-B03F<br />

EPROM<br />

Intern Regiser Blokk<br />

B100-B5FF Memery mapped IO B200-B204 DA <strong>for</strong> analog ut:<br />

B200: DA 0<br />

B201: DA 1<br />

B202: DA 2<br />

B203: DA 3<br />

B220<br />

B250<br />

Digital Ut<br />

Digital Inn<br />

C000-FFFF EPROM E000-FFD5 ROM-monitor program<br />

FFD6-FFFF<br />

Interuptvektor


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 6<br />

Mikrokontrollerkortet KM HC11 har følgende layout:<br />

Det som er viktig å legge merke til er plasseringen <strong>av</strong> kontakter og brytere. Prikkene på tegningen<br />

<strong>av</strong> kortet angir hvor pinne 1 er.<br />

J3: Analog ut<br />

J4: Digital ut<br />

J5: Digital inn<br />

J6: Analog inn<br />

J8: Klokke<br />

S1: Reset<br />

Det er også viktig å <strong>for</strong>syne kortet <strong>med</strong> rett spenning. Spenningen skal hentes fra Modul IO boksen.<br />

VIKTIG:<br />

Serielinjen mellom KM HC11 kortet og PC’en skal kobles som følgende:<br />

• En nullmodemkabel skal koples til PC’ens port COM 1 eller COM 2. Disse finner du på en<br />

koblingsboks på arbeidspassen.<br />

• Nullmodemkabelen kobles til en flatkabel.<br />

• Flatkabelen kobles til KM HC11 kortet.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 7<br />

Mikrokontrolleren MC<strong>68HC11</strong><br />

KM HC11 kortet er basert på mikrokontrolleren MC<strong>68HC11</strong>. Programvaren som dere skal skrive<br />

kommer til å kjøre her. På labben kjører denne prosessoren på en 4.9 MHz krystall. Vær oppmerksom<br />

på at prosessoren ikke har floatingpoint-coprosessor. Dette gjør at hvis dere bruker<br />

flyttall vil det gå veldig sakte. Utviklingsprosessen vil bli som følgende:<br />

1. Skriv programvare i IAR Embedded Workbench. Se eget <strong>av</strong>snitt.<br />

2. Kompiler og link denne ved hjelp <strong>av</strong> den innebygde krysskompilatoren i Embedded Workbench.<br />

(Det heter en krysskompilator <strong>for</strong>di kompilatoren lager programvare <strong>for</strong> en annen<br />

prosessor enn den kjører på selv)<br />

3. Last programvaren til HC11 prosessoren ved hjelp <strong>av</strong> debuggeren C-SPY ROM Monitor.<br />

4. Kjør/debugg programvaren deres i C-SPY.<br />

Intro til IAR Embedded Workbench<br />

Software & Utviklingsmiljø<br />

Dette kapitelet tar <strong>for</strong> seg hvordan man kommer i gang <strong>med</strong> å bruke utviklingsverktøyet.<br />

Gjør som følgende:<br />

1. Lag en katalog hvor dere skal lagre alle filene deres. Denne kan dere enten legge på arbeidsdisken<br />

F: eller dere kan kople til hjemmeområdet deres og legge det der. Se beskrivelse på<br />

hjemmesiden til sanntidslabben <strong>for</strong> hvordan hjemmeområdet skal kopples opp.<br />

2. Start IAR Embedded Workbench versjon 2.1<br />

3. Lag et nytt prosjekt <strong>med</strong> ”File->New” velg ”Project”.<br />

4. Skriv inn filn<strong>av</strong>n og velg deres katalog. Trykk OK.<br />

5. Lagre det nye prosjektet. Dere vil få nytt spørsmål om lokasjon og n<strong>av</strong>n. Trykk OK.<br />

Dere har nå laget deres eget prosjekt. Dette prosjektet må stilles inn slik at det fungerer sammen<br />

<strong>med</strong> KM HC11 kortet. Dere må gjøre følgende:<br />

• Gå på “Project->Option “ og velg kategori C-SPY<br />

• Velg Driver lik “ROM monitor”.<br />

• Seriekomunikajson skal settes lik:<br />

• Port: COM1 eller COM2, <strong>av</strong>hengig <strong>av</strong> hvilken port dere har brukt.<br />

• Baud: 4800<br />

Debuggeren skal nå fungere.<br />

• På “Procject->Option” og kategori XLINK.<br />

Dette er oppsettet <strong>av</strong> krysslinkeren. For at denne skal fungere må dere spesifisere egen<br />

XCL fil. Gå under “Include” og merk <strong>av</strong> “Override default” under XCL file name.<br />

Skriv inn n<strong>av</strong>net på deres egen XCL fil i feltet. Se eget kapittel <strong>for</strong> beskrivelse <strong>av</strong> hvordan<br />

denne fila skal se ut.<br />

Dere kan nå skrive så mye C kode som dere vil. Husk bare å legge alle filene deres til prosjektet.<br />

Dette gjøres i “Project->Files”.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 8<br />

XCL–fila<br />

Et godt utgangspunkt <strong>for</strong> denne fila er KMHC11.XCL som ligger på hjemmesiden til faget.<br />

Denne fila ser ut som følgende:<br />

-! -KMHC11.xcl-<br />

$Id: lnk6811.xcl 1.3 1997/09/23 15:12:30 dan Exp $<br />

XLINK 4.xx command file to be used with the <strong>68HC11</strong> C-compiler V4.xx<br />

First define CPU -!<br />

-c68hc11<br />

-! Allocate segments which should be loaded -!<br />

-Z(CODE)RCODE,CODE,CDATA0,CDATA1,CONST,CSTR,CCSTR=0200-3dff<br />

-! The interrrupt vectors are assu<strong>med</strong> to start at FFD6, -!<br />

-Z(CODE)INTVEC=FFD6<br />

-! Then the writeable segments which must be mapped to a RAM area.<br />

Note: Stack size is set to 128 (80H) bytes with 'CSTACK+80' -!<br />

-Z(DATA)IDATA1,UDATA1,ECSTR,TEMP,CSTACK+80=0000-00ff<br />

-! Memory Segments <strong>for</strong> Memory mapped IO -!<br />

-Z(DATA)ANALOGUT=B200-B204<br />

-Z(DATA)DIGUT=B220-B220<br />

-Z(DATA)DIGINN=B250-B250<br />

-! Load the 'C' library -!<br />

Sjekk at denne fila stemmer <strong>med</strong> tabellen over adresse mappingen til labboppsetningen!<br />

Litt om debugging<br />

Debuggeren startes direkte fra IAR Embedded Workbench. Det første debuggeren gjør er å laste<br />

ned ny versjon <strong>av</strong> programvaren deres. Hvis dere får feilmelding under starting <strong>av</strong> debuggeren<br />

betyr dette antageligvis at KM HC11 kortet ikke er klar til å ta imot ny programvare. Prøv en <strong>av</strong><br />

disse:<br />

• Trykk på reset. Reset knappen er den røde knappen merket S1 på KM HC11 kortet.<br />

• Hvis dette ikke hjelper prøv å skru powersuplyet til KMHC11 kortet <strong>av</strong> og på igjen. Dvs.<br />

Modul IO boksen.<br />

• Sjekk at serielinja er montert slik som beskrevet.<br />

• Sjekk at oppsettet <strong>av</strong> debuggeren er riktig i prosjektet.<br />

Når debuggeren er ferdig <strong>med</strong> å laste ned programvaren kan dere begynne å debugge. Som standard<br />

står debuggeren i det som kalles Call-mode. I denne moden kan dere debugge programmet<br />

som vanlig, men vær oppmerksom på at HC11 prosessoren går på ”krabbegir” i denne modusen.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 9<br />

Hvis dere skifter til Realtime-modus får dere prosessoren til å gå <strong>med</strong> riktig fart. Vær derimot<br />

oppmerksom på at i Realtime-modus mister debuggeren kontakt <strong>med</strong> HC11 slik at det ikke er<br />

mulig å debugge software i denne modusen.<br />

Hjelp til labboppg<strong>av</strong>en<br />

Et godt utgangspunkt <strong>for</strong> selve labben vil være fila ”regulator.c” som ligger på hjemmesida.<br />

Denne fila ser ut som følger:<br />

#include <br />

#include /* Include intrinsics */<br />

#include /* Include SFR definitions <strong>for</strong> IO registers */<br />

#pragma language=extended /* Enable use of extended keywords */<br />

#pragma memory = dataseg(ANALOGUT)<br />

unsigned char analogUt[4];<br />

#pragma memory = dataseg(DIGINN)<br />

unsigned char digInn;<br />

#pragma memory = dataseg(DIGUT)<br />

unsigned char digUt;<br />

#pragma memory = default<br />

interrupt [26] void RTI_interrupt( void)<br />

{<br />

TFLG2=0x40; /* Reset interrupt flag */<br />

/* Her kan regulatoren skrives */<br />

}<br />

void main(void)<br />

{<br />

PACTL=0x0; /* Setter interruptet på 6.66 ms */<br />

TMSK2=0x40; /* Sett interrupt flag */<br />

/* Starte interruptene */<br />

enable_interrupt();<br />

while (1); /*Gå i evig løkke */<br />

}<br />

Her er Real Time Interruptet (RTI) satt opp til å gå på 6.66 ms. PACTL registeret kan ha følgende<br />

verdier:


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 10<br />

Verdi på registeret<br />

PACTL=0<br />

PACTL=1<br />

PACTL=2<br />

PACTL=3<br />

Periode mellom interruptene.<br />

6.66 ms<br />

13.33 ms<br />

26.66 ms<br />

53.32 ms<br />

I selve interrupt rutina må TFLG settes lik 0x40. Dette må gjøres får å signalere at interruptet<br />

har blitt tatt vare på.<br />

Legg også merke til hvordan direktivet ”#pragma memory= dataseg( )” brukes <strong>for</strong><br />

å legge variable til de segmentene som ble definert i XCL fila.<br />

Analog Ut<br />

Beskrivelse <strong>av</strong> de ulike typene IO.<br />

Kortet har 4 analoge utganger. Disse er lokalisert i kontakt J3 på kortet. Denne kontakten ser ut<br />

som følgende:<br />

NC 10 9 NC<br />

GND 8 7 DA 3<br />

GND 6 5 DA 2<br />

GND 4 3 DA 1<br />

GND 2 1 DA 0<br />

NB: Pinne 1 er der hvor prikken er tegnet på tegningen over kretskortet.<br />

Disse DA-konverterene er memory mapped IO og kan skrives til <strong>med</strong> å skrive til de adressene<br />

som er oppgitt i memory mappinga.<br />

DA-konverterene er på 8 bit hver og gir fra 0 til 5V. Altså tilsvarer 5V 255 og 0V tilsvarer 0.<br />

Analog Input<br />

De <strong>av</strong> dere som er oppservante har lagt merke til at det hittil ikke er beskrevet noe måte å lese<br />

analog input. Analog input er gjort på en annen måte enn resten <strong>av</strong> IO’en på KMHC11 kortet.<br />

For analog input brukes interne AD konverter i MC<strong>68HC11</strong> prosessoren. Det finnes totalt 8 AD<br />

innganger. Disse leses ved hjelp <strong>av</strong> ADCTL registeret. Figuren <strong>for</strong>teller hvilken pinne i kontakten<br />

J6 på KM HC11 kortet dere kan kople dere til de ulike AD-konverterene.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 11<br />

NC 20 19 NC<br />

GND 18 17 AD 0<br />

GND 16 15 AD 1<br />

GND 14 13 AD 2<br />

GND 12 11 AD 3<br />

GND 10 9 AD 4<br />

GND 8 7 AD 5<br />

GND 6 5 AD 6<br />

GND 4 3 AD 7<br />

GND 2 1 GND<br />

NB: Pinne 1 er der hvor prikken er tegnet på kretskortet.<br />

Sekvens <strong>for</strong> lesning blir da som følger:<br />

1. Sett ADCTL til riktig AD konverter.<br />

2. Vent på at konverteringen skal bli ferdig. Konverteringen er ferdig når CCF (Conversion<br />

Complete Flag) blir satt i ADCTL registeret. CCF er bit 7.<br />

3. Les verdien fra register ADR1.<br />

Eksempel på lesning:<br />

/* Velger AD konverter 7. Dette <strong>med</strong>fører lesning fra pinne 3 i kontakt J6 på KMHC11 kortet*/<br />

ADCTL=0x07;<br />

/* Vente paa CCF (Conversion Complete Flag) */<br />

while ((ADCTL&0x80)==0) ;<br />

/* Leser verdien fra internt register */<br />

AD-konverterene er på 8 bit hver og kan omsette spenninger fra 0 til 5V.<br />

Digital IO<br />

Digital ut er kontakt J4 på KM HC11 kortet. Denne kontakten kan leses og skrives via adresse<br />

B220 slik som adresse mappen beskriver. Digital inn er kontakt J5. Denne har adresse B250.<br />

Spesifikasjon <strong>av</strong> digital IO kontaktene på KM HC11 (J4 & J5):<br />

GND 1 2 GND<br />

DO0 3 4 DO1<br />

DO2 5 6 DO3<br />

DO4 7 8 DO5<br />

DO6 9 10 DO7<br />

Vær oppmerksom på at det IKKE går å lese digital utganger.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 12<br />

Om <strong>motor</strong>en<br />

Motoren og driverkretsene.<br />

Motoren har følgende kontakter:<br />

M+ : Rød ledning, Positiv spenning.<br />

M-: Blå ledning: Negativ spenning.<br />

Disse ledningen skal koples til driverkretsen som er inni Modul IO boksen. Kontakter finnes på<br />

Modulboksens bakside.<br />

Tabell 1: Datablad<br />

Assigned power rating<br />

Nominal voltage<br />

No load speed<br />

Stall torque<br />

Speed/torque gradient<br />

No load current<br />

Starting current<br />

Terminal resistance<br />

Max. permissible speed.<br />

Max. continuous current<br />

Max. continuous torque<br />

Max. power output at nominal voltage<br />

Max. efficiency<br />

Torque constant<br />

Speed constant<br />

Mechnaical time constant<br />

Rotor inertia<br />

Terminal inductance<br />

Thermal resistance housing-ambient<br />

Thermal resistance rotor-housning<br />

15 W<br />

12 V<br />

4750 rpm<br />

86.9 mNm<br />

57.3 rpm/mNm<br />

34.4 mA<br />

378 0mA<br />

3.18 Ohm<br />

9200 rpm<br />

1200 mA<br />

27.60 mNm<br />

10200 mW<br />

77 %<br />

23 mNm/A<br />

415 rpm/V<br />

14.6 ms<br />

24.3 gcm 2<br />

0.53 mH<br />

12.5 K/W<br />

1.9 K/W<br />

Til <strong>motor</strong>en er det koplet et gir. Dette giret har en girutveksling på 1:100<br />

Styring <strong>av</strong> Motor<br />

Pådraget settes som et analogt signal ut til driverkretsen. Driverkretsen er en puls-bredde modulert<br />

kraft<strong>for</strong>sterker. Siden denne kraft<strong>for</strong>sterkeren tar pådrag som et signalet mellom 0-5V<br />

kan <strong>motor</strong>en sees på som en spenningstyrt likestrøms<strong>motor</strong>. Kraft<strong>for</strong>sterkeren har en <strong>for</strong>sterkningsfaktor<br />

på 2.4.<br />

I tilleg til pådraget styres kraft<strong>for</strong>sterkeren til <strong>motor</strong>en ved hjelp <strong>av</strong> to digitale signaler:<br />

- DIRECTION eller DIR: Setter retning på <strong>motor</strong>en.<br />

- ENABLE eller EN: Dette er et <strong>av</strong>/på signal <strong>for</strong> <strong>motor</strong>en. Hvis ENABLE er l<strong>av</strong> (=0) betyr<br />

det at <strong>motor</strong>en er skrudd <strong>av</strong>.<br />

Kontakter <strong>for</strong> disse signalene finnes på modulboksens <strong>for</strong>side.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 13<br />

Kvadraturteller og Enkoder<br />

Signalene fra enkoderen sendes igjennom kvadraturtelleren slik at dere kan lese <strong>av</strong> et digitalt<br />

signal fra kvadraturtelleren <strong>for</strong> å finne posisjon til <strong>motor</strong>en. Kvadraturtelleren er en 12 bits teller.<br />

Denne styres ved hjelp <strong>av</strong> følgende signaler:<br />

- !RESET eller !RST: For nullstilling <strong>av</strong> kvadraturtelleren. Dette signalet er aktivt l<strong>av</strong>t,<br />

dvs. RST = 0 <strong>med</strong>fører reseting.<br />

- SELECT eller SEL: Velger Hi- eller Lo-byte. SEL = 0 velger HiByte og SEL =1 velger<br />

LoByte. HiByte må leses før LoByte.<br />

- !Output Enable eller !OE: Aktivt l<strong>av</strong>t signal <strong>for</strong> utsetting <strong>av</strong> bufferene på utgangen. Når<br />

OE = 0 kan kvadraturtellerens interne buffere leses fra dens utgang.<br />

Signalene SELECT og !OE brukes <strong>for</strong> å lese <strong>av</strong> posisjonen på kvadraturtelleren. En uthentingssyklus<br />

ser ut som følgende:<br />

1. Sett SELECT = 0 <strong>for</strong> å gjøre klar <strong>for</strong> lesning.<br />

2. Sekvensen startes <strong>med</strong> å sette OE = 0, slik at kvadraturtellerens interne buffere blir synlig<br />

på utgangen.<br />

3. Les kvadraturtellerens HiByte (4MSB).<br />

4. Sett SELECT = 1 og les kvadraturtellerens LoByte (8 LSB).<br />

5. Sett OE = 1 <strong>for</strong> å <strong>av</strong>slutte hentesekvensen slik at kvadraturtelleren kan <strong>for</strong>sette å telle på<br />

vanlig måte.<br />

Når man starter en hentesyklus <strong>med</strong> å sette OE=0, må syklusen fullføres. En hentesyklus kan<br />

bare <strong>av</strong>brytes <strong>med</strong> å sette RESET = 0. Å sette RESET = 0 vil <strong>med</strong>føre at verdien på kvadraturtelleren<br />

bli satt lik 0.<br />

Kvadraturtelleren teller pulsene fra enkoderen. Enkoderen gir ut 500 pulser per omdreining på<br />

hvert <strong>av</strong> de to pulstogene. Dette gir totalt 4*500 posisjoner per omdreining. Kvadraturtelleren<br />

har et dynamisk område på 12 bit. Dvs. at kvadraturtelleren gir ut en verdi fra 0 til 4096 (0x1000).<br />

Tacho<br />

Tachoen på <strong>motor</strong>en gir ut en spenning som er proporsjonal <strong>med</strong> <strong>motor</strong>ens hastighet.<br />

Proporsjonalitetskonstanten er 0.52 V / 1000rpm (rpm = rounds per minute).<br />

Tachoen har to ledninger:<br />

T-: grønn ledning<br />

T+: gul ledning.<br />

Når tachoen er koplet til Modul IO boksen er signalet tilgjengelig via DA 1 på baksiden <strong>av</strong> boksen<br />

eller i MJ3 på <strong>for</strong>siden.<br />

Tilkoplinger på Modul-Boks<br />

I denne labben skal alle signaler til KMHC11 koples via denne boksen (<strong>med</strong> unntak <strong>av</strong><br />

serielinjekablen). Boksen har følgende tilkoplinger på <strong>for</strong>siden:<br />

• MJ1: Digital ut. Skal koples til digital ut på KMHC11 (J4)<br />

• MJ2 Digital Inn. Skal koples til digital inn på KMHC11 (J5)<br />

• MJ3 Analog Inn. Skal ikke brukes i denne labben.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 14<br />

• MJEX. Styresignaler. Se under.<br />

• PWR ut. Her skal strøm<strong>for</strong>skyningen til KMHC11 koples til.<br />

På baksiden har boksen følgende tilkoplinger:<br />

• ENCODER: Fra <strong>motor</strong>ens enkoder.<br />

• AC220V: Nettspenning.<br />

• M+ og M-: Spenning til <strong>motor</strong>en.<br />

• T+ og T-: Fra <strong>motor</strong>ens tacho.<br />

• Mini bananplugger <strong>for</strong> analoge inn og utganger. Disse er koplet direkte til de tilsvarende<br />

analoge inn og utgangene på <strong>for</strong>siden.<br />

I tillegg finnes en <strong>av</strong>/på bryter.<br />

Spesifikasjon <strong>av</strong> kontrollsignaler inn på modul-boksen (digital ut KMHC11-J4):<br />

GND 1 2 GND<br />

!OE 3 4 !RST<br />

SEL 5 6 EN<br />

DIR 7 8 Ubrukt<br />

Ubrukt 9 10 Ubrukt<br />

Spesifikasjon <strong>av</strong> MJEX på modul-boksen (signaler fra KMHC11):<br />

DA1 1 2 GND<br />

E 3 4 Ubrukt<br />

Ubrukt 5 6 Ubrukt<br />

Ubrukt 7 8 Ubrukt<br />

Ubrukt 9 10 Ubrukt<br />

• DA1 er pådraget til <strong>motor</strong>en. Denne koples til analog ut (J3) på KMHC11 kortet. Signalet<br />

kan overvåkes via DA1 på baksiden <strong>av</strong> Modul-boksen.<br />

• E er klokkesignalet fra pinne 12 i J8 på KMHC11. Dette klokkesignalet trengs <strong>for</strong> at kvadraturtelleren<br />

skal fungere.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 15<br />

Oppg<strong>av</strong>e 1)<br />

I den første delen <strong>av</strong> oppg<strong>av</strong>en skal vi konsentrere oss om mikrokontrollerkortet og utviklingsverktøyet<br />

rundt HC11.<br />

Som nevnt tidligere i beskrivelsen <strong>av</strong> systemet, så inneholder mikrokontrollerkortet porter<br />

<strong>for</strong> både analog og digital inn/ut. Under testing <strong>av</strong> inn og utlesning kan dere la systemet stå<br />

i Call-modus <strong>for</strong> lettere å debugge programmet. Når dere er <strong>av</strong>hengig <strong>av</strong> at systemet reagerer<br />

i sann tid, må systemet være i realtime-modus.<br />

a)<br />

Lag et prosjekt i IAR, last det ned på KM HC11 kortet og sjekk at dere greier å debugge<br />

prosjektet.<br />

b)<br />

Generer en firkantpuls ved hjelp <strong>av</strong> digital ut. Se på signalet på et oscilloskop. Mål frekvensen.<br />

Hvordan stemmer dette overens <strong>med</strong> den valgte samplingsfrekvensen?<br />

c)<br />

Generer en sinuskurve <strong>med</strong> 1 Hz og amplitude 2V ved hjelp <strong>av</strong> analog ut. Til å generere<br />

sinuskurven kan dere bruke funksjonene “sin” som er definert i “math.h”. Vær derimot<br />

oppmerksom på at en sinusopprasjon tar ca. 15 ms.<br />

Se på signalet på oscilloskopet. Hvordan ser det ut?<br />

Tips: For å studere signalet på oscilloskopet kan dere bruke funksjonen “digital memory”<br />

på oscilloskopet. Når denne funksjonen er på kan dere trykke på “lock” så låses skjermbildet<br />

på oscilloskopet.<br />

Oppg<strong>av</strong>e 2<br />

Åpen sløyfe<br />

- Les inn et signal fra signalgenerator (evt. en strøm<strong>for</strong>syning) og sett dette signalet ut som<br />

pådrag til <strong>motor</strong>en.<br />

- Les inn posisjon fra enkoder og beregn hastighet.<br />

- Studer beregnet / målt hastighet fra enkoder <strong>med</strong> målt verdi fra tacho på oscilloskopet.


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 16<br />

Oppg<strong>av</strong>e 3)<br />

Regulering <strong>av</strong> <strong>motor</strong>en. Husk at systemet må kjøre i real-time <strong>for</strong> at regulatorene skal fungere.<br />

Dette <strong>med</strong>fører at regulatorene er vanskelige å debugge. Planlegg der<strong>for</strong> nøye det dere gjør, slik<br />

at dere kan debugge så mye som mulig før selve regulatoren skrives.<br />

a)<br />

Lukket sløyfe<br />

- Lukk hastighetssløyfen og programmer en passende regulator. Bruk et signal fra signalgeneratoren<br />

som hastighetsreferanse.<br />

b)<br />

Posisjonsregulering<br />

- Bruk nå signalet fra signalgeneratoren som posisjonsreferanse. Lag en posisjonsregulator<br />

som gir referanse til hastighetsregulatoren fra oppg<strong>av</strong>e 3a)<br />

c)<br />

Analyse <strong>av</strong> ytelsen til systemet.<br />

- Hvor rask insvingningstid greier dere?<br />

- Greier dere å unngå stasjonær<strong>av</strong>vik?<br />

- Har dere oversving i reguleringssystemet? Hva kan gjøres <strong>for</strong> å unngå dette?


Fag SIE 3020: Industriell data<strong>styring</strong>. Øving 5 s. 17<br />

Hjelp til reguleringen.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!