Hallo
Ich hab's jetzt auch mal versucht die Impulslängen der Servosignale mit Bascom zu messen. Mit dem Pulsein-Befehl habe ich es nicht geschafft, aber mit einer einfachen Zählschleife funktioniert es recht gut:
Das Programm erzeugt mit Config Servos seine eigenen Impulse und misst dann deren Länge mit einer Zählschleife. Der Drehbereich meines angeschlossenen Servos ist 30 bis 150. Die Zählwerte sind ohne Verzögerung durch waitus in der Zählschleife und ohne Korrektur von 49 bis 249:Code:$regfile = "m32def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 8 $framesize = 24 $baud = 38400 Dim A As Byte Dim Counter As Integer Config Servos = 1 , Servo1 = Portc.0 , Reload = 10 Config Portc.0 = Output 'Servo(1) = 100 Enable Interrupts Do Print Print "----------------" For Servo(1) = 30 To 150 Step 10 Waitms 500 Counter = 0 Do ' Warten bis aktiver Impuls zu Ende A = Pinc.0 Loop Until A = 0 Do ' Warten bis Pause fertig A = Pinc.0 Loop Until A = 1 Do A = Pinc.0 Incr Counter ' Zähler erhöhen 'Waitus 2 Loop Until A = 0 ' Solange impuls ansteht Counter = Counter - 149 ' Wert für Mittelstellung abziehen Print "Winkel:" ; Servo(1) Print "Zähler: " ; Counter Print Next Loop
Mit Korrektur -149 erhalte ich folgende Werte:Code:Winkel:30 Zãhler: 49 Winkel:40 Zãhler: 66 Winkel:50 Zãhler: 82 Winkel:60 Zãhler: 99 Winkel:70 Zãhler: 116 Winkel:80 Zãhler: 133 Winkel:90 Zãhler: 149 Winkel:100 Zãhler: 166 Winkel:110 Zãhler: 183 Winkel:120 Zãhler: 199 Winkel:130 Zãhler: 216 Winkel:140 Zãhler: 233 Winkel:150 Zãhler: 249
Bin ich jetzt selbst etwas überrascht wie gut das passt ;) Für schneller getaktete Kontroller kann man in der Zählschleife noch etwas mit waitus spielen. Bei 16MHz muss man vermutlich nur den Zählwert halbieren.Code:Winkel:30 Zãhler: -100 Winkel:40 Zãhler: -83 Winkel:50 Zãhler: -66 Winkel:60 Zãhler: -50 Winkel:70 Zãhler: -33 Winkel:80 Zãhler: -16 Winkel:90 Zãhler: 0 Winkel:100 Zãhler: 17 Winkel:110 Zãhler: 34 Winkel:120 Zãhler: 50 Winkel:130 Zãhler: 67 Winkel:140 Zãhler: 84 Winkel:150 Zãhler: 100
Gruß
mic







Zitieren

Lesezeichen