PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo,RC5, Timer1/2 und PWM ?



Roberto
16.11.2005, 14:18
Hallo

Möchte meinen Roboter mit RC5 verwenden. (mit Mega8)
Dazu bräuchte ich noch eine Servoansteuerung.
Da RC5 von Bascom ja mit Timmer 0 läuft ,müsste ich die Servosache per Hand programmieren .
Timmer 1 wäre vermutlich gut für eine feinere Auflösung von den Servos.
Timmer 2 hat leider nur 8 bit... :-(

Also wird es vermutlich mit zusätzlich 2 PWM ausgängen für den Motor , schlecht werden.
Ausser ich nehme nur Timmer2 für die Servos..?!
(und Timer1 für die 2 PWM)


Gibt es da schon einen fertigen Code, wie man die Servos mit Timer 1 oder 2 anspricht ?

Hat jemand einen Tip zu dieser Problematik ? ;-)

l.G. Roberto

Ringo
16.11.2005, 14:31
schau mal in der Bascom hilfe..
CONFIG RC5 = pin [,TIMER=2]
Kannst den Timer 2 für den RC5kram nehmen Timer0 für die Servos!

Timer 1 bleibt dann für den PWM übrig!

MfG
Ringo

Roberto
16.11.2005, 19:17
Danke Ringo, diese Option hatte ich übersehen!
Werde ich so probieren :-)

Aber kennt jemand vielleicht einen Code für die steuerung der Servos mit Timer1 ?
Möchte gerne probieren, ob die Servos mit einem Timer1 viel feiner drehen als mit Timer0 und dem Servo Befehl.

linux_80
16.11.2005, 19:55
Hallo,
ich würde jetzt sagen, das drehen der Servos hat nix mit dem Timer zu tun,
der Timer ist dafür da, das die Zeit eingehalten wird wie oft die Signale zum Servo aktualisiert werden, also hilft ein 16Bit Timer auch nicht viel weiter.

10 µs sind auch bei 16 Bit 10µs ;-)

Meiner Meinung hängt das vom Servo selber ab wie fein der dreht, oder Du baust in dein Programm einen Zähler ein, der die Werte Softwaremässig von einem Wert zum neuen Wert zählt, dann dreht der Servo feiner.

Roberto
16.11.2005, 20:24
Hallo

mmhh..
Soweit ich jetz weis bekommt das Servo ein Signal im Berreich von 1ms bis 2ms
https://www.roboternetz.de/wiki/pmwiki.php?n=Main.Servomotoren

Beim Servo Befehl hätte ich da ca. 120 Schritte zwischen Bereich 1 und 2ms

Mit Timmer0 hätte ich ca. 255 Schritte
Beim Timer1 ...?
Oder ginge das alles auch mit Timer 0 oder 2 ?

linux_80
16.11.2005, 20:29
Dann musst Du einfach den Reloadwert kleiner machen, und schaun obs was bringt.

Roberto
16.11.2005, 20:50
Was ist die Reload Zeit jetzt eigentlich?!
Die 20mS bleiben immer gleich ?

Wo anders habe ich gelesen.. :
>der Reload bezieht sich auf die Auflösung des Servoimpulses.
verändern sich dann auch die möglichen max. Werte für das Servos .

Z.B. 30-120 bei Reload 10
Bei Reload 5 dann vielleicht mehr, für den gleichen Weg ?
Muss jetzt direkt mal probieren..

Ratber
16.11.2005, 21:13
Möchte gerne probieren, ob die Servos mit einem Timer1 viel feiner drehen als mit Timer0 und dem Servo Befehl.


Bevor du einen riesen Aufwand betreibst solltest du bedenken das die
Servoauflösung noch eine Rolle spielt und die ist abhängig vom Modell bzw.
genauer gesagt ,von der verwendenten Servoelektronik.

Mit einer einfachen Testschaltung und einem Mehrgangpoti bzw.
Spindeltrimmer läst sich ein Servo recht gut in dieser Richtung überprüfen.

linux_80
16.11.2005, 21:21
@Roberto
Die 20ms bleiben immer gleich, sonst würde ja der Servo nimmer gehen,
der Reloadwert heisst ja Reloadwert, weil sooft der Wert reloadet wird ;-)
und zwar alle X µs (Micro!)

Wenn du aber den PositionsWert trotzdem gleich von 30 auf 120 änderst ist es egal was Du im Programm einstellst, dann hängt das ganz vom Servo ab wie schön der dreht.

Roberto
16.11.2005, 21:46
Hallo

Habe jetzt getestest :-)

Reload : links : mitte : rechts : Bereich

20: 23 : 55 : 85 : 62
15 : 27 : 68 : 108 : 81
10 : 35 : 86 : 140 : 105
5 : 47: 118: 196 : 149
4 : 50 : 128 : 210 : 160
3 : 55 : 139 : 230 : 175

Also bei Reload 3 hätte ich max. 175 Positionen.

Würde es nix bringen , wenn man die us händisch per Timmer programmiert ?! Damit die us feiner unterteilt werden ?
Oder kann das Servo selber nicht mehr Aufteilungen/Auflösung ?

linux_80
16.11.2005, 22:12
am allerschönsten würde es gehen wenn Du PWM verwendest,
ich weiss jetzt nur nicht wie man unter Bascom einstellt, das die Impulsdauer auf 20ms eingestellt wird, dann kann man mit dem 16bit Timer per OCR die position einstellen, das sollte dann ganauer sein.

Der Nachteil du musst das Pin verwenden das OCR am Ausgang hat,
bei Software Servosteuerung kann man jedes beliebige Pin verwenden.

Roberto
16.11.2005, 22:34
Mich würde interessieren, ob es überhaupt feiner werden kann, oder ob das Servo sowieso nicht mehr kann als die max. 175 Schritte.

Hat hier keiner die Servo-Pulse mal per Timer Programiert ?! :-)

Ratber
17.11.2005, 00:18
Möchte gerne probieren, ob die Servos mit einem Timer1 viel feiner drehen als mit Timer0 und dem Servo Befehl.


Bevor du einen riesen Aufwand betreibst solltest du bedenken das die
Servoauflösung noch eine Rolle spielt und die ist abhängig vom Modell bzw.
genauer gesagt ,von der verwendenten Servoelektronik.

Mit einer einfachen Testschaltung und einem Mehrgangpoti bzw.
Spindeltrimmer läst sich ein Servo recht gut in dieser Richtung überprüfen.

PicNick
17.11.2005, 06:27
Hat hier keiner die Servo-Pulse mal per Timer programiert ?!

Die RNS1 (Frank), RNSX (PicNIck) u. RNC10(Kjion) für den CoProcessor auf der RNBFRA-Karte sind mit Timer1 in µS programmiert

Beim RNSX kann man dadurch einfach die Servo-Zeit mit einer Zahl von 550 - 2100 (0,5 - 2,1 mS) einstellen. Ob das Servo da genauso mitspielt, hängt aber natürlich vom Servo ab.

Roberto
17.11.2005, 06:52
Hallo Robert

(genau an dich dachte ich auch ;-) )

Laufen die Servos in dieser Art dann flüssiger als mit dem Servo-Befehl vom Bascom

Könnte man dafür vielleicht auch Timer2 verwenden bei gleicher Auflösung ?
z.B. öfter den Timmer2(8 Bit) durchlaufen lassen, damit man die gleiche Auflösung zusammenbringt , wie mit dem 16Bit Timer?!

Muss mich erst noch in die Timer-Geschichte einarbeiten.
Habe da noch keinen grossen Plan ;-)

l.G. Roberto

PicNick
17.11.2005, 09:06
Ich würde das gesamte Konzept berücksichtigen. Persönlich verwende ich
gerne Timer0 als generellen Timer für alles im mS Bereich, und die anderen timer für Specials, wie Servo, weils eben praktisch ist.
Aber natürlich kann man für Servos auch den Timer0 mehrmals laufen lassen.
Andererseits muß man daran denken, daß eine 255-Servoauflösung ja doch bei 180 Grad maximal einer Schrittweite von 0.7 Grad entspricht. Da muß ja die Mechanik auch erstmal mitmachen. Sprich: In den meisten Fällen reicht das wohl locker
Andere Überlegung: bei 255 Steps und 20mS Servo refresh braucht das Servo schon 5 Sekunden von links nach rechts

Roberto
17.11.2005, 09:29
Hallo Robert

Danke, du hast meine Fragen damit beantwortet :-)
Dann bleibe ich mal bei Timer2 für die Servos (=Lichtfinder)
Timer0 bekommt RC5 und der Timmer 1 bleibt mir für 2*PWM :-)

l.G. Roberto