Ansteuerung eines Servos mit dem Attiny2313

Hier können Sie ihre eigenen Projekte vorstellen
Antworten
Heinrichs
Beiträge: 185
Registriert: Do 21. Okt 2010, 18:31

Ansteuerung eines Servos mit dem Attiny2313

Beitrag von Heinrichs » Fr 6. Mai 2011, 13:02

Zur Steuerung eines Servos wird hier der 16-Bit-Timer/Counter1 eingesetzt; der Timer/Counter0 ist mit seinem 8-Bit-Zähler zu ungenau. Über Pulsweitenmodualtion (PWM) werden die vom Servo benötigten Signale erzeugt. Im beigefügten Video erhält man einen ersten Eindruck von der Funktionsweise der Servoansteuerung.

Es folgt ein entsprechendes Programm: Über die serielle Schnittstelle nimmt es einen Stellwert zwischen 100 (für 1 ms Pulsweite) und 200 (für 2 ms Pulsweite) entgegen. Man sieht, dass nach der Initialisierung der Timer1-Komponente nur eine einzige(!) BASCOM-Befehlszeile zur Steuerung der Pulslänge erforderlich ist; hier wird der 16-Bit-Vergleichswert in das Doppelregister OCR1B geschrieben (Bei BASCOM erfolgt der Zugriff über den Bezeichner Compare1b.) Weitere Einzelheiten finden sich unter https://www.g-heinrichs.de/attiny/servo_folien.pdf.

Code: Alles auswählen

' Datei für Attiny-Platine von E. Eube, G. Heinrichs und U. Ihlefeldt
' Servo per Serieller Schnittstelle steuern
' Rechter Anschlag (1,0 ms): 100
' Linker Anschlag (2,0 ms): 200
' Waschstraßenplatine
'----------------------------------------------------------------------------

$regfile = "attiny2313.dat"                                 'Attiny2313
$crystal = 4000000
$baud = 9600                                                '4 MHz


'**********************************************************
'******************* Deklarationen ************************

Dim Eingabe As Byte
Dim Pulsweite As Word

'****************** Initialisierung ***********************

Ddrb = &B11111111                                           'Port B als Ausgangsport
Ddrd = &B01110000                                           'D4, D5, D6 als Ausgang; Rest als Eingang
Portd = &B10001111                                          'Eingänge auf high legen

Tccr1a = &B00100011
Tccr1b = &B00011010
Compare1a = 10000                                           'Maximalwert
Compare1b = 750                                             ' Vergleichswert -> Mittelstellung

'**********************************************************
'******************** Hauptprogramm ***********************

Do
  Inputbin Eingabe
  Pulsweite = Eingabe * 5
  Compare1b = Pulsweite
Loop

Natürlich liefert BASCOM auch spezielle SERVO-Befehle. Allerdings benötigen diese mehr Speicherplatz.

Servo_und_Oszi.jpg
Servo_und_Oszi.jpg (52.28 KiB) 29790 mal betrachtet
Dateianhänge
servo1_hq.zip
Video zur Servoansteuerung
(14.03 MiB) 3383-mal heruntergeladen

Heinrichs
Beiträge: 185
Registriert: Do 21. Okt 2010, 18:31

Re: Servos mit dem Attiny2313 - superpreiswert

Beitrag von Heinrichs » Do 30. Apr 2015, 14:26

servo_sg90.jpg
Preiswertes Servo
servo_sg90.jpg (35.1 KiB) 27098 mal betrachtet
Die Preise für Servos variieren sehr stark; wer lediglich erste Erfahrungen sammeln möchte, der braucht nur wenige Euro zu investieren: Für unter 2 Euro erhält man schon das Mikro-Servo SG90 (vgl. Abbildung). Hier einige technische Daten (bei 4,8 V):

Drehmoment: 18 N cm
Winkelgeschwindigkeit: 600°/s
Gewicht: 9.0 g
Abmessungen: 23,1 mm*12,2 mm*29,0 mm
Motortyp: 3-Pol
Getriebe: Plastik
Winkelbereich: 180°
Pulsbreite: 500-2400 µs
Anschlüsse: Schwarze=Gnd, Rot=Vcc, Orange=Signal

Benutzt man das oben angegebene Programm, so liegen die einzugebenden Werte zwischen 50 und 240. Bei meinem Versuch war die Betriebsspannung knapp 5,0 V und der Eingabebereich im Programm ungefähr zwischen 53 und 247; das entspricht etwa 530 - 2470 µs.

Antworten