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.
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. ...
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
> Steuersignal (oranges Kabel) habe ich an Pin 9.
Wird dieser Pin den in deinen Beispielcodes auch verwendet ?
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.
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.
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. ...
Stefan M. schrieb: > Messen ist hier zunächst das wichtigste. Aber nur, wenn man auch in der Lage ist, die Messwerte richtig zu interpretieren. ...
> 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
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
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.
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.
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).
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. ;)
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.
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). ...
Hannes L. schrieb: > Spendiere den Stromversorgungs-Anschlüssen mal noch je einen Kerko 100 > nF. Das löst trotzdem nicht mein problem.
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.
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...
Hannes L. schrieb:
Wenn man Code nicht versteht, sollte man ihn nicht kritisieren oder gar
als fehlerhaft verstehen!
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.
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...
ups, sorry war Quatsch, falscher Denkansatz vom mir. Gruß Holger...
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.
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.
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
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. ...
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€.
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.
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
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)
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
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.
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?
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.
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.
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)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.