Hallo,
Ik ben bezig de snelheid van een wiel te bepalen, dmv een encoder.
Nu ben ik al een stukje op weg, alleen ik weet niet hoe de encoder aan te sluiten op mijn uC.
Heb als test een ledje eraan gehangen, en dit werkt.
De schakeling die ik nu heb neemt wel vrij veel stroom op.
Dus misschien dat ik het niet helemaal goed heb gedaan.
Zo is het nu aangesloten.
Encoder: TIL 139 [ klik]
uC: PIC 16f877
Voedingsspanning: 5V.
De Datasheet heb ik al gevonden.
Hoe kan ik deze het beste aan de uC controller hangen?
Opstelling van encoder
Alvast bedankt.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Zoals je het hebt aangesloten gaat forse stroom door de zendkant van de sensor lopen. Kan dat niet wat minder?
Ik zou de collector van de sensor aan de 5V hangen. En dan een weerstand in z'n emitter-naar-de-basis-van-de-bc547. Die R3 mag weg van mij. Als je echt bang bent voor "perongeluk aan", kan je hem tussen de basis van de bc547 en de GND hangen.
Als je hem toch plaatst, kan je de collector van de BC547 direct aan de microcontroller hangen. Hij kan trouwens best 10k zijn.
Bedankt voor je antwoord.
Op 29 oktober 2010 00:49:20 schreef rew:
Zoals je het hebt aangesloten gaat forse stroom door de zendkant van de sensor lopen. Kan dat niet wat minder?
Je bedoelt die 68 Ohm weerstand groter maken?
Heb het schema ook wat aangepast.
Voor gebruik met uC:

En dan die 68 Ohm naar 180 Ohm ongeveer?
Want ik gebruik altijd een digitale camera om te kijken of de IR led daadwerkelijk brand.
En ik krijg zèlfs met 68 Ohm niet het idee van "woow" wat brand die led fel.
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Laat je niet om de tuin leiden door die camera. Daar zit vast een IR-filter in. Het beetje IR-licht dat je ziet, is sterk verzwakt door die filter.
Ik zou voor R1 330R ... 680R nemen. De optocoupler zal het in dank afnemen.
Ik heb nu een aantal weerstanden geprobeerd, met bovenstaand schema.
100 / 150 en 270 en 330.
Bij 100 en 150 brandt de led aan de transistor vrij fel.
Bij 270 nog net, en bij 330 Ohm eigenlijk niet meer.
(In geval van een "wit" vlak (= reflectie; detectie))
Met de transistor + alleen een 10 kOhm varieert de spanning tussen 0,2 - 1,3 volt.
Als ik er een led parallel bij zet: 2,9 - 3,1 volt.
Ik heb hem ook geprobeert met 1 kOhm: 2,5 - 4,9 volt.
Alleen een LED geeft 0,6 - 1,8 Volt.
Ik geloof dat onder 0,5 volt een "logische 0" wordt gezien,
en boven de 4 Volt een logische "1".
Hoe kan ik dat met deze schakeling voor elkaar krijgen?
Toch een opamp als comperator gebruiken? Of kan het ook met weerstanden?
Ik wil het eigenlijk zo voor elkaar krijgen, dat ik èn een LED houd,
èn de transistor op een digitale poort van mijn uC aan kan sluiten.
Kan dit ook alleen met een LED? of moet er ook altijd een losse weerstand parallel?
MGP
LDmicro user.
Probeer dit eens:
R1 160ohm
R2 1K
R3 1K
Als je een led in serie plaatst met R3 dan moet je R3 verlagen naar 150 ohm.
Met deze waarden kun je proberen.
Als je dan een µC aan de collector van T1 verbindt, dan heb je een pullup weerstand nodig zoals in je eerste schakeling (10K is ok)
Ik heb helaas geen e24, maar een e12 reeks dus alleen 150 of 180.
Nu dus een 150 Ohm geplaatst voor de LED.
Verder het andere detectie-ledje niet geplaatst.
detectie = 0,2 V (wit blokje)
geen detectie = 4,0 V (zwart)
Is dit al voldoende voor 0 en 1 ?
Kan dit lukken met alleen weerstanden?
Op 31 oktober 2010 17:22:53 schreef Eagle Eye:
Ik heb nu een aantal weerstanden geprobeerd, met bovenstaand schema.
Ik heb hem ook geprobeert met 1 kOhm: 2,5 - 4,9 volt.
Met R1 is 1K, zul je dus ruim boven de 4V komen heb je zelf aangetoond. 4.0V Vind ik wat minimaal.
AC/DrieC
Den Dries www.hulens.be
Hang gewoon pin 3 aan de GND, pin 4 via 4K7 (gegokte weerstand, weet niet hoeveel de transistor mag schakelen) naar de +5V. En meet met je multimeter op tussen pin 4 en GND. (Als je het ledje toch niet meer gebruikt.)
Op 1 november 2010 14:00:26 schreef drieske:
[...]Met R1 is 1K, zul je dus ruim boven de 4V komen heb je zelf aangetoond. 4.0V Vind ik wat minimaal.
Hoe kan ik het met de transistor op 4,5 V krijgen? Of kan dat niet?
Op 1 november 2010 15:37:50 schreef AC/DrieC:
Hang gewoon pin 3 aan de GND, pin 4 via 4K7 (gegokte weerstand, weet niet hoeveel de transistor mag schakelen) naar de +5V. En meet met je multimeter op tussen pin 4 en GND. (Als je het ledje toch niet meer gebruikt.)
Heb het geprobeerd, alleen niet met echt succes.
Een 4k7 geeft een bereik 4,8 - 4,9. Een 1k 4,7 - 4,9.
Wanneer je precies op 4,5 V uit wil komen kun je het proberen door R1 te vervangen door een spanningsdeler. Bijvoorbeeld 1K in serie met 100R. Je poort pin sluit je dan aan tussen R1 en R2.
Maar waarom wil je precies die 4,5V? 4,9V Is toch een voldoende "hoog"-niveau?
[Bericht gewijzigd door Henry S. op (36%)]
@Drieske bedankt voor je antwoord.
De opstelling waar het om die 4,5 Volt gaat, daar had ik het toen over.
(Dus ook met zo'n bc547)
Met 1 kOhm weerstanden zoals rew zei is hij dan tussen 0,2 en 4 Volt.
Alleen lijkt mij 4 volt wat laag voor een "hoog".
Dus vroeg ik of ik van die 4 volt niet 4,9 kan maken.
AC/Driec zei dat ik geen bc547 moest gebruiken,
dit heb ik dan ook even getest op breadbord.
en dan met alleen 4,7 kOhm naar de +. Dan is "laag" 4,8 en "hoog" 4.9.
Werkt dus niet helemaal.
[Bericht gewijzigd door Henry S. op (27%)]
Eagle Eye, waarom zet je die spanningsdeler of R1 niet gewoon tussen +5V en de collecter (pin4) van je optocoupler? Volgens mij ben je er dan.
MGP
LDmicro user.
Op 1 november 2010 17:36:30 schreef Eagle Eye:
Met 1 kOhm weerstanden zoals rew zei is hij dan tussen 0,2 en 4 Volt.
Alleen lijkt mij 4 volt wat laag voor een "hoog".
..........
Werkt dus niet helemaal.
Dan is zwart niet zwart genoeg 
Wat jij nodig hebt is een schmitt trigger.
AC/DrieC
Den Dries www.hulens.be
Heb even de datasheet bekeken:
On state collector current = 40mA
Off state collector current = 25ma
Hieruit maak ik op dat hij ook nog zal geleiden wanneer hij zwart ziet. Dus wanneer je weerstand te hoog is komt er alleen 5v op de uitgang , of hij nu in geleiding is of niet. Wanneer je met een weerstand van 150 ohm werkt tussen collector en 5v en dan aan de collector een schmittrigger, moet het wel werken. Of meten met ADC natuurlijk.
AC/DrieC
Den Dries www.hulens.be
Oeps slecht gekeken. Dit wil volgens mij wel zeggen dat de encoder stuk is, kan bijna niet anders. Moest hij degelijk werken moet hij met 4K7 toch voledig naar GND trekken! of zoals MGP al aanhaalde, dat het zwart niet zwart genoeg is.
Shit . Weer een domme (beginners) fout van mij.
In het begin met testen heb ik de TIL 139 vrij ver van de encoder-schijf af gezet.
Vandaar ook de vrij kleine weerstand (voor grote stroom door) bij de led.
Nu hem er dichter op gezet (4mm), werkt perfect.
Nog wel de extra transistor erbij gezet. Of kan die nog weg?
Maakt niet zo veel uit 1tje extra, en nu werkt het.
Nu nog interrupt code schrijven.
Vanavond bezig geweest met de encoder aansluiten aan uC. Dit is gelukt.
Nu loop ik alleen een beetje stuk op de code.
Dit heb ik nu:
teller = 0
BEgin:
l1 = 1
HPWM 1, 15, 2000
if enc = 0 then '0 = wit vlakje. begin status = wit
l2 = 0 ; indicatie LED uit
bitwit = 1 ;een BIT op 1 zetten
else 'ANDERS als vlak = zwart DAN ....1 = zwart vlak.
l2 = 1 ' indicatie LED aan
endif
if enc = 1 and bitwit = 1 then ; ALS lamp = zwart en hij IS wit geweest DAN
bitwit = 0 ; BIT weer op 0
teller = teller + 1 ; teller eentje optellen
endif
print at 1, 1, dec teller ;TEller op LCD
delayms 10
goto begin
De teller slaat alleen af en toe over. Hoe kan ik dat oplossen?
Ik heb het werkend. Nu nog code maken om de pulsen / seconde om te rekenen naar snelheid.
En 2 motoren gelijk aan te kunnen sturen.
Bedankt voor de hulp in ieder geval.
Dit is de code die ik nu heb, ook als andere zoiets willen maken:
DEVICE 16F877
CONFIG WDT_OFF, PWRTE_ON, LVP_OFF, HS_OSC,
DECLARE XTAL = 20
portb_pullups TRUE
all_digital = TRUE
SYMBOL Led = PORTA.2
SYMBOL INTF = INTCON.1 'RB0 External Interrupt Flag
SYMBOL INTE = INTCON.4 'RB0 External Interrupt Enable
SYMBOL GIE = INTCON.7 'Global Interrupt Enable
;=============================================================================
; 76543210
PORTA = %00000000 ;1 = 5V 0 = 0V
PORTB = %11111111 ;1 = 5V 0 = 0V
PORTC = %00000000 ;1 = 5V 0 = 0V
TRISA = %00001000 ;1 = input 0 = output
TRISB = %00000011 ;1 = input 0 = output
TRISC = %00000000 ;1 = input 0 = output
;=============================================================================
DIM Teller AS word
CLEAR
CLS
DELAYMS 500
portc.2 = 0
;=============================================================================
ON_INTERRUPT Rotary ;ALS er een interrupt is, ga dan naar label "Rotary"
HPWM 1, 50, 4000 ;Stuur een PWM signaal met 50% dutycycle aan motor aan CCCP1 (portc.2) pin17
Teller = 0 ;Variabele teller op 0 zetten
Led = 0 ;LED uitzetten
GOTO Over_irq
Rotary: ;ALS er een interrupt is geweest (signaal verandering portb.0) kom je hier
IF PORTB.0 = 1 THEN ;ALS portb.0 hoog is (=
INC Teller ;Verhoog teller met 1
TOGGLE Led ;LED TOGGLE
ENDIF
INTF=0 ;INTCON.1 (externe interrupt) VLAG weer op 0 zetten
CONTEXT RESTORE ;Alles weer zetten zoals het was, en weer naar main "loop"
Over_irq: ;Hier komt het programma de eerste keer
GIE=0 ;Global interrupts uitzetten
INTE=1 ;EXterne interrupts aanzetten
GIE=1 ;Global interrupts aanzetten
Loop: ;Main "loop"
DELAYMS 100 ;10x per seconde doorlopen
PRINT AT 1,1, DEC teller," "
GOTO Loop ;Waarde op LCD zetten, en weer naar "loop"
