Forum: Mikrocontroller und Digitale Elektronik Ansteuerung Modelcraft analog Servo


von Alex R. (itaxel)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich scheitere seit längerem an der Ansteuerung von analogen Modelcraft 
Servos mit einem Arduino (atmega168 µC).
Ich hab 2 Servo Typen von Modelcraft: 410 und 1811.
Datenlatt 410: 
http://www.produktinfo.conrad.com/datenblaetter/400000-424999/404753-da-01-en-MODELCRAFT_STANDARD_SERVO_410.pdf

Ein Servo habe ich an einer externen 5V Stromversorgung.
Masse sind an Servo un Arduino gleich geschaltet.
Steuersignal (oranges Kabel) habe ich an Pin 9.

Ich habe viel Beispielcodes die es hier und im Netz gibt ausprobiert.
So wie die Funktionweise und das Zeitmanagement eines analogen Servos 
gelesen.

Das einzige was die Servos außer leicht tackern machen ist nichts.

Hat jemand schon ein Modelcraft analog Servo zum laufen gebracht?
Das kann doch nicht so schwierig sein?! Bin schon am verzweifeln.

von Hannes L. (hannes)


Lesenswert?

Alex R. schrieb:
> Ich habe viel Beispielcodes die es hier und im Netz gibt ausprobiert.

Programmieren besteht nicht aus Ausprobieren von gefundenem 
unverstandenem Code, sondern aus Schreiben von eigenem Code.

> So wie die Funktionweise und das Zeitmanagement eines analogen Servos
> gelesen.

Und welche Schlussfolgerungen hast Du daraus gezogen?

Vorschlag:
Timer1 mit Vorteiler 1:8. Das ergibt 0,5 Mikrosekunde je Schritt bei 
65536 Schritten. Das deckt also einen Zeitbereich von 32768 
Mikrosekunden ab.

Fürs Servo braucht man ein festes Intervall von etwa 20 ms (20000 µs) 
für die Wiederholung des Telegramms. Dieses könnte man durch den 
CTC-Modus erreichen, aber auch im Normalmodus durch einen der beiden 
Compare-Interrupts (z.B. OCR1A) des Timers mit dem Comparewert 40000 (40 
Tausend halbe Mikrosekunden, also 20 ms). Genau gesehen muss 39999 
eingegeben werden, da der Compare-Interrupt erst beim nächsten Takt nach 
dem Compare-Match reagiert, aber das macht den Kohl nicht fett.

Der zweite Compare-Interrupt (OCR1B) kümmert sich um die Länge der 
Servo-Impulse. Da die Impulsbreite zwischen 1,0 ms und 2,0 ms betragen 
soll, sind Zahlenwerte zwischen 2000 und 4000 (halbe Mikrosekunden) als 
Comparewert nötig (natürlich wieder 1 weniger, wenn es genau werden 
soll).

Im 20ms-Interrupt (OCR1A) löscht man den Zähler für die Servo-Nummer und 
aktiviert den ersten Servo-Ausgang. Zusätzlich setzt man den Termin für 
den nächsten Telegramm-Beginn, indem man zum aktuellen Stand des 
Compare-Wertes 40000 dazu addiert und ins OCR1A-Register zurück 
schreibt. Dann addiert man auf den (alten) OCR1A-Wert noch das 
(variable) Intervall für die Servostellung auf und schreibt den Wert ins 
OCR1B-Register. Dies ist der Termin für das Ende des ersten 
Servoimpulses.

Im OCR1B-Interrupt setzt man alle aktiven Servo-Impuls-Pins auf Low, 
erhöht den Zähler für die Servo-Nummer, holt mit der Servo-Nummer als 
Index das Bitmuster für das nächste Servo aus einem Array und die 
Impulsdauer aus einem anderen Array und schreibt das Bitmuster in den 
Ausgangsport (oder die Ausgangsports) und addiert das Intervall auf den 
aktuellen Wert von OCR1B auf.

Auf diese Art kann man mit geringer Prozessor-Belastung (mit 2 
Interrupts) 8 bis 10 Servos steuern, deren Positionsdaten in einem Array 
liegen und vom Hauptprogramm verändert werden können.

...

von Alex R. (itaxel)


Lesenswert?

Hannes L. schrieb:
> Programmieren besteht nicht aus Ausprobieren von gefundenem
> unverstandenem Code, sondern aus Schreiben von eigenem Code.

Warum das Rad neu erfinden?
Also nehme ich als erstes den einfachen Weg. Es gibt ja schon viel code 
für das ansteuern eines servos.
Da die Libs und anderen Codes immer das selbe erbracht haben (klackern 
des Servos) musste ich mich halt mehr in die Materie einarbeiten. 
Ergo... selber programmieren.

Hannes L. schrieb:
> Und welche Schlussfolgerungen hast Du daraus gezogen?

Das es immer noch nicht geht und ich keine analoge Modelcraft Servos 
mehr kaufe.

Hannes L. schrieb:
> Vorschlag:
> Timer1 mit Vorteiler 1:8.

Mit einem prescaler hatte ich es noch garnicht versucht.
Werde deine Vorgehensweise heute abend mal "ausprobieren" ;)

Danke für deine Antwort

Gruß Alex

von Sven (Gast)


Lesenswert?

> Steuersignal (oranges Kabel) habe ich an Pin 9.
Wird dieser Pin den in deinen Beispielcodes auch verwendet ?

von Cyblord -. (cyblord)


Lesenswert?

Alex R. schrieb:
> Hannes L. schrieb:
>> Programmieren besteht nicht aus Ausprobieren von gefundenem
>> unverstandenem Code, sondern aus Schreiben von eigenem Code.
>
> Warum das Rad neu erfinden?
> Also nehme ich als erstes den einfachen Weg. Es gibt ja schon viel code
> für das ansteuern eines servos.

Und das funktioniert ja für dich auch so gut gell?
Die Geschichte mit dem Rad ist nur eine Ausrede für dummfaule Burschen 
die sich nicht mit der Materie beschäftigen wollen und denken sie 
könnten per Copy&Paste irgendwas zuammenklicken und das würde dann am 
Ende tatsächlich funktionieren. Das sind Wahnvorstellungen.

Wenn man weiß was man tut (aber erst dann), kann man getrost auf fertige 
libs und Module zurückgreifen. Dann erspart man sich Zeit und Fehler. 
Weil man dann einschätzen kann ob die lib geeignet ist, und man diese 
lib dann auch erst sinnvoll einbinden und verwenden kann und bei 
aufkommenden Fehler sehr schnell sehen kann, ob das Problem am eigenen 
Code oder an er lib liegt.
Vorher, als totaler Vollnoob, ist dieses Vorgehen einfach schlecht, weil 
man am Ende einen Haufen Code hat, der nicht funktioniert und den man 
null durchblickt.

von Stefan M. (derwisch)


Lesenswert?

Hast Du etwas Messtechnik da?
Das Problem würde ich mir erstmal mit einem Oszilloskop anschauen.
Wie sehen die Signale aus, die an deinem Servo ankommen?
Sehen sie so aus, wie die "Norm" das vorschreibt?

Reicht die Stromquelle aus, um den Servo zu versorgen, oder bricht die 
Spannung zusammen?

Messen ist hier zunächst das wichtigste.

von Hannes L. (hannes)


Lesenswert?

Alex R. schrieb:
> Das es immer noch nicht geht und ich keine analoge Modelcraft Servos
> mehr kaufe.

An den Servos liegt es mit an Sicherheit grenzender Wahrscheinlichkeit 
nicht. Ich bin zwar kein Marken-Fetischist, aber diese Servos werden 
genauso angesteuert wie alle anderen analogen Servos auch. Sie 
unterscheiden sich lediglich in den Winkelpositionen der Endlagen und 
ggf. in der Qualität der Mechanik. Du kannst auch davon ausgehen, dass 
seit etwa 40-50 Jahren in fast allen analogen Servos derselbe Chip 
eingebaut ist.

...

von Hannes L. (hannes)


Lesenswert?

Stefan M. schrieb:
> Messen ist hier zunächst das wichtigste.

Aber nur, wenn man auch in der Lage ist, die Messwerte richtig zu 
interpretieren.

...

von Stefan F. (Gast)


Lesenswert?

> und ich keine analoge Modelcraft Servos mehr kaufe.

Hast du mehr als einen Servo ausprobiert? Das sind prinzipiell keine 
schlechten Produkte. Du schiebst hier die Schuld einfach von Dir und 
blockierst Dir selbst den Weg zur ordentliche Fehleranalyse.

Ich habe bisher (fast) ausschließlich mit unterscheidlichen Servos von 
Modelcraft gebastelt. Die waren alle in Ordnung.

Stell mal den Schaltplan eine Minimal-Aufbaus rein und zeige dein 
primitivstes Programm, dass deiner Meinung nach funktionieren müsste 
(ich denke da an eine Endlosschleife mit _delay_us() Aufrufen und ohne 
Timer).

Der Hannes Lux hat das Thema gerade sehr ausfühlich erläutert. Falls Dir 
das so nicht weiter hilft, dann kammst du eventuell mit meiner 
bebilderten Anleitung besser klar, wo zuerst ein sehr primitives 
Programm erstellt wird und dann dann schrittweise ausgebaut wird: 
http://stefanfrings.de/mikrocontroller_buch/index.html

von aSma>> (Gast)


Lesenswert?

Servus,
wenn der Servo nur kurz zugt, dann vermute ich, dass die Treiber im 
Servo durch sind.

Das hatte ich auch von mal 80€ teurer Konrad Servos gehabt(beide). 
Solche Servos haben ein billiges Innenleben. Beim ausgeschalteten 
Zustand hat die EMK alles platt gemacht. Naja, das nennt man Lehrgeld.

Vorausgesetzt deine Spannungsquelle ist OK.

Sende einfach dein Code + Fotos vom Aufbau. Wenn du einen Kollegen 
kennst, der ein fkt.stüchtichtigen Servo hat...

mfg

von INGO (Gast)


Lesenswert?

analog Servos wollen oft 50hz pwm haben. Analog Servos sind oft 
unkomfortabel da sie wenn das Signal weg fällt bzw in nicht konstanten 
Zeitabständen Signal kommt, auf nullstellung gehen oder rumzucken. dh es 
ist sehr wichtig das du den servo andauernd mit 50hz pwm Signal 
fütterst. sonst kommt der mit dem Signal nicht parat.

digital Servos verzeihen da schon etwas mehr. die haben meist pwm bis 
min 400hz
und können auch signale in nicht regelmäßigen Zeitabständen verarbeiten

Vorteil des digital Servos:
er kann sehr schnell eingestellt werden, dadurch hat der Controller 
genug zeit für andere aufgaben.


so fern du keine Überspannung am Servo hattest wird der bestimmt noch 
heil sein.

klingt so als würde dein servo ein siganl bekommen. Das fehlt dann aber 
sofort wieder und er dreht zurück.

Arduino servo lib bsp. sieht vor das du nach Servo.Write() ein delay 
einlegst. vermute das da der fehler ist. während der Controller im 
delay() hängt sendet er kein pwm Signal.


du solltest auch servo.writeMicroseconds(20000) verwenden und kein delay 
im code haben. könnte sein das der servo dann läuft.

von INGO (Gast)


Lesenswert?

http://www.produktinfo.conrad.com/datenblaetter/400000-424999/404753-da-01-en-MODELCRAFT_STANDARD_SERVO_410.pdf

da stehen die Control Specification
die musst du erfüllen. sonst wird das nichts.

von INGO (Gast)


Lesenswert?

Tippfehler

>du solltest auch servo.writeMicroseconds(20000) verwenden und kein delay
>im code haben. könnte sein das der servo dann läuft.

servo.writeMicroseconds(2000).

von Alex R. (itaxel)


Lesenswert?

Hallo zusammen und Danke für die zahlreiche Antworten und Vorschläge.

Ich möchte als erstes mal klar stellen, dass ich kein noob, anfänger, 
laie oder sonst was bin um solche unnütze, beleidigende Beiträge wie von 
Cyblord zukünftig zu vermeiden. Man kann respektvoll und höflich mit 
einander schreiben oder man hält sich einfach raus. Solche poster pushen 
nur ihren Beitrags-Counter und machen ein Forum unatraktiv.

Ich programmiere schon sehr lange und wie jeder andere habe auch ich in 
manchen Dingen einfach Probleme und komme nicht weiter.
Thema erledigt.


Stefan M. schrieb:
> Reicht die Stromquelle aus, um den Servo zu versorgen, oder bricht die
> Spannung zusammen?
>
> Messen ist hier zunächst das wichtigste.
Ich benutze ein Labornetzteil als externe Quelle. Daran liegt es nicht.
Ich werde mir das ganze mal am Oszi anschauen.


Stefan U. schrieb:
> Hast du mehr als einen Servo ausprobiert?
Ja. 4 Stück der selben Marke nur andere Modelle.
Ich werde später mein Code und Plan posten.


aSma>> schrieb:
> wenn der Servo nur kurz zugt, dann vermute ich, dass die Treiber im
> Servo durch sind.
Ehrlich gesagt kann ich mir nicht vorstellen, dass alle 4 defekt sein 
sollen. Ich denke es liegt irgendow an meinem code und timing.


INGO schrieb:
> Arduino servo lib bsp. sieht vor das du nach Servo.Write() ein delay
> einlegst.
Danke für die Info. Dem werde ich auch mal nach gehen.


INGO schrieb:
> da stehen die Control Specification
> die musst du erfüllen. sonst wird das nichts.
Habe ich im ersten Beitrag schon mit gepostet. ;)

von Alex R. (itaxel)


Angehängte Dateien:

Lesenswert?

Hier nun der Schaltplan der Quellcode:
1
#define F_CPU 16000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
int main(void)
7
{
8
  PRR &= ~(1 << PRTIM1); // 16-Bit Timer1 aktivieren
9
  
10
  // Timer 1 mit Prescaler 64 
11
  TCCR1A = (1<<COM1A1) + (1<<WGM11);
12
  TCCR1B = (1<<WGM12) + (1<<WGM13) + (1<<CS10) + (1<<CS11);
13
14
  ICR1 = 4999;
15
16
  DDRB |= (1<<PB1);
17
18
  while (1)
19
  {
20
    // Wert 1 anfahren
21
    OCR1A = 250;
22
    _delay_ms(5000);
23
24
    // Wert 2 anfahren
25
    OCR1A = 500;
26
    _delay_ms(5000);
27
  }
28
}

Mein Multimeter zeigt 50Hz an. Wie das Signalbild aussieht konnte ich 
noch nicht testen.

Bislang noch kein erfolgreihes Ergebnis. Weiterhin nur klackern.

von Hannes L. (hannes)


Lesenswert?

Alex R. schrieb:
> Schaltplan

Spendiere den Stromversorgungs-Anschlüssen mal noch je einen Kerko 100 
nF. Und zwar direkt an den Anschlüssen zwischen Plus und Minus (Masse).

...

von Alex R. (itaxel)


Lesenswert?

Hannes L. schrieb:
> Spendiere den Stromversorgungs-Anschlüssen mal noch je einen Kerko 100
> nF.

Das löst trotzdem nicht mein problem.

von Wolfgang (Gast)


Lesenswert?

Alex R. schrieb:
> Warum das Rad neu erfinden?
> Also nehme ich als erstes den einfachen Weg. Es gibt ja schon viel code
> für das ansteuern eines servos.

Diese Einstellung ist schon der ersten Ariane5 Rakete zum Opfer gefallen 
- bewährter Code von der Ariane4 kopiert.

Wie du bereits selber erfahren hast, führt wildes Kopieren und Probieren 
ohne irgendwelches Verständnis genau dann nicht zum Ziel, wenn es aus 
irgendwelchen Gründen nicht funktioniert.

von Hannes L. (hannes)


Lesenswert?

Alex R. schrieb:
> Das löst trotzdem nicht mein problem.

Gut. Selbstverständlichkeiten wie Abblock-Kondensatoren für die 
Stromversorgung sind also nicht nötig. Ebenso ein PullUp am bisher 
offenen Reset-Pin. Ich würde mich damit nicht wohl fühlen und 
sporadischen Reset des Mikrocontrollers befürchten.

Alex R. schrieb:
> Mein Multimeter zeigt 50Hz an.

Kann Dein Multimeter auch den Tastgrad anzeigen? (Eines meiner billigen 
Multimeter kann es.) Dann schau mal, ob der Tastgrad zwischen 5% und 10% 
umschaltet.

Zum Code, ich kann kein C und will es auf meine alten Tage nicht mehr 
lernen. Was Du mit PRR machst, verstehe ich also nicht. In ASM nutze ich 
PRR zum Deaktivieren interner Baugruppen, die per Reset erstmal 
aktiviert sind. Ich vermisse aber in Deinem Programm den Zugriff auf 
DDRB, um den Ausgangs-Pin (PB1) auf Ausgang zu schalten. Das Datenblatt 
meint nämlich in der Bitbeschreibung der COM1xx-Bits Folgendes:

However, note that the Data Direction Register (DDR) bit corresponding
to the OC1A or OC1B pin must be set in order to enable the output 
driver.

Viel Erfolg...

von marek (Gast)


Lesenswert?

Hannes L. schrieb:


Wenn man Code nicht versteht, sollte man ihn nicht kritisieren oder gar 
als fehlerhaft verstehen!

von Edi R. (edi_r)


Lesenswert?

marek schrieb:
> Hannes L. schrieb:
>
> Wenn man Code nicht versteht, sollte man ihn nicht kritisieren oder gar
> als fehlerhaft verstehen!

Immerhin hat er zum Thema beigetragen, und was den Code betrifft, hat 
er im Wesentlichen nur erwähnt, dass er C nicht kann.

Hannes L. schrieb:
> Was Du mit PRR machst, verstehe ich also nicht.

Er macht da das Gleiche wie Du in ASM: Er löscht das Bit PRTIM1, damit 
TIMER1 wirklich aktiv ist. (Meiner Meinung nach überflüssig, weil PRR 
nach dem Einschalten sowieso nur 0 enthält und damit alles aktiviert 
wird, aber schädlich ist es trotzdem nicht.)

Hannes L. schrieb:
> Ich vermisse aber in Deinem Programm den Zugriff auf
> DDRB, um den Ausgangs-Pin (PB1) auf Ausgang zu schalten.

Das ist diese Zeile:
1
DDRB |= (1<<PB1);

Ich habe im Code keinen Fehler entdeckt. Es könnte also noch an den 
Fuses liegen (interner Oszillator statt Quarz, DIV8 falsch), oder an der 
Hardware. Die 2 x 100nF keramisch würde ich auf jeden Fall auch 
empfehlen, ebenso den 10kOhm zwischen RESET und VCC.

von HolgerS (Gast)


Lesenswert?

Alex R. schrieb:
> while (1)
>   {
>     // Wert 1 anfahren
>     OCR1A = 250;
>     _delay_ms(5000);
>
>     // Wert 2 anfahren
>     OCR1A = 500;
>     _delay_ms(5000);
>   }

Hier wird doch OCR1A asynchron zum Zählerstand von TC1 gesetzt.
Das _delay_ms(5000) (5000???) raus und auf TC1 Overflow warten.

Gruß Holger...

von HolgerS (Gast)


Lesenswert?

ups, sorry war Quatsch,

falscher Denkansatz vom mir.

Gruß Holger...

von marek (Gast)


Lesenswert?

Edi R. schrieb:
> marek schrieb:
>> Hannes L. schrieb:
>>
>> Wenn man Code nicht versteht, sollte man ihn nicht kritisieren oder gar
>> als fehlerhaft verstehen!
>
> Immerhin hat er zum Thema beigetragen, und was den Code betrifft, hat
> er im Wesentlichen nur erwähnt, dass er C nicht kann.

... und auch nicht mehr lernen möchte.

Da erübrigt sich weiteres Eingehen auf die Antwort. Zu den vom TO 
gelieferten Infos finde ich keinen Fehler und habe deshalb eben auch 
nichts weiter dazu zu sagen und mangels Phantasie auch nichts zu fragen.

von Eberhard H. (sepic) Benutzerseite


Lesenswert?

Alex R. schrieb:
> Hier nun der Schaltplan der Quellcode:
>
1
...
2
>   while (1)
3
>   {
4
>     // Wert 1 anfahren
5
>     OCR1A = 250;
6
>     _delay_ms(5000);
7
> 
8
>     // Wert 2 anfahren
9
>     OCR1A = 500;
10
>     _delay_ms(5000);
11
>   }
12
>
>
> Mein Multimeter zeigt 50Hz an. Wie das Signalbild aussieht konnte ich
> noch nicht testen.
>
> Bislang noch kein erfolgreihes Ergebnis. Weiterhin nur klackern.

Mit OCR1A = 250 und OCR1A = 500 möchtest Du offensichtlich die beiden 
Endpositionen 0° und 180° anfahren.

Hast Du schon andere Positionen versucht, z.B. OCR1A = 330, 375, 420 
oder sonstige Werte ungleich 250 und 500?

Wahrscheinlich kommst Du nicht daran vorbei, das PWM-Signal per Scope 
anzuschauen.

von Klaus (Gast)


Lesenswert?

Eberhard H. schrieb:
> Wahrscheinlich kommst Du nicht daran vorbei, das PWM-Signal per Scope
> anzuschauen.

Was ist daran so schwer? Ich hätte das Signal bevor ich es irgendwo 
anschliesse auf einem Scope oder LA angesehen. Wenn ich irgendetwas 
programmiere, das sich auf einen Pin auswirkt, ist als erstes der LA 
bzw. Scope dran.

Hannes L. schrieb:
> Kann Dein Multimeter auch den Tastgrad anzeigen? (Eines meiner billigen
> Multimeter kann es.) Dann schau mal, ob der Tastgrad zwischen 5% und 10%
> umschaltet.

Das erübrigt sich, genauso die Frage, wie gut es Frequenzen messen kann.

MfG Klaus

von Hannes L. (hannes)


Lesenswert?

Edi R. schrieb:
> Das ist diese Zeile:

Ja, klar, hatte ich übersehen, sorry.

marek schrieb:
> Wenn man Code nicht versteht, sollte man ihn nicht kritisieren oder gar
> als fehlerhaft verstehen!

Stimmt. Entschuldige bitte, dass ich helfen wollte. Wird so schnell 
nicht wieder vorkommen. Nun bist Du an der Reihe, bring' das Ding 
endlich zum Laufen. Leute wie Dich braucht das Forum.

Meine Servo-Ansteuerungen und Sender-Impulsteile laufen wie gewünscht, 
zwar ohne C, aber auch ohne fremde Leute um Hilfe zu bitten. Und vor 
allem ohne fremden unverstandenen Code.

...

von Wolfgang (Gast)


Lesenswert?

Eberhard H. schrieb:
> Wahrscheinlich kommst Du nicht daran vorbei, das PWM-Signal per Scope
> anzuschauen.

Um ein PWM-Signal anzuschauen, braucht man kein Scope im dreistelligen 
Eurobereich. Da tuts ein kleiner LA für weniger als 7€.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Servosignale kann man mit jeder ollen Soundkarte aufzeichenen. Einfach 
einen 10kOhm Widerstand zwischen Servosignal und Line-In, rechts oder 
links ist egal. Wave-Editor anschmeißen und 5 Sekunden aufnehmen. Wenn 
man sich dann die Wave anguckt, weiß man, was man programmiert hat. 
Kostet lediglich ein Stück Kabel mit 3.5mm Klinke und einen Widerstand.

von Norbert S. (norberts)


Lesenswert?

Moin,

lass doch erstmal ne LED mit 1Hz blinken um zu sehen, ob der 328 
wirklich mit 16MHz läuft.
Ok, sehe gerade, 50Hz zeigt das Miltimeter ja schon an, passt also.
Dann miss mal DC, das müssten 0,25 und 0,5V im Wechsel sein.

Und vor allem mach die verdammten 100n an Vcc und Reset und 10k von 
Reset an Vcc. Ohne das sollte man sich eigentlich weigern Tips zu geben.

Gruß,
Norbert

von Sven (Gast)


Lesenswert?

Bist Du sicher dass die Verkabelung stimmt?
Du schreibst:
>Steuersignal (oranges Kabel) habe ich an Pin 9.
In deinem Schaltplan ist es Pin 15 des µC (das wäre D9 eines Uno)

von Norbert S. (norberts)


Lesenswert?

Sven schrieb:
>>Steuersignal (oranges Kabel) habe ich an Pin 9.
> In deinem Schaltplan ist es Pin 15 des µC (das wäre D9 eines Uno)

Ähh, das passt doch und er hat 50Hz an dem Pin gemessen.

Alex R. schrieb:
> Ich möchte als erstes mal klar stellen, dass ich kein noob, anfänger,
> laie oder sonst was bin um solche unnütze, beleidigende Beiträge wie von
> Cyblord zukünftig zu vermeiden.

Alex R. schrieb:
> Ich programmiere schon sehr lange und wie jeder andere habe auch ich in
> manchen Dingen einfach Probleme und komme nicht weiter.

Soory, wer ein Servo am µC nicht zum Laufen bekommt ist in diesem 
Bereich ein Anfänger und wer meint die 100nF müssten nicht sein ist ein 
Laie.

Gruß,
Norbert

von Minihawk (Gast)


Lesenswert?

Hi,

ich habe auch mal (ist schon was länger her) mit nem AtTiny ein paar 
Servos laufen gelassen. Ich habe mich da auf eigenen Code verlassen, da 
man da eher was lernt und nicht auf Taktfrequenzen etc. von anderen 
Schaltungen angewiesen ist. Ich habe die ersten Versuch emit einem 
Oszilloskop gemacht, und zwar einem Soundkarten-Teil, gibt es als 
Freeware für WIndows zum Herunterladen, das Kabel hat man schnell 
gebastelt. Für den Test der Impulse ist das völlig ausreichend von der 
Auflösung.
Erst später, als die Servos schon tickerten,d a habe ich einen uralten 
Conrad-Oskar dazugenommen, da die Schaltung komische Eigenschaften 
hatte. Damit konnte ich dann feststellen, dass die Spannungsversorgung 
(ich hatte sowohl Servos als auch Chips über ein netzteil betrieben) 
durch die Servo-Ströme zusammenbrach und zum neustart des Atmel-Chips 
führte.

Dieses Forum hier hat mich dabei überhaupt nicht weitergebracht, da hier 
echt einige Leute am Schreiben sind, die zu Hause wohl keinen Spaß haben 
und deren einzige Betätigung es zu sein scheint, ihren Frust in Posts 
abzulassen, die sie anscheinend gerne in solchen Threads wie diesem hier 
ablegen.

Lass DIch davon nicht unterkriegen, lade dir die Oszilloskop-Software 
für die Soundkarte und vergleiche deine Signale mit denen aus einem 
EMpfänger oder Servotester. Das Win-Oszi kann zwei Kanäle, so das man da 
schon direkt vergleichen kann.

von Paule H. (stk500-besitzer)


Lesenswert?

Minihawk schrieb:
> Dieses Forum hier hat mich dabei überhaupt nicht weitergebracht, da hier
> echt einige Leute am Schreiben sind, die zu Hause wohl keinen Spaß haben
> und deren einzige Betätigung es zu sein scheint, ihren Frust in Posts
> abzulassen, die sie anscheinend gerne in solchen Threads wie diesem hier
> ablegen.
Bei solchen Antworten, würde ich das auch vermuten.


> Lass DIch davon nicht unterkriegen, lade dir die Oszilloskop-Software
> für die Soundkarte und vergleiche deine Signale mit denen aus einem
> EMpfänger oder Servotester. Das Win-Oszi kann zwei Kanäle, so das man da
> schon direkt vergleichen kann.

Um die Zeitbasis des Controllers zu testen, braucht man kein Oszi.
Eine LED mit der gewünschten Frequenz (z.B. 1Hz) blinken lassen, reicht 
völlig, um 16MHz von 8MHz oder 1MHz zu unterscheiden.

Es ist ja auch nicht so, dass Hannes hier nur zum Rumstänkern mitmacht.

Funktionistüchtigen Servo-Code findet man in der Artikelsammlung.
Wenn man sowieso ein Arduino-Board benutzt, sollte man vielleicht 
einfach mal das entsprechende Beispielprogramm ausprobieren - die 
funktionieren.

Wenn man aber sowieso die Meinung von sich gibt, alles zu können und 
perfekt zu sein: Warum fragt man dann nach Hilfe?

von Alex R. (itaxel)


Lesenswert?

Hannes L. schrieb:
> Kann Dein Multimeter auch den Tastgrad anzeigen?
Nein, leider nicht.

Eberhard H. schrieb:
> Hast Du schon andere Positionen versucht
Ja, habe ich. Gleiches Ergebnis.


So ein Soundkarten Oszi werde ich mal heute abend zusammen basteln und 
mir die Signale genauer anschauen.
Danke für den Tip.

Codes von Usern, bei denen das funktioniert, habe ich auch schon 
ausprobiert. Gleiches Ergebnis.

Stefan U. schrieb:
> http://stefanfrings.de/mikrocontroller_buch/index.html
Danke für dein Link. Auch dein Code im Band3 habe ich ausprobiert. Geht 
auch nicht.

Fuses des µC habe ich auch überprüft und ausprobiert. Gleiches bzw. kein 
Ergebnis.

Ein anderer Servo zum testen habe ich schon bestellt.
Langsam hab ich das Gefühl, dass sich mein Verdacht verfestigt, dass die 
Servos defekt sind.

Jetzt schaue ich heute abend mal das signal an und warte auf meine 
Bestellung.

von aSma>> (Gast)


Lesenswert?

aSma>> schrieb:
> Servus,
> wenn der Servo nur kurz zugt, dann vermute ich, dass die Treiber im
> Servo durch sind.
>
> Das hatte ich auch von mal 80€ teurer Konrad Servos gehabt(beide).
> Solche Servos haben ein billiges Innenleben. Beim ausgeschalteten
> Zustand hat die EMK alles platt gemacht. Naja, das nennt man Lehrgeld.
> ...

Alex R. schrieb:
> aSma>> schrieb:
>> wenn der Servo nur kurz zugt, dann vermute ich, dass die Treiber im
>> Servo durch sind.
> Ehrlich gesagt kann ich mir nicht vorstellen, dass alle 4 defekt sein
> sollen. Ich denke es liegt irgendow an meinem code und timing.


Alex R. schrieb:
> Langsam hab ich das Gefühl, dass sich mein Verdacht verfestigt, dass die
> Servos defekt sind.

Schicke die Scheiße wieder zurück.

von Harry L. (mysth)


Lesenswert?

aSma>> schrieb:
> Schicke die Scheiße wieder zurück.

Ich wette, daß es NICHT am Servo liegt und ein Marken-Servo von Graupner 
oder Futaba sich in der Umgebung genauso verhalten wird.

Lösungsansätze wurden oben bereits genannt. (und ignoriert)

von Minihawk (Gast)


Lesenswert?

Man kann Servos (vor allem billige China-Servos) ganz schnell schrotten, 
wenn man sie mit ungeeigneten Signalen befüttert. Dann dreht sich das 
Servo zu weit, das Poti überdreht, oder ein Zahnrad bekommt Karies. Habe 
ich auch bei einem Hobbyking-Servo genau so hinbekommen, es war danach 
unbrauchbar.

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.