ROBOTICS CCFZ 13/5/2009

Vergelijkbare documenten
ROBOTICS CCFZ 27/3/2010

PIC PROGRAMMEREN. Door H. Dorst, m.m.v. Joop van Schaik. Versie 13 mei 2009

Over Betuwe College. Lego Mindstorm project

BBR programmeren met Ardublock

Nascholing voor leerlingen. Software-ontwikkeling met behulp van Lego Mindstorms

Beschrijving 2. Plaatsing componenten. 2-polige stelmotor. A = Luchtstroom. 1. Aansluitingen 2. Huis 3. Permanente magneet 4. Anker 5.

Boe-Bots - Arduino robots

1. Sluit de LED aan zoals afgebeeld 2. Sluit de USB-kabel aan op de Arduino 3. Klik op de knop uploaden 4. De LED begint te knipperen

Handleiding GSM kiezer TKGSM-431 versie 13V1.2. Afmeting breedte circa 20,4 cm hoogte circa 14 cm.

Märklin draaischijf 7286 met draaischijf decoder TT-DEC aansturen via het draaischijf symbool in het beeldscherm van de Central Station 3 (plus)

Workshop Arduino - deel 2

Handleiding Alma Rally & Alma Rally Off-road

A R D U I N O. addendum bij: Leren programmeren, meten en sturen met de Arduino. 3 e druk INHOUD

De mbot. Je wilt zeker meteen al aan de slag. Maar voordat we beginnen moet je 3 dingen weten.

Inleiding. Inhoudsopgave: Omschrijving. 1.1 Het toetsenbord De displays Lampjes Vaste programma's Vrije programma's 3.

Je kunt de mbot ook draadloos programmeren via Bluetooth of met 2.4G Wireless. Bekijk de instructies op mbot draadloos.

PIC Callgever Door PA1RUM

7,6. Samenvatting door A woorden 12 april keer beoordeeld. Natuurkunde. Natuurkunde Systemen. Systemen

TOMA. De TOMA regelaar is gebouwd volgens de strenge Europese veiligheidseisen en voorzien van een CE keurmerk.

Gebruikershandleiding

INBOUW HANDLEIDING GT625, GT626, GT627

Over Betuwe College. Lego Mindstorm project

Besturing van de Miniatuurwereld OC32. Apparaatdefinities (Generiek)

Welkom in de wereld van de fischertechnik ROBOTICS-lijn 3 Een beetje algemene informatie 3. Uitleg van de onderdelen 4

Märklin draaischijf 7286 met draaischijf decoder TT-DEC aansturen via het draaischijf symbool in het beeldscherm van de Central Station 3 (plus)

Beschrijving bedieningsunit, Serie AK30.

ROBOTICS CCFZ. Programmeren van een BoE bot. Versie maart 2009.

Programmeren met lego mindstorms.

Verkeerslichten. De Verkeerslichten & de PLC in het TIBBLTO / VICTO lokaal. Werkplek 1. Leer & werkboek.

Hand-out Introductieworkshop LED programmeren

In- en uitgangssignalen van microprocessoren

MAKERKLAS WORKSHOP ARDUINO. Maandag 7 december 2015

Gebruiksaanwijzing RGB(W) controller type LLD-10Z

Handleiding voor de installatie van de elektrische automatische deurdranger

g. Je kan nu door op de play knop te drukken je programma versturen naar de EV3 brick waarna het zal uitgevoerd worden.

De interface (stuurmodule)

gebruikershandleiding tablet / smartphone

Mindstorms-Ev3 Robot

techniek Motor en as LEGO O P D R A C H T Maak het programma van rechtsboven na, op het open stuk van het scherm.

VANTEK Discovery set. N. B. De OPITEC bouwpakketten zijn gericht op het onderwijs. N991240#1

1. Programmeerblokken

Slimme schakelingen (2)

BELANGRIJK: Bij de eerste keer dient u de inleerprocedure te doorlopen voordat u de set kan gebruiken! Handleiding MS16

SYSTEMEN 11/3/2009. Deze toets bestaat uit 3 opgaven (28 punten). Gebruik eigen grafische rekenmachine en BINAS toegestaan. Veel succes!

GT-912/GT-913/GT-914 Gebruikers handleiding

led 0 aan Opdracht: 1 Opdracht: 4

MBLOCK + MBOT. is een project van

Vermogen Elektronica : Stappenmotor

Handleiding Teknatool houtdraaibank Nova DVRxp Nederlands bij gebruik van de originele Engelse handleiding

draaimolen programmeren PC

SOMFY SONESSE 40 RTS

Van A naar B. Hoe je een auto maakt met DC-motoren en je het kunt programmeren door. de tijd, snelheid en afstand te meten! Naam. Je leert...

De bepaling van de positie van een. onderwatervoertuig (inleiding)

ELEKTRONISCH SLOT MET MINSTENS ECHTE INSTELMOGELIJKHEDEN EIGENSCHAPPEN VAN HET SLOT, FABRIEKSINSTELLINGEN

De condensator en energie

MIDI_PAR. MIDI_PAR_Instructie

INTELLISTART 4 INSTALLATIE

KIT OVO. De automatisering moet worden onderworpen aan onderhoud op een regelmatige basis om een goede werking te garanderen.

Servo motoren Futaba S3003

MIDI STURING voor SERVO s

1 Elektriciteit Oriëntatie 1.1 Elektrische begrippen Elektrische stroomkring

Hallo. Ik snap het Ik kan uitleggen via welke stappen ik een programma maak en dit op de micro:bit zet.

Bij dit examen horen bijlagen, een uitwerkbijlage en digitale bestanden.

Workshop Engino. 1 Aanvang workshop. 2 Bouwen. 1.1 Wat kan ik voor de workshop doen?

LocoServo Handleiding

Handleiding Otter POD motor

MK99 NL AUTOMATISCH IN WERKING TREDENDE STARTONDERBREKER MET ELEKTRONISCHE SLEUTEL EN OVERRIDE NOODCODE

Maqueen. robot. MAQUEEN: EENVOUDIG PROGRAMMEERBARE ROBOT VOOR STEM (Science Technology Engineering Mathematics) ONDERWIJS MET DE MICRO:BIT.

Hfdst. 2: COMBINATORISCH PROGRAMMEREN

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR

Eenparige cirkelvormige beweging

Vermogen snelheid van de NXT

Workshop FLL. Leer robots programmeren. Marieke Peelen Lennart de Graaf Daryo Verouden -

Technische handleiding

Microcontrollers. Bart Kardinaal E Verslag microcontrollers Rev 1.0 Status definitief.

Algemene beschrijving van de regelprogramma's

De RCX voor beginners De intelligente steen van LEGO. I. De RCX zonder computer

PACK TYXIA 541 et 546

Inbouwontvanger RTS voor rolluiken

Bedieningen Dutch - 1

Missie #1 : Maak een halve draai. 3. Kijk of de status op 'Aantal rotaties Aan' staat 4. Verander de waarde van 'Aantal rotaties' naar 5

SWF Krantechnik GmbH Postbox Mannheim Germany. Boehringer Straße Mannheim Germany

Logo quiz Project Inleiding op de Logo!

Inhoudsopgave. Handleiding: MC v2.0a. Pagina - 1 -

IVF temperatuurregeling incubator

Pagina 1 van 7. Nederlandse uitgave:

Technische Notities van PE1RRT

DinaSys Turntable Controller

Installatiehandleiding van de poortaandrijving ENL-BP2R

ACTUATORENSET 062 GEBRUIKERSHANDLEIDING

14 Oefeningen Basisinstructies

ELEKTRICITEIT-Stappenmotoren

DE HEKAUTOMAATSPECIALIST

BEP 600-GD EN 600-GDL CONTOUR MATRIX GAS DETECTOR INSTALLATIE EN GEBRUIKS AANWIJZING

NUMMERKIEZER. Scanned, ocr ed and converted to PDF by HansO, 2001

MODBUS remote I/O-unit type MODBUS4S110

Workshop Arduino voor beginners. door TkkrLab Enschede

De Loconet switchswitch van Uhlenbrock

Transcriptie:

ROBOTICS CCFZ Motorsturing Het is niet de bedoeling van onze programmeerwerkzaamheden om alleen maar een of meer lampjes te laten branden om ze daarna weer uit doen gaan. We willen een racerobot bouwen, een racerobot, die in staat is een uitgezet traject binnen de kortste keren af te leggen. De robot is voorzien van een PIC processor. In het vorige hebben we bereikt, dat we weten welke hulpmiddelen nodig zijn om de PIC processor te programmeren en we leerden hoe we het programma schrijven en overdragen naar het geheugen van de processor. Die voert dan uit, wat we in ons programma hebben beschreven. Het is nu tijd om de motorsturing ter hand te nemen. Daarna volgt nog de sensors te onderzoeken. Tenslotte wordt voor een aantal soorten robots met verschillende aandrijvingen door middel van flow sheets het geheel geïntegreerd. Drie soorten motors komen voor ons in aanmerking voor de racerobot. Elk heeft specifieke eigenschappen en vraagt eigen soorten programmatuur. Verder is het zo, dat de vorm van de aandrijving van de robot met het stuurmechanisme eigen programma s vereisen. We beschrijven eerst de drie soorten motors: de servomotor de stappenmotor met vermogenstoevoer de gelijkstroommotor met H brug. De servomotor Servomotors heb je in twee soorten, waarvan de ene eenvoudig in de andere kan worden omgebouwd. In de CCFZ beschrijving van het programmeren van de BoEbot staat beschreven hoe dat moet. De as van de ene soort kan ca. 360 draaien, bij de tweede soort kan de as doordraaien. De eerste soort wordt in de hobbywereld gebruikt voor stuurmechanismen en bij brandstofmotors voor de gastoevoer. De tweede soort kan worden gebruikt voor de voortbeweging, zoals bij de BoE bot gebeurt. Deze soort zullen we hier aansturen met de PIC processor. Een servomotor bestaat in wezen uit een gelijkstroommotor met een elektronische schakeling, die de draairichting en de snelheid regelt. Een servomotor heeft drie aansluitingen. Twee voor de energietoevoer (de plus en de min), en een voor de commandopulsen van de processor. Deze laatste (logische) aansluiting vraagt 0 of 5 volt voor de 0 en de 1. Deze beschrijving is getest op de servomotor van Parallax (continuous rotation, www.parallax.com). De aansturing hiervan gebeurt op basis van pulsbreedte. Een pulsbreedte van 1,5 ms (milliseconde) doet de motor stilstaan. Wordt de pulsbreedte verminderd tot 1,3 ms, dan draait de motor de ene richting uit in toenemende snelheid, wordt de pulsbreedte vermeerderd tot 1,7 ms, dan neemt de draaisnelheid steeds toe in de andere richting. Bij 1,3 en 1,7 ms worden de maximale snelheden bereikt. Het aansturen van een servomotor wordt hiermee dus een studie met de stopwatch van MPLAB. 21

Parallax servomotor aansturen juni 2008 Hans Dorst list p=16f84 errorlevel 302 config 3FFD ROBOTICS CCFZ porta equ 0x05 equ 0x06 trisa equ 0x85 trisb equ 0x86 rp0 equ 5 status equ 0x03 temp equ 0x34 loop1 equ 0x30 loop2 equ 0x31 poorta alles ingang 0xff trisa bcf 0x00 alles uitgang trisb bcf,0x00 puls routine, die puls van 650 ms stuurt naar rb0 call call,0x01 pulsduur,0x00 wachten puls pulsduur hier 1,5 ms instellen 0x36 loop2 20h in geheugenplaats 31h invoeren nestlus te verwachten is dat met een lus tot 256 onvoldoende is 0xff geneste lus, ook tot 20h loop1 decfsz loop1,f verminder waarde in loop1 geheugen met 1 wordt overgeslagen bij loop1 = 0 decfsz loop2,f verminder waarde in loop2 geheugen met 1 nestlus return wachten 0xff loop2 ffh in geheugenplaats 31h invoeren 22

ROBOTICS CCFZ nestluswachten te verwachten is dat met een lus tot 256 onvoldoende is 0x36 geneste lus, ook tot 72h loop1 wachten wachten decfsz loop1,f verminder waarde in loop1 geheugen met 1 wachten wordt overgeslagen bij loop1 = 0 decfsz loop2,f verminder waarde in loop2 geheugen met 1 nestluswachten return end Hierboven de listing met twee keer twee geneste lussen. Een keer voor de pulsbreedte, en een keer voor de pauze. Beide lussen maken gebruik van de variabelen loop1 en loop2. Bij pulsduur heb ik voorlopig de waarden 36 voor loop2 en ff voor loop 1 ingevuld. Met de stopwatch ga ik nu na welke de standen zijn voor geheugenplaatsen 30 en 31 bij het bereiken van de 1,5 ms. Het onderzoek zal zich hierop richten. Toets F6 indrukken om de stopwatch aan het begin van het programma te plaatsen. (zal telkens moeten gebeuren.) En nu herhaaldelijk klikken op F7 om de cursor, en dus het begin van het programma te plaatsen op, decfsz. Bij mij staat de stopwatch dan op 20 μ s. Als je goed kijkt, dan zie je meteen, dat elke twee klikken op F7 de stopwatch 3 μ s verder is gekomen. Controleer dit alles. Je kunt nooit weten of er bij jouw schakeling iets anders is dan bij mij. Hieronder dus het deel van de listing, waar we nu naar kijken. 23

ROBOTICS CCFZ pulsduur hier 1,3, 1,5 en 1,7 ms instellen 0x01 maak poort0: 1 0x12 voor 1,5 ms loop2 waarde in geheugenplaats 31h invoeren nestlus 0x05 geneste lus ook voor 1,5 ms loop1 decfsz loop1,f verminder waarde in loop1 geheugen met 1 wordt overgeslagen bij inhoud loop1 = 0 decfsz loop2,f verminder waarde in loop2 geheugen met 1 nestlus wordt overgeslagen bij inhoud loop2 = 0 wachten Om het uitzoeken niet te veel te vertragen heb ik in deze listing de waarden voor loop1 en voor loop2 toch maar wat kleiner gemaakt. Klik weer op F6 en telkens op F7 en kijk wat er gebeurt in de schermen van de stopwatch, het Special Function Register en de File registers. De veranderingen in de waarden door de laatst genomen stap worden steeds rood gekleurd. Dat vergemakkelijkt het waarnemen. Onderscheid maak ik tussen de grote lus en de kleine lus. De kleine lus wordt telkens opnieuw doorlopen bij elke vermindering van de waarde voor de grote lus. Na zorgvuldig kijken en telkens opnieuw checken kom ik tot de volgende resultaten: Ten eerste: Elke afname voor loop1 met een, vraagt 2 stappen (2 x F7) en kost 3 μs. Vervolgens: Om opnieuw een volgende serie te gaan in de kleine lus zijn er 5 stappen (5 x F7) in de grote lus nodig, die 14 μs duren. Tenslotte: Als je bijvoorbeeld van 5 naar 0 laat, dan doet het mechanisme er 4 stappen over. Dat laatste vraagt een toelichting. Heb je de aftelwaarde 5 ingevuld en je start, dan gaat de teller meteen naar vier. Kijk maar! Als je bij nul bent, dan wordt de lus meteen verlaten. Dat betekent, dat de kleine lus een keertje te weinig wordt doorlopen: 4 keer. Bij de berekende waarde moet 1 (een) worden bijgeteld. We kiezen ervoor om de kleine lus op 100 μ s in te stellen. De grote lus moet dan respectievelijk 13, 15 of 17 keer worden doorlopen om 1,3, 1,5 of 1,7 ms te bereiken. Het kan zijn, dat op deze manier niet precies de waarden kunnen worden bereikt. Met 5 % grens nauwkeurigheid nemen we genoegen. 24

ROBOTICS CCFZ Telkens als we van de kleine lus naar de grote gaan besteden we 14 μ s. Dat wil zeggen, dat de kleine lus zelf 100 14 = 86 μ s moet worden. Het aantal stappen (aantal keer F7) is hiermee 2/3 x 86 = 58. Dat komt overeen met 0x3a. Wat hieraan niet goed is weet ik niet, maar het resultaat had 1f moeten zijn. Daarbij is de kleine lus met de 14 μs van de grote lus totaal 99 μ s. Graag mailtje naar hando@planet.nl. Deze kleine lus moet voor 1,3, 1,5 en 1,7 ms puls 13, 15 en 17 keer doorlopen worden. In de grote lus moeten daarvoor respectievelijk 14, 16 en 18 worden gekozen (eentje meer dus, het middelste resultaat van de beschouwing.) Dat worden resp. 0x0d, 0x0f en 0x11. En zo werkt het ook. Voor de pauze tussen de pulsen doen we hetzelfde. Kleine lus 110 μ s. Met de grote lus 200 keer doorlopen. Daarom grote lus op 201 = 0xd9. Het programma wordt zodoende voor 1,3 ms pulsen en 20 ms pauze: Parallax servomotor aansturen juni 2008 Hans Dorst list p=16f84 errorlevel 302 config 3FFD porta equ 0x05 equ 0x06 trisa equ 0x85 trisb equ 0x86 rp0 equ 5 status equ 0x03 temp equ 0x34 loop1 equ 0x30 loop2 equ 0x31 poorta alles ingang 0xff trisa bcf 0x00 alles uitgang trisb bcf,0x00 puls,0x01 call pulsduur,0x00 call wachten puls routine, die puls van 650 ms stuurt naar rb0 25

pulsduur hier 1,5 ms instellen 0x11 loop2 20h in geheugenplaats 31h invoeren ROBOTICS CCFZ nestlus te verwachten is dat met een lus tot 256 onvoldoende is 0x1f geneste lus, ook tot 20h loop1 decfsz loop1,f verminder waarde in loop1 geheugen met 1 wordt overgeslagen bij loop1 = 0 decfsz loop2,f verminder waarde in loop2 geheugen met 1 nestlus return wachten 0xd9 loop2 20h in geheugenplaats 31h invoeren nestluswachten te verwachten is dat met een lus tot 256 onvoldoende is 0x1f geneste lus, ook tot 20h loop1 wachten wachten decfsz loop1,f verminder waarde in loop1 geheugen met 1 wachten wordt overgeslagen bij loop1 = 0 decfsz loop2,f verminder waarde in loop2 geheugen met 1 nestluswachten return end Hiermee kunnen we de servomotortjes van Parallax met de maximale snelheid vooruit, stilstaan en maximale snelheid achteruit aansturen. Tussenliggende pulsbreedten resulteren in tussenliggende snelheiden. De pauze kan daarvoor hetzelfde blijven. De stappenmotor!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! In bewerking!!!!!!!!!!!!!!!!!!!!!!!!!!!! De gelijkstroommotor met H brug De H brug is beschreven in een apart document, dat opgehaald kan worden van onze site. Deze H brug is geschikt om met de PIC samen te werken. Van ons Breadboard kan de 5 volt voedingsspanning worden gebruikt om de H brug van 5 volt logicaspanning te voorzien. Op de punten 9 en 10 van de H brug dient de aansluiting plaats te vinden. Op de punten 1 en 2 wordt de draairichting van motor 1 en van motor 2 bestuurd en op aansluitingen 3 en 4 wordt voor motor 1 en voor motor 2 de energietoevoer voor de motors geregeld door middel van pulsbreedtemodulatie. Dit is allemaal beschreven in het document CCFZ Motorsturing, dat over de H brug gaat. Van de PIC processor gebruiken we de volgende aansluitingen: 26

poort b0 voor motor 1, de draairichting poort b1 voor motor 1, de snelheidsregeling poort b2 voor motor 2, de draairichting poort b3 voor motor 2, de snelheidsregeling. ROBOTICS CCFZ De LED lampjes laten we aangesloten, zodat we kunnen zien wat er gebeurt. Naast deze LED lampjes sluiten we motor 1 en motor 2 aan. Deze zijn van de robot, die in ontwikkeling is. De vermogenstoevoer is meteen ook aangesloten (linksonder rode en zwarte draden), zodat het effect van ons programma op de aandrijving kan worden vastgesteld. De verbinding naar de Whisp 648 hebben we natuurlijk ook nog nodig. Het geheel ziet er dan als volgt uit: Het gewenste programma is: Eerste experiment Voorjaar 2008 Hans Dorst Hierboven, net als deze tekst, dus een inleidende tekst achter de (punt komma), welke tekst geen deel uitmaakt van het programma, maar als toelichting is bedoeld. We gaan een programma schrijven, waarmee twee lampjes, aangesloten op RA1 en RB4 om en om elke halve seconde aan en uitgaan. list errorlevel 302 config 3FFD p=16f84 porta equ 0x05 equ 0x06 trisa equ 0x85 trisb equ 0x86 rp0 equ 5 status equ 0x03 27

porta alles ingang 0xff trisa bcf ROBOTICS CCFZ alles uitgang 0x00 trisb bcf rijden rijden 0x03 plaats de waarde in geheugen w rechtdoor kopieer w naar rijden opnieuw end Het grootste deel van dit programma zal bekend moeten zijn uit de eerste hoofdstukken. Maar met de drie laatste regels voor : end geven we aan wat we willen: zowel op poort b0 als op poort b1 willen we een 1 (een) geven. Beide poorten hoog wil zeggen: H brug laat stroom continue door en draairichting is kant 1 op. Dat is eenvoudig. Bij het volgende programma proberen we de pulsbreedtemodulatie te laten functioneren om de motor minder energie te kunnen laten opnemen (telkens even de stroomtoevoer via de H brug onderbreken) en daardoor langzamer te laten draaien. Dat bereiden we voor met onderstaand programma. Eerste experiment Voorjaar 2008 Hans Dorst Hierboven, net als deze tekst, dus een inleidende tekst achter de (punt komma), welke tekst geen deel uitmaakt van het programma, maar als toelichting is bedoeld. We gaan een programma schrijven, waarmee twee lampjes, aangesloten op RA1 en RB4 om en om elke halve seconde aan en uitgaan. list p=16f84 errorlevel 302 config 3FFD porta equ 0x05 equ 0x06 trisa equ 0x85 trisb equ 0x86 rp0 equ 5 status equ 0x03 temp equ 0x34 porta alles ingang 0xff trisa bcf alles uitgang 28

bcf 0x00 trisb rijden ROBOTICS CCFZ rijden 0x03 plaats de waarde in geheugen w rechtdoor kopieer w naar 0x02 nu zetten we de poort even op 0 energietoevoer even stoppen rijden end Achter rijden zie je de aansturing van de poorten b0 en b1, zoals in het vorige programma. Laat de motor draaien, zodat je kunt controleren wat er gebeurt. Meet de spanning over de motor als die draait. Het programma maakt een voortdurende lus. De motors blijven derhalve draaien totdat de spanning wordt weggehaald. Ga dat even na. Bij mij is de spanning over de motor 6,95 volt bij een voedingsspanning van 9,0 volt. We voegen nu toe de volgende twee regels, waarin poort b1 laag, nul of 0 wordt. Daarna gaan we weer naar om opnieuw te beginnen. Dit is het resultaat voor de eerste twee regels na : rijden 0x03 0x02 Probeer na te gaan of de motor inderdaad langzamer draait doordat de spanning voor de helft van de tijd onderbroken wordt. De gemiddelde spanning is dus de helft van wat die eerst was. Dat wil zeggen, dat de energie een kwart bedraagt. Ik meet 4.03 volt. Dat kan te weinig zijn, want de energie op de motor neemt kwadratisch af met de spanning. Willen we die percentages veranderen, dan kunnen we de volgende truc toepassen: rijden 0x03 0x02 Hiermee wordt twee derde van de tijd de spanning hoog. Dat wil zeggen 66%. De energie wordt daarmee ongeveer 44 % van volt. In het volgende geval: rijden 0x03 0x02 wordt de spanning in 33 % van de tijd toegevoerd. Dat wil zeggen, dat de energie naar de motor ongeveer 11 % van het maxiale wordt. Meet de spanning over de 29

ROBOTICS CCFZ motor. (2,38 volt meet ik) Voor nadere informatie over deze berekening: zie de beschrijving van de H brug in Motorsturing. Dit kan ook: tweederde van de tijd spnning over de motor, 4,45 volt. rijden 0x03 plaats de waarde in geheugen w rechtdoor kopieer w naar 0x02 nu zetten we de poort even op 0 energietoevoer even stoppen rijden Willen we hetzelfde effect bereiken met de tegengestelde draairichting, dan moeten we achtereenvolgens kiezen: 0x01 ipv 0x03 en 0x00 ipv 0x02 Ga dit allemaal na met hulp van de tabel op bladzijde 6 van deze handleiding (deel 1). Gestuurd door onze PIC processor kunnen we dus op deze manier een gelijkstroommotor aansturen. 30