PDA

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

RCO
01.10.2004, 12:07
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.

Trabukh
01.10.2004, 13:36
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!

RCO
02.10.2004, 15:35
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

Trabukh
02.10.2004, 17:21
Eigentlich dachte ich mehr an sowas:

Dim w As Byte

pulsein w , PIND , 1 , 0
print w
end

RCO
03.10.2004, 14:47
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

04.10.2004, 07:47
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. =;

RCO
04.10.2004, 10:51
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