HARDWARE/SOFTWARE CO-DESIGN VOOR MACHINECONTROLE: CONTROLE VAN EEN PWM-GESTUURDE DC-MOTOR VAN EEN INDUSTRIELE ROBOT
Rapport over de masterproef van Free CLAESSENS kandidaat voor de graad van Academische Master Industriële Wetenschappen, Elektronica-ICT
Promotoren: ir. W. Decré dr. ir. P. Slaets
Academiejaar 2007 - 2008 Referentie: E08/ELO/02
Woord vooraf Deze masterproef is uitgevoerd aan de afdeling PMA van het departement werktuigkunde aan de K.U.Leuven en is meteen ook de afsluiter van mijn opleiding tot Academische Master, Industri¨ele wetenschappen, Elektronica-ICT aan de Katholieke Hogeschool Limburg. Gedurende deze opleiding heb ik veel kennis en ervaring kunnen opdoen en dat heb ik niet enkel aan mijzelf te danken. Daarom wil ik graag dit woord vooraf gebruiken om een aantal mensen te bedanken die mij gedurende mijn opleiding maar vooral tijdens dit afstudeerwerk geholpen en gesteund hebben. Op de eerste plaats wil ik dr. ir. Peter Slaets, mijn begeleider vanuit de KHLim, bedanken voor de hulp en de plezante samenwerking tijdens dit project. Hij stond altijd paraat om mij iets bij te leren en twijfelde nooit om te helpen bij problemen. Zonder zijn kennis en ervaring zou ik nooit tot hetzelfde resultaat gekomen zijn. Op de tweede plaats bedank ik ir. Wilm Decr´e, mijn begeleider binnen PMA, voor alle hulp die hij mij geboden heeft. Ik wil hem vooral bedanken voor de begeleiding bij het schrijven van dit eindverslag, waar hij veel tijd aan spendeerde. Verder wil ik ook dhr. Bertram Van Soom, ing. Hans Wambacq en ing. Gerolf Vanacker bedanken voor de uitstekende hulp bij het ontwerpen en inwerking stellen van de vermogenelektronica. Dan wil ik nog alle andere medewerkers van PMA bedanken voor de aangename werksfeer en voor de hulp bij elk klein probleempje met Linux. Niet te vergeten is ir. Koen Naellaerts van de KHLim die mij onmiddelijk geholpen heeft met het ontwerpen en frezen van het PCB voor de vermogenelektronica. Dan wil ik ing. Stefan De la haye en ing. Steven Kauffmann bedanken om mij in te leiden in het project en voor de hulp bij problemen die ik had met het embedded systeem dat zij vorig jaar opgebouwd hebben. Nog iemand die ik wil bedanken is mijn vriendin Floriane Deli¨en voor onder andere het nalezen van mijn teksten, maar vooral voor haar steun tijdens dit toch wel druk jaar. Tenslotte wil ik mijn ouders, broer, familie en vrienden bedanken om mij gedurende deze opleiding te steunen en in mij te blijven geloven. Free Claessens Mei 2008 i
Inhoudsopgave Woord vooraf
i
Lijst van figuren
iv
Lijst van tabellen
vi
Abstract
vii
1 Beschrijving van de proefopstelling 1.1 Performer MK2 robot . . . . . . . . . . 1.1.1 Inleiding . . . . . . . . . . . . . 1.1.2 Mechanische eigenschappen . . 1.2 Embedded systeem . . . . . . . . . . . 1.2.1 Hardwareplatform . . . . . . . . 1.2.2 Softwareplatform . . . . . . . . 1.3 Het gebruik van het embedded systeem
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . en de robot
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
1 1 1 2 2 3 3 3
2 Controlelus 2.1 Voorwaartse keten . . . . . . . . . 2.1.1 Proportionele positieregelaar 2.1.2 PWM-generator . . . . . . . 2.2 Terugkoppelketen . . . . . . . . . .
. . . .
3 Encoderinterface 3.1 Encoders . . . . . . . . . . . . . . 3.2 Blokschema van de interface . . . 3.3 Ingangsfilters . . . . . . . . . . . 3.4 Kwadratuurdecoder . . . . . . . . 3.5 Positie . . . . . . . . . . . . . . . 3.6 Snelheid . . . . . . . . . . . . . . 3.6.1 Inleiding . . . . . . . . . . 3.6.2 Time count methode . . . 3.6.3 Pulse count methode . . . 3.7 Versnelling . . . . . . . . . . . . . 3.8 Berekenen van positie, snelheid en 3.8.1 Floating point datatype . 3.8.2 Fixed point datatype . . . 3.8.3 Keuze van het datatype .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
7 7 7 8 9
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . versnelling . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
10 10 11 12 13 13 15 15 16 17 17 18 18 19 19
. . . .
4 PWM-versterker
. . . .
. . . .
. . . .
21 ii
4.1
. . . . . . . . . .
21 21 22 22 22 24 24 25 28 28
5 Meetresultaten 5.1 Encoderinterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Controlelus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
31 31 31
6 Besluit
38
7 Toekomstwerk
40
Bibliografie
42
I
44
4.2
4.3 4.4 4.5
Algemene beschrijving van de versterker . . . . . . . 4.1.1 H-brug . . . . . . . . . . . . . . . . . . . . . . H-brug driver . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Doel van de driver . . . . . . . . . . . . . . . 4.2.2 Werkingsprincipe . . . . . . . . . . . . . . . . Inputcircuit . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 Totale schema . . . . . . . . . . . . . . . . . . Realisatie van het Print Circuit Board . . . . . . . . Invloed van de PWM-sturing op het meetsysteem van 4.5.1 Equivalent schema van het meetsysteem . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . de encoders . . . . . . .
Bijlagen
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
A Genereren van templates voor het aanmaken van een gebruikers IP-core 45 B Importeren van een gebruikers IP-core in het EDK-project
iii
48
Lijst van figuren 1.1 1.2 1.3 1.4 1.5
Performer MK2 robot . . . . . . . . . . . . . . . . Bewegingsbereik van de Performer MK2 robot . . Het Virtex-II Pro Development Board . . . . . . . Architectuur van het hardware/software co-design Schema van de proefopstelling . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
1 2 4 5 6
2.1 2.2 2.3 2.4
De controlelus met P-regelaar op de positie . . . . . . . . Het systeem van de motor en de encoder . . . . . . . . . Blokschema van de PWM-generator . . . . . . . . . . . . Weergave van de interne signalen van de PWM-generator
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
7 8 9 9
3.1 3.2 3.3 3.4 3.5 3.6
Meetkop met twee tegenroosters 90◦ t.o.v. verschoven . . Blokschema van de encoderinterface . . . . . . . . . . . . Schema van het filter tegen spikes . . . . . . . . . . . . . Simulatie van het digitale filter . . . . . . . . . . . . . . Toestandsdiagram van de kwadratuurdecoder . . . . . . Verband tussen de encodersignalen en de interne signalen in de encoderinterface . . . . . . . . . . . . . . . . . . . . Blokschema van het positiecircuit . . . . . . . . . . . . . Time count methode voor het meten van de snelheid . . Pulse count methode voor het meten van de snelheid . . Methode voor het meten van de versnelling . . . . . . . . 32 bit binaire floating point representatie . . . . . . . . . Binaire fixed point representatie . . . . . . . . . . . . . . Voorbeeld van een binaire fixed point representatie . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pulse train en Dir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 12 12 13 14
Principe van de H-brug . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Principeschema van een mogelijke toepassing . . . . . . . . . . . . . . . . . . Het bootstrap circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schema van de level-shifter + intern schema van de HCPL2606 optocoupler . Verband tussen de weerstandwaarde en de dode tijd . . . . . . . . . . . . . . Totale versterker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Layout van het PCB van de PWM-versterker . . . . . . . . . . . . . . . . . . De PWM-versterker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stoorsignaal in het meetsysteem van de encoders . . . . . . . . . . . . . . . . Norton equivalent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Norton equivalent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Stoorsignaal in het meetsysteem van de encoders na het plaatsen van een serieweerstand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22 23 23 24 25 26 27 27 28 29 29
3.7 3.8 3.9 3.10 3.11 3.12 3.13 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12
iv
. . . . .
. . . . .
. . . . .
14 15 16 17 18 18 19 19
30
5.1 5.2 5.3 5.4
Grafische weergave van de positie bij het aanleggen van een snelheidsstap . . Grafische weergave van de snelheid bij het aanleggen van een snelheidsstap . Grafische weergave van de versnelling bij het aanleggen van een snelheidsstap Grafische weergave van de positie bij het aanleggen van een willekeurig snelheidspatroon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5 Grafische weergave van de snelheid bij het aanleggen van een willekeurig snelheidspatroon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6 Grafische weergave van de versnelling bij het aanleggen van een snelheidsstap 5.7 Bepaling van de tijdsconstante van de motor inclusief overbrenging en as van de robot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8 Grafische weergave van de positie bij het aanleggen van een positiestap . . . 5.9 Grafische weergave van de snelheid bij het aanleggen van een positiestap . . 5.10 Grafische weergave van de versnelling bij het aanleggen van een positiestap . 5.11 Bepaling van de tijdsconstante van het gesloten lus systeem . . . . . . . . . .
v
32 33 33 34 34 35 35 36 36 37 37
Lijst van tabellen 1.1
Mechanische eigenschappen van de Performer MK2 . . . . . . . . . . . . . .
2
3.1 3.2
Toestandstabel van de decoder . . . . . . . . . . . . . . . . . . . . . . . . . . Voor- en nadelen van floating point en fixed point getallen . . . . . . . . . .
13 20
vi
Abstract De afdeling Productietechnieken, Machinebouw en Automatisering (PMA) van het departement werktuigkunde aan de K.U.Leuven onderzoekt een hard real-time robotsturing uitgevoerd op een embedded systeem. Een embedded systeem is immers verkiesbaar qua prijs, vermogenverbruik, omvang en herprogrammeerbaarheid in vergelijking met een controle-pc met data-acquisitiekaarten. Industri¨ele toepassingen, zoals visiegebaseerde servosystemen of sensorfusie, vragen echter een grote rekenkracht waardoor de zwakke embedded processors te zwaar belast worden. Hierdoor komt het real-time karakter van het systeem in gedrang. Om dit te voorkomen ontwerpt en valideert deze masterproef een robotsturing op basis van een hardware/software co-design waarbij alle taken verdeeld worden over software draaiend op de processor en hardware uitgevoerd op een FPGA. Op deze manier wordt de processor ontlast van tijdskritische berekeningen door de FPGA. Deze masterproef gebruikt het Virtex-II Pro Development Board, bestaande uit een VirtexII Pro FPGA, een PowerPC processor en een aantal randapparaten, als embedded systeem en een Performer MK2 robot als testplatform. Om de uitvoeringssnelheid van de controlelussen voor de motoren, die de assen van de robot aandrijven, te verhogen, worden deze volledig op de FPGA uitgevoerd. Aan de hand van ondersteunende software van Xilinx kan deze hardware op een gebruiksvriendelijke manier beschreven worden. De PowerPC dient hoofdzakelijk om de referentiewaarden te genereren voor de controlelussen en deze door te sturen naar de hardware. Daarnaast kan de PowerPC via de randapparaten communiceren met de buitenwereld. De parameters van de encoders en de overbrengingen in de robotassen worden via de software doorgegeven naar de hardware. Op deze manier vormt dit hardware/software co-design een robotsturing die op een flexibele manier kan ingezet worden voor gelijkaardige machines. Naast de hogesnelheidscontrolelussen biedt dit platform, dankzij de flexibiliteit in de FPGA-architectuur, de mogelijkheid om bijkomende sensoren te interfacen zoals afstands-, kracht- en visiesensoren waarnaar nog verder onderzoek gedaan kan worden.
Hoofdstuk 1 Beschrijving van de proefopstelling De volgende secties beschrijven kort de proefopstelling van deze masterproef. Eerst komt een algemene beschrijving van de gebruikte robot aan bod. Daarna volgt een korte beschrijving van het embedded systeem waarop de sturing geprogrammeerd is op basis van een hardware/software co-design. Dit hoofdstuk sluit af met een bespreking over de koppeling van de robot aan het embedded systeem en de werking van het globale systeem.
1.1 1.1.1
Performer MK2 robot Inleiding
Figuur 1.1 toont de industri¨ele robotarm die gebruikt werd in deze masterproef. De robot beschikt over vijf assen die aangedreven worden door DC-servomotoren (zie hoofdstuk ??) die door middel van een PWM-motorsturing aangestuurd zullen worden, zie hoofdstuk 4. De robot heeft de mogelijkheid om een extra werktuig te monteren, bijvoorbeeld een grijper. De incrementeel optische encoders, gemonteerd op de as van de motoren, dienen als meetsysteem waarmee de positie, snelheid en versnelling van iedere robotas bepaald kan worden (zie hoofdstuk 3).
Figuur 1.1: Performer MK2 robot.
1
Hoofdstuk 1. Beschrijving van de proefopstelling
1.1.2
1.2. Embedded systeem
Mechanische eigenschappen
Tabel 1.1 geeft een aantal mechanische eigenschappen van de robot weer die van belang zijn bij het ontwerpen van de sturing. Rekeninghoudend met het bewegingsbereik wordt de minimale grootte van de interne datatypes in de FPGA bepaald. Op deze manier kan er ten eerste pas gestreefd worden naar een optimaal hardwareontwerp als dit bewegingsbereik van iedere as gekend is. Ten tweede zijn de overbrengingsverhoudingen in de gewrichten van de robot essentieel voor een correcte bepaling van de positie, snelheid en versnelling van de robotassen. Figuur 1.2 illustreert het bewegingsbereik van de robot. as 1 Beschrijving basis rotatie Bewegingsbereik 305◦ Overbrenging 1:120
as 2 onderarm 185◦ 1:160
as 3 bovenarm 235◦ 1:144
as 4 toppunt 225◦ 1:120
as 5 pols onbeperkt 1:88
Tabel 1.1: Mechanische eigenschappen van de Performer MK2
Figuur 1.2: Bewegingsbereik van de Performer MK2 robot.
1.2
Embedded systeem
Voor de realisatie van de robotsturing op basis van een hardware/software co-design is er een embedded systeem nodig. Dit embedded systeem bestaat uit een hard- en softwareplatform. Het hardware platform is een Virtex-II Pro Development Board[1; 2]. Dit platform bevat een Virtex-II Pro FPGA, twee PowerPC processoren en daarrond enkele randapparaten. De randapparaten breiden de mogelijkheden van de FPGA en PowerPC’s uit en zorgen voor contact met de buitenwereld. Het software platform is een PowerPC processor, waarop een Free Claessens
2
Hoofdstuk 1. Beschrijving van de proefopstelling 1.3. Het gebruik van het embedded systeem en de robot
real-time Linux kernel draait, die zorgt voor een real-time softwareomgeving. In de volgende secties volgt een beknopte uitleg over het hard- en softwareplatform. De masterproef van Stefan De la haye en Steven Kauffmann[3] geeft hierover een meer uitgebreide beschrijving. Deze thesis handelt volledig over de opbouw van dit embedded systeem en vormt dan ook de basis van deze masterproef.
1.2.1
Hardwareplatform
Als hardwareplatform wordt het Virtex-II Pro Development Board gebruikt. Figuur 1.3[2] toont hiervan een foto met centraal de Virtex-II Pro FPGA waarin de PowerPC’s ge¨ıntegreerd zijn en daarrond de randapparaten. De hardware die uitgevoerd wordt op de FPGA kunnen we in drie grote groepen verdelen: de encoderinterface of kortweg de decoder decodeert de encodersignalen en berekent hieruit de positie, snelheid en versnelling van de robotassen; de regelaar regelt de fout tussen de referentiewaarden en de gemeten waarden weg; de PWM-generator zet de uitgang van de regelaar om in een PWM-signaal dat na versterking aan de motoren kan aangelegd worden.
Deze hardware wordt vanaf hoofdstuk 3 verder in detail besproken. De hardware die in VHDL beschreven wordt met behulp van de Xilinx Integrated Software Environment (ISE), kan als een IP-core aan het embedded systeem worden toegevoegd. De procedure om templates voor een eigen IP-core te genereren, staat in bijlage A beschreven. De procedure om nadien de IP-core aan het embedded systeem toe te voegen, komt aan bod in bijlage B. Een meer uitgebreide beschrijving hierover is te vinden in [4]. De randapparaten die gebruikt worden zijn de Compact Flash poort, het RAM-geheugen, de low-speed expansion connector, de seri¨ele poort en de ethernetpoort.
1.2.2
Softwareplatform
Het Virtex-II Pro Development Board is voorzien van twee 32 bit IBM PowerPC 405 RISCprocessoren. Op ´e´en van deze PowerPC’s draait een real-time Linux kernel met Xenomai architectuur, welke het besturingssysteem van het Virtex-II Pro Development Board vormt. De kernel wordt voorzien van Board Support Packages waarmee hij softwarematig gebruik kan maken van de nodige randapparaten. Omdat we te maken hebben met een FPGAgebaseerd embedded systeem, kan de gebruiker zelf randapparaten toevoegen of verwijderen. Hiervoor moet de gebruiker zelf de Board Support Packages genereren en achteraf samen met de kernel crosscompileren voor de PowerPC architectuur. Crosscompileren wil zeggen dat de code op een computer, met een bepaalde architectuur, gecompileerd wordt voor een systeem met een verschillende architectuur. De kernel met de Board Support Packages en het bitbestand voor de hardwareconfiguratie worden samengebracht in een ACE-bestand wat gekopieerd wordt naar de Compact Flash kaart[5].
1.3
Het gebruik van het embedded systeem en de robot
Figuur 1.5 illustreert het embedded systeem gekoppeld met de Performer MK2 robot. De gebruiker kan met zijn Linux-pc via SSH (Secure SHell) of Cutecom communiceren met het Free Claessens
3
Hoofdstuk 1. Beschrijving van de proefopstelling 1.3. Het gebruik van het embedded systeem en de robot
Figuur 1.3: Het Virtex-II Pro Development Board[2].
systeem en de robot besturen. De DHCP-server (Dynamic Host Configuration Protocol) zorgt er voor dat het Virtex-II Pro Development Board automatisch een IP-adres toegewezen krijgt. De PowerPC is verbonden met de randapparaten via de Processor Local Bus (PLB) of de On-chip Peripheral Bus (OPB). Op deze manier kan het ACE-bestand, bestaande uit de kernel en het bitbestand voor de hardwareconfiguratie, tijdens het opstarten van het systeem, van Compact Flash geladen worden. Het bestandensysteem van de kernel staat op de NFS-server (Network File System) wat het gemakkelijk maakt om in testfase via het netwerk bestanden te wijzigen, toe te voegen of op te vragen. De FPGA is voorzien van een interface naar de PLB- of OPB-bus waarmee commando’s en parameters van de PowerPC naar de hardware gestuurd kunnen worden. Vanuit de FPGA zijn er in- en uitgangen naar de expansion connectors voorzien om de encodersignalen in te
Free Claessens
4
Hoofdstuk 1. Beschrijving van de proefopstelling 1.3. Het gebruik van het embedded systeem en de robot
lezen en de PWM-signalen naar de versterker te sturen. In het blokschema van figuur 1.4 is de controlelus nog eens duidelijk te zien. Aan de hand van de interface kan er data uitgewisseld worden tussen de hardware (decoder, regelaar en PWM-generator) en de software die draait op de PowerPC processor.
Figuur 1.4: Architectuur van het hardware/software co-design.
Free Claessens
5
Hoofdstuk 1. Beschrijving van de proefopstelling 1.3. Het gebruik van het embedded systeem en de robot
Figuur 1.5: Schema van de proefopstelling.
Free Claessens
6
Hoofdstuk 2 Controlelus 2.1 2.1.1
Voorwaartse keten Proportionele positieregelaar
Om de robotas naar zijn gewenste positie te sturen, wordt er een simpele proportionele regelaar of kortweg P-regelaar gebruikt. Figuur 2.1 toont deze P-regelaar in de complete controlelus zoals deze in VHDL ge¨ımplementeerd is.
Figuur 2.1: De controlelus met P-regelaar op de positie.
Het foutsignaal e wordt eenvoudig versterkt met een factor K om het stuursignaal u voor het systeem te genereren. De factor K kan via software naar de regelaar gestuurd worden waardoor deze, tijdens de werking van de regelaar, eenvoudig en snel aangepast kan worden. Het voordeel van een P-regelaar is dat het systeem sneller wordt naarmate K stijgt. Hiertegenover staat dat bij een te grote waarde van K, het systeem te hevig en onstabiel kan worden. Het stuursignaal u moet in verband gebracht worden met de duty cycle van het PWMsignaal waarmee de motoren aangestuurd worden. Dit gebeurd in de PWM-generator (zie sectie 2.1.2), waar het stuursignaal vergeleken wordt met een twaalf bit teller die telt van 7
Hoofdstuk 2. Controlelus
2.1. Voorwaartse keten
nul tot en met 4095. Het blokje “offset” telt het stuursignaal u op bij een vaste waarde van 2047. Op deze manier is het signaal dat naar de PWM-generator gaat, bij een gepositioneerde motor, gelijk aan 2047 waardoor een duty cycle van 50% ontstaat. Dit wil zeggen dat de gemiddelde spanning over de motor gelijk is aan nul. De bounder legt een maximum van 4095 en een minimum van 0 op aan het signaal dat naar de PWM-generator gaat. Het is gekend dat er een evenredig bestaat tussen de spanning op de motorklemmen en de regimesnelheid van de onbelaste motor. De incrementeel optische encoder, die op de as van de motor gemonteerd is, produceert signalen die rechtstreeks in verband staan met de positie van de as. Op deze manier vormt de encoder een integrator waardoor er geen standfout ontstaat tussen de gewenste en de werkelijke positie. Figuur 2.2 illustreert het systeem van de motor en de encoder. In deze figuur stelt M de transferfunctie voor (snelheid ten
Figuur 2.2: Het systeem van de motor en de encoder.
opzichte van spanning) van de motor, de overbrenging en de as van de robot.
2.1.2
PWM-generator
De uitgang van de regelaar is bepalend voor de duty cycle van het PWM-signaal. Dit verband wordt gelegd in de PWM-generator. Figuur 2.3 toont het blokschema van de PWM-generator zoals het ook in VHDL is ge¨ımplementeerd. De uitgang van de regelaar wordt, aan de hand van een comparator, simpelweg vergeleken met een twaalf bit teller die continu telt van nul tot zijn maximumwaarde. Wanneer de tellerwaarde groter of kleiner wordt dan de uitgang van de regelaar, klapt het PWM-signaal om. Op deze manier kunnen we 4096 verschillende duty cycles genereren. Het ingangsregister houdt de waarde van de uitgang van de regelaar vast, bij het begin van elke periode van het PWM-signaal. Figuur 2.4 verduidelijkt deze werking. In de literatuur [6] zijn nog meer methodes te vinden om een PWM-signaal op te wekken. Deze methodes zijn veel complexer maar leveren wel een PWM-signaal op met een veel nauwkeurigere duty cycle. In deze toepassing is deze grote nauwkeurigheid overbodig omdat de gebruikte motoren niet gevoelig genoeg zijn. Hierdoor werd gekozen voor het kleine ontwerp dat weinig plaats inneemt op de FPGA. Het nadeel van de gebruikte methode is wel dat door de teller een grote klokfrequentie nodig is om een PWM-signaal te verkrijgen met een frequentie van ongeveer 20 kHz. Omdat we een FPGA gebruiken geeft dit geen enkel probleem want met een klokfrequentie van 100 MHz is nog een PWM-frequentie van bijna Free Claessens
8
Hoofdstuk 2. Controlelus
2.2. Terugkoppelketen
Figuur 2.3: Blokschema van de PWM-generator.
Figuur 2.4: Weergave van de interne signalen van de PWM-generator.
25 kHz haalbaar. De opgewekte PWM-signalen wordt via een PWM-versterker naar de motoren gestuurd. Deze PWM-versterker wordt besproken in hoofdstuk 4.
2.2
Terugkoppelketen
In de terugkoppelketen of terugkoppeling, van de controlelus in figuur 2.1, bevindt zich de encoderinterface die uitgebreid beschreven wordt in hoofdstuk 3. Deze hardware staat in voor het meten van de positie, snelheid en versnelling van de robotassen. De drie gegevens worden naar de PowerPC gestuurd ter informatie voor de gebruiker. Omdat voorlopig enkel de positie gecontroleerd wordt, zal enkel de data van de positie gebruikt worden in de controlelus.
Free Claessens
9
Hoofdstuk 3 Encoderinterface 3.1
Encoders
De Performer MK2 robotarm is voorzien van incrementeel optische encoders. Het basiswerkingsprincipe van deze encoders is uitgelegd in hoofdstuk ??. Deze sectie gaat dieper in op een aantal belangrijke eigenschappen van deze encoders.
Figuur 3.1: a) Meetkop met twee tegenroosters 90◦ ten opzichte van elkaar verschoven b) Uitgangssignalen[7].
10
Hoofdstuk 3. Encoderinterface
3.2. Blokschema van de interface
Om de positie correct te kunnen meten moeten we ook de richting van de beweging kunnen detecteren. Hiervoor worden er in de meetkop twee fotocellen geplaatst met tegenroosters, die 90◦ ten opzichte van elkaar verschoven zijn. Hierdoor bekomen we ook twee digitale uitgangssignalen die onderling 90◦ verschoven zijn. Figuur 3.1.a toont een richtingsgevoelige meetkop. In figuur 3.1.b zien we dat bij een linksdraaiende motor, signaal A voorijlt op signaal B. Het omgekeerde geldt bij een rechtsdraaiende motor. Bij een meting van de signalen A en B, kan gezegd worden dat de motor links draait tijdens de stijgende flank van signaal B samen met het hoog zijn van signaal A detecteren. Tijdens de stijgende flank van signaal A samen met het hoog zijn van signaal B detecteren, draait de motor rechts. De incrementeel optische encoders van de Performer MK2 robotarm zijn ook voorzien van een indexsignaal I dat een puls geeft na iedere omwenteling. Met de signalen A, B en I van deze incrementele encoders kan berekend worden in welke positie de as zich bevindt en in welke richting ze draait. Het indexsignaal I biedt twee extra voordelen. Ten eerste wordt met behulp van dit signaal de positiemeting na iedere omwenteling van de motor gesynchroniseerd. Ten tweede zorgt dit signaal voor een optimalisatie van de nodige hardware doordat de omwentelingen van de motor appart geteld kunnen worden. Door nu het tijdsaspect in rekening te brengen kunnen we ook de snelheid en versnelling meten. Hiervoor worden enkel de signalen A en B gebruikt. De mogelijkheid bestaat dus om de positie, richting, snelheid en versnelling van de beweging te meten met behulp van drie digitale signalen. In de volgende secties wordt de hardware die hiervoor ontwikkeld is, aan de hand van blokschema’s besproken.
3.2
Blokschema van de interface
Het blokschema in figuur 3.2 illustreert het elektronisch schema dat nodig is voor de berekening van de positie, snelheid en versnelling uit de signalen CHA (CHannel A), CHB (CHannel B) en CHI (CHannel I), komende van de encoder. Dit blokschema wordt in VHDL ge¨ımplementeerd en op de Virtex-II Pro FPGA geprogrammeerd. Er worden vijf verschillende blokken onderscheden: de filters filteren de encodersignalen van spikes, de kwadratuurdecoder decodeert de encodersignalen tot een pulstrein (Pulse Train) en een richtingssignaal (Dir), het positieblok berekent uit deze twee signalen de absolute positie, het snelheidsblok berekent uit de pulstrein de snelheid van de beweging en het versnellingsblok berekent de versnelling.
Deze vijf onderdelen worden in de volgende secties in detail besproken. Het ontwerp van de encoderinterface is gebaseerd op:[8; 9; 10; 11].
Free Claessens
11
Hoofdstuk 3. Encoderinterface
3.3. Ingangsfilters
Figuur 3.2: Blokschema van de encoderinterface.
3.3
Ingangsfilters
De digitale filters zijn verantwoordelijk voor het verwijderen van ruis van korte duur (spikes) in de encodersignalen. Deze spikes zijn typisch voor motortoepassingen zoals bij deze robot en vereisen de nodige aandacht. Het schema van het filter, zoals het ge¨ımplementeerd is in VHDL, wordt getoond in figuur 3.3. Het binnenkomend signaal passeert eerst een vier bit
Figuur 3.3: Schema van het filter tegen spikes.
schuifregister. Het logisch niveau van het signaal wordt hierin vier klokcycli bijgehouden. Het logisch niveau van drie van deze waarden worden getest op stabiliteit. Wanneer deze drie metingen dezelfde waarden geven, wordt de uitgang van het filter hierop aangepast. Wanneer de drie metingen verschillend zijn blijft de uitgang onveranderd. De werking wordt verduidelijkt aan de hand van het simulatievoorbeeld in figuur 3.4. Een belangrijke opmerking hierbij is dat voor een juiste werking van het filter de klokfrequentie minstens drie keer groter moet zijn dan de frequentie van de encodersignalen. Er is duidelijk waar te nemen dat de spikes, zowel bij het hoog als bij het laag zijn van het encodersignaal, weggefilterd worden. Op deze manier worden valse tellingen ten gevolge van ruis vermeden. Een nadeel van dit filter is dat de encodersignalen met vier klokcycli vertraagd worden. Wanneer de klokfrequentie echter veel groter is dan drie keer de frequentie van de encodersignalen, heeft deze vertraging weinig invloed. In dit geval is de klokfrequentie 100 MHz tegenover een maximum frequentie van de encodersignalen van ongeveer 70 kHz. Bij zo een
Free Claessens
12
Hoofdstuk 3. Encoderinterface
3.4. Kwadratuurdecoder
Figuur 3.4: Simulatie van het digitale filter.
groot frequentieverschil dreigt echter ruis van iets langere duur niet meer weggefilterd te worden. Hiervoor moet dan het aantal registers weer vergroot worden.
3.4
Kwadratuurdecoder
De gefilterde encodersignalen A en B worden door de decoder gedecodeerd tot een pulstrein (Pulse Train) en een richtingssignaal (Dir). Deze twee signalen worden gebruikt om uiteindelijk de positie, de snelheid en de versnelling te berekenen. De decodering gebeurt op basis van een toestandsmachine (figuur 3.5) die ge¨ımplementeerd is in VHDL. De tabel in figuur 3.1 verklaart de zes toestanden waarin de toestandsmachine zich kan bevinden. Het idee komt uit [11]. Initieel komt de toestandsmachine in de idle-toestand, waar alle signalen gereset worden. Onmiddelijk daarna volgt de waiting-toestand, waar de toestandsmachine wacht op een geldige waarde van de encodersignalen. Wanneer de toestandsmachine in ´e´en van de vier toestanden 00, 01, 11 of 10 terecht komt, zullen deze toestanden, afhankelijk van de draairichting van de motoren, kloksgewijs of tegen de klok in doorlopen worden. Afhankelijk van de toestand waarin het systeem zich dan bevindt, wordt de pulstrein op nul of ´e´en gezet. Het richtingssignaal wordt gegenereerd op de manier zoals uitgelegd in sectie 3.1. Figuur 3.6 illustreert hoe de pulstrein en het richtingssignaal gegenereerd worden. Op deze figuur kunnen we duidelijk zien dat de resolutie vier maal kleiner wordt wanneer we de positie veranderen op de positieve en de negatieve flank van de pulstrein. reset 1 0 0 0 0 0
CHA x x 0 0 1 1
CHB toestand x idle x waiting 0 00 1 01 1 11 0 10
Tabel 3.1: Toestandstabel van de decoder
3.5
Positie
In het positieblok wordt aan de hand van de pulstrein (Pulse Train), het richtingssignaal (Dir) en het indexsignaal (I) de positie van de robotas afgeleid. Figuur 3.7 toont het blokschema van deze schakeling. Een soortgelijke schakeling wordt beschouwd in [9]. Het positiemeetblok bestaat uit twee tellers: count angle en count revolutions. De teller in count angle verhoogt Free Claessens
13
Hoofdstuk 3. Encoderinterface
3.5. Positie
Figuur 3.5: Toestandsdiagram van de kwadratuurdecoder.
Figuur 3.6: Verband tussen de encodersignalen en de interne signalen Pulse train en Dir in de encoderinterface.
of verlaagt, afhankelijk van het richtingssignaal, op de stijgende en dalende flank van de pulstrein. Bij een puls van het indexsignaal verhoogt of verlaagt de teller in count revolutions en wordt de teller in count angle terug op nul gezet. Op deze manier blijft de positiemeting gesynchroniseerd. Deze methode levert de getallen angle en rev op waarmee we de absolute positie van de robotas kunnen berekenen met formule 3.1. P ositie =
(Rev · m + angle) · θ G
(3.1)
Hierin is m het aantal toestandsveranderingen van de kwadratuurdecoder per omwenteling van de motor. Dit is vier maal het aantal rastersteken van de encoderschijf en is in ons geval gelijk aan 2000. θ is de hoekverplaatsing van de motor per toestandsverandering van de kwadratuurdecoder oftewel ´e´en vierde van de resolutie van de encoderschijf. In ons geval Free Claessens
14
Hoofdstuk 3. Encoderinterface
3.6. Snelheid
Figuur 3.7: Blokschema van het positiecircuit.
2π is dit 2000 . Het symbool G staat voor de overbrengingsverhouding tussen de motor en de robotas.
3.6
Snelheid
3.6.1
Inleiding
In de literatuur vinden we verschillende methodes terug om snelheid te meten. De DCtachometers bijvoorbeeld worden hiervoor al jaren gebruikt. Tegenwoordig kunnen we gebruik maken van programmeerbare logica, bijvoorbeeld een FPGA. Hierdoor kunnen we op een eenvoudige wijze een aanpasbare en herbruikbare schakeling implementeren waarmee we uit de encodersignalen de snelheid van de motoren kunnen berekenen. De volgende vier argumenten tonen aan dat het gebruik van digitale tachometer veel voordelen biedt ten opzichte van de DC-tachometers. Hogere nauwkeurigheid haalbaar. Er is geen A/D-conversie nodig indien er een digitale controller gebruikt wordt. Er is geen onderhoud nodig van de digitale tachometer. Digitale tachometers produceren geen ruis waardoor er geen analoge filters meer gebruikt moeten worden. Natuurlijk hebben we ook alle voordelen van programmeerbare logica met ons mee.
De snelheid wordt berekend met behulp van de pulstrein (Pulse Train) komende van de kwadratuurdecoder. De frequentie van deze pulstrein staat namelijk in verband met de snelheid van de motoren. Er bestaan twee mogelijkheden voor het meten van deze frequentie: We berekenen de snelheid door de tijd te meten gedurende een vast aantal pulsen van de pulstrein. Deze methode wordt de Constant Elapsed Time methode of kortweg time count methode genoemd. Deze methode wordt beschouwd in [9] en [10]. We berekenen de snelheid door het aantal pulsen van de pulstrein te tellen gedurende een vast ingestelde tijd. Deze methode wordt de pulse count methode genoemd. Deze methode wordt beschouwd in [10] en [8]. Free Claessens
15
Hoofdstuk 3. Encoderinterface
3.6. Snelheid
Bij lage snelheden van de motor is het beter om de time count methode te gebruiken. De frequentie van de pulstrein is dan laag waardoor de pulse count methode te traag wordt. Bij deze methode moet er immers gewacht worden alvorens een zeker aantal pulsen verstreken zijn vooraleer er iets berekend kan worden. Bij hoge snelheden is aanbevolen om de pulse count methode te gebruiken. De time count methode wordt hier onnauwkeurig omdat de tijd, waarover gemeten zal worden, te kort wordt. In onze toepassing combineren we deze twee methodes omdat er zowel lage als hoge snelheden van de motor voorkomen. De time count methode wordt gebruikt bij lage en gemiddelde snelheden van de motor. Bij hoge snelheden van de motor wordt de pulse count methode geselecteerd. We gaan dieper in op deze twee methodes in de komende twee secties.
3.6.2
Time count methode
De time count methode doet dienst voor het meten van de lagere en de gemiddelde snelheden van de motor. Het blokschema in figuur 3.8 toont de schakeling die ge¨ımplementeerd is in VHDL. De up counter telt, op de stijgende en dalende flank van de binnenkomende pulstrein,
Figuur 3.8: Time count methode voor het meten van de snelheid.
van nul tot een bepaalde K-waarde. De N-bit counter meet met een teller hoe lang hierover gedaan wordt. Aan de hand van deze tellerwaarde (c value) en K-waarde (K out) wordt met formule 3.2 de snelheid berekend. ωt =
2π · fclk K · G · m c value
(3.2)
Hierin is fclk de 100 MHz klokfrequentie van de FPGA en m het aantal toestandsveranderingen van de kwadratuurdecoder per omwenteling van de motor. G is de overbrengingsverhouding tussen de motor en de robotas. De eerste factor in formule 3.2 kunnen we samenbrengen tot een constante waardoor de berekening beperkt blijft tot ´e´en vermenigvuldiging en ´e´en deling. De tellerwaarde c value wordt teruggekoppeld naar de K calculator. Deze zorgt er voor dat de K-waarde verandert in functie van de tellerwaarde c value. Op deze manier blijven de tijdstippen waarop de snelheidsdata afgeleverd wordt nagenoeg constant en kunnen we over een breed meetbereik nauwkeurige metingen uitvoeren. Het detection signaal detecteert de binnenkomende pulstrein en start de N-bit counter. Aan
Free Claessens
16
Hoofdstuk 3. Encoderinterface
3.7. Versnelling
de hand van het hold signaal kan de N-bit counter aangeven dat zijn interne teller zijn maximumwaarde bereikt heeft en dat de up counter moet wachten op een nieuwe puls van de pulstrein.
3.6.3
Pulse count methode
De pulse count methode wordt gebruikt bij hoge motorsnelheden. Het blokschema in figuur 3.9 toont de schakeling die ge¨ımplementeerd is in VHDL. In een vast tijdsinterval Tc , bepaald
Figuur 3.9: Pulse count methode voor het meten van de snelheid.
door de timer, worden de binnenkomende pulsen van de pulstrein geteld in de PT-counter. Als m gelijkgesteld aan het aantal toestandsveranderingen van de kwadratuurdecoder per omwenteling van de motor, kan met formule 3.3 de snelheid in radialen per seconde berekend worden. 2π · Cm (3.3) ωp = G · m · Tc Hierin is Cm het aantal getelde pulsen. Om een betere nauwkeurigheid te bekomen wordt er zowel op de positieve als op de negatieve flank van de pulstrein geteld. Cm komt overeen met het signaal PT C value in het blokschema. Ook hier is G de overbrengingsverhouding tussen de motor en de robotas. De eerste factor in formule 3.3 kunnen we samenbrengen tot een constante (pulse count constant) waardoor de berekening beperkt blijft tot ´e´en vermenigvuldiging.
3.7
Versnelling
Het versnellingsblok biedt de mogelijkheid om rechtstreeks vanuit de encoderpulsen de versnelling van de as van de robot te berekenen. Dit berust op het principe van de pulse count methode bij de snelheidsmeting. In een vast tijdsinterval Tc , bepaald door de timer, worden de binnenkomende pulsen van de pulstrein geteld in de PT-counter. Door deze data op te slaan in een schuifregister van twee registerplaatsen kan aan de hand van formule 3.4 de versnelling berekend worden aan de hand van het verschil tussen de getelde pulsen. a=
2π · (data current − data previous) G · m · Tc2
(3.4)
Hierin is data current het huidig aantal getelde pulsen en data previous het vorig aantal getelde pulsen van de pulstrein. Ook hier is G de overbrengingsverhouding tussen de motoren de robotas. De eerste factor in formule 3.4 kan samengebracht worden tot een constante (acceleration constant) waardoor de berekening beperkt blijft tot ´e´en aftrekking en ´e´en vermenigvuldiging. Free Claessens
17
Hoofdstuk 3. Encoderinterface
3.8. Berekenen van positie, snelheid en versnelling
Figuur 3.10: Methode voor het meten van de versnelling.
3.8
Berekenen van positie, snelheid en versnelling
De voorgaande hardware-implementaties waren telkens voorzien van een rekeneenheid waar de formules 3.1, 3.2, 3.3 en 3.4 uitgerekend werden. Om een voldoende nauwkeurige berekening uit te kunnen voeren, zijn we hierbij genoodzaakt om met rationale getallen te werken. In het binaire talstelsel, dat gebruikt wordt binnen de FPGA, vinden we hiervoor twee datatypes: het floating point en het fixed point datatype. De volgende secties verklaren het gebruik van deze twee datatypes en ondersteunen de keuze van het fixed point datatype.
3.8.1
Floating point datatype
De IEEE-754 standaard voor floating point getallen is de meest gebruikte representatie voor re¨ele getallen op computerplatformen. De single precision binaire floating point representatie bestaat uit 32 bits en wordt weergegeven in figuur 3.11. We herkennen hierin de tekenbit,
Figuur 3.11: 32 bit binaire floating point representatie.
de exponentbits en de mantisse. Tekenbit s De tekenbit geeft aan of het getal positief of negatief is. Een binaire nul staat voor positieve en een binaire ´e´en staat voor negatieve getallen. Exponentbits e De exponentbits, bestaande uit acht bits, worden gebruikt om de komma naar links of naar rechts te verschuiven. Om dit mogelijk te maken wordt er een bias met decimale waarde 127 toegevoegd. Wanneer de acht exponentbits een decimale waarde van 120 voorstellen, dan wordt de komma zeven plaatsen naar links verschoven. Bij een voorstelling van bijvoorbeeld 133, wordt de komma zes plaatsen naar rechts verschoven. Free Claessens
18
Hoofdstuk 3. Encoderinterface
3.8. Berekenen van positie, snelheid en versnelling
Mantisse m De mantisse of significant bestaat uit 23 bits. Deze stellen de uiteindelijke bits van het getal voor en zijn bepalend voor de precisie. V´o´or deze 23 mantisse bits staat een denkbeeldige bit die altijd als een binaire ´e´en beschouwd moet worden. Deze denkbeeldige bit is noodzakelijk om dubbelzinnigheid te voorkomen. Zonder deze denkbeeldige bit zouden er immers meerdere voorstellingen bedacht kunnen worden voor ´e´enzelfde getal. Met deze drie gegevens kunnen we met formule 3.5 de decimale waarde v bepalen. v = s · 2e−127 · m
(3.5)
Voor het voorbeeld in figuur 3.11 geldt dus: v = s · 2e−127 · m = 1 · 2124−127 · 0.101b = 0.00101b = 0.15625d
3.8.2
(3.6)
Fixed point datatype
Voor het fixed point (vaste komma) datatype is er geen algemene standaard. In VHDL is er wel een fixed point bibliotheek (fixed pkg c.vhdl[12]) voorzien die vanaf de Xilinx ISE 9 gebruikt kan worden. Hierbij geldt de representatie van figuur 3.12 waarbij het aantal bits voor en na de komma (M en N) vrij te kiezen zijn. Het decimale getal 0.15625 zouden we
Figuur 3.12: Binaire fixed point representatie.
bijvoorbeeld kunnen voorstellen zoals in figuur 3.13.
Figuur 3.13: Binaire fixed point representatie van het decimale getal 0.15625.
3.8.3
Keuze van het datatype
In deze sectie worden kort de voor- en nadelen van beide types opgesomd zodat duidelijk wordt waarop de keuze gebaseerd is. De software van Xilinx biedt de mogelijkheid om voorgeprogrammeerde floating point IP cores in te voegen in het FPGA-ontwerp waarmee alle berekeningen uitgevoerd kunnen Free Claessens
19
Hoofdstuk 3. Encoderinterface
3.8. Berekenen van positie, snelheid en versnelling
worden. Op deze manier kunnen we zeer eenvoudig gebruik maken van het floating point datatype. Bij het floating point datatype is het mogelijk om zelfs z´e´er kleine getallen met een enorme precisie voor te stellen. In deze toepassing heeft een grote nauwkeurigheid, door mechanische beperkingen in de robot, weinig zin. Een ander voordeel van het gebruik van floating point getallen is dat deze representatie herkend wordt als een algemene standaard (IEEE-754). Dit wil zeggen dat deze getallen zonder moeite in software uitgelezen kunnen worden. Tenslotte komen we bij het doorslaggevende nadeel van floating point. Nadat de hardware voor de positiemeting, met behulp van floating point getallen, ge¨ımplementeerd was op de FPGA, bleek dat er al 18% van de beschikbare ruimte van de FPGA besteed werd aan dit meetblok. Als we in gedachten houden dat er ook nog snelheid en versnellingen gemeten moet worden, en dit voor alle assen van de robot, zou zelfs ´e´en FPGA te kort komen. Na deze waarnemingen zijn we begonnen met experimenten met het fixed point datatype. In VHDL is er een bibliotheek[12] beschikbaar waarmee we met het fixed point datatype berekeningen kunnen uitvoeren. Hiermee kan zelf gekozen worden uit hoeveel bits de fractie bestaat waardoor er toch nog een ruim voldoende nauwkeurigheid haalbaar is. Tijdens de synthese van de VHDL-code botste we op het probleem dat de deling van twee variabele grootheden niet mogelijk was met deze bibliotheek. Dit probleem werd opgelost door een voorgeprogrammeerde Xilinx core te gebruiken. Dit blokje voert een deling van twee nietkomma getallen uit en heeft een fixed point getal als resultaat. Indien de deler of deeltal een kommagetal, is moet hiervan eerst de komma verschoven worden alvorens de deling uitgevoerd kan worden. Op deze manier blijft de nauwkeurigheid behouden. Een nadeel van het fixed point datatype is dat het geen algemene standaard is. Hiervoor moeten er dus in de software een aantal berekeningen uitgevoerd worden om deze getallen juist uit te lezen en door te sturen naar de hardware. Nadat het positiemeetblok, met behulp van fixed point getallen, uitgetest was op de FPGA, bleek dat er ongeveer 2% van de beschikbare ruimte besteed was aan dit meetblok. Het gebruik van fixed point getallen is dus een aanvaardbare keuze. Tabel 3.2 zet alle argumenten nog eens op een rij. floating point fixed point zeer grote nauwkeurigheid gekozen nauwkeurigheid gebruiksvriendelijk in VHDL gebruiksvriendelijk in VHDL alle bewerkingen mogelijk deling niet mogelijk met ISE synthesize tool IEEE standaard geen IEEE standaard neemt veel FPGA-ruimte in beslag neemt weinig FPGA-ruimte in beslag Tabel 3.2: Voor- en nadelen van floating point en fixed point getallen
Free Claessens
20
Hoofdstuk 4 PWM-versterker 4.1
Algemene beschrijving van de versterker
De PWM-signalen, opgewekt in de FPGA, moeten versterkt worden alvorens ze aan de motoren aangelegd kunnen worden. Hiervoor is een PWM-versterker gebouwd, welke bestaat uit drie grote delen: een H-brug met de Phillips PHP21N06LT MOSFETs [13], een Intersil HIP4081A H-brug driver [14], een ingangscircuit met de HCPL2602 optocouplers [15].
4.1.1
H-brug
Het principe van een H-brug is vrij eenvoudig en wordt uitgelegd aan de hand van figuur 4.1. Wanneer de FET’s T1 en T4 in geleiding zijn en de FET’s T2 en T3 in sper, zal de stroom van links naar rechts door de motor vloeien waardoor hij in de ene richting zal draaien. In het andere geval, wanneer T2 en T3 in geleiding zijn en T1 en T4 in sper, zal de stroom van rechts naar links vloeien waardoor de motor in de andere richting draait. Wanneer we dit doen aan een frequentie van ongeveer 20 kHz zal bij een duty cycle van 50% de gemiddelde spanning over de motor nul zijn waardoor de motor stilstaat. Bij een duty cycle groter dan 50% wordt de gemiddelde spanning groter dan nul en zal de motor draaien. Hetzelfde geldt bij een duty cycle lager dan 50%, het enige verschil is dat de motor in de andere richting zal draaien. We moeten er dus voor zorgen dat het paar T1-T4 in geleiding is als het paar T2-T3 in sper is. Wanneer we aan het paar T1-T4 een PWM-signaal van ongeveer 20 kHz aanleggen, dan moeten we aan het paar T2-T3 het ge¨ınverteerde PWM-signaal aanleggen. De diodes die in anti-parallel staan met de FET’s dienen voor de energie van de zelfinductiespanning, die ontstaat bij het afschakelen van een paar FET’s, af te voeren naar de voeding. Wanneer bijvoorbeeld T1 en T4 uit geleiding gaan zal de stroom dalen. De spoel van de motor verzet zich hier tegen met een inductiespanning die zal trachten de stroom te behouden. Op dit moment zullen de vrijloopdiodes D2 en D3 in geleiding gaan om deze energie naar de voeding af te voeren. Hierna zullen dan weer de FET’s T2 en T3 in geleiding gaan. We kunnen dus besluiten dat we door middel van een H-brug een versterkt PWM-signaal over de motor krijgen.
21
Hoofdstuk 4. PWM-versterker
4.2. H-brug driver
Figuur 4.1: Principe van de H-brug.
4.2 4.2.1
H-brug driver Doel van de driver
Door het snel schakelen tussen de FET-paren kan het zijn dat de energie van de inductiespanning nog niet volledig verdwenen is. Hierdoor kan er, net voor het aanschakelen, nog een spanning aanwezig zijn op de source van een van de bovenste FET’s. Wanneer een van deze bovenste FET’s dan aangestuurd wordt, volstaat de spanning op de gate niet om de FET te doen geleiden. Als bijvoorbeeld D2 en D3 de energie van de inductiespanning aan het afvoeren zijn en het paar T2-T3 wordt aangestuurd, zal op de source van T2 nog een bepaald spanning aanwezig zijn. De meest eenvoudige oplossing hiervoor is de bovenste FET’s te vervangen door P-CHANNEL FET’s. Het grote nadeel hiervan is dat P-CHANNEL FET’s minder goede eigenschappen (vooral timing karakteristieken) hebben dan N-CHANNEL FET’s. Ik heb daarom gekozen om een H-brug driver te gebruiken, de HIP4081A van Intersil, die dit probleem ook oplost. Hierdoor blijft de H-brug bestaan uit vier dezelfde N-CHANNEL FET’s. Figuur 4.2 geeft het principeschema weer van de HIP4081A in combinatie met een H-brug.
4.2.2
Werkingsprincipe
Om de bovenste helft van de H-brug aan te sturen wordt er een combinatie van bootstrap- en charge-pumping technieken gebruikt. De bootstrap techniek zorgt voor een grote momentane stroom die nodig is om de FET’s snel in geleiding te brengen. De charge-pump zorgt ervoor dat de biasspanning voor de bovenste FET’s behouden blijft, zodat ze niet langzaam uit geleiding kunnen gaan. Deze twee technieken worden gerealiseerd met een bootstrap circuit bestaande uit een diode en een condensator. Figuur 4.3 toont het bootstrap circuit voor
Free Claessens
22
Hoofdstuk 4. PWM-versterker
4.2. H-brug driver
Figuur 4.2: Principeschema van een mogelijke toepassing[16].
Figuur 4.3: Het bootstrap circuit[16].
kant A van de H-brug. Wanneer de FET niet moet geleiden kan de condensator opladen via de diode. Wanneer de overeenkomende ingang voor een van de bovenste FET’s hoog wordt, wordt de lading in de condensator ongeveer helemaal overgedragen naar de gate-source capaciteit van de FET waardoor deze in geleiding gaat. De ingang AHS meet de spanning die nog aanwezig is op source van de bovenste FET’s. De grootte van de bootstrap condensator moet ongeveer tien maal groter zijn dan de gate-source capaciteit van de FET’s. Bij een te kleine condensator zal de spanning over de condensator te veel in elkaar zakken wanneer de FET in geleiding moet gaan. Hierdoor zal de gate langzamer opladen waardoor het langer duurt vooralleer de FET werkelijk in geleiding is. Bij een te grote capaciteit zal de gate-source capaciteit overladen worden waardoor het langer duurt vooralleer de FET uit geleiding moet gaan. Dit kan leiden tot een shoot-trough. Een shoot-trough treedt op wanneer zowel de bovenste als de onderste FET van eenzelfde kant van de brug in geleiding
Free Claessens
23
Hoofdstuk 4. PWM-versterker
4.3. Inputcircuit
gaan. Dit is eigenlijk een kortstondige kortsluiting van de voeding die de FET’s en de driver kunnen beschadigen. Bij gebruik van FET’s meet een grote gate-source capaciteit dient de basisweerstand voldoende groot te zijn om het IC niet te beschadigen.
4.3
Inputcircuit
Uit de FPGA komen twee identieke PWM-signalen die ge¨ınverteerd zijn ten opzichte van elkaar. Deze signalen hebben een maximum niveau van 2.5 V terwijl het driver-IC een niveau van 5 V verwacht. Dit probleem is opgelost door een level-shifter met behulp van een HCPL2602 optocoupler die zorgt voor deze conversie. Deze optocoupler zorgt daarbij nog voor een galvanische scheiding tussen het I/O-circuit van de FPGA en de vermogenschakeling. Deze galvanische scheiding vermijdt dat ruis de correcte werking van het driver-IC verstoort en beschermt de IO-circuits van de FPGA ten opzichte van het vermmogencircuit. Figuur 4.4 toont het schema van deze schakeling. De HCPL2602 beschikt aan de ingang over een interne stroomregeling. Deze interne regeling zorgt er voor dat er een typische stroom van 8.5 A door de led vloeit. De overige stroom wordt via transistor T1 weggevoerd. De uitgang van de optocoupler is zoals gewoonlijk voorzien van een open collector. Hiermee verbinden we een pull-up weerstand van 470 Ω naar de voeding. Op deze manier bekomen we een uitgangsspanning die schakelt tussen 0V en 5V. Voor meer informatie over deze optocoupler wordt verwezen naar de datasheet[15].
Figuur 4.4: Schema van de level-shifter + intern schema van de HCPL2606 optocoupler.
4.3.1
Totale schema
De ingangen van de driver zijn AHI, ALI, BHI en BLI. De overeenkomende uitgangen zijn AHO, ALO, BHO en BLO. De disable pin (DIS) moet aan grond hangen om het IC in werking te stellen. De optionele weerstanden R1 tot R4 in de basis van elke FET zorgen ervoor dat de FET’s Free Claessens
24
Hoofdstuk 4. PWM-versterker
4.4. Realisatie van het Print Circuit Board
iets trager in geleiding gebracht worden. Dit kan een shoot-trough vermijden als een FET, uit hetzelfde been van de H-brug, nog in geleiding is. De potentiometers P1 en P2 (elk 500 kΩ, ingesteld op 100 kΩ) naar de ingangspinnen HDEL en LDEL dienen voor de laag-naar-hoog- en hoog-naar-laag-vertraging in te stellen. Deze vertraging zorgt voor een dode tijd tussen het omschakelen van de FET-paren waardoor een shoot-trough voorkomen wordt. Figuur 4.5 geeft het verband tussen de weerstandwaarde en de dode tijd weer. Tenslotte zorgen de condensatoren C3 tot C5 voor een zeer belangrijke ontkoppeling van de voeding. Voor een uitgebreide beschrijving van deze schakeling wordt verwezen naar
Figuur 4.5: Verband tussen de weerstandwaarde en de dode tijd[16].
application note 9405 van Intersil[16].
4.4
Realisatie van het Print Circuit Board
Met de studentenversie van het softwarepakket EAGLE is een layout getekend voor de PWMversterker. Vervolgens is er aan de hand van deze layout een PCB gefreesd waarop alle componenten gesoldeerd werden. Figuur 4.7 toont de layout zoals deze getekend is in EAGLE. Met de studentenversie is het enkel mogelijk om enkelzijdige PCB’s te ontwerpen. Figuur 4.8 toont het bestukte PCB.
Free Claessens
25
Hoofdstuk 4. PWM-versterker
4.4. Realisatie van het Print Circuit Board
Figuur 4.6: Totale versterker.
Free Claessens
26
Hoofdstuk 4. PWM-versterker
4.4. Realisatie van het Print Circuit Board
Figuur 4.7: Layout van het PCB van de PWM-versterker.
Figuur 4.8: De PWM-versterker.
Free Claessens
27
Hoofdstuk 4. PWM-versterker
4.5
4.5. Invloed van de PWM-sturing op het meetsysteem van de encoders
Invloed van de PWM-sturing op het meetsysteem van de encoders
De PWM-signalen aan de motoren van de robot zorgen voor een stoorsignaal (schakelruis) in het meetsysteem van de encoders. Deze stoorsignalen worden opgevangen in de kabel die de encoders verbindt met de FPGA-ingangen. In figuur 4.9 is duidelijk te zien dat deze stoorsignalen kunnen oplopen tot meer dan 2 V. Deze 2 V is meer dan het niveau (1.5 V) dat de FPGA ziet als een logische ´e´en. Op deze manier worden de metingen van positie, snelheid en versnelling verstoord.
Figuur 4.9: Stoorsignaal in het meetsysteem van de encoders.
4.5.1
Equivalent schema van het meetsysteem
Aan de hand van het equivalent schema van het meetsysteem wordt duidelijk hoe het stoorsignaal ge¨elimineerd kan worden door het plaatsen van een serieweerstand R. Het theorema van Norton stelt dat elk netwerk bestaande uit lineaire impedanties en spanningsbronnen, voorgesteld kan worden door een equivalente schakeling bestaand uit een stroombron iN in parallel met een impedantie Zn . Dit is weergegeven in figuur 4.10. Hierin is ZN de impedantie tussen de uitgangsklemmen wanneer alle spanningsbronnen herleid worden tot nul en vervangen worden door hun inwendige weerstand. iN is de stroom die vloeit bij kortgesloten uitgangsklemmen. Voor de encoders gelden de volgende waarden die experimenteel bepaald kunnen worden: ZN = 1 Ω en iN = 4.59 A. De ingangsimpedantie van de ingangen van de FPGA is ongeveer Free Claessens
28
Hoofdstuk 4. PWM-versterker
4.5. Invloed van de PWM-sturing op het meetsysteem van de encoders
Figuur 4.10: Norton equivalent.
gelijk aan 2 MΩ en de weerstand Rk van de kabel is ongeveer 1 Ω. Met deze gegevens kan het equivalent schema van het meetsysteem opgesteld worden, zie figuur 4.11. De stroom
Figuur 4.11: Equivalent schema van het meetsysteem van de encoders.
door de ingangsimpedantie van de FPGA kan opgesplitst worden in een stroom i ten gevolge van de encoder(zie formule 4.1) en een stroom iSM ten gevolge van de verschilmodespanning VSM of het stoorsignaal (zie formule 4.2): i = iN ·
ZN ZN + Rk + ZL + R
VSM ZN + Rk + ZL + R De totale spanning VL over de ingangsimpedantie van de FPGA is dan: iSM =
VL = i · ZL + iSM · ZL = iN · ZL ·
(4.1) (4.2)
ZN ZL + VSM · ZN + Rk + ZL + R ZN + Rk + ZL + R
Hierin zijn ZN en Rk verwaarloosbaar ten opzichte van ZL en R waardoor de volgende vergelijking bekomen wordt: VL = iN ·
ZL ZL + VSM · ZL + R ZL + R
Door een serieweerstand R van ongeveer 1 MΩ te plaatsen zal de invloed van de stoorspanning verkleind worden. Figuur 4.12 toont de verlaagde stoorspanning.
Free Claessens
29
Hoofdstuk 4. PWM-versterker
4.5. Invloed van de PWM-sturing op het meetsysteem van de encoders
Figuur 4.12: Stoorsignaal in het meetsysteem van de encoders na het plaatsen van een serieweerstand.
Free Claessens
30
Hoofdstuk 5 Meetresultaten 5.1
Encoderinterface
Deze sectie geeft de meetresultaten van de encoderinterface, meer bepaald de meting van positie, snelheid en versnelling van de as van de robot, grafisch weer. De drie gegevens worden in software weggeschreven naar een file. Deze file wordt ingeladen in MATLAB waar de gegevens verwerkt worden. Het aanleggen van een snelheidsstap resulteerde in figuur 5.1, die de meting van de positie weergeeft. Figuur 5.2 geeft de snelheid op basis van de pulse count en time count methode. De versnelling die hoort bij deze metingen wordt weergegeven in figuur 5.2. Vervolgens werd er een willekeurig snelheidspatroon aangelegd. De figuren 5.4, 5.5 en 5.6 geven hierbij de positie, de twee snelheden en de versnelling weer. In figuur 5.5 worden de time count methode en de pulse count methode, die beide instaan voor het meten van snelheid, met elkaar vergeleken. Doordat we de K-waarde in de time count methode onbeperkt laten stijgen, zal deze methode geen nauwkeurigheid verliezen. Hierdoor is de time count methode over het volledige meetbereik bruikbaar.
5.2
Controlelus
Het gebruik van een controlelus met P-regelaar moet het systeem sneller maken. Concreet wil dit zeggen dat de dominante tijdsconstante van het de gesloten lus kleiner moet zijn dan de tijdsconstante van de open lus. De tijdsconstante van de motor, inclusief overbrenging en de as van de robot, wordt expirimenteel bepaald. Na het aanleggen van een snelheidsstap wordt de snelheidsdata verwerkt met MATLAB. In figuur 5.7 kunnen we de tijdsconstante van de grafiek aflezen als de snelheid aan 63% van zijn eindwaarde gekomen is. Hiervoor wordt het volgende resultaat gevonden: τm = 18.3 ms. Het verband Km tussen de regimesnelheid van de onbelaste motor en de aangelegde spanning is gelijk aan 5.4. Dit wil zeggen dat de snelheid met 1 rad/s stijgt per 5.4 V op de klemmen van de motor. Hiermee kan het systeem met een eerste orde transferfunctie (zie formule 5.1) benaderd worden. 1
1 snelheid v Km 5.4 = = T ransf erf unctie M = spanning U 1 + τm s 1 + 18.3s
31
(5.1)
Hoofdstuk 5. Meetresultaten
5.2. Controlelus
Na het sluiten van de controlelus werd er een positiestap aangelegd. Via software werd de gewenste positie van 10 rad doorgestuurd naar de controlelus in hardware. De controlelus regelt de positie van de as van de robot op 10 rad. TIjdens deze test werden de positie, snelheid en versnelling van de as van de robot gemeten en opgeslaan. Deze gegevens werden verwerkt in MATLAB. Dit resulteerde in de figuren 5.8, 5.10 en 5.10. In figuur 5.11 wordt de tijdsconstante van het gesloten systeem experimenteel bepaald. Hiervoor wordt het volgende resultaat gevonden: τm = 16.0 ms.
Figuur 5.1: Grafische weergave van de positiemeting bij het aanleggen van een snelheidsstap.
Free Claessens
32
Hoofdstuk 5. Meetresultaten
5.2. Controlelus
Figuur 5.2: Grafische weergave van de snelheid bij het aanleggen van een snelheidsstap.
Figuur 5.3: Grafische weergave van de versnelling bij het aanleggen van een snelheidsstap.
Free Claessens
33
Hoofdstuk 5. Meetresultaten
5.2. Controlelus
Figuur 5.4: Grafische weergave van de positiemeting bij het aanleggen van een willekeurig snelheidspatroon.
Figuur 5.5: Grafische weergave van de snelheid bij het aanleggen van een willekeurig snelheidspatroon.
Free Claessens
34
Hoofdstuk 5. Meetresultaten
5.2. Controlelus
Figuur 5.6: Grafische weergave van de versnelling bij het aanleggen van een willekeurig snelheidspatroon.
Figuur 5.7: Bepaling van de tijdsconstante van de motor inclusief overbrenging en as van de robot.
Free Claessens
35
Hoofdstuk 5. Meetresultaten
5.2. Controlelus
Figuur 5.8: Grafische weergave van de positiemeting bij het aanleggen van een positiestap.
Figuur 5.9: Grafische weergave van de snelheid bij het aanleggen van een positiestap.
Free Claessens
36
Hoofdstuk 5. Meetresultaten
5.2. Controlelus
Figuur 5.10: Grafische weergave van de versnelling bij het aanleggen van een positiestap.
Figuur 5.11: Bepaling van de tijdsconstante van het gesloten lus systeem.
Free Claessens
37
Hoofdstuk 6 Besluit Het doel van deze masterproef was het ontwerpen van een motorsturing voor een industri¨ele robot op basis van een hardware/software co-design. Hiervoor wordt gebruik gemaakt van een embedded systeem bestaande uit een Virtex-II Pro FPGA, een PowerPC processor en een aantal randapparaten. De controlelus voor de motor van de robot wordt aan hoge snelheid op de FPGA uitgevoerd. De PowerPC wordt ten eerste gebruikt om referentiewaarden en parameters voor deze controlelus online door te sturen naar de hardware. Deze eigenschap maakt het platform gebruiksvriendelijk en uitwisselbaar tussen gelijkaardige machines. Een tweede taak van de PowerPC is de communicatie met de randapparaten van het embedded systeem waarop de sturing draait. De gebruiker kan bijvoorbeeld via Ethernet inloggen op de PowerPC en het systeem besturen. Tijdens het ontwerpen werd er steeds gestreefd naar een minimale gebruik van de beschikbare ruimte op de FPGA. Door bij alle berekeningen gebruik te maken van het fixed point datatype in plaats van het floating point datatype werd er veel ruimte uitgespaard. Het gebruik van het floating point datatype zou er toe leiden dat ´e´en Virtex-II Pro FPGA nauwelijks voldoende is voor het aansturen van ´e´en as van de robot. Door de berekeningen in fixed point uit te voeren zou er nog ruimte over moeten zijn wanneer de vijf assen van de robot aangestuurd worden. Door de FPGA-architectuur kunnen op een flexibele manier bijkomende sensoren zoals afstands-, kracht-, of visiesensoren geinterfaced worden. Hierbij wordt echter verwacht dat de resterende ruimte op de Virtex-II Pro FPGA onvoldoende zal zijn. Er moet dus ofwel een grotere FPGA aangekocht worden ofwel kan een tweede FPGA gebruikt worden die bijvoorbeeld via Ethernet communiceert met de andere FPGA. Om voldoende vermogen te leveren aan de motor van de robot werd gekozen om zelf een vermogensturing te bouwen die de PWM-signalen, komende uit de FPGA, versterkt. Deze versterker heeft beperkte mogelijkheden in vergelijking met commerci¨ele vermogentrappen. Het prijsverschil was echter doorslaggevend om zelf een vermogensturing te bouwen. De keuze om een PWM-sturing te maken in plaats van een lineaire spanningssturing heeft zowel voordelen als nadelen met zich meegebracht. Een PWM-motorsturing is energieeffici¨enter en levert een meer stabiele spanning aan de motor. Hiernaast was er geen Digital to Analogue Converter (DAC) nodig tussen de FPGA en het PCB van de vermogensturing. De digitale PWM-signalen van de FPGA kunnen immers rechtsreeks aangesloten worden
38
Hoofdstuk 6. Besluit
op de optocouplers, die het ingangscircuit van de vermogensturing vormen. Het nadeel van een PWM-sturing is dat het voor veel schakelruis zorgt in het meetsysteem van de encoders waardoor de positie-, snelheids- en versnellingsmetingen verstoord worden. Hiervoor is er van dit spanningsmeetnetwerk een stroommeetnetwerk gemaakt waarbij storingen minder invloed hebben. De hardware voor een Xilinx FPGA, die in deze masterproef gebruikt werd, moet ontworpen worden met de Integrated Software Environment (ISE) en de Embedded Development Kit (EDK) van Xilinx. Deze softwarepaketten automatiseren het ontwerpproces waardoor veel tijd uitgespaard wordt. Het grote nadeel van deze softwarepaketten is dat het gesloten software is. Dit wil zeggen dat de ontwikkelaars de broncode van de software niet kunnen aanpassen om eventuele fouten in de software op te lossen. Er kan hiervoor enkel gerekend worden op de zwakke ondersteuning van Xilinx die meestal aanraadt om een nieuw service pack te installeren of over te schakelen naar de nieuwste versie. Op deze manier worden ontwikkelaars door Xilinx gebruikt als testbank voor hun software. Hierbij bestaat nog de kans dat in de nieuwste bepaalde IP-cores niet meer vrij te gebruiken zijn. Zo is in de ISE 9.2 de Ethernet-core betalend geworden en wordt het Virtex-II Pro development board niet ondersteund. Op deze manier kan er veel tijd verloren worden om de juiste versie van de ISE en de EDK te vinden.
Free Claessens
39
Hoofdstuk 7 Toekomstwerk Gedurende deze masterproef zijn er heel wat onvoorziene problemen komen opdagen. Problemen zoals schakelruis, vanwege de PWM-vermogensturing, die de metingen verstoorde, de omschakeling van het floating point datatype naar het fixed point datatype en alle bugs in de ISE en EDK die opgelost moesten worden, hebben elk hun nodige tijd opge¨eist. Hierdoor zijn er een aantal zaken die niet aan bod zijn gekomen. De regelaar, die de beweging van de robot moet controleren op positie en snelheid, moet nog verder uitgebreid worden. Momenteel wordt er enkel geregeld op positie met behulp van een simpele P-regelaar. In de toekomst moet er een extra controlelus voorzien worden die de snelheid van de beweging controleert. Er dient nog nader onderzocht te worden hoe het regelsysteem precies uitgebreid moet worden. Ook de homing procedure is nog niet aan bod gekomen. Deze procedure, die noodzakelijk is vanwege de incrementeel optische encoders waarmee de robot uitgerust is, doet iedere as van de robot naar zijn referentiepositie bewegen. Elke as van de robot is hiervoor voorzien van een extra signaal dat naar nul getrokken wordt als de as zich in zijn referentiepositie bevindt. De homing procedure kan in software of in hardware ge¨ımplementeerd worden. Wanneer deze taken voltooid zijn, kan de sturing uitgebreid worden voor elke as van de robot. Vanwege de hoge frequentie waarmee de regelaar uitgevoerd wordt, kan overwogen worden om de regelaar te multiplexen. Op deze manier is er maar ´e´en regelaar nodig voor alle assen van de robot en wordt er ruimte op de FPGA bespaard. Wanneer de volledige robot aangestuurd wordt, dient de Kinematics and Dynamics Library (KDL) van de Open RObot COntrol Software (OROCOS) ge¨ınstalleerd te worden op de PowerPC. Deze bibliotheek berekent de onderlinge beweging van de assen van de robot als er naar een bepaalde positie in de ruimte gestuurd wordt. Dankzij de FPGA-architectuur kunnen op een flexibele manier bijkomende sensoren, zoals afstands-, kracht- en visiesensoren ge¨ınterfaced worden. Hiermee kan dan verder onderzoek gedaan worden naar servosystemen gebaseerd op deze sensoren. De bestaande interfacekaarten voor onder andere de krachtsensor, die werkt met behulp van rekstrookjes, moeten hiervoor gehacked worden zodat een algoritme ontworpen kan worden in VHDL. Dit algoritme moet dezelfde signalen genereren als de data-acquisitiekaarten van de krachtsensor. Op deze manier kunnen de kostelijke interfacekaarten vervangen worden.
40
Hoofdstuk 7. Toekomstwerk
Een visiesensor of camera kan op een veel eenvoudigere manier ge¨ınterfaced worden met de FPGA. Er kan hiervoor gebruikt gemaakt worden van het Video DECoder board (VDEC1), welk speciaal ontworpen is voor het Virtex-II Pro development board. Deze kaart converteert standaard analoge video signalen naar digitale signalen. Via de high speed expansion connectors kunnen deze digitale signalen uitgelezen en op de FPGA verwerkt worden.
Free Claessens
41
Bibliografie [1] I. XILINX, “Xilinx xup virtex-ii pro development system,” on line, http://www.xilinx. com/univ/xupv2p.html, 2008. [2] I. DIGILENT, “Virtex-ii pro development system,” on line, http://www.digilent.com/ xupv2p, 2008. [3] S. DE LA HAYE and S. KAUFFMANN, “Real-time applicatie op een fpga,” Master’s thesis, Katholieke Hogeschool Limburg, 2007. [4] I. XILINX, “Edk concepts, tools and techniques,” on line, http://www.xilinx.com/ support/documentation/sw manuals/edk91i ctt.pdf, 2007. [5] S. KAUFFMANN, “Installation procedure for linux on http://users.telenet.be/steven.kauffmann/installation/index.htm.
a
virtexii-pro,”
[6] E. Koutroulis, “High-frequency pulse width modulation implementation using fpga en cpld ics,” Journal of Systems Architecture 52(2006) 332-344, 2006. [7] J. BAETEN, “Opto elektrische sensoren,” on line, http://www.khlim.be/∼jbaeten, 2006. [8] G. Young, “How to use fpgas for quadrature encoder-based motor applications,” on line, http://www.pldesignline.com/howto/201805465, 2007. [9] F. BARRERO, “Design of a high precision digital tachometer for speed and position measurement,” Design of Circuits and Integrated Systems Conference DCIS´00. Montpellier. Frankrijk., 2000. [10] E. Galv´an, “Asic implementation of a digital tachometer with high precision in a wide speed range,” IEEE transactions on industrial electronics, vol. 43, no. 6., December 1996. [11] B. H´ebert, “A high efficiency interface for a biphase incremental encoder with error detection,” IEEE transactions on industrial electronics, vol. 40, no. 1., Februari 1993. [12] D. BISHOP, “Vhdl-2006 packages,” vhdl-200x-ft/packages/files.html, 2008.
on line,
http://www.eda.org/vhdl-200x/
[13] “Phillips php21n06lt mosfet specificaties,” on line, http://www.nxp.com/acrobat download/datasheets/PHB PHD PHP21N06LT 4.pdf, 2008. [14] “Intersil hip4081 h-brug driver application note,” on line, http://www.intersil.com/ data/an/an9405.pdf, 2008. 42
[15] “Hcpl2602 optocoupler specificaties,” on line, http://www.datasheetcatalog.com/ datasheets pdf/H/C/P/L/HCPL2602.shtml, 2008. [16] G. DANZ, “Intersil hip4081a, 80v high frequency h-bridge driver,” on line, http:// cobweb.ecn.purdue.edu/∼477grp12/datasheets/HIP4081A.pdf, 2003.
Deel I Bijlagen
44
Bijlage A Genereren van templates voor het aanmaken van een gebruikers IP-core Om een nieuw hardwareontwerp te maken moeten er eerst templates gegenereerd worden om deze hardware op een eenvoudige wijze via een bus te koppelen met de PowerPC. De Procedure om deze templates vanuit de EDK te genereren, wordt beschreven in deze bijlage. Klik in de menubalk op “Hardware → Create or import new peripheral” om de wizard te starten. Selecteer in het eerste venster “Peripheral Flow” de optie “Create templates for a new peripheral”. Klik hierna op “Next”. Kies in het venster “Repository or Project” voor de optie “To an EDK user repository” om de templates op te slaan in een zelfgekozen map. Klik op “Browse” om naar een map te navigeren waar je je IP-core (my peripheral ) wenst op te slaan. Kies vervolgens, in het venster “Name and version”, een naam en versie voor de IP-core. In het “Bus Interface” venster kan bepaald worden welk busprotocol zal dienen voor de communicatie tussen de PowerPC en de FPGA. Kies bijvoorbeeld voor het OPB-protocol. In het volgende venster “IPIF Services” kan de interface, tussen de OPB-bus en de FPGA, geconfigureerd worden. Selecteer hier enkel “User logic S/W register support”. Dit wil zeggen dat er enkel communicatie is door het lezen en schrijven van registers. Daarna kan in het “User S/W Register” venster het aantal en de breedte van deze registers gekozen worden. Het volgende venster “IP interconnect” toont de signalen die in deze interface gebruikt worden. Laat deze instellingen onveranderd en klik op “Next”. Deselecteer de optie in het venster “Peripheral Simulation Support”. Selecteer in het venster “Peripheral Implementation Support” de opties “Generate ISE and XST project files to help you implement the peripheral using XST flow” en “Generate template driver files to help you implement software interface”. Klik op “Next” en uiteindelijk op “Finish”.
45
Bijlage A. Genereren van templates voor het aanmaken van een gebruikers IP-core
Alle nodige templates zijn nu gegenereerd. In de map $/my peripheral/MyProcessorIPLib/pcores/peripheral name version/devl/projnav/ vind je het ISE-project dat geopend kan worden met de Xilinx ISE. Je slaat best je eigen VHD-bestanden ook in deze map op. Het project bestaat uit twee bestanden, peripheral name.vhd en user logic.vhd die apart te vinden zijn in de map $/my peripheral/MyProcessorIPLib/pcores/peripheral name v1 00 a/hdl/vhdl/. Het is aangeraden deze bestanden hier te laten staan! Je kan nu met de ISE je hardware in user logic.vhd als een component instanti¨eren. De IO-poorten van je hardware kan je via de entity van user logic.vhd doorgeven naar peripheral name.vhd. Er is hiervoor ruimte voorzien aan het begin van de entity. In user logic.vhd kan je via registers data van de bus halen of op de bus plaatsen. De code in user logic.vhd moet aangepast worden, analoog met onderstaande code. Hierbij dient het register slv reg0 om data van de bus te lezen en het register slv reg1 om data naar de bus te schrijven. −− WRITE DATA TO POWERPC −− SLAVE REG WRITE PROC : process ( Bus2IP Clk ) i s begin
−−
−− −− −− −− −− −−
i f Bus2IP Clk ’ e v e n t and Bus2IP Clk = ’ 1 ’ then i f Bus2IP Reset = ’ 1 ’ then s l v r e g 0 <= ( o t h e r s => ’ 0 ’ ) ; s l v r e g 1 <= ( others => ’ 0 ’ ) ; else case s l v r e g w r i t e s e l e c t i s when ” 10 ” => f o r b y t e i n d e x i n 0 t o (C DWIDTH/8)−1 l o o p i f ( Bus2IP BE ( b y t e i n d e x ) = ’ 1 ’ ) t h e n s l v r e g 0 ( b y t e i n d e x * 8 t o b y t e i n d e x * 8+7) <= Bus2IP Data ( b y t e i n d e x * 8 t o b y t e i n d e x * 8+7); end i f ; end l o o p ; when ” 01 ” => f o r b y t e i n d e x in 0 to (C DWIDTH/8)−1 loop i f ( Bus2IP BE ( b y t e i n d e x ) = ’ 1 ’ ) then s l v r e g 1 ( b y t e i n d e x * 8 to b y t e i n d e x * 8+7) <= Bus2IP Data ( b y t e i n d e x * 8 to b y t e i n d e x * 8+7); end i f ; end loop ; when others => null ; end case ; end i f ; end i f ;
end process SLAVE REG WRITE PROC ; −− Write d a t a i n t o r e g i s t e r W r i t e r e g : process ( Bus2IP Clk ) i s begin i f Bus2IP Clk ’ e v e n t and Bus2IP Clk = ’ 1 ’ then s l v r e g 1 <= u s e r d a t a 1 ; end i f ; end process ;
Free Claessens
46
Bijlage A. Genereren van templates voor het aanmaken van een gebruikers IP-core
−− READ DATA FROM POWERPC −− r e a d r e g : process ( Bus2IP Clk ) i s begin i f Bus2IP Clk ’ e v e n t and Bus2IP Clk = ’ 1 ’ then i f Bus2IP Reset = ’ 1 ’ then s l v r e g 0 <= ( others => ’ 0 ’ ) ; else u s e r d a t a 0 <= s l v r e g 0 ; end i f ; end i f ; end process ;
Free Claessens
47
Bijlage B Importeren van een gebruikers IP-core in het EDK-project Nadat de hardware beschreven is in VHDL met behulp van de XIlinx ISE, kan dit ontwerp, na simulatie, ge¨ımplementeerd worden op de FPGA. In deze bijlage volgt de procedure om een compleet ISE-project aan het EDK-project toe te voegen. Om met een schone lei te beginnen, kunnen alle vorig gegenereerde bestanden opgeruimd worden. Klik hiervoor in de menubalk op “Project → Clean all generated files → OK”. Klik daarna op “Hardware → Create or import new peripheral” om de wizard te starten. Selecteer in het eerste venster (“Peripheral Flow”) de optie Import existing peripheral om een bestaande IP-core toe te voegen. Klik hierna op “Next”. Kies in het venster “Repository or project” voor de optie“To an EDK user repository” en navigeer naar de map my peripheral waarin de IP-core bewaard is. Geef vervolgens de naam en versie van de IP-core op in het venster “Name and version”. Wanneer er gevraagd wordt om de bestaande bestanden te overschrijven, sta dit dan toe. Vervolgens moet in het venster “Source File Types” aangegeven worden uit welk soort bestanden je IP-core bestaan. Vink hiervoor “HDL source files” en “Netlist files” aan. Daarna moet in het venster “HDL Source Files” het PAO-bestand meegegeven worden. Dit bestand bestaat uit een lijst van al de VHD-bestanden die gebruikt zijn bij de IP-core. Het PAO-bestand is te vinden in de map $/my peripheral/MyProcessorIPLib/pcores/peripheral name version/data/. In het “HDL analysis information” venster kunnen alle VHD-bestanden toegevoegd worden. Klik hiervoor op “Add Files” en navigeer naar de map $/my peripheral/MyProcessorIPLib/pcores/peripheral name version/devl/projnav/. Als je zelf een bibliotheek hebt aangemaakt, klik je op “Add Library” voor deze toe te voegen. Nadat geklikt wordt op “Next”, wordt een laatste keer gecontroleerd of er zich nog fouten in het ontwerp bevinden. Zorg er voor de handigheid voor dat je VHDL-code in de ISE al gesynthetiseerd kan worden.
48
Bijlage B. Importeren van een gebruikers IP-core in het EDK-project
In het Bus Interface venster moet meegedeeld worden met welke bus de IP-core geconnecteerd is. Deze keuze is bepaald bij het aanmaken van de templates en kan hier niet meer veranderd worden. In dit voorbeeld werd gekozen voor “OPB Slave”. Deze keuze wordt gecontroleerd wanneer op “Next” geklikt wordt. In het venster “SOPB: Port” zouden je externe poorten automatisch herkent moeten worden. Ook in het venster “SOPB: Parameters” kan je op “Next” klikken. In het venster “Configure interrupts” kan je de optie om interrupts te gebruiken afvinken indien er geen interrupts gebruikt worden. Klik weer op “Next” tot het venster waar de Netlist files toegevoegd kunnen worden. Klik op Add Files en navigeer naar de map $/my peripheral/MyProcessorIPLib/pcores/peripheral name version/devl/projnav/.
Klik op “Next” en uiteindelijk op “Finish”. De VHD- en Netlist-bestanden worden nu gekopieerd naar de map $/my peripheral/MyProcessorIPLib/pcores/peripheral name version/hdl/vhdl/ en $/my peripheral/MyProcessorIPLib/pcores/peripheral name versi netlist/. Om de IP-core aan het embedded systeem toe te voegen, ga je naar het tabblad “IP catalog” in de “Project Information Area”. Zoek hier naar de IP-core in de map Peripheral Repository of Project Repository. Dubbelklik op de IP-core om deze toe te voegen. Connecteer de IP-core met de bus door bij de “Bus Interface” te klikken op het cirkeltje naast de IP-core. Wanneer dit cirkeltje ingekleurd is wil dit zeggen dat de IP-core geconnecteerd is met de bus. Indien de IP-core voorzien is van IO-poorten dient hiervoor de User Constraints File aangepast te worden. Dit bestand is te vinden onder het tabblad “Project”. Bij gebruik van bijvoorbeeld pin “N6” van de Expansion Connectors dienen de volgende twee regels toegevoegd te worden aan het UCF-bestand: NET ”
” LOC = ”N6” ; NET ” ” IOSTANDARD = LVTTL;
Vervolgens moeten de IO-poorten nog aangemaakt worden bij “Ports”. Voeg deze poorten toe bij “External Ports” en bij de IP-core zelf. Zorg ervoor dat de naam overal identiek hetzelfde is en dat de richting (I of O) juist gekozen is. Hierna dient nog een basisadres gegenereerd te worden voor het gedeelde geheugen. Hierin bevinden zich alle register die dienen voor de communicatie tussen de PowerPC en de FPGA. Het basisadres wordt ook gebruikt in software om het juiste stukje geheugen te mappen. Ga hiervoor naar “Adresses”, geef bij de IP-core een bepaalde size op en klik op “Generate Adresses”. Het basisadres wordt automatisch berekend. Klik nu in de menubalk op “Software → Generate librarys and BSP’s” om de drivers voor de randapparaten te genereren. Klik uiteindelijk in de menubalk op “Hardware → Generate bitstream” om het bitbestand te genereren waarin alle hardware vervat zit. Free Claessens
49