Sie sind vermutlich noch nicht im Forum angemeldet - Klicken Sie hier um sich kostenlos anzumelden Impressum 
Sie können sich hier anmelden
Dieses Thema hat 21 Antworten
und wurde 3.092 mal aufgerufen
 Bascom
Seiten 1 | 2
Sven Löffler Offline

Admin


Beiträge: 3.760

03.04.2013 00:50
Problem mit Servo Routine Antworten

Hallo zusammen,

bei meinem aktuellen Projekt habe ich ein kleines Problem ...

Ich nutze einen Servo. Dieser Servo wird über einen Taster gesteuert. Er soll je nachdem, welcher Taster aktiv ist, eine Stellung anfahren. Das funktioniert auch einwandfrei. Bei meiner Anwendung wäre es aber gut, wenn er kurz nach dem Erreichen, das Servo Signal nicht mehr raus gibt. Also das Servo nicht mehr unter "Last" steht. Ich habe das nun mal durch den Befehl "Enable Interrupts" versucht. Am Anfang funktioniert das auch einwandfrei. Ich schalte die Spannung ein, das Servo fährt auf die Position und der Impuls ist weg. Sobald ich das aber nun mit den Tasterabfragen in Verbindung bringe, klappt das nicht mehr. Der Servoimpuls ist immer da.

Vielleicht kann ja mal jemand von euch einen Blick drüber werfen. Hier ist das Programm:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
 
'*************************************************************************************************
'* *
'* Servo Tiny Kieswerk *
'* *
'* Controller ist ein Tiny13 *
'* *
'*************************************************************************************************
 
$regfile = "Attiny13.dat" ' Controller ist ein Tiny13
$crystal = 4800000 ' 4,8 Mhz Takt
 
$hwstack = 10
$framesize = 10
$swstack = 20
 
Config Pinb.0 = Input ' Ein- / Ausgänge definieren
Config Pinb.1 = Input
Config Portb.2 = Output
Config Portb.3 = Output
Config Portb.4 = Output
 
Taster_zu Alias Pinb.0
Taster_auf Alias Pinb.1
Gruen Alias Portb.3
Rot Alias Portb.4
 
Enable Interrupts
 
Config Servos = 1 , Servo1 = Portb.2 , Reload = 10
 
Portb.0 = 1 ' Interne Pullups ein
Portb.1 = 1
Portb.3 = 1
 
' Servo aus Stellung 66 fahren
Servo(1) = 66 ' Ampel auf Grün
Rot = 1
Gruen = 0
 
Waitms 100 ' 100 ms warten
' Interrupts aus, damit Servo nicht unter Last
Disable Interrupts
 

Taster_abfrage_zu:
Do
If Taster_auf = 0 Then 'Ist Taster_auf betätigt, wenn Ja
Enable Interrupts 'schalte Interrupts ein
Servo(1) = 66 ' Fahre Servo auf Stellung 66
Waitms 100 ' 100 ms warten
Disable Interrupts ' Interrupts aus, damit Servo nicht unter Last
Rot = 1 ' Ampel Gruen
Gruen = 0
Else ' Ansonsten
Goto Taster_abfrage_auf ' Gehe Zu "Taster_abfrage_auf"
End If
 
Loop
 

Taster_abfrage_auf:
Do
If Taster_zu = 0 Then ' Ist Taster_zu betätigt, wenn Ja
Enable Interrupts ' schalte Interrupts ein
Servo(1) = 95 ' Fahre Servo auf Stellung 95
Waitms 100 ' 100 ms warten
Disable Interrupts ' Interrupts aus, damit Servo nicht unter Last
Rot = 0 ' Ampel rot
Gruen = 1
Else ' Ansonsten
Goto Taster_abfrage_zu ' Gehe zu Taster_abfrage_zu
End If
Loop
 




Habe es mal versucht zu kommentieren. Hoffe ihr werdet schlau daraus. Wie gesagt, ich bräuchte einfach nur das Servo Signal nach erreichen des Punktes nicht mehr. Habe auch schon versucht, es mit Stop Timer0 zu machen. Dann wacht er jedoch nicht mehr auf ...

Besten Dank im Voraus !


xenton Offline




Beiträge: 807

03.04.2013 11:08
#2 RE: Problem mit Servo Routine Antworten

Moin Sven,
so ganz verstehe ich Dein Problem nicht. Ist das nicht so, daß wenn das Servo kein Impuls-Signal bekommt, es wieder in Grundstellung fährt? Habe ich noch nicht ausprobiert.
Aber selbst wenn das funktioniert, warum soll das Servo keine Impulse mehr kriegen? Es ist ja nicht wie bei einem Schrittmotor der dauerhaft Strom zieht.
Gruß, Martin

>>> Hilfe! Mein Ball ist umgefallen! <<<

http://www.microtruckracing.de - http://mwww.mikro-rc.de


Sven Löffler Offline

Admin


Beiträge: 3.760

03.04.2013 11:25
#3 RE: Problem mit Servo Routine Antworten

Hallo Martin,

das ganze ist für eine Kiesverladung. Hier ist nun das Problem, dass mittels Servo eine Luke geschlossen wird. Ist aber nun ein kleines Steinchen dazwischen, erreicht das Servo nicht 100 %ig die Stellung, die es anfahren soll und brummt die ganze Zeit. Daher wäre es gut, wenn der Servoimpuls weg wäre.

Der Servoimpuls ist mit der Servoroutine immer da. Das kannst du ganz einfach testen: Wenn du das Servo im eingeschalteten Zustand bewegen kannst, ist der Impuls weg. "Wehrt" sich das Servo und möchte in der Stellung bleiben, ist der Impuls da. Das ist mit der normalen Bascom Routine immer der Fall. Da die Routine den Timer0 benutzt, war meine Idee, diesen so lange auszuschalten, bis er wieder gebraucht wird. Das funktioniert aber leider nicht so, wie ich das gerne hätte.


DesignDevil Offline




Beiträge: 17

03.04.2013 11:42
#4 RE: Problem mit Servo Routine Antworten

Das Problem an der Sache ist, das der µC ja nicht weis WANN die Servoposition erreicht wird. Von daher beruht das gesamte Konzept der Interruptgesteuerten Servoroutinen darauf stets und ständig das gewählte PWM Signal am dafür vorgesehenen Port auszugeben und das Servo anzusteuern.

Das ganze hat sogar noch einen zweiten Nachteil nämlich das Servozittern. Will sagen, wenn man die Ausgabe des Servoimpulses nicht unterbricht, dann wird das Servo vermutlich sogar zappeln, obwohl es in seiner Endstellung ist.

Nun gut, das begrenzt du indem du dem Servo eine bestimmmte Zeit zugestehst in der es in die Stellung fahren soll. (Enable, Disable Interrupt + Waitms) und das scheint mir auch die beste Lösung zu sein.

Ich würde einfach mal die Zeit messen die es von A nach B braucht und diese Zeit, plus ein klitzekleinesbischen, als Wert einsetzen. Anders bekommt man es ohne Mehraufwand wohl kaum hin.

Alternativen wären: Erfassung der Servo-Endpositionen durch Sensoren oder Strommessung (oder Spannungsmessung) des Servomotors um blockieren zu erfassen oder Anfahren der Position solange man eine Taste betätigt.

Davon mal ganz abgesehen finde ich den gesamten Aufbau des Programms etwas "ulkig", aber das nur am Rande...liegt vielleicht daran das es noch in der Konzeptphase ist.


Sven Löffler Offline

Admin


Beiträge: 3.760

03.04.2013 12:38
#5 RE: Problem mit Servo Routine Antworten

So habe ich das ja auch gemacht.

Enable / Disable interrupt + Waitms. Jedoch funktioniert es so nicht. Bei ersten Anfahren der Servoposition funktioniert das:

' Servo aus Stellung 66 fahren
Servo(1) = 66 ' Ampel auf Grün
Rot = 1
Gruen = 0

Waitms 100 ' 100 ms warten
' Interrupts aus, damit Servo nicht unter Last
Disable Interrupts

Danach jedoch nicht mehr. Das Servo bekommt dann nach wie vor einen Impuls.

Was den Aufbau des Programms angeht: Ich denke du kannst 20 verschiedene Leute nehmen und jeder macht es anders. Das höre und lese ich immer wieder - auch bei anderen. Ich denke mal wenn ich mir ein Programm von dir anschauen, wird es mir wahrscheinlich genauso gehen ...


DesignDevil Offline




Beiträge: 17

03.04.2013 12:43
#6 RE: Problem mit Servo Routine Antworten

Das heißt nach dem einschalten funktioniert es zunächst und nach der ersten Tasterbetätigung nicht mehr - verstehe ich das richtig?


Sven Löffler Offline

Admin


Beiträge: 3.760

03.04.2013 13:21
#7 RE: Problem mit Servo Routine Antworten

Ja, ganz genau.


DesignDevil Offline




Beiträge: 17

03.04.2013 13:43
#8 RE: Problem mit Servo Routine Antworten

Reagieren denn die LEDs korrekt?


Sven Löffler Offline

Admin


Beiträge: 3.760

03.04.2013 21:00
#9 RE: Problem mit Servo Routine Antworten

Ja, die Leds arbeiten richtig. Es ist nur das Servo, dass nach Einbindung der Tasterabfrage nach wie vor den Impuls bekommt - trotz enable Interrupts.


diezel Offline



Beiträge: 709

03.04.2013 21:59
#10 RE: Problem mit Servo Routine Antworten

Hallo Sven,

Zitat
trotz enable Interrupts


Du meinst hier sicher "disable". Ohne es jetzt getestet zu haben, sollte dies eigentlich das Signal schon abschalten.
Häng doch mal eine LED an den Servo-Ausgang. Dann siehst Du ob tatsächlich noch was rauskommt.

Aber warum baust Du die mechanische Ansteuerung der Luke nicht so, daß es dem Servo nichts ausmacht, wenn die Luke nicht ganz zu geht. Vielleicht mit einer Feder. Hier mal der erste Treffer von Google der zeigt wie ich meine:



Gruß
Gerhard

-------------------------------------------------------------------------------------------
hier mein aktueller TinyKatalog


Sven Löffler Offline

Admin


Beiträge: 3.760

05.04.2013 17:32
#11 RE: Problem mit Servo Routine Antworten

Natürlich meine Disable

Leider funktioniert das so nicht. Das wäre natürlich die einfachste Lösung gewesen. Wenn ich eine LED anschließe, leuchtet sie.

Ich denke mal dass das Problem auch bei einer mechanischen Lösung da wäre. Das Servo hat nicht wirklich viel Kraft.


diezel Offline



Beiträge: 709

05.04.2013 19:49
#12 RE: Problem mit Servo Routine Antworten

Hallo Sven,

schalte doch einfach die Stromversorgung des Servos per Transistor aus. Dann kann es Dir egal sein ob noch ein Signal rauskommt oder was das Servo ohne Signal anstellt.


Gruß
Gerhard

-------------------------------------------------------------------------------------------
hier mein aktueller TinyKatalog


mf-fahrer Offline




Beiträge: 267

06.04.2013 12:12
#13 RE: Problem mit Servo Routine Antworten

Hallo Gerhard,
das könnte je nach Servo aber auch wieder ein Problem darstellen.
Ich habe ein Servo, der dreht sich wenn er eingeschaltet wird kurz ein wenig nach rechts und links..
Dann würde der Schieber vielleicht ein wenig geöffnet werden.


Viele Grüße
Jonas


Sven Löffler Offline

Admin


Beiträge: 3.760

06.04.2013 12:42
#14 RE: Problem mit Servo Routine Antworten

Hallo Gerhard,

die Idee betrachte ich mal als Notlösung, wenn ich es gar nicht hin bekomme. Mich würde nur mal interessieren, warum das so nicht klappt. Was mich persönlich wundert, ist dass es bei Start des Programmes ja funktioniert. Sobald die Tasterabfrage eingebunden ist, funktioniert es nicht mehr.


Sven Löffler Offline

Admin


Beiträge: 3.760

06.04.2013 13:29
#15 RE: Problem mit Servo Routine Antworten

So, nachdem ich nun nochmal zig Versuch gemacht habe, die leider alle ohne Erfolg waren, wollte ich nun die Lösung von Gerhard versuchen - mit einem Transistor die Spannung abschalten. Aber auch hier gibt's wieder ein Problem. Ich habe keinen Pin mehr frei. Außer PB5 ( Reset Pin ). Den wollte ich nicht unbedingt benutzen...

Es kann doch nicht sein, dass man das Servosignal nicht per Software einfach ausschalten kann.


Seiten 1 | 2
 Sprung  

disconnected Mikromodell-Chat Mitglieder Online 1
Xobor Xobor Community Software
Datenschutz