Forum: Mikrocontroller und Digitale Elektronik Arduino L293D - Servo Ansteuerung


von Peter H. (Gast)


Lesenswert?

Hallo zusammen,

ich besitze einen Meccanoid und möchte diesen Open-Source programmieren. 
Auf 
http://cdn.meccano.com/open-source/Meccano_SmartModuleProtocols_2015.pdf 
auf der letzten Seite ist eine Skizze, die den Anschluss der Servos an 
einem Controller zeigt. Ich möchte die Servos mit einem Arduino Uno 
betreiben und habe mir hierfür auch einen L293D Motortreiber gekauft. 
Wenn ich nun einen Motortreiber benutze, benötige ich die im Protokoll 
erwähnten 1kOhm und 22kOhm Widerstände trotzdem?

von Won K. (Firma: Outside the Asylum) (the_sane)


Lesenswert?

Du brauchst für Modelbauservos keinen Motortreiber wie den L293, sowas 
ist da schon eingebaut.
Die brauchen nur Spannung und ein PWM-Signal das über das Tastverhältnis 
den Auslenkungswinkel vorgibt.
Das soll der Arduino in der Software eingebaut haben.

: Bearbeitet durch User
von Peter H. (Gast)


Lesenswert?

Also benötige ich nur für einen DC Motor diesen Treiber?

von Hubert G. (hubertg)


Lesenswert?

Ja, wenn er in beide Richtungen drehen soll. Ansonsten genügt ein 
Transistor.

von Peter H. (Gast)


Lesenswert?

Und wie finde ich heraus, welche Widerstände ich davor schalten muss, 
wie im verlinkten Beispiel weiter oben erwähnt?

von Peter H. (Gast)


Lesenswert?

Mal davon abgesehen heissen die Teile Servo Shield und bei einem anderen 
Projekt, wo Servos mit eingebauter Mikroelektronik verbaut waren, kam 
ebenfalls ein Servo Shield zum Einsatz, wieso?

von Oliver R. (orb)


Lesenswert?

An ein Servo-Shield kannst Du 16 Servos anschließen, weil da ein Chip 
drauf ist, der 16 unabhängige PWMs erzeugen kann.
Der Arduino kann von sich aus einige PWMs ausgeben, Du mußt jetzt sehen 
wieviele Du brauchst und ob der Arduino alleine reicht.

von Dieter F. (Gast)


Lesenswert?

Bist Du umgetauft worden?

Beitrag "Meccanoid Roboter mit Arduino"

von Peter H. (Gast)


Lesenswert?

Mal eine andere Frage. Für die Servos gibt es eine Lib vom Hersteller. 
Wenn ich die Servos aber ganz simpel an den Arduino anschließe und 
folgenden COde, der mit jedem Servo funktionieren dürfte, eingebe, 
reagiert der Servo nicht:
1
#include <Servo.h>
2
3
Servo myservo;  // create servo object to control a servo
4
// twelve servo objects can be created on most boards
5
6
int pos = 0;    // variable to store the servo position
7
8
void setup() {
9
  myservo.attach(5);  // attaches the servo on pin 9 to the servo object
10
}
11
12
void loop() {
13
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
14
    // in steps of 1 degree
15
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
16
    delay(15);                       // waits 15ms for the servo to reach the position
17
  }
18
  for (pos = 180; pos >= 0; pos -= 1) { // goes from 180 degrees to 0 degrees
19
    myservo.write(pos);              // tell servo to go to position in variable 'pos'
20
    delay(15);                       // waits 15ms for the servo to reach the position
21
  }
22
}

Gibt es dafür einen Grund, dass die Servos nur mit der Lib vom 
Hersteller und nicht mit der Servo.h Lib vom Arduino funktionieren? 
Andere Servos funktionieren doch auch.

von Dieter F. (Gast)


Lesenswert?

Peter H. schrieb:
> Gibt es dafür einen Grund, dass die Servos nur mit der Lib vom
> Hersteller und nicht mit der Servo.h Lib vom Arduino funktionieren?

Schau Dir mal Deine verlinkte Beschreibung - S. 7 - an. Fällt Dir was 
auf? Daisy Chain ... kann das ein Standard-Servo? Datenpakete - kann ein 
Standard-Servo etwas damit anfangen?

Also ist an den Servos irgendeine Art von Intelligenz / Chip dran, der 
die Kommandos liest und ausführt (ist sogar auf den Bildern 
näherungsweise erkennbar).

-> Protokoll loggen und nachmachen ist angesagt - oder die Lib des 
Herstellers nutzen (wozu ist die sonst da?)

von Peter H. (Gast)


Lesenswert?

Vielen Dank, dann habe ich jetzt einen Ansatz :)

von Timo (Gast)


Lesenswert?

Ich hätte dazu eine andere Frage. Auf folgendem Bild sieht man die 
Spannungsversorgung der Servos unabhängig von der des Arduino: 
http://www.netlabtoolkit.org/wp-content/uploads/2015/01/servo_connection.png

Ich lese aber immer wieder, dass der Ground-Anschluss des Arduino 
gemeinsam mit dem Ground/Minuspol einer Batterie angeschlossen werden, 
warum ist das so? Mein Arduino wird per USB betrieben und läuft auch 
ohne Ground-Anschluss. Und meine Servos werden über eine Batterie 
betrieben. Wozu den Arduino-GND-Pin dann mit dem Minuspol der Batterie 
verbinden, wenn beide unabhängig voneinander laufen? Verstehe den Sinn 
nicht.

von stromkreis (Gast)


Lesenswert?

Weil der Steuersignalstrom vom Arduino zum Servo wieder zum Arduino 
zurück muß. Das geschieht über GND. Der Stromkreis muß geschlossen sein 
und im Allgemeinen geschieht das über die GND Verbindung . Sonst fließt 
kein Strom, keine Reaktion auf Steuersignal. Um dir zu erklären, warum 
das bei dir anscheinend ohne die GND-GND Verbindung trotzdem geht, 
braucht man eine detailierte Schaltung und Aufbaubeschreibung/-foto.

von Timo (Gast)


Lesenswert?

Die Servos werden doch versorgt und der Arduino per USB ebenfalls. 
Deshalb ist mir das unklar.

von stromkreis (Gast)


Lesenswert?

Timo schrieb:
> Die Servos werden doch versorgt und der Arduino per USB ebenfalls.
> Deshalb ist mir das unklar.

Schade :(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.