Gast
#2062311
Hallo liebes Forum!
Ich habe ein Problem und bin momentan am verzweifeln, weil ich den
Fehler nicht finde. Ich habe ein Gyroskop (ADXRS610) und will die Werte
in einen Winkel umrechnen. Das klappt soweit auch ganz gut. Allerdings
wollte ich nun einen Filter implementieren, der einen gleitenden
Mittelwert bildet, d.h. 4 Werte in einen Array lädt und immer einen Wert
herausschiebt und einen neuen hineinschreibt. Ich schreibe in den Array
den Winkelwert (dim Single). Ich habe schon mal nachgeforscht und ein
Programmschnipsle entdeckt und versucht,den in mein Programm zu
imlementieren, anbei mein Bascom-Code:
########################################################################
###
Dim Index As Byte
Dim Value(4) As Single
Dim Average As Word
Dim Count As Byte
Dim Phi_v_sum As Word
Dim Phi_v_current As Word
Dim Phi_v_mean As Word
Dim Adc_wert As Word
Dim A As Byte
Dim U_const As Single
Dim U As Single
Dim Spannung As Word
Dim Delta_t_unit As Single
Dim Phi_v_mean_unit As Single
Dim Winkelgeschwindigkeit As Single
Dim Delta_phi_unit As Single
Dim Winkelaenderung As Single
Dim Phi_current_unit As Single
Dim Winkel As Single
Dim K As Single
Dim Mittelwert As Single
U_const = 4.88
Delta_t_unit = 0.129
K = 0.269
Index = 1
Do
Phi_v_sum = 0
For A = 1 To 10
Phi_v_current = Getadc(0)
Phi_v_sum = Phi_v_sum + Phi_v_current
Next
Phi_v_mean = Phi_v_sum / 10
'-----------------------------------------------------------------------
--------'
'Bandpassfilter: ADC
'-----------------------------------------------------------------------
--------'
If Phi_v_mean < 527 And Phi_v_mean > 517 Then
Phi_v_mean = 520
Else
Phi_v_mean = Phi_v_mean
End If
U = U_const * Phi_v_mean
Phi_v_mean_unit = U / 6
Phi_v_mean_unit = Phi_v_mean_unit - 422.833333333
Delta_phi_unit = Phi_v_mean_unit * Delta_t_unit
Delta_phi_unit = Delta_phi_unit - 0.01288503
Delta_phi_unit = Delta_phi_unit * K
Phi_current_unit = Phi_current_unit + Delta_phi_unit
'-----------------------------------------------------------------------
--------'
'Bandpassfilter: Winkel, Nullpunktdrift
'-----------------------------------------------------------------------
--------'
If Phi_current_unit > -1 And Phi_current_unit < 1 Then
Phi_current_unit = 0
Else
Phi_current_unit = Phi_current_unit
End If
'-----------------------------------------------------------------------
--------'
'Gleitender Mittelwert: (gefundener Programmschnipsel)
'-----------------------------------------------------------------------
--------'
Value(index) = Phi_current_unit
Incr Index
If Index = 5 Then
Index = 1
End If
For Count = 1 To 4
Average = Average + Value(count)
Next
Shift Average , Right , 1
Winkel = Phi_current_unit
Mittelwert = Average
Print ; Winkel
Print ; Mittelwert
Waitms 100
Loop
End
########################################################################
##
Als Ergebnis kommen nur merkwürdige Werte heraus und weiß woran das
liegen könnte :-(. Kann mir jemand helfen und mir sagen, wo mein
Denkfehler liegt? Ich würde mich sehr freuen.
Viele Grüße