Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
Hallo,
Ik ben bezig met een nieuwe robot met rupsbanden, nou heb ik 2 motoren die ik aanstuur met PWM.
Nou wil ik er zelf gemaakt of gekochte wheel encoders toepassen om de snelheid, draairichting en de afgelegde weg te meten (en dit eventueel omzetten in X,Y Coordinatie)
Nou heb ik wat zitten zoeken naar hoe encoders werken, en kom tot de conclusie dat ik interrupt moet gebruiken, alleen nou heb ik een probleem heb maar 1 interrupt pin op mijn PIC16F877A wou eventueel een aparte PIC gebruiken voor de motorregeling en dan met I2C.
Nou is mijn vroeg hoe moet ik z'n wheel encoders systeem maken en wat ik heb voor eisen nodig van de uC
Jeroen,
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
Met zo'n rotary encoders heb je 2 signalen, A en B, die in fase verschoven zijn. Je PIC heeft heel waarschijnlijk "interrupt on change" op PORTB.4 tot PORTB.7, die kan je gemakkelijk gebruiken om rotary encoders uit te lezen.
Hang een van de 2 signalen, laat ons zeggen A aan zo'n "interrupt on change"-pin, de andere, B, aan een andere pin. Als je een interrupt hebt, controleer dan van welke rotary encoder signaal A een stijgende flank heeft gekregen (dus hoog is), daarvan bekijk je signaal B, als dit hoog is draai je naar de ene kant, is het laag dan draai je naar de andere kant.
Als de draairichting niet uitmaakt, vergeet dan signaal B, en tel gewoon de flanken van de rotary encoder, met de tijd kan je zo een indicatie krijgen van de snelheid.
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
Dus PORTB INTCON CHANGE, dus als ik het goed begrijp krijgt de uC een interrupt elke keer de pin verandert van 0 naar 1 en van 1 naar 0 dus heel vaak, en dan 2 keer.
Maar dat gaat dan toch niet lukken met 2 encoders ?
De draairichting is niet zo belangrijk het is maar dat hij hij een rechte lijn kan rijden over 10meter en als hij uit moet wijken voor een obstakel dat hij daarna wanneer hij het obstakel voorbij is weer terug naar die lijn gaat
Videomodulator
AKA Naftebakje @Tweakers.net --- Zonder dwarsliggers geen spoor
Op 11 september 2006 17:06:08 schreef DJJeroen:
[...]Dus PORTB INTCON CHANGE, dus als ik het goed begrijp krijgt de uC een interrupt elke keer de pin verandert van 0 naar 1 en van 1 naar 0 dus heel vaak, en dan 2 keer.
Maar dat gaat dan toch niet lukken met 2 encoders ?
De draairichting is niet zo belangrijk het is maar dat hij hij een rechte lijn kan rijden over 10meter en als hij uit moet wijken voor een obstakel dat hij daarna wanneer hij het obstakel voorbij is weer terug naar die lijn gaat
Waarom zou dat niet werken. Je krijgt elk stapje een flank (zie datasheet van je rotary encoder voor hoeveel per omwenteling), dat tel je voor WielRechts en voor WielLinks. Zolang beiden gelijk blijven, heb je geen enkel probleem, als er verschillen in gaan zitten moet je gaan compenseren in je aansturing.
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
maar dan is de uC toch eigenlijk continu met de interrupts bezig of niet ?
Ik heb nog geen type encoders waarschijnlijk maak ik ze zelf.
Dat is nou juist het voordeel van een interrupt:
hij interrupt (onderbreekt hoofdprogramma), kijkt waar interrupt van afkomstig is, handelt de bijbehorende functie af en gaat weer verder waar hij was gebleven.
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
Op 11 september 2006 18:08:34 schreef JuuL:
Dat is nou juist het voordeel van een interrupt:
hij interrupt (onderbreekt hoofdprogramma), kijkt waar interrupt van afkomstig is, handelt de bijbehorende functie af en gaat weer verder waar hij was gebleven.
Ja dat had ik wel door
, alleen als die encoder met 400 rpm draait krijgt de uC weet ik hoeveel interrupts
Hier een andere strategie:
- Wek een timer interrupt op. B.v. iedere 1ms.
- Lees in de ISR de waarde van je encoders in.
- Vergelijk dat met de vorige waarde.
- Trek je conclusie.
Bij meerdere encoders geeft dit minder 'overhead'
Jeroen13
//Project Quadrocopter 2.0 in progress //dsESC4x //PIC32Flight
Je hebt 1000 keer per seconde informatie over de stand van je wielen, daar kan je best een toerental per minuut uit bepalen.