Witam,
robię obrotomierz do silnika o obrotach do 6000obr/min. Pomiar wykonuje następująco:
- po 1 przerwaniu startuje timer1
- w obsłudze przerwania timera1 (co 100us) zwiększam zmienna X
- po 20 takich pomiarach usrednam wyniki i poddaje kalkulacji: [obr/min]=[1/(średnia*0.0001)]*60
Proszę o sprawdzenie obliczeń bo na 100% pewny nie jestem.
I teraz pytanie jak najlepiej wykonać zerowanie gdy silnik nie kręci się? Używam czujnika Halla TLE4935 i jeden magnes na silniku.
Po kilku nieudanych próbach okazał się to dosyć proste:
- w pętli głównej dodałem:
- a w przerwaniu Impuls :
To prosiłbym tylko o potwierdzenie poprawności moich obliczeń. Pzdr.
robię obrotomierz do silnika o obrotach do 6000obr/min. Pomiar wykonuje następująco:
- po 1 przerwaniu startuje timer1
- w obsłudze przerwania timera1 (co 100us) zwiększam zmienna X
- po 20 takich pomiarach usrednam wyniki i poddaje kalkulacji: [obr/min]=[1/(średnia*0.0001)]*60
Impuls:
Disable Int1
If Measure = 0 Then
X = 0
J = 1
Timer1 = 65136
Enable Timer1
Measure = 1
Else
Disable Timer1
If X > 0 Then
Period(j) = X
Average = 0
If J = 20 Then
For J = 1 To 20
Average = Average + Period(j) 'mierze i uśredniam 20 pomiarów czasu
Next J
Average = Average / 20
Result = Average * 0.0001 ' 0.0001 to wartość czasu o jaką zwiększam X (przerwanie od timer1)
Result = 1 / Result 'obliczenie okresu
Rpm = Result * 60 'konwersja obrotów/minute
' demonstracja na wyświetlaczu LED 4 cyfry
Temp1 = Rpm / 1000 'tysiące
W1 = Temp1
Temp2 = Rpm Mod 1000 'reszta z dzielenia przez 1000 czyli:
Temp3 = Temp2 / 100 'setki
W2 = Temp3
Temp3 = Temp2 Mod 100 'reszta z dzielenia przez 100 czyli:
Temp2 = Temp3 / 10 'dziesiątki
W3 = Temp2 '
W4 = Temp3 Mod 10 'reszta z dzielenia przez 10 czyli:
Rpm = 0
Measure = 0
End If
Incr J
Else
W1 = 0
W2 = 0
W3 = 0
W4 = 0
End If
End If
Enable Int1
Return
Count:
Timer1 = 65136
Incr X
ReturnProszę o sprawdzenie obliczeń bo na 100% pewny nie jestem.
I teraz pytanie jak najlepiej wykonać zerowanie gdy silnik nie kręci się? Używam czujnika Halla TLE4935 i jeden magnes na silniku.
Po kilku nieudanych próbach okazał się to dosyć proste:
- w pętli głównej dodałem:
Incr Timeout
If Timeout > 200 Then
W1 = 0
W2 = 0
W3 = 0
W4 = 0
End If
- a w przerwaniu Impuls :
Timeout=0
To prosiłbym tylko o potwierdzenie poprawności moich obliczeń. Pzdr.