DEPARTEMENT INDUSTRIELE WETENSCHAPPEN EN TECHNOLOGIE Associatie
K. U. L e u v e n
Basisopleiding van 1 cyclus
Academiejaar : 2004 - 2005 Opleiding :
ELEKTRICITEIT
Keuzerichting :
COMPUTERS EN AUTOMATISERING
Optie :
ELEKTRONICA
Eindwerk
Optisch PCB-controlesysteem
door
Tim Goderis Ewoud Van Craeynest
onder leiding van Ing. M. Struye, KHBO Ing. M. Chys, MUTOH EUROPE NV
Eindwerk aangeboden tot het behalen van het diploma
GEGRADUEERDE IN ELEKTRICITEIT Katholieke Hogeschool Brugge - Oostende Zeedijk 101 , 8400 Oostende tel +32 59 56 90 00 - fax +32 59 56 90 01
DEPARTEMENT INDUSTRIELE WETENSCHAPPEN EN TECHNOLOGIE Associatie
K. U. L e u v e n
Basisopleiding van 1 cyclus
Academiejaar : 2004 - 2005 Opleiding :
ELEKTRICITEIT
Keuzerichting :
COMPUTERS EN AUTOMATISERING
Optie :
ELEKTRONICA
Eindwerk
Optisch PCB-controlesysteem
door
Tim Goderis Ewoud Van Craeynest
onder leiding van Ing. M. Struye, KHBO Ing. M. Chys, MUTOH EUROPE NV
Eindwerk aangeboden tot het behalen van het diploma
GEGRADUEERDE IN ELEKTRICITEIT Katholieke Hogeschool Brugge - Oostende Zeedijk 101 , 8400 Oostende tel +32 59 56 90 00 - fax +32 59 56 90 01
Mededeling
Deze eindverhandeling was een examen; de tijdens de verdediging vastgestelde fouten werden niet gecorrigeerd. Gebruik als referentie in publicaties is toegelaten na gunstig advies van de KHBO-promotor vermeld op het titelblad.
Optisch PCB-controlesysteem
Woord vooraf Wij hadden keuze uit verschillende onderwerpen binnen Mutoh Europe N.V. De combinatie van software en firmware programmatie met een extern randapparaat sprak ons dermate aan dat we niet lang hoefden te overleggen om dit onderwerp te selecteren. Dit werk hadden we niet tot een goed einde kunnen brengen, zonder hulp van heel wat mensen. Langs deze weg willen we dan ook enkele mensen bedanken die meewerkten aan de realisatie van dit werk. Onze dank gaat uit naar ing M.Chys (externe promotor) en ing M.Struye (interne promotor). Hun opmerkingen en raadgevingen waren zeer leerrijk en noodzakelijk voor de goede afloop van dit eindwerk. Graag zouden we ook onze ouders bedanken voor hun steun, vertrouwen en geduld gedurende deze periode. Tim Goderis & Ewoud Van Craeynest
Optisch PCB-controlesysteem
Samenvatting De bedoeling van dit eindwerk is een optisch pcb-controlesysteem te ontwikkelen. Met een webcamera worden foto's van pcb's genomen die vergeleken worden met een vooraf genomen referentiefoto. Foto's van de webcamera worden genomen in Windows Bitmap formaat op resolutie 640x480. De vergelijking gebeurt op pixelniveau. De camera zweeft over de pcb en neemt foto's van de verschillende delen. De foto's worden opnieuw samengesteld tot een grote foto waarop alle bewerkingen worden uitgevoerd. De controleopstelling is een X-Y flatbed waarop een pcb kan gelegd worden. De positie van de camera wordt geregeld met stappenmotoren. De stappenmotoren worden gestuurd via een beschikbaar Mutoh moederboard op basis van een Motorolla HCS12-reeks processor. Het programma voert enkel een optische controle uit, er is dus geen enkele vorm van stukkenlijst van de pcb aanwezig in de software. Doordat wij werken met een lage resolutie webcamera, waren we genoodzaakt het oorspronkelijke idee aan te passen en een X-Y flatbed te realiseren. Het oorspronkelijke idee hield in dat een camera gemonteerd werd op een verticale arm, en dat de hoogte van de camera werd aangepast naarmate de grootte van de print varieerde. Dit idee hebben we snel laten varen door de lage resolutie van de webcamera.
Optisch PCB-controlesysteem
Inhoudsopgave Mededeling ................................................................................................................ 2 Woord vooraf ............................................................................................................ 3 Samenvatting ............................................................................................................. 4 Inhoudsopgave .......................................................................................................... 5 Gebruikte afkortingen en symbolen ....................................................................... 7 1 Inleiding en bedrijfsprofiel ................................................................................ 8 2 Software ............................................................................................................. 11 2.1
Inleiding ............................................................................................................................... 11
2.2
Functionaliteiten .................................................................................................................. 12
2.3
Geheugenverbruik ............................................................................................................... 12
2.4
Het Windows Bitmap formaat ............................................................................................. 14 2.4.1 Inleiding ..................................................................................................................... 14 2.4.2 Structuur ..................................................................................................................... 14 2.4.3 24 bit Image data ....................................................................................................... 14
2.5
Het TImage object ............................................................................................................... 14 2.5.1 Inleiding ..................................................................................................................... 14 2.5.2 Canvas ........................................................................................................................ 15
2.6
Het INI bestand .................................................................................................................... 15 2.6.1 Inleiding ..................................................................................................................... 15 2.6.2 Gebruik van ini bestanden ......................................................................................... 15
2.7
Besturing USB camera ........................................................................................................ 16
2.8
Programma structuur en flowcharts ..................................................................................... 16 2.8.1 Inleiding ..................................................................................................................... 16 2.8.2 FullScan flowchart ..................................................................................................... 17 2.8.3 CaptureImage flowchart ............................................................................................ 18 2.8.4 CompareImages flowchart ......................................................................................... 19 2.8.5 ScanForMC flowchart ................................................................................................ 20 2.8.6 ScanForWhitePix flowchart ....................................................................................... 21
2.9
De grafische user interface .................................................................................................. 22 2.9.1 Inleiding ..................................................................................................................... 22 2.9.2 New Profile form ........................................................................................................ 22 2.9.3 Load Profile form ....................................................................................................... 23 2.94 Settings form .............................................................................................................. 24 2.9.5 Main form ................................................................................................................... 24 2.9.6 Giant beelden ............................................................................................................. 26
Optisch PCB-controlesysteem
5
3 Bespreking van de gebruikte hardware .......................................................... 27 3.1
Inleiding ............................................................................................................................... 27
3.2
MC9S12DG128B microprocessor ...................................................................................... 27
3.3
A3977 stappenmotor driver ................................................................................................. 29
3.4
Stappenmotoren.................................................................................................................... 32 3.4.1 Principiele werking stappenmotoren ......................................................................... 32 3.4.2 Permanente magneet stappenmotor ........................................................................... 32 3.4.2.1 De unipolaire stappenmotor ................................................................................. 35 3.4.2.2 De bipolaire stappenmotor ................................................................................... 38 3.4.3Variabele reluctantie stappenmotor .............................................................................. 39 3.4.4 De hybride stappenmotor ........................................................................................... 40
4 Uitvoering van de opdracht ............................................................................. 41 4.1
Inleiding ............................................................................................................................... 41
4.2
Mechanische opbouw .......................................................................................................... 42
4.3
Functies gemaakt in de firmware ......................................................................................... 43 4.3.1 cam_movemotors(Xmoveposition,Ymoveposition) functie ......................................... 43 4.3.2 cam_motorsmoving functie ........................................................................................ 45 4.3.3 cam_search_sensor functie ........................................................................................ 46 4.3.4 cam_sensor_found functie .......................................................................................... 47
4.4
Seriële commando's geïntegreerd in de firmware ................................................................ 48
5 Besluit ................................................................................................................. 49 6 Literatuurlijst .................................................................................................... 50
Optisch PCB-controlesysteem
6
Gebruikte afkoringen en symbolen BCB BMP CAM GUI HEX INI PCB RS232 ScanForMC VCL Win32 API (b,g,r)
Borland C++ Builder Bitmap Camera Graphical User Interface hexadecimale voorstelling een ini file bevat windows configuratie informatie Printed Circuit Board Seriële communicatie standaard Scan for missing components Visual Component Library Microsoft Windows Application Program Interface Hoofdkleuren in de volgorde blauw-groen-rood
Optisch PCB-controlesysteem
7
1
Inleiding en bedrijfsprofiel
Het doel van dit eindwerk is een systeem te ontwikkelen dat optisch pcb's kan controleren op fouten, door vergelijking met een referentiebeeld. De optische controle gebeurt d.m.v. een webcamera, deze zou op een kolom gemonteerd worden en automatisch in hoogte verstelbaar zijn. Daar wij enkel een lage resolutie usb webcamera ter beschikking hebben, bleek al snel bleek dat voor smd componenten een hogere resolutie nodig was. Daarom brachten we de camera dichter bij de pcb. Dit had als gevolg dat we slechts een deelstuk van de pcb kunnen fotograferen. De X-Y oplossing liet niet lang op zich wachten. Door de X-Y oplossing hadden we ineens twee stappenmotoren nodig, wat een probleem vormde op ons oorpronkelijke sturingsbord. Deze heeft maar één stepper-driver. We besloten toen een tweede bord aan het project toe te voegen. Een eerste versie van de mechansche opstelling kon dan gerealiseerd worden. Tijdens eerste testen bleek dat, met de aanpassing voor de stepper op de tussenligger, de tussenligger begon te slepen. Daarom zijn we overgestapt op een ander type moederboard met meer stepper-drivers. Dit board is door ons zelf bestukt tijdens de laatste week van de stageperiode. Op het ogenblik van schrijven draaien er twee stappenmotoren synchroon. Op de wagentjes die aangedreven worden door deze motoren is de tussenligger gemonteerd. Op de tussenligger is de motor samen met het tweede wagentje gemonteerd. De software is tijdens dit proces vrijwel onveranderd gebleven. De enige veranderingen die gemaakt zijn, waren de overstap naar twee compoorten, en de terugstap naar één compoort bij het tweede bord. De software ontwikkeling heeft verschillende stappen doorlopen. Van het vergelijken van pixels, toepassen van een filter, aanduiden van verschillen die de treshold overschrijden tot het vergelijken van images met een referentie aanduiding. Deze referentie aanduiding gebruikten wij om beelden te vergelijken die tegenover elkaar verschoven waren. Dit heeft zeer goed gewerkt met referenties die wij zelf digitaal hebben aangebracht. Deze functionaliteit is nog steeds aanwezig in de software, maar ze wordt echter niet meer toegepast. Toen de ScanForMissingComponent functie ontwikkeld was bleek dat de verschuivingen weinig invloed hadden op het zoeken naar fouten. Dit indien de camera op een bepaalde afstand van de print hangt waar focusering geen probleem is. Een tweede reden is dat dit de applicatie onnodig verder zou vertragen en nog meer geheugen verbruiken. Het systeem is natuurlijk niet beperkt tot het scannen van pcb's. Elk ander fysiek object dat moet vergeleken worden met een referentie kan hiervan gebruik maken. Voor ons is dit een zeer interessant eindwerk geweest omdat alle gebieden van onze interessen aan bod kwamen. De combinatie van hardware, firmware, software, sturingen en een kleine voorsmaak van image processing bleken een leuke uitdaging waar we veel uit bijgeleerd hebben. Het moet vermeld worden dat de volledige mechanische uitvoering een low-cost labo uitvoering is met recuperatie materialen uit oudere toestellen. Voor een snellere industriële toepassing moet er geïnvesteerd worden in betere materiëlen en eventueel een embedded systeem voor de software. Ons eindwerk heeft te lijden onder beperkingen van het besturingssysteem WindowsXP. Ons eindwerk en stageperiode zijn doorgegaan op de firmwareafdeling van Mutoh Europe N.V. Op volgende bladzijde volgt een kort bedrijfsprofiel en bespreking van de producten. Optisch PCB-controlesysteem
8
Mutoh Europe NV, dochteronderneming van het Japanse Mutoh Industries Ltd., Tokyo, Japan, is het Europese ontwikkelings-, assemblage- en distributiecentrum voor alle Mutoh producten. Met haar 275 werknemers is Mutoh Europe een toonaangevende vernieuwer in het ontwerp en de fabricage van CAS (computer aided signmaking) randapparatuur voor visuele communicatie. Sinds 1992 heeft Mutoh haar hoofdkwartier in Oostende. Mutoh Europe stelt meer dan 35 ingenieurs mechanica, electronica en chemie tewerk die voltijds ingeschakeld worden voor de ontwikkeling van baanbrekende nieuwe producten die specifiek tegemoet komen aan de wensen van de Europese consument. Alle in België ontworpen producten worden tevens te Oostende geassembleerd. Mutoh Europe beschikt over een netwerk van distributeurs dat zich uitstrekt over heel Europa, het Midden Oosten en Afrika. Niet enkel verkoop, marketing en distributie worden georganiseerd vanuit België, maar ook service, support en technische trainings, om zo een optimale ondersteuning te kunnen geven aan het cliënteel. Mutoh Europe heeft een zusterbedrijf in de Verenigde Staten (Mutoh America Inc.) en een verkoopskantoor in Duitsland (Mutoh Deutschland GmbH). Mutoh's producten kunnen onderverdeeld worden in vijf categorieën, met name professionele snijplotters, printers voor binnengebruik, solventgebaseerde printers voor buitengebruik, EcoSolvent Plus printers en andere randapparatuur. Mutoh's snijplottergamma spitst zich toe op grootformaat beletteringstoepassingen voor visuele communicatie. Mutoh's snijplottergamma bevat single en multi-tool snijplotters, markeer/snijplotters voor de textielindustrie en natuurlijk niet te vergeten de Ultima multifunctionele snijplotter die zowel als snijplotter en als automatische contour cutter kan gebruikt worden voor het nasnijden van full-colour stickers. Mutoh is één van ‘s werelds grootste ontwikkelaars van piëzo inkjet printers. Mutoh Europe's doel is het bieden van totaaloplossingen. Samen met de printer biedt Mutoh ook een starter RIP software, inkt die speciaal ontwikkeld is voor de printkoppen, top kwaliteit media, media profielen en nog veel meer aan; kortom een gebruikersvriendelijk totaalpakket.
Optisch PCB-controlesysteem
9
In de categorie van printers voor binnentoepassingen, biedt Mutoh de Falcon Graphics Plus aan, een 6 kleuren inkjetprinter compatibel met zowel dye als pigment inkt. De Falcon II RJ-8000 is top in z’n klasse naar verscheidenheid en prestatie, waarin er 8 dye of pigment inktcassetten kunnen worden geladen, of tegelijkertijd 4 dye en 4 pigment inktcassetten, of zelfs 2 x 4 dye of pigment inktcassetten om zo de printsnelheid te verdubbelen. Mutoh is huidig marktleider op het gebied van baby grootformaat (< 87") solvent gebaseerde inkjetprinters. De Mutoh Albatros (54") en Toucan (64" en 87") solvent printers bieden de gebruiker de mogelijkheid om rechtstreeks te printen op goedkope, standaard, niet-gecoate materialen. De Mutoh solvent inkten garanderen een UV stabiliteit van drie tot vijf jaar, zonder laminatie, en zijn zeer geschikt voor extreme buitentoepassingen, zoals fleet. Vastbesloten om zijn leidinggevende rol te behouden in de markt van groot-formaat piëzo inkjet printers voor buitentoepassingen, heeft Mutoh recentelijk het revolutionaire concept van 'Eco-Solvent' printen gelanceerd. De Rockhopper ecosolvent printers zijn perfect bruikbaar voor zowel binnen- als buitentoepassingen, zowel op gecoate als op goedkope, niet-gecoate materialen en dit dankzij het gebruik van Mutoh's unieke en speciaal ontwikkelde Eco-Solvent Plus inkt.
Optisch PCB-controlesysteem
10
Software
Hoofdstuk 2 Software 2.1
Inleiding
Het software gedeelte is volledig geschreven en ontworpen door Ewoud Van Craeynest. De programma code is eigendom van Mutoh Europe NV en mag in dit werk niet geplubliceerd worden, idem voor firmwarecode. De volledige code is geschreven in Borland C++ Builder. In dit hoofdstuk zullen de belangrijkste stukken en deelstukken van de software bondig besproken worden. Dit zijn de algoritmes in de vorm van flowcharts, forms, INI en BMP bestanden, het TImage object en een kort woordje uitleg over de aansturing van de usb camera. De functionaliteiten van de sofware worden in het volgende punt opgesomd. Dit gaat van de seriële communicatie met het moederbord, de camera besturing tot het vergelijken van beelden en het analyseren van het vergelijkingsbeeld. Voor het vergelijken van beelden maken we gebruik van drempelwaarden die instelbaar zijn via een form. Het beeld met aanduiding van de fouten kan ook op de hardeschijf, diskette, memorystick en dergelijke opgeslaan worden. Alle gebruikte forms worden in dit stuk besproken. De aangemaakte profielen worden opgeslaan in een ini bestand. Ini bestanden worden verder in dit werk besproken. Het spreekt voor zich dat de software ook profielen kan inladen van op de hardeschijf.
Optisch PCB-controlesysteem
11
Software
2.2
Functionaliteiten
De functionaliteiten van de software zijn hieronder weergegeven: • • • • • • • • • • • • • • •
• • •
Nieuw profiel aanmaken; Opslaan van dit profiel in een ini file; Profielen inladen; Alle instellingen zoals gebruikte comport, pad en naam van de ini file, setup waarden voor routines (o.a. treshold waarden) kunnen manueel veranderd worden via een form; Manueel de camera bedienen; Manueel snapshot nemen; Manueel de Compare en ScanForMissingComponent laten lopen; Automatisch de volledige sequentie laten lopen; Keuze tussen inkleuren van missing component of enkel laten omkaderen, kleur is in te stellen in de instellingen; Beelden bekijken in mini formaat (referentie, capture en output); Beelden previewen in groot formaat (idem als vorige); Beelden automatisch en manueel opslaan; Rapportering in een tekstveld; Manueel deze rapportering kopiëren/knippen naar het klembord; Automatisch rapportering naar een file opslaan; Referentie zoeken en delta berekenen tussen 2 beelden ( referenties worden in de huidige versie niet meer toegepast dus zoeken levert altijd 0,0 als referentie coördinaat op en 0,0 als delta coördinaat. Echter is de functionaliteit nog wel aanwezig); Filteren van beelden is ook aanwezig maar wordt ook niet meer toegepast; Communicatie commando-tabel en vertaler; Commando's uitzenden over rs232;
De software is volledig ontwikkeld in Borland C++ Builder 5 en is compatibel met elke windows compatibele driver. De gemaakte beelden zijn van het formaat WindowsBitmap op resolutie 640x480.
2.3
Geheugenverbruik
Het geheugengebruik van de applicatie is groot tot zeer groot, en zal nog vergroten naarmate grotere printen worden gescand op fouten. De gebruikte geheugenelementen: • Filter Array: een array van 5 2D arrays, gebruikt om filter algoritmes toe te passen. Dit is een array van long integers, welke 4 byte beslaan. Deze wordt bepaald door enerzijds het beschikbare geheugen en anderzijds door de maximale grootte van de te scannen pcb. • Giantbeelden: 3 Tbeelden, voor alle duidelijkheid zal ik ze nu beschouwen als 2D arrays met grootte gelijk aan de afmetingen van het TImage. Dit is een array van TColor objecten, welke 4 bytes beslaan en eenvoudig kunnen beschouwd worden als een long integer. De grootte van de Giantbeelden hangt rechtstreeks af van de te scannen pcb. • Smallbeelden: 4 Tbeelden, zie vorig punt. Deze zijn altijd 352x288 pixels groot.
Optisch PCB-controlesysteem
12
Software Voorbeeld: berekening geheugengebruik enkel voor de figuren bij 4 deel beelden. Totale geheugenverbruik=5×2500×2500×43×1280×960×45×352×288×4=135.2 MB
Het filterarray bestaat uit 5 2D deelarrays die vast 2500x2500 pixels groot zijn. Het betreft een 4 byte long integer array
3 giant images van 4 deelimages. We kunnen dit bekijken als een array met grootte 1280x960 van 4byte long integers
5 small images die elk 352x288 pixels groot zijn en 4 byte per pixel beslaan
Hier heb ik enkel de grote geheugenverbruikers besproken, hierbij komen nog de standaard geheugenelementen zoals de applicatie zelf, variabelen, buffers voor communicatie, buffers voor de videostream, drivers die geladen worden ... Dit wordt geregeld door het besturingssysteem. Dit zal echter niet in de grootte orde zijn van de hiervoor besproken geheugenelementen.
Optisch PCB-controlesysteem
13
Software
2.4
Het Windows bitmap formaat
2.4.1
Inleiding
BMP bestanden zijn een historisch (maar nog steeds veel gebruikte) bestands formaat van het besturingssysteem “Windows”. BMP beeldbestanden kunnen gaan van zwart-wit (1 byte per pixel) tot 24bits kleuren (16.7 millioen kleuren). De beeldbestanden kunnen worden gecomprimeerd maar dit wordt zelden toegepast en zal hier niet besproken worden.
2.4.2
Structuur
Een BMP bestand kan uit 3 of 4 delen bestaan, weergegeven in de figuur 2.4.1. Het eerste deel is een header, die wordt gevolgd door een informatie deel. Optioneel kan een “palette” volgen. En als laatste volgt de pixel data. De beeldheader bevat ondermeer informatie over de breedte en hoogte van de figuur, type compressie en het aantal kleuren.
Figuur 2.4.1 : Het BMP bestand
In ons geval beslaat de header 14 bytes, de info header 40 bytes, de palette is niet aanwezig.
2.4.3
24 bit Image Data
De gemakkelijkste data om te lezen is het 24bit “ware kleuren” beeldbestand. In dit geval volgt de data direct na de informatie header, er is geen “colour palette”. De data bestaat uit 3 bytes per pixel, in de blauw, groen, rood volgorde. Elke byte beschrijft de saturatie voor die kleurcomponente.
2.5
Het TImage object
2.5.1
Omschrijving
Gebruik Timage om een grafisch bestand op een form weer te geven. Gebruik het TPicture lid om het effectief bitmapbestand, metafile of ander grafisch bestand toe te wijzen.
Optisch PCB-controlesysteem
14
Software
2.5.2
Canvas
Om toegang te krijgen tot de pixeldata maken we gebruik van het Canvas lid van TImage. Deze heeft op zijn beurt weer een lid Pixels[col][row], wat dus een 2d array voorstelt. Pixels is strikt genomen een TColor object, maar laat zonder problemen een long integer aan zich toewijzen. Het lezen en casten naar een long integer vormt eveneens geen enkel probleem. Met de verkregen pixeldata kunnen we nu rekenen zoals we met elk normaal getal zouden rekenen. De indeling van de kleuren is identiek aan de indeling (b,g,r) bij het 24bits kleur BMP bestand. Bij de overgang naar een long integer moeten we er dus rekening mee houden dat er 1 ongebruikte byte aanwezig is. Dit onder voorwaarde dat we het hebben over een 4 byte long integer. Voorbeeld: puur rood wordt voorgesteld door 0x000000FF. Voor de volledige beschrijving van het TImage object, zijn methoden en leden, verwijs ik naar de Borland C++ Builder Developers Guide of de help van Borland C++ Builder.
2.6
Het INI bestand
2.6.1
Inleiding
Een ini bestand wordt gebruikt om een lijst van strings op te slaan. Er is geen strikte regel waarom en waarvoor deze bestanden gebruikt worden. De persoon die het bestand aanmaakt mag zelf beslissen waarvoor hij het gebruikt. Als u ooit, vroeger, drivers geïnstalleerd hebt op een computer ( soundcard, modem, etc), zult u waarschijnlijk wel met ini bestanden in aanraking gekomen zijn. De enige echte regels bij ini bestanden zijn dat ze uiteraard de extentie “.ini” moeten hebben. En dat de “body” van de file 2 items bevat: secties en strings. Een string is een lijn van tekst van de vorm: Name=Value. Een sectie is een aantal strings gegroepeerd als een onderdeel.
2.6.2
Gebruik van ini bestanden
Om ini files te gebruiken, voorziet de VCL ons met enkele klassen. De voornaamste klasse die wordt gebruikt om ini files aan te maken en te beheren is de TCustomIniFile klasse. Een van de klassen die gebruikt wordt is de TIniFile klasse, die is afgeleid van de TCustomIniFile klasse. TCustomIniFile is een abstracte klasse en kan niet direct gebruikt worden. Om een nieuw object van de klasse TIniFile aan te maken, maken we gebruik van de “new” operator van de constructor. De constructor gebruikt een string als argument, de naam van het bestand. Als het de eerste keer is dat het bestand gebruikt wordt, dan wordt het automatisch aangemaakt. Hier volgt een voorbeeld TIniFile *StartUp = new TIniFile("IValues.ini");
Om secties aan te maken en te beheren, beschikt de TIniFile klasse over een aantal methoden zoals ReadSection(...) en ReadSections(...). Om strings aan te maken en te beheren in een ini bestand kan je gebruik maken van methoden uit de TCustomIniFile klasse. Om te lezen maak je gebruik van de Read(...) methode, om te schrijven de Write(...) methode.
Optisch PCB-controlesysteem
15
Software
Om een integer te lezen of te schrijven kan je respectievelijk gebruik maken van de ReadInteger(...) en WriteInteger(...) methoden. Er volgt een voorbeeld om het lezen en schrijven van strings en integers duidelijk te maken. TIniFile *StartUp = new TIniFile("IValues.ini"); Left = StartUp->ReadInteger("FormPos", "Left", 250); Top = StartUp->ReadInteger("FormPos", "Top", 200); StartUp->WriteInteger("FormPos", "Left", Left); StartUp->WriteInteger("FormPos", "Top", Top); StartUp->ReadString("CtlValues", StartUp->ReadString("CtlValues",
"txtPreview", "Ewoud"); "FontSelected", "Times New Roman");
De waarden 250 en 200 bij de ReadInteger methode zijn default waarden. Deze zijn voor ons van geen belang, de integer Left zal de waarde van de entry Left in sectie FormPos bevatten. Het eerste argument van de methoden is dus de sectie in het ini bestand, daarna volgt de entry, en daarna volgt de te schrijven of default waarde.
2.7
Besturing USB camera
We maken gebruik van een simpel capture systeem dat gebruik maakt van de win32 api. Deze tutorial en code zijn geschreven door Allan Petersen, Copyright (c) 2001. Deze code maakt gebruik van standaard windows functies zoals capPrevieuw(...), capDriverConnect(...) , capDlgVideoFormat(...) en capFileSaveDIB(...). Deze functies en/of macro's worden beschikbaar gesteld door de Microsoft Windows Multimedia SDK, onderdeel Multimedia Reference, Multimedia Macro's. De gecapturede beelden zijn van het BMP bestandstype, en beslaan 352x288 pixels.
2.8
Programma structuur en flowcharts
2.8.1
Inleiding
In dit onderdeel zal ik verschillende stukken programma bespreken. Ik zal mij echter beperken tot de belangrijkste routines en daarvan enkel het absolute noodzakelijke bespreken. De algemene functies, instellingen en profielen worden dus niet besproken. Per onderdeel is een flowchart en een kleine uitleg voorzien.
Optisch PCB-controlesysteem
16
Software
2.8.2
FullScan flowchart
Dit is de voorstelling van de sequentie die de volledige scan afhandelt. Dit wil zeggen van het capturen tot aanduiding van de fouten op de referentieprint.
FULL Scan sequence Start
Cam initialised?
Exit No
Yes Image Capture Sequence
Compare Images
Scan for missing components
Mark missing components on reference
Shrink images and display in main form
End Figuur 2.8.1 : FullScan flowchart
Optisch PCB-controlesysteem
17
Software
2.8.3
CaptureImage flowchart
Dit is de voorstelling van de sequentie die het nemen van een capture of snapshot via de camera afhandelt, en de nodige commando's naar de motorbesturing zendt. Het genomen snapshot wordt zoals eerder vermeld aan het “GiantCaptureImage” toegevoegd op de juiste coördinaten. De coordinaten worden bepaald a.d.h.v. het segment van de pcb waar de capture vandaan komt.
Image Capture sequence Start
Move Camera
Position reached ?
No
Yes Capture Image
Show Image in mini preview
Add image to giant image
End Figuur 2.8.2 : CaptureImage Flowchart
Optisch PCB-controlesysteem
18
Software
2.8.4
Comparebeelden flowchart
Dit is de voorstelling van de sequentie die het referentiebeeld en het opgenomen beeld met elkaar vergelijkt. Het vergelijken gebeurt pixel per overeenkomstige pixel. Drempelwaarden zijn instelbaar via de instellingen.
Compare Images Sequence Start
Calculate difference between R,G and B for corresponding pixels Select Next Pix Difference pix exceeds threshold?
No Mark pix black
Yes Mark pix white
Are all pix compared?
No
Yes End Figuur 2.8.3 : Comparebeelden flowchart
Optisch PCB-controlesysteem
19
Software
2.8.5
ScanForMC
Dit is de voorstelling van de sequentie die het vergelijkingsbeeld afzoekt op mogelijke patronen die missing components aanduiden. ScanForMC betekent dus ScanForMissingComponents. Verschillen tussen 2 foto's worden aangeduid met wit. Bij het afscannen van een window op witte pixels kijken we naar het percentage witte pixels in dat window. Een kleine verschuiving van de print t.o.v. het origineel kenmerkt zich door lijnen witte pixels. Missing components echter kenmerken zich door witte vlekken. Deze functie is dus in staat om witte vlekken te detecteren in een window met standaard grootte. Indien het aantal witte pixels voldoet voor een mogelijk missing component, dan zal deze bewerking herhaald worden met een grootte verandering van het window.
Scan For M issing Component Sequence Start Make delta calculations
White pixel?
Select next pixel
No
Yes
Use window to scan for white pix
Percentage w hite pix >= last percentage ?
Expand window
Yes
No Mark according to settings
All pix checked ?
No
Yes Exit Figuur 2.8.4 : ScanForMissingCompnent flowchart
Optisch PCB-controlesysteem
20
Software
2.8.6
ScanForWhitePix
Dit is de voorstelling van de sequentie die het vergelijkingsbeeld afzoekt op witte pixels, dit is een onderdeel van de totale ScanForMC functie.
Scan Window For White Pix Sequence Start
White pixel?
No
Select next pixel
Yes Increase counter
All pix checked ?
No
Yes Exit Figuur 2.8.5 : ScanForWhitePix flowchart
Optisch PCB-controlesysteem
21
Software
2.9
De grafische user interface
2.9.1
Inleiding
De volledige ontwikkeling van de GUI is evenals de code in Borland C++ Builder gerealiseerd. Ik heb enkel gebruik gemaakt van de standaard aanwezige elementen in Builder. Dit zijn o.a.: TForm, TButton, TBitButton (knoppen met een icoontje op), TImage, TMenu, TMenuItem, ... Gezien er geen code mag gepubliceerd worden zal ik mij beperken tot een screenshot van de afzonderlijke forms of vensters. Bij elk venster hoort er een stukje uitleg over de functionaliteiten, zo krijgt u als lezer een betere situering van de functionaliteiten opgesomd in onderdeel 2.1. De vensters zullen in gebruiksvolgorde besproken worden. Dit gaat van het aanmaken van een profiel tot het opslaan van het “Output Image” of het resultatenbeeld.
2.9.2
New Profile form
Hier kunnen nieuwe profielen aangemaakt worden per PCB. De gebruiker moet enkel het typenummer van het moederboard handmatig invoeren. De besturing van de camera en de seriële poort zijn hieruit ook toegankelijk. De gebruiker kan de “camera feed” starten, de compoorten openen, eventueel settings van de compoort veranderen. De knop “Cam Home” bestuurt uiteraard het uitzenden van het juiste commando naar het moederboard, om de camera naar zijn home-positie te laten terugkeren. De knoppen met de pijlen dienen om de camera over de print te laten “lopen”. Elke keer er op een pijl gedrukt wordt, verplaatst de camera zich zodanig dat er een volledig nieuw beeld kan opgenomen worden. De beelden worden niet aan elkaar “gestitcht”. Zodra het commando voor het verplaatsen van de camera gegeven is zal de software wachten tot de camera zijn positie heeft bereikt, alvorens een nieuw beeld op te nemen en weer een “verplaats” commando uit te zenden. Het aantal deelbeelden wordt weergegeven onder het bedieningspanneel. Als de operator zeker is dat de volledige print kan gescand worden met de ingestelde deelbeelden, dan kan de volledige scan-sequentie gestart worden door een druk op de “Start Capture” knop. Met een druk “Save knop” worden de juiste gegevens weggeschreven in de ini file.
Optisch PCB-controlesysteem
22
Software
Figuur 2.9.1: New Profile form
2.9.3
Load Profile form
Hier kunnen de zonet aangemaakte profielen terug ingeladen worden. Na het inladen, worden variabelen juist gezet voor gebruik.
Figuur 2.9.2: Load Profile form
Optisch PCB-controlesysteem
23
Software
2.9.4
Settings form
Via de menu functie “settings” komt men terrecht in onderstaande form. De volgende settings kunnen door de operator ingesteld worden: Tabblad General • Naam en locatie van de ini file Tabblad Compare • Drempelwaarde voor vergelijken van beelden Tabblad Search For MC • Drempelwaarde voor het aantal witte pixels in een window vooraleer we mogen spreken van een missing component; • Startgrootte van het scan window; • De afstand van de markering t.o.v. het missing component; • De kleur van de markering; • De soort markering
Figuur 2.9.3: Settings form
2.9.5
Main form
Dit is de het eigenlijke programma venster dat tevoorschijn komt wanneer de applicatie opgestart wordt. Van hieruit zijn via het menu alle forms beschikbaar. In dit form staan kleine previews van beelden centraal samen met de besturingen voor het scannen van pcb's als een profiel geladen is. Vanuit dit form kunnen ook rechtstreeks de verschillende “Giant beelden” opgeroepen worden, en kan het resultaten beeld of “Output Image” naar een medium weggeschreven worden. De rapportering aan de rechterzijde wordt automatisch naar een *.txt bestand in de map van de applicatie weggeschreven. Er is ook de mogelijkheid om de tekst naar het klembord te kopiëren. De mogelijkheid bestaat om stukken van de volledige sequentie manueel te laten uitvoeren, dit is echter maar toepasbaar bij het laden van beeldbestanden vanop een medium. Optisch PCB-controlesysteem
24
Software
Figuur 2.9.4: Main form
Optisch PCB-controlesysteem
25
Software
2.9.6
Giant beelden
Dit zijn de beelden op hun echte resolutie. Indien we 4 deelbeelden hebben dan zal deze resolutie (2*352) * (2*288) = 704 * 576 bedragen. De Giant beelden staan alle drie op een form en worden via Hide() en Show() functies naar de voorgrond gebracht. De vergelijkings algoritmes worden op de Giant beelden toegepast. Voorbeeld: GiantOutputImage De rode omkaderingen markeren fouten die tijdens de testfase zijn aangebracht. De markeringen worden op een copie van het referentiebeeld aangebracht. De aangebrachte fout was het verwijderen van twee smd leds.
Figuur 2.9.5: Giant Output Image
Optisch PCB-controlesysteem
26
Bespreking van de gebruikte hardware
Hoofdstuk 3 Bespreking van de gebruikte hardware 3.1
Inleiding
In dit hoofdstuk worden alle componenten die in het eindwerk aanwezig zijn kort besproken om de werking ervan te verduidelijken, zodat een goed inzicht in de opdracht verkregen kan worden.
3.2
MC9S12DG128B microprocessor
De MC9S12DG128B microprocessor is opgebouwd rond een 16-bit HCS12 CPU van motorola/freescale die voorzien is van heel uitgebreide randapparatuur. De microprocessor beschikt over volgende eigenschappen: • 16-bit HCS12 CPU; • clock en reset generator op basis van een PLL; • 8-bit en 4-bit poorten met interrupt functionaliteiten; • 128 KB Flash EEPROM geheugen; • 8 KB RAM geheugen; • 2 KB EEPROM geheugen; • twee 8 kanaals analoog naar digitaal converters met een 10-bit resolutie; • drie CAN modules; • een 8 kanaals capture timer; • acht PWM kanalen met een resolutie van 8-bit; • twee UARTS voor asynchrone seriële communicatie; • twee SPI poorten voor synchrone seriële communicatie; • Inter-IC Bus compatibel met I2C bus standaard; • byteflight module; • 29 discrete I/O kanalen; • 20 discrete I/O kanalen met interrupt en wake-up mogelijkheden. Al deze onderdelen vinden we terug in figuur 3.1.
Optisch PCB-controlesysteem
27
Bespreking van de gebruikte hardware
figuur 3.1: Blokschema van de MC9S12DG128B microprocessor
Optisch PCB-controlesysteem
28
Bespreking van de gebruikte hardware
3.2 A3977 stappenmotor driver De A3977 is een volledige microstap driver met ingebouwde translator om bipolaire stappenmotoren aan te sturen. De translator zorgt ervoor dat de fasen van de stappenmotor in de juiste sequentie bekrachtigd worden volgens de gekozen mode. Hierdoor kan deze driver gemakkelijk toegepast worden in elke schakeling waarin een stappenmotor aangestuurd moet worden. De D-mos driver uitgangen kunnen een spanningsverschil aan van 35V en een stroom van 2,5 A. De grootte van de stroom door de fasen van de motor kan begrensd worden tot een veilige waarde, waardoor de motor niet overhit kan raken.
figuur 3.2 blokschema van de A3977 stappenmotor driver
De verschillende modes worden geselecteerd met ingangen MS1 en MS2.
tabel 3.1: selectie van microstep resolutie
Optisch PCB-controlesysteem
29
Bespreking van de gebruikte hardware De draaizin van de motor wordt gekozen met de DIR-ingang. De maximale stroom die door de fasen van de motor mag stromen kan ingesteld worden door de grootte van een analoge spanning op de klem VREF. Deze waarde kan berekend worden met de volgende formule. Imax=
Vref 8Rs
waarbij RS een weerstand is die in serie staat met de fase van de motor en die verbonden is met de overeenkomstige sense ingang van de driver. Door de ingebouwde translator is het heel makkelijk om een stappenmotor aan te sturen. Door een puls te geven op de STEP-ingang van de driver, zal deze de motor één stap doen verdraaien in de gekozen richting en de grootte van die verplaatsing van de motor is afhankelijk van de gekozen resolutie. Ook zorgt de translator voor een terugkoppeling naar de microprocessor dmv de homeuitgang. Hierdoor kan de microprocessor bepalen wanneer de draaizin van de motor veranderd mag worden.
figuur 3.3 : half step aansturing door A3977 driver
Optisch PCB-controlesysteem
30
Bespreking van de gebruikte hardware
3.3
MAX232 Line driver/reciever
De MAX232 line driver/reciever dient om de spanningsniveau's van een V.24/V.28 compatibele interface om te vormen naar TTL niveau en omgekeerd. De belangrijkste eigenschappen zijn: • slechts één voedingsspanning nodig (+5V); • er zijn twee drivers/recievers geintegreerd; • laag verbruik.
figuur 3.4 : blokschema max232
In dit IC zijn zowel een spanningsverhogende en een spanningsinverterende schakeling geïntegreerd. Hierdoor heeft de schakeling slechts 1 voedingsspanning nodig om een TTL signaal om te kunnnen vormen naar een signaal dat binnnen de specificaties valt van een RS232 verbinding. Dit is een groot voordeel, anders zouden er meerdere verschillende voedingsspanningen nodig zijn die de voeding complexer zouden maken.
Optisch PCB-controlesysteem
31
Bespreking van de gebruikte hardware
3.4
Stappenmotoren
3.4.1
Principiele werking stappenmotoren
De werking van de stappenmotor zal uitgelegd worden aan de hand van een motor opgebouwd met een tweepolige permanente magneet op de rotor, en een stator met twee loodrecht op elkaar staande wikkelingen. De Wikkelingen A1-A2 en B1-B2 hebben ieder een eigen magnetische keten, zoals op de figuur getekend is.
figuur3.5: onbekrachtigde stappenmotor
Elk circuit bestaant uit twee lichamelijke polen en twee deel-wikkelingen, de fasen genoemd. Voor circuit A zijn dat polen 1 en 3 met fasen L1 en L3. Voor circuit B zijn dat polen 2 en 4 met fasen L2 en L4. Wanneer geen van de fasen bekrachtigd is, zal de rotor een voorkeurspositie innemen. Volgens de fluxvergrotingswet neemt de magneet van de rotor een zodanige toestand in dat de magnetische weerstand voor de magnetische veldlijnen zo klein mogelijk is. Hieruit kunnen we besluiten dat er rotor vier voorkeursposities heeft. Deze voorkeursposities komen ook voor als de fasen bekrachtigd worden. Deze motor heeft daarom vier stappen per omwenteling.
Optisch PCB-controlesysteem
32
Bespreking van de gebruikte hardware Bekrachtigen we fase L1 dan is pool 1 een noordpool en pool 3 een zuidpool. De rotor neemt dan de positie in zoals getekend in onderstaande figuur.
figuur 3.6: stappenmotor met fase L1 bekrachtigd
Wordt vervolgens fase L2 op identieke wijze bekrachtigd, dan maakt de motor een hoekverdraaiing van 90°, getekend in de figuur.
figuur 3.7: stappenmotor met fase L2 bekrachtigd
Optisch PCB-controlesysteem
33
Bespreking van de gebruikte hardware Door afwisselend de fasen L1, L2, L3, L4, L1, ... te bekrachtigen zal de motor een stappende beweging in wijzerzin uitvoeren. Door de snelheid waarmee de wikkelingen achtereenvolgens bekrachtigd worden op te voeren, zal de rotor in plaats van te stappen overgaan in een vlotte draaiende beweging. De draairichting van de motor kan eenvoudig omgekeerd worden door de volgorde waarin de fasen bekrachtigd worden om te keren dus L1, L4, L3, L2, L1, ... . Als er op ieder moment slechts 1 fase bekrachtigd is, wordt dit full step genoemd. Dit wordt weergegeven in de volgende figuur.
figuur 3.8: schematische voorstelling stappenmotor in full step mode
Als we deze motor in full step aansturen, is de grootte van de staphoek dus 90°. De stapgrootte kan verkleind worden, door gebruik te maken van half step. Hierbij worden afwisselend 1 of 2 fasen bekrachtigd. De wikkelingen worden nu in deze volgorde aangestuurd: L1, L1 + L2, L2, L2 + L3, L3, L3 + L4, L4, L4 + L1, L1, ... . Het resulataat hiervan is dat de staphoek gehalveerd is, en nu slechts 45° meer is. Dit wordt voorgesteld in de volgende figuur.
figuur 3.9: schematische voorstelling stappenmotor in half step mode
Optisch PCB-controlesysteem
34
Bespreking van de gebruikte hardware
3.4.2
Permanente magneet stappenmotor
Bij deze stappenmotor bestaat de rotor uit permanent magnetisch materiaal. Zoals uitgelegd in de principiële werking, zijn er minstens 4 fasen nodig om de motor in 2 richtingen te kunnen laten draaien. Om deze 4 fasen te verkrijgen, bestaan er voor een permanente magneet stappenmotor 2 mogelijkheden, nl. de unipolaire stappenmotor en de bipolaire stappenmotor. De mechanische opbouw van deze motoren is volledig gelijk; het enige verschil is de manier waarop de wikkelingen op de stator aangebracht zijn.
3.4.2.1
De unipolaire stappenmotor
Bij een unipolaire stappenmotor zijn de statorwikkelingen voorzien van een middenaftakking, er wordt een ander deel van de wikkeling bekrachtigd om de richting van het magnetisch veld van een poolpaar om te keren. Meestal wordt de middenaftakking van de wikkeling verbonden met de positieve voedingsspanning. Wanneer een deel van de wikkeling bekrachtigd dient te worden, wordt het overeenkomstige uiteinde van de wikkeling met de massa van de schakeling verbonden.
figuur 3.10: bekrachtigen van een fase van een unipolaire stappenmotor
De sequentie waarin de deelwikkelingen bekrachtigd worden om een unipolaire stappenmotor linksom te laten draaien is de volgende: 1A , 1A + 2B, 2B, 2B + 1B, 1B, 1B + 2A, 2A, 2A + 1A. Dit is ook afgebeeld op de volgende figuren.
figuur 3.11.1: fase 1A bekrachtigd
Optisch PCB-controlesysteem
35
Bespreking van de gebruikte hardware
figuur 3.11.2: fasen 1A en 2B bekrachtigd
figuur 3.11.3: fase 2B bekrachtigd
figuur 3.11.4: fasen 2B en 1B bekrachtigd
figuur 3.11.5: fase 1B bekrachtigd
Optisch PCB-controlesysteem
36
Bespreking van de gebruikte hardware
figuur 3.11.6: fasen 1B en 2A bekrachtigd
figuur 3.11.7: fase 2A bekrachtigd
figuur 3.11.8: fasen 1A en 2A bekrachtigd
Optisch PCB-controlesysteem
37
Bespreking van de gebruikte hardware
3.4.2.2
De bipolaire stappenmotor
De bipolaire stappenmotor is qua opbouw vrijwel identiek aan de unipolaire stappenmotor, enkel de middenaftakking van de wikkeling ontbreekt. Dit heeft als gevolg dat als we de richting van het magnetisch veld van een poolpaar willen omkeren, we de stroom door de wikkeling moeten omkeren. Om dit te kunnen doen, plaatsen we iedere wikkeling van de bipolaire stappenmotor in een H-brug.
figuur 3.12: voostelling H-brug
In de H-brug kan de stroom door de wikkeling gemakkelijk van richting veranderd worden door het juiste paar schakelaars te sluiten. Als schakelaars A en D gesloten zijn, vloeit de stroom in de wikkeling van links naar rechts. Als B en C gesloten worden, dan vloeit de stroom in de andere richting. Natuurlijk is het zo dat schakelaars A en B of C en D niet gelijktijdig gesloten mogen worden anders ontstaat er een kortsluiting van de voedingsspanning naar massa. Het is ook mogelijk om een unipolaire stappenmotor te gebruiken als een bipolaire stappenmotor, dit kan heel makkelijk door de middenaftakking in de wikkeling van de unipolaire stappemotor niet te gebruiken. Om de motor linksom te doen draaien, wordt deze aangestuurd met de volgende sequentie: Terminal Terminal Terminal Terminal
1a 1b 2a 2b
+ + - - + - - + + - + + - + - - + + tijd --->
+ + -
+ + -
+ +
+ +
+ + -
+ + -
+ +
+ +
+ + -
+ + -
+ +
figuur 3.13: bipolaire stappenmotor waarvan 1 wikkeling bekrachtigd is.
Optisch PCB-controlesysteem
38
Bespreking van de gebruikte hardware
3.4.3
Variabele reluctantie stappenmotor
De rotor van een variablele reluctantie stappenmotor bestaat uit vertand weekijzer. De tanden van de rotor kunnen vergeleken worden met de polen op de rotor van een permanente magneet stappenmotor. Het ontwikkelen van een koppel is gebaseerd op het reluctantie-principe. Volgens dit principe zal een tand van de rotor zich richten naar een tand van een bekrachtigde statorpool. Door de vertanding zowel stator als rotor kunnen een groot aantal stappen per omwenteling gerealiseerd worden. De variabele reluctantie stappenmotor heeft minimaal 3 fasen nodig om in twee richtingen te kunnen draaien. De reden hiervoor is dat de rotortand door een statorfase wordt gemagnetiseerd. De rotortanden hebben geen vaste magnetische waarde en hebben daarom ook geen voorkeurstand ten opzichte van een bekrachtigde statorpool. De draairichting wordt bepaald door de volgorde waarin de bekrachtiging van de wikkelingen plaatsvind en niet door de polariteit van de bekrachtiging. Er bestaan variabele reluctantie stappenmotoren met tot duizend stappen per omwenteling. Om de motor te doen draaien dienen de wikkelingen in volgende sequentie aangesproken te worden, waarbij 1 ervoor staat dat de wikkeling bekrachtigd wordt. Winding 1 Winding 2 Winding 3
1 0 0 1 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 1 0 0 1 0 tijd --->
Dit wordt geillustreerd in de volgende figuren.
figuur 3.14.1: wikkeling 1 bekrachtigd
figuur 3.14.2: wikkeling 2 bekrachtigd
Optisch PCB-controlesysteem
39
Bespreking van de gebruikte hardware
figuur 3.14.3: wikkeling 3 bekrachtigd
3.4.4
De hybride stappenmotor
De hybride stappenmotor is een combinatie van de permanente magneet- en de variabele reluctantie -stappenmotor. Hierdoor worden de eigenschappen van beide motortypes verenigd in één motor. De rotor van een hybride stappenmotor bestaat uit een in de langsrichting gemagnetiseerde permanente magneet met aan de polen vertande eindstukken van weekijzer. De stator bestaat uit een aantal fasen met vertande polen. De statorpolen omvatten beide eindstukken. Het stappen in een bepaalde richting wordt gerealiseerd door in een bepaalde volgorde de fasen te bekachtigen.
figuur 3.14: voostelling van een hybride stappenmotor
Optisch PCB-controlesysteem
40
Uitvoering van de opdracht
Hoofdstuk 4
Uitvoering van de opdracht 4.1
Inleiding
In dit hoofdstuk wordt de praktische uitwerking van de opdracht besproken. Dit houdt in dat de in firmware gemaakte functies en hun integratie met de seriële commando's overlopen worden. Ook wordt er een overzicht gegeven van de mechanische opstelling.
figuur 4.1: Blokschema van het optisch PCB-controle systeem
Optisch PCB-controlesysteem
41
Uitvoering van de opdracht
4.2
Mechanische opbouw
De mechanische opstelling van het optisch PCB-controlesysteem is zo goed als volledig opgebouwd uit materialen die gerecupereerd zijn uit oudere toestellen of prototypes. De opstelling bestaat uit twee evenwijdig lopende rails die zorgen voor de verplaatsing van de camera in X-richting. Op de wagentjes van deze twee rails is er een derde rail gemonteerd die het mogelijk maakt om de camera ook in de Y-richting te bewegen. Het is van groot belang dat de motoren die zorgen voor de verplaatsing van de camera in X-richting synchroon draaien, anders wordt de Y-rail scheef getrokken. De nulpositie van de wagentjes is vastgelegd door een markering die vast gemonteerd is op de rail. Bij de initialisatie van het bord wordt de nulpositie gedetecteerd door een optische sensor die op het wagentje gemonteerd is. Voor de verlichting van de te testen print is er gekozen om aan beide zijden van de opstelling een TL-lamp te monteren zodat er een zo egaal mogelijke verlichting van de print is. Om het licht beter te spreiden is er tussen de print en de TL-verlichting een soort melkglas geplaatst.
rail wagentje stappenmotor camera nulpositie verlichting figuur 4.2: schematische voorstelling van de mechanische opbouw
Optisch PCB-controlesysteem
42
Uitvoering van de opdracht
4.3
Functies gemaakt in de firmware
4.3.1
functie om motoren te starten
De cam_movemotors(Xmoveposition,Ymoveposition) functie is bedoeld om de camera naar elke willekeurige absolute positie tov van de nulpositie te kunnen verplaatsen. Deze functie bepaalt aan de hand van de argumenten welke motoren er moeten draaien en bepaalt ook de draaizin van de motoren. cam_movemotors (Xmoveposition, Ymoveposition)
Xmotor en Ymotor idle?
neen
Einde
ja
Xposition = Xmoveposition en Yposition = Ymoveposition?
Xposition ? Xmoveposition en Yposition = Ymoveposition?
neen
neen
Zie volgende pagina
ja
ja
Ystepdirection =0
(PR,X; (PR,Y; terugzenden naar pc-software
Interruptpointer naar cam_motorsmoving laten wijzen Einde
neen
Xmoveposition > Xposition?
Xstepdirection = -1 Draairichting beide Xmotoren naar beneden
ja
Xstepdirection = +1 Draairichting beide Xmotoren naar boven
Verhoog Vref voor drivers Xmotoren
Xmotor.status = motor_working
Interruptbron inschakelen op de gebruikte pwm uitgangen
Start PWM op uitgangen voor Xmotoren
Einde
figuur 4.3: flowchart cam_movemotors deel 1
Optisch PCB-controlesysteem
43
Uitvoering van de opdracht
Xposition = Xmoveposition en Yposition ? Ymoveposition?
Vervolg van de vorige pagina
Xposition ? Xmoveposition en Yposition ? Ymoveposition?
neen
ja
neen
Einde
ja
Xstepdirection =0
Xstepdirection =0 Ystepdirection =0
Interruptpointer naar cam_motorsmoving laten wijzen
Interruptpointer naar cam_motorsmoving laten wijzen
Ymoveposition > Yposition?
Ystepdirection = -1 Draairichting Ymotor naar beneden
neen
ja
Ystepdirection = +1 Draairichting Ymotor naar boven
Verhoog Vref voor drivers Ymotor
Ymotor.status = motor_working
neen
Xmoveposition > Xposition?
Xstepdirection = -1 Draairichting beide Xmotoren naar beneden
neen
Xstepdirection = +1 Draairichting beide Xmotoren naar boven
Ymoveposition > Yposition?
Ystepdirection = -1 Draairichting Ymotor naar beneden
Interruptbron inschakelen op de gebruikte pwm uitgang
Start PWM op uitgang Ymotoren
ja
ja
Ystepdirection = +1 Draairichting Ymotor naar boven
Verhoog Vref voor drivers Xmotoren Verhoog Vref voor driver Ymotor
Xmotor.status = motor_working Ymotor.status = motor_working
Einde Interruptbronnen inschakelen op de gebruikte pwm uitgangen
Start PWM op uitgangen Ymotor en Xmotoren
Einde
figuur 4.3: flowchart cam_movemotors deel 2
Optisch PCB-controlesysteem
44
Uitvoering van de opdracht
4.3.2
interruptroutine om motoren te stoppen
De cam_motorsmoving functie is een interruptroutine die aangeroepen wordt, wanneer de motoren gestart zijn door de cam_movemotors functie. De bedoeling van deze functie is om wanneer een motor de juiste positie bereikt heeft deze te stoppen. En wanneer beide motoren zich in de juiste positie bevinden, dit door te geven naar de PC-software via de seriële verbinding.
cam_motorsmoving
Xmotor.status = motor_working?
neen
neen
Ja
Ja
Staat Xmotor op homepositie?
Ymotor.status = motor_working?
neen
Ja
Staat Ymotor op homepositie?
Xposition = Xmoveposition en Yposition = Ymoveposition
neen
Ja
neen
Alle interruptbronnen op PWM uitgangen uischakelen
Einde
Ja
Xposition = Xposition + Xstepdirection
(PR,X; (PR,Y; terugzenden naar pc-software
Yposition = Yposition + Ystepdirection
Einde Xposition = Xmoveposition?
neen
Ja
Yposition = Ymoveposition?
neen
Ja
Stop PWM op uitgangen Xmotoren
Stop PWM op uitgang Ymotor
Interruptbronnen uitgangen Xmotoren uitschakelen
Interruptbron uitgang Ymotor uitschakelen
Verlaag Vref voor drivers Xmotoren
Verlaag Vref voor driver Ymotoren
Xmotor.status = Idle
Ymotor.status = Idle
figuur 4.4: flowchart cam_motorsmoving
Optisch PCB-controlesysteem
45
Uitvoering van de opdracht
4.3.3
functie om initialisatie van het bord te starten
De cam_search_sensor functie dient om het bord te initialiseren. Dit betekent het vastleggen van de nulpositie en het bord klaar maken om de positie van de camera te veranderen. Het bord dient enkel geïnitialiseerd te worden wanneer de microprocessor gereset geweest is. Als het bord reeds geïnitialiseerd is en de functie cam_search_sensor wordt opnieuw aangeroepen, wordt de camera naar de eerder vastgelegde nulpositie verplaatst. Iedere andere functie die aangeroepen wordt om de motoren te besturen voordat het bord met deze functie geïnitialiseerd is, wordt genegeerd.
cam_search_sensor
neen
Zijn motoren al geïnitaliseerd?
Zet van alle motoren draairichting naar beneden
ja
Xmotor en Ymotor idle?
ja Verhoog Vref voor alle drivers
Enable alle drivers
neen
Einde
Cam_movemotors (0,0)
Einde
Interruptpointer naar cam_sensor_found laten wijzen
Interruptbron inschakelen op de gebruikte pwm uitgangen
Start PWM op uitgangen Ymotor en Xmotoren
Einde
figuur 4.5: flowchart cam_search_sensor
Optisch PCB-controlesysteem
46
Uitvoering van de opdracht
4.3.4
interruptroutine om initialisatie van het bord te beëindigen
De cam_sensor_found functie is een interruptroutine die aangeroepen wordt wanneer het bord geïnitialiseerd wordt met de cam_search_sensor functie. Deze functie stopt een motor wanneer die zijn nulpositie bereikt die vastgelegd is door een markering die gedetecteerd wordt door een optische sensor op het wagentje. Wanneer alle motoren gestopt zijn, worden die verplaatst naar een aantal stappen voor de markering. Anders zou het kunnen voorkomen, wanneer er al een sensor bedekt is bij de initialisatie, de motor nog 1 stap verplaatst, waardoor er een afwijking zou ontstaan op de nulpositie.
cam_sensor_found
neen
Heeft Xmotor-links optisch nulpunt bereikt?
neen
Heeft Ymotor optisch nulpunt bereikt?
ja
ja
Stop Xmotor-links en verlaag Vref van de overeenkomstige driver
neen
Heeft Xmotor-rechts optisch nulpunt bereikt?
Ymotor.status = idle Yposition = -10
neen
Xmotor en Ymotor idle?
ja Stop Xmotor-rechts en verlaag Vref van de overeenkomstige driver
ja
Cam_movemotors (0,0)
Einde neen
Hebben beide Xmotoren optisch nulpunt bereikt?
ja
Xmotor.status = idle Xposition = -10
figuur 4.6: flowchart cam_sensor_found
Optisch PCB-controlesysteem
47
Uitvoering van de opdracht
4.4
Seriële commando's geïntegreerd in de firmware
De seriële communicatie tussen de PC-software en de microprocessor maakt gebruik van een RS232 interface zonder handshaking. Alle seriële commando's zijn opgebouwd uit één of meerdere woorden die samengenomen zijn. Op deze manier is het makkelijker om met een terminalprogramma de communicatie tussen de PC-software en de microprocessor te volgen en te analyseren.
Serieel commando
richting
Korte beschrijving
DOWN,X,Z;
PC → microprocessor
Relatieve verplaatsing volgens X-as naar nulpositie toe over een afstand Z.
DOWN,Y,Z;
PC → microprocessor
Relatieve verplaatsing volgens Y-as naar nulpositie toe over een afstand Z.
UP,X,Z;
PC → microprocessor
Relatieve verplaatsing volgens X-as van de nulpositie weg over een afstand Z.
UP,Y,Z;
PC → microprocessor
Relatieve verplaatsing volgens Y-as van de nulpositie weg over een afstand Z.
GOTOPOS,X,Y;
PC → microprocessor
Verplaatsing naar absolute positie (X,Y) tov de nulpositie.
HOME;
PC → microprocessor
Verplaats wagentje naar nulpositie.
SETHOME;
PC → microprocessor
Wagentje naar nulpositie laten zoeken met optische sensoren, initialisatie van het bord.
REQPOS;
PC → microprocessor
Zendt de huidige positie van de camera terug naar pc software.
(XP,xposition; (YP,yposition;
microprocessor → PC
Formaat waarin de huidige positie van de camera terug gezonden wordt, als antwoord op REQPOS;
(PR,X; (PR,Y;
microprocessor → PC
Wordt verzonden door de microprocessor wanneer de camera de gevraagde positie bereikt heeft.
tabel 4.1: overzicht en korte beschrijving van de seriële commando's
Optisch PCB-controlesysteem
48
Besluit
Hoofdstuk 5 Besluit Op het ogenblik van schrijven van dit besluit zijn we nog een snelheidsoptimalisatie aan het uitvoeren. Dit heeft naast een serieuze winst op het gehele proces ook tot gevolg dat we nog enkele extra functies zullen kunnen implementeren. Doorheen de ontwikkeling van ons systeem zijn we op moeilijkheden gestuit doordat wij werkten met recuperatiematerialen uit oudere Mutoh machines en een lage resolutie webcamera. We hebben deze moeilijkheden zo goed als mogelijk proberen te overkomen. Maar zelfs na snelheidsoptimalisatie mogen we ons systeem geen snelheidsduivel noemen. Er zijn bestaande systemen die sneller en grondiger controle uitvoeren. Maar daartegenover staat echter dat onze gehele uitvoering zeer weinig heeft gekost. Tijdens de ontwikkeling hebben we aangenaam kennis gemaakt met de bedrijfswereld. De combinatie van een mechanische opstelling, hardware, software en firmware maakte dit eindwerk tot een zeer breed en interessant eindwerk. Graag willen wij nog eens iedereen bedanken voor hun inbreng en begeleiding in de realisatie van ons eindwerk. Vooral gaat onze dank uit naar de mensen van de Hardware en Firmware afdeling in Mutoh Europe NV.
Tim Goderis & Ewoud Van Craeynest
Optisch PCB-controlesysteem
49
Literatuurlijst
Hoofdstuk 6 Literatuurlijst Boeken LAAN, Gertjan, 2001. Aan de slag met C++. Schoonhoven, Academic Service, 585 p. ISBN 90-395-1084-9
HOLZNER, Steven, 2001. C++ Grand Cru. Haarlem, Easy Computing, 740 p. ISBN 90-5167-437-6
Elektronische bronnen HOLLINGWORTH, Jarrod; BUTTERFIELD, Dan; SWART, Bob en ALLSOP, Jamie, 2000. C++Builder™ 5 Developer’s Guide. Cd-rom. Sams, 201 West 103rd St., Indianapolis, Indiana, 46290 USA.
WWW-sites BOURKE, Paul, Juli 1998. BMP Image Format. http://astronomy.swin.edu.au/~pbourke/dataformats/bmp/ (7/3/2005).
MICROSOFT Corporation, 2005. MSDN Library http://msdn.microsoft.com/library/default.asp ( doorlopend geraadpleegd )
STEPPERS. http://www.stepperworld.com (28/2/2005)
JONES, Douglas W, September 2004. Jones on Stepping Motors. http://www.cs.uiowa.edu/~jones/step (28/2/2005)
Optisch PCB-controlesysteem
50