Ik ben bezig met een toerenteller in PIC-basic (Proton).
Qua programmeren lukt het aardig, waar ik moeite mee heb is het genereren van pulsjes.
De teller is voor een oude diesel, zonder aansluiting voor dergelijke (on)zin. Ik wil gaan meten op het vliegwiel, maar vraag me af waarmee.
Met een drukknopje (voor testdoeleinden) heb ik bijvoorbeeld ontzettende last van contactdender. Een reed-contact lijkt me niet snel genoeg.
Ik ben me aan het verdiepen in hall-sensors en loop met het idee een fietscomputer te slopen. Weet iemand een manier om mooie pulsjes van het wiel te krijgen?
Willis
So far...so good...KABOEM! | Cars, motorcycles and metalworking => Visit Willy's website!
Ik ben toevallig met hetzelfde bezig, maar dan om het toerental van een draaibank in een display af te kunnen lezen.
In eerste instantie heb ik het geprobeerd met een losse hall sensor (http://www.datasheetcatalog.org/datasheets/120/318457_DS.pdf; zie pagina 10 voor het schema van de opnemer) en 6 magneetjes in een schijf. Toerental per minuut is dan te bepalen door bijvoorbeeld in 1 seconde het aantal pulsen te tellen en vervolgens x60 (sec->min) en /6 (aantal pulsen per omw.)
Het toerental wordt dan wel in stappen van 10 (x60/6=x10) weergegeven en dat vond ik te onnauwkeurig. Ook wilde ik de display vaker dan 1x per seconde ververst hebben; maar dan zouden de stappen dus nog groter worden.
Dit moet wel op te lossen te zijn door niet het aantal pulsen te tellen, maar de verstreken tijd tussen 2 pulsen, maar ik snap het hele interupt-verhaal in PicBasic (nog) niet.
Ik heb nu dus een nieuwe sensor gemaakt met een hall sensor met ingebouwd magneet (http://www.cherrycorp.com/english/sensors/vn1015.htm) en een stalen encoderschijf met 24 sleufjes. In 500mS de pulsen tellen geeft het toerental in stappen van 5 omw. per minuut.
Code, heel simpel, in PicBasic:
16F628A ;Use a 16F628A type
CONFIG WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF, HS_OSC ;INTRC_OSC_NOCLKOUT verwijderd
ALL_DIGITAL TRUE ;Alle ingangen digitaal
XTAL 20 ;Kristal van 20MHz
DIM PULSCOUNTER as DWORD ;Declare PULSCOUNTER as dword
DIM RPM AS word ;Declare RPM as word
SYMBOL CHANNELA = PORTA.1 ;Name PORTA.1 to CHANNELA
CLS
Print AT 1, 2, "CQ6125"
PRINT AT 2, 6, "RPM"
Loop: ;loop start
PULSCOUNTER = COUNTER CHANNELA , 500 ;Count no. of pulses in 500mS
RPM = ( PULSCOUNTER * 120 ) / 24 ) ;RPM=(PP500mS*120S)/24 pulses per round
PRINT at 2, 1, DEC4 RPM ;Display RPM (4 digits) on LCD
GOTO Loop ;repeat loop
Componenten komen allemaal van Conrad.
Als je interesse hebt wil ik de schema's e.d. wel online zetten.
Onderaan op deze pagina: http://home.hetnet.nl/~w_ermers/picprogrammer.html staat een foto van mijn 'testopstelling'. Hier gebruikte ik een optische sensor die achter op een kleine gelijkstroommotor zit. Dit werkte ook goed, maar het kunststof encoderschijfje wat daar in zit was te klein en te kwetsbaar voor mijn toepassing.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
De meeste fietscomputers gebruiken reed-contacten in plaats van hall-sensors, als ik het goed heb. Ik zou zelf een hall-sensor uit een borstelloze computerfan gebruiken.
Op 29 december 2008 01:43:02 schreef Willis:
RPM = ( PULSCOUNTER * 120 ) / 24 ) ;RPM=(PP500mS*120S)/24 pulses per round
Er mist een (, of je vergeet de laatste ), dus komt niet door de compiler, en waarom niet meteen *5?
Interrupt in picbasic is niet moeilijk. Boven in je programma zet je
On_interrupt goto naam(is de naam van je interrupt routine)
En dan maak je gewoon een routine aan met dezelfde naam waarin je de afhandeling zet. Onderaan zet je Context restore om aan te geven dat de pic terug moet.
config e.d.
On_interrupt goto afhandeling
symbol led = porta.0
symbol led2 = porta.1
symbol TMR2IF = PIR1.1 ;timer2 interrupt flag
symbol TMR2IE = PIE1.1 ; timer 2 interrupt enable
symbol GIE = INTCON.7 ;globale interrupts
symbol PEIE = INTCON.6 ;
GIE = 1
PEIE = 1
TMR2IE = 1
TMR2IF = 0; de flag moet 0 zijn, anders doet de timer niks
T2CON = %xxxxxxxx //je eigen instellingen
trisa = x
porta = x ;instellingen van je poort.
goto main
main:
toggle led
delayms 500
goto main
afhandeling:
toggle led2
TMR2IF = 0; flag niet vergeten voor de volgende int.
context restoreZoiets zou een timer2 interrupt zijn.
Hallo
In de rally wereld en bij de machines die gebouwd werden op mijn vorige werk gebruikte ze Inductieve sensoren om toerentallen te meten. Lekker makkelijk, gewoon voor een getand "tandwiel" van een riem zetten of een ander stukje metaal wat voorbij komt.
Ik heb zelf een picbasic programma gemaakt waarin ik de tijd van de hoge puls bij de tijd van de lage puls optel om tot een totaaltijd te komen. Deze code werkt prima alleen blijft het programma wel wachten op de pulsen. Als je dus in hetzelfde programma veel meer wilt doen, vooral dingen als tijdmetingen en pulscounters dan kan het programma iets te traag worden. Wat ik ermee gemaakt heb was het uitlezen van het toerental, de snelheid, daarna een driekleurenled voor het toerental als een shiftlight en op basis van de snelheid en toerental een 7-segmentdisplay met de juiste versnelling.
Voor het toerental zag de code er als het volgt uit:
SYMBOL TPP = 2 ; Tijd per puls bij een 20Mhz kristal voor Pulsin commando
; toerenteller symbolen
SYMBOL N=6 ; aantal cylinders
SYMBOL X = 2 ; 2 voor 4-takt, 1 voor tweetakt
SYMBOL RPMPoort= PORTA.0
SYMBOL Laag = 0
SYMBOL Hoog = 1
DIM VAR1 AS WORD
DIM VAR2 AS WORD
DIM TPL AS WORD ; totaaltijd 1 hoog-laag puls
DIM DwordTemp AS DWORD
DIM Toeren AS WORD
; Toerenteller
VAR1 = PULSIN RPMPoort , Laag
VAR2 = PULSIN RPMPoort , Hoog
TPL = (VAR1 * TPP) + (VAR2 * TPP) ; TPL is de tijdsduur van 1 hoog-laag puls
; VAR maal 2 want met een 20Mhz kristal is 1 puls 2 us
;1 seconde = 1.000.000 us , 1 minuut 60.000.000
DwordTemp=(60000000 / N) * X ;Delen door TPL want is de tijd van de puls
Toeren = DwordTemp/TPL ; 20.0000 voor 4 takt, 6 cylinder
Bij mij is deze toerentalmeting niet met bovengenoemde sensor gemaakt maar met de bobinedraad waarbij ik dus voor mijn 6-cylinder 6 pulsen per twee omwentelingen krijg! Ik heb dus ook geen last van contactdender maar ik denk niet dat je daar veel last van zult krijgen. Je kunt er een klein condensatortje bijzetten voor de zekerheid.
als je de meting doet om op een display te zetten is dit goed genoeg. Als hij een keertje een leesfoutje maakt dan zie je dat niet. Als je echter iets wilt aansturen met deze info dan kun je erover denken het bovenstaande drie keer te doen en dan eventuele sterk afwijkende waarde eruit te gooien zodat je echt het juiste toerental hebt met zo min mogelijk foute metingen. Ik gebruikte dezelfde code voor de snelheid en wilde mijn hoogstgereden snelheid loggen en zag zodoende dat er heel af en toe een foute lezing bij zat die je op je display niet ziet..
Volgens mij staan de beschrijvingen van de laatste twee regels omgedraaid.
Zit er op dat dieseltje een dynamo met een W aansluiting. Dan zou ik die gebruiken, geen extra sensor/aamsluitingen, alleen een omrekenfactor in je software opnemen.
Bart,
Fijn, zoveel reacties!
Inmiddels maak ik me niet zo'n zorgen meer om dender: dat valt blijkbaar ook mee. Ik fiets zo eens even naar het bootje toe. Kijken of er misschien al ergens rijtjes tandjes zitten en/of een W-aansluiting op de dynostart.
rew
four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Kan iemand me helpen? Hoe herken ik en W-aansluiting op een dynamo? Google heeft me weten te vertellen dat er ook toerental tellers op aan te sluiten zijn... Duh! Maar een foto van een dynamo met zo'n aansluiting kan ik niet vinden.
Willis
So far...so good...KABOEM! | Cars, motorcycles and metalworking => Visit Willy's website!
Op 29 december 2008 04:07:10 schreef Henry S.:
[...]
Er mist een (, of je vergeet de laatste ), dus komt niet door de compiler, en waarom niet meteen *5?
Ik ben idd vooraan een ( vergeten. Raar maar waar, maar hij doet het toch; geen foutmelding van de compiler...
*120/24 had ik gedaan omdat ik met de tijdsduur van de meting en het aantal pulsen nog aan het experimenteren was. Zo kon ik nog een beetje zien waar ik op dat moment mee bezig was. Programmatechnisch zou ik er eigenlijk 2 variabelen voor moeten gebruiken die ik aan het begin dan een waarde geef.
Willis
So far...so good...KABOEM! | Cars, motorcycles and metalworking => Visit Willy's website!
Op 29 december 2008 08:23:23 schreef bassie-:
Interrupt in picbasic is niet moeilijk...
Dus als ik het goed begrijp, blijft het programma in de main-loop hangen todat er een signaal komt op 1 van de ingangen en ga je dan in de 'afhandeling' kijken welk signaal er binnenkomt en wat het programma dan moet doen?
Op 29 december 2008 11:52:23 schreef rew:
Kan iemand me helpen? Hoe herken ik en W-aansluiting op een dynamo? Google heeft me weten te vertellen dat er ook toerental tellers op aan te sluiten zijn... Duh! Maar een foto van een dynamo met zo'n aansluiting kan ik niet vinden.
Waarschijnlijk is de W aansluiting van een alternator gewoon één aansluiting van 1 van de 3 spoelen.
Schema:
http://www.cibolas7.net/mediac/400_0/media/BoschSchmGF$7EComp.jpg
Foto's:
http://www.reedx.net/landrover/mods/revcounter/index.htm
http://www.coolcatcorp.com/faqs/LucasBosch5.jpg
http://i6.photobucket.com/albums/y219/MikeLMR/DSCF0192.jpg