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
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.