PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servos mit ATmega32



murdocg
16.10.2008, 08:13
Hi.
Habe vor in nächster Zeit ein Controllerboard, wie in diesem Tutorial aufzubauen: https://www.roboternetz.de/wissen/index.php/AVR-Einstieg_leicht_gemacht#Was_braucht_man.2C_wenn_ma n_mit_einem_Controllerboard_den_Einstieg_startet.3 F
Meine Frage: Wird es möglich sein damit 8Servos anzusteuern? Da irgendwann daraus vllt mal ein Roboter enstehen soll.
Danke für eure Antworten!

mfg murdocg

Rofo88
16.10.2008, 09:52
Ja das sollte problemlos möglich sein.

Jon
16.10.2008, 10:00
Voraussetzung ist nur, dass du einen schnelleren Quarz nimmst. Wenn du den internen verwendest gibt es schnell mal Probleme. Also am besten gleich einen externen 16MHz Quarz anlöten.

jon

murdocg
16.10.2008, 14:21
Ok Danke.
Das wollte ich nur wissen. Will mir(bin noch Anfänger) ein Controllerboard bauen, was ich dann später halt auch in nem Bot verwenden will.

mfg murdocg

Jon
16.10.2008, 15:02
Ach, noch etwas:
Regel am besten die Spannung der Servos über einen extra Spannungsregler oder nimm gleich nen eigenen Akku für die Servos. Die Anschaltströme der Servos sind recht ordentlich, sodass es dazu kommen kann, dass sich der µC resettet oder andere Hardware wie US oder IR Sensoren gestört wird.

jon

oberallgeier
16.10.2008, 16:54
Hallo murdocg,


... in nächster Zeit ein Controllerboard... aufzubauen ... Frage: Wird es möglich sein damit 8Servos anzusteuern? ...8 Servos - das sind acht Pinne des Controllers. Jeder Servo braucht einen Pin, dessen Signal an den SIG-Eingang (Signaleingang) des Servos geht. Vermutlich hattest Du schon hier nachgesehen (https://www.roboternetz.de/wissen/index.php/Servos), da steht für diesen Servoanschluss "PWM". Es MUSS aber keine übliche Hardware-PWM sein. Man kann die Rampe(n) auch softwaremässig machen.

Man kann einen Servo sehr einfach und praktisch mit einer PWM ansteuern, dann hat man kaum Softwareaufwand. Es gibt z.B. bei Atmel ja Controller mit bis zu 16 PWM-Ausgängen; wie das bei anderen Controllern ist, weiss ich auf die Schnelle nicht. Wenn Du aber keinen Controller mit 8 PWM-Ausgängen hast, wirst Du das Ganze softwaremässig machen müssen. Dazu gibts etliche Threads hier im Forum.

Jon hat schon etwas als "... am besten ..." genannt, das ist m.E. unabdingbar. Sprich: Du solltest dringend die Servos aus einer getrennten Spannungsquelle versorgen. Andernfalls werden die 8 Servos - vermutlich sogar auch dann, wenn es die kleinsten Größen sind - Deine Controllerversorgung massiv stören.

Beim Aufbau des Controllerbords solltest Du Dich über geeignete Entstörungsmassnahmen in Controllernähe (Abblockkondensatoren, Entstördrossel, Widerstände) vorsehen. Dazu steht viel in den Datenblättern - oder bemühe die Suchfunktion hier im Forum.

Viel Erfolg

RP6conrad
16.10.2008, 20:07
Auch der Mega32 kann problemlos 10 servos ansteuern. Wichtig dabei ist das verwende von Interrupts und Timer. Ich habe das gemacht mit Timer1 (16bit). Der Interrupt Routine (ISR) von Timer 1 werd den ersten Mal durchlaufen und dan werd die Pin von erste Servo hoch gesetzt. In ISR wird dan die Pulslaenge von diesen Servo in OCR Register von Timer 1 uebertragen. Damit wird diesen ISR wiederum activiert exact nach ablaufen diesen Zeit. Beim diesen Durchlauf wird dan Servo1 low gesetztn Servo2 hoch. Und Pulslaenge von Servo2 wiederum in OCR schreiben. So wird die ganse Reihe von Servos durchlaufen, wo das die letzte Zeit so berechnet werd das das ganze nach 20 mS wieder anfangt (nicht kritisch). Diesen Ablauf hat nur eine sehr geringe Belastung von µ : die ISR wird nach 1 bis 2 mS wieder aufgerufen. Da sind bei 8 MHz so um die 8000 Cyclen !! (siehe code bei forum RP6, Servo mit 4 µS Auflosung)

Jon
17.10.2008, 06:48
Das ganze ist sehr von der Programmiersprache abhängig. Wenn BASCOM genutzt werden soll, dann ist die Ansteuerung ganz einfach, da BASCOM das alles regelt und für einen macht. Da muss man nur noch die Position des servos angeben.
Soll aber C verwendet werden, so kann das so gemacht werden wie RP6conrad oder, wie oberallgeier es vorgeschlagen hat. Aber das sind bestimmt nich die beiden einzigen Möglichkeiten. Da kann man seiner eigenen Kreativität freien Lauf lassen und sich selbst etwas überlegen.

Aber wie gesagt, der Aufwand ist von der Programmiersprache abhängig. Bei BASCOM infach, bei C etwas schwerer, aber bestimmt nicht schlechter.

jon