Archiv verlassen und diese Seite im Standarddesign anzeigen : Drehzahlmessen
LinkinPark
01.10.2004, 11:54
Hallo,
ich will die Drehzahl einer Bohrmaschiene messen. Dazu hab ich eine Gabellichtschranke aufgebaut, die einmal pro Umdrehung auslöst. Jetzt weis ich nur nicht genau wie ich daraus die Drehzahl messe. Ich wollte irgendwie die Zeit zwischen 2 Impulsen messen nur wie ?
Vielen Dank shon mal
LP
Warum misst du nicht die Anzahl der Impulse in einer bestimmten Zeiteinheit.
So wie du meintest gehts auch, schau mal in Klaus Kühnels Bascom AVR da steht wie man das macht.
MFG Moritz
AlexAtRobo
01.10.2004, 12:08
Alternativ kannst du auch Zählen, wie oft in einer bestimmten Zeit ausgelöst wird.
Such mal in der Hilfe nach "pulsein"...
Gruß, Trabukh
farmerjo
02.10.2004, 13:54
Bei einem Implus müßte man einen Zähler auf null setzen und dann über einen Interrupt beim nächsten puls den Zähler stand auslesen und schon hat man die zeit für eine Umdrehung. Ist gerad bei kleiner Drehzahlen bis ca 4000U/min die genauerer Möglichkeit. Ansonsten kann man auch noch die Impulse während eines Zeitfensters zählen. Wenn dies ausreichend groß ist, dann kommen da auch sehr genau Werte raus.
Gruß Johann!
Also ich hab bei BAscom 2 Code gefunden, müsstest du dir allerdings selber erklären. Ich denke Trabukh meinte pulsin1.bas:
Declare Function Lopulse() As Byte
Dim Value As Byte
Const Inputpin = $10 , 0 ' Inputpin Alias Pind.0
Config Portb = Output
Portb = &HFF
Config Timer0 = Timer , Prescale = 1
On Timer0 Overflow_isr Nosave
Enable Timer0
Enable Interrupts
Do
Value = Lopulse()
Portb = Value
Loop
End
Function Lopulse() As Byte
$asm
Hilo:
Sbic Inputpin ' wait for Hi-Lo on inputpin
Rjmp Hilo
$end Asm
Tcnt0 = 0 ' reset Timer0
Start Timer0
$asm
Lohi:
Sbis Inputpin ' wait for Hi-Lo on inputpin
Rjmp Lohi
$end Asm
Stop Timer0 ' stop Timer0 after 26 cycles minimum
Lopulse = Tcnt0
End Sub
' overflow isr stops timer0 and set tcnt0 to zero
Overflow_isr:
!push R24
Stop Timer0
Tcnt0 = 0
!pop R24
Return
bzw. Pulsein2.bas:
Declare Function Lopulse() As Word
Dim Value As Word
Dim Time As Word
Inputpin Alias Pind.0
Config Portb = Output
Portb = &HFF
Do
Value = Lopulse()
Portb = Low(value)
Loop
End
Function Lopulse() As Word
' Local Time As Word
While Inputpin <> 0 : Wend
Time = 0 ' reset Timer0
While Inputpin = 0
Incr Time
Wend
Lopulse = Time
End Sub
MFG Moritz
Eigentlich dachte ich mehr an sowas:
Dim w As Byte
pulsein w , PIND , 1 , 0
print w
end
Gut, wenn das funktioniert sprciht natürlich nichts dagegen. Die oberen Codes sind halt aus BAscom-AVR. Muss auch zugeben, das ich mich damit noch nicht beschäftigt habe, sondern es nur beim durchblättern gefunden habe.
Kannst du dein Code noch Kurz erläutern?
Warum z.B. nimmst du PinD und nicht D1 oder so?
Was meinen , 1 , 0 dahinter?
MFG Moritz
Hallo,
erstmal vielen Dank für alle Antworten. Die Möglichkeit die Tragukh gepostet hat ist natürlich die bequemste. Allerdings hab ich das mal ausgetestet und konnte nicht erkennen was der Befehl pulsein in die Variable w schreibt ?
LinkinPark
04.10.2004, 07:48
der Post über diesem stammt auch von mir. =;
Ja, wie gesagt, wäre schön, wenn Tranukh da noch ein wenig mehr zu schreiben würde, oder ich schau später mal in der hilfe nach, oder du, bin nämlich gerade auf der Arbiet, und kann deshalb nicht nachschauen.
MFg moritz
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.