PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servo ansteuern



Jada
18.06.2010, 13:42
Hallo,
Ich habe eine Frage,
Ich weiß das ich servos über PORTA ansteuern kann,
nun möchte ich wissen, ob ich servos über PORTC, PORTD und PORTB ansteurn kann. Ausprobieren wollte ich dies nicht weil ich angst hatte das mir mein controler durchbrennt.
Vielen Dank

syn_error
18.06.2010, 14:42
Ahh, mein lieblings Fragensteller. ;)
Alle Ports sind gleich (Push-Pull stufe), somit sollte es keine Probleme geben.

oberallgeier
18.06.2010, 15:30
... möchte ich wissen, ob ich servos über PORTC, PORTD und PORTB ansteurn kann ...Wie so oft gilt: im Prinzip ja.
... Alle Ports sind gleich ...Wie so oft gilt: im Prinzip - gleich. Da ist z.B. beim mega16/-32 zu beachten, dass auf PORTC einige Pins für JTAG vorgesehen sind (das kann man aber per Fuses abschalten), bei vielen Controllern gibts RX- und TX-Pinne, da gibts I2 C-Pinne - also Etliches, das je nach Auslegung der Schnittstellen oder anderer Nutzer wenig oder keinen Sinn macht, es für einen Ser vo zu benutzen.

Empfehlenswert für die Servoansteuerung ist ein Anschluss, auf dem man ein Hardware-PW M-Signal erzeugen kann. Diese Pinne heissen dann etwa OC0A, OC2B und ähnlich. Das brächte programmtechnisch eine Vereinfachung, weil dann ein Hardware-PW M-Signal erzeugt werden kann, für das nur minimaler Software- bzw. Code-Aufwand getrieben werden muss. Sprich: ne Hardware-PW M kann CPU-Zeit einsparen.

Die jeweilige Portbelegung - mit Angabe der verschiedenen, möglichen, alternativen Nutzungen - ist in den Datenblättern, meist auf Seite 2 oder 3 angegeben. Datenblätter von At mel kannst Du hier runterladen. (http://www.atmel.com/dyn/products/datasheets.asp?family_id=607)

Bitte denk daran, dass ein Ser vo möglichst mit einer vom Controller getrennten Versorgung, aber einem gemeinsamen GND, betrieben werden soll, um Störungen durch hohen Stromverbrauch des Serv os zu verhindern. Der Se rvo hängt also üblicherweise mit seinem Signaleingang an einem Controller-Pin und ist mit dem GND des Controllers verbunden. Wenn keine getrennte Energiestation für den Ser vo verfügbar ist, bieten sich Elkos an zur Pufferung des Energiehungers der Servomotoren.

radbruch
18.06.2010, 15:51
Hallo


Empfehlenswert für die Servoansteuerung ist ein Anschluss, auf dem man ein Hardware-PWM-Signal erzeugen kann.Beispiele für Servoansteuerungen mit Hardware-PWM findet man eher selten. Grund dafür ist das sehr ungünstige Impuls:Pause-Verhältniss des Servosignals. Einfacher und resourcenschonender (Hardware-PWM ist eine sehr wertvolle weil rare Funktion zumindest bei den kleineren Microkontrollern) ist eine Ansteuerung mit Software-PWM die mit einem Timer (klassisch verschwenderisch mit 100kHz-Takt oder eleganter und etwas komplizierter mit einem Interupt pro Impuls) erzeugt wird.

Gruß

mic

Richard
19.06.2010, 09:45
'-----------------------------------------------------------------------
' (c) 2001-2005 MCS Electronics
' servo.bas demonstrates the SERVO option
'-----------------------------------------------------------------------

'Servo's need a pulse in order to operate
'with the config statement CONFIG SERVOS we can specify how many servo's we
'will use and which port pins are used
'A maximum of 16 servos might be used
'The SERVO statements use one byte for an interrupt counter and the TIMER0
'This means that you can not use TIMER0 anymore
'The reload value specifies the interval of the timer in uS
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10
$regfile = "2313def.dat"

Config Servos = 1 , Servo1 = Portb.0 , Reload = 10
'as an option you can use TIMER1
'Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10 , Timer = Timer1


'we use 2 servos with 10 uS resolution(steps)

'we must configure the port pins used to act as output
Config Portb = Output

'finally we must turn on the global interrupt
Enable Interrupts

'the servo() array is created automatic. You can used it to set the
'time the servo must be on
Servo(1) = 10 '10 times 10 = 100 uS on
'Servo(2) = 20 '20 times 10 = 200 uS on
Do
Loop

Dim I As Byte
Do
For I = 0 To 100
Servo(1) = I
Waitms 1000
Next

For I = 100 To 0 Step -1
' Servo(1) = I
Waitms 1000
Next
Loop
End





Hat bei mir gut geklappt, Gruß Richard[/code]

Feugo
05.05.2011, 12:27
Hallo erstmal an alle,die hier sind
ich brauche dringen euer Hilfe,ich habe ein Projekt,
man will viele Kleine glänzende Kugeln (Tennis ball grösse),jede einzelne kugel hängt je an einem Seil ( seil ist Unsichtig),die andere Seilende ist mit Servo gebunden,man will eine Bewegung von allen diesen Kugeln durch die servos generieren und zwar so dass ein AutoKarroserie form am ende entsteht.Also rechts,links oben unten bewegungen bis ein Auto form entsteht. (es gibt auch ein Werbung im Fernsehen,die sowas zeigt)
meine Aufgabe ist die Folgende :
Ich muss ein Komplettes Chip board also ein richtiges Leistungsfähiges Board zusammen bauen das man auch mit PC verbindet.Das Board soll folgende Anschlüsse haben:isp,usb,I2C,RS232,JTAG,Resetknopf,power,UART ´s,SD-card,CAN,Led´s mit IR und LAN um ein hochleistungs Servomotor zu steuern.Wenn das Board fertigist dann kommt die nächste phase (C-programmierug),übrigens das Board sollte möglichst vielseitig einsetzbar also für halt viele aufgaben geeignet sein(man muss halt nur die Befehle also das setup neu schreiben oder anpassen wenn sein muss )
Ich habe rescherschiert aber ich weiss gar nicht von wo ich
anfangen soll.ich weiss nicht wie hoch die geschwindigkeit vom prozessor sein muss,oder die grösse vom Ram und soweiter .Es gibt schon fertige boards die man kaufen kann,aber der Professor will dass man die teile fertig kauft und selber stück nach stück reinstecken kann und danach mit Programmierung beginnen.Ich bin sehr dankbar für jede Hilfe,tipps und hinweise.Vieln Dank