Sehr geehrte Community, ich hänge schon seit tagen an dem Problem, dass meine Servomotoren sich nicht ausrichten entsprechend ausrichten. Für ein Schulprojekt möchte ich ein Model bauen, dass ein Solarpanel der Sonne nachführen soll. Dafür benutze ich 4 LDRs und 2 Micro Servos. Dafür habe ich mich auf mikrocontroller.net informiert wie man Servomotoren ansteuert und habe dafür ein eigenes Programm geschrieben. Die Servomotoren bewegen sich jedoch kein stück und ich finde einfach nicht heraus warum. Nach drei Tagen habe ich mich dazu entschloss ein Account auf dieser Website zu erstellen, um die Community um Rat zu bieten. Das Programm ist als PDF im Anhang zu finden. Ich muss noch dazu erwähnen, dass ich zum ersten mal mit avr gcc programmiere. Nehme Verbesserungsvorschläge gerne, da ich meine Fähigkeiten verbessern will. Ich bedanke mich schon mal im voraus.
Sipan K. schrieb: > Nehme Verbesserungsvorschläge gerne, da ich meine Fähigkeiten > verbessern will. Hänge Source Code als C-Datei an. PDF versteht kein GCC. Hast du dir die Steuersignale, die dein Programm generiert, einmal mit einem Logikanalysator oder Oszi angeguckt?
Dein Problem liegt möglicherweise schon in der ersten Zeile. (Ohne den Rest weiter betrachtet zu haben) #define F_CPU legt nicht die Frequenz der CPU fest, sondern teilt dem Compiler/Präprozessor nur mit welcher Frequenz die CPU arbeitet. Die eigentliche Frequenz wird über Fuses eingestellt. Wenn ich mich recht erinnere läuft der interne Oszillator der AVRs mit 8 MHz, werden standardmäßig allerdings auf 1 MHz (div8 Fuse) heruntergeteilt. Sprich #define F_CPU 1000000UL könnte das Problem schon beheben. Um welchen AVR handelt es sich überhaupt? Ich würde an deiner Stelle den Code auf ein Minimum reduzieren, und prüfen ob deine Timings passen. Grob überprüfen kannst du das schon mit einer LED die alle x Sekunden aufleuchtet + Stoppuhr. Besser wäre z.B. so ein Logikanalysator: https://www.amazon.de/dp/B01MUFRHQ2. Für deine Zwecke mehr als ausreichend und ist preislich fast geschenkt.
+1 für den Logicanalyser Wieso nimmst du nicht einfach einen Arduino?
Sipan K. schrieb: > Die Servomotoren bewegen sich jedoch kein stück und ich finde einfach > nicht heraus warum. Nimm ein Oszi und miss das Signal, das die Servos bekommen. Denn nur dieses signal ist für das Servo interessant. Wenn das gut aussieht, dann liegt der Fehler im Aufbau, wenn nicht, dann in der Software. > Dafür habe ich mich auf mikrocontroller.net informiert wie man > Servomotoren ansteuert und habe dafür ein eigenes Programm geschrieben. Hast du schon mal vorweg 1 einziges Servo z.B. über ein Poti angesteuert und bewegt?
Die Anderen haben daher völlig Recht: Das sinnvollste wäre, im ersten Schritt sich einfach mal anzuschauen, was genau da an PB1 und PB2 derzeit ausgegeben wird. Denn der Fehler könnte durchaus gar nicht am Sourcecode liegen, sondern an einem anderen Detail, das aus Deinen bisherigen Informationen gar nicht hervorgeht. Dazu ist ein Oszilloskop natürlich ideal - aber als Schüler besitzt Du vermutlich keins. Aber in Deiner Schule dürfte es eins geben, das Du auf Nachfrage kurz benutzen kannst. Deutlich billiger, und in Deinem Fall vermutlich völlig ausreichend wäre ein billiger Logic Analyzer wie der oben verlinkte "Salae"-Klon für 12,99. Bei der Arbeit mit Mikrocontrollern kommt man um Oszi oder Logic Analyzer früher oder später eh nicht herum, von daher wäre das wirklich eine sehr sinnvolle Investition, falls Du sowas noch nicht besitzt. Wenn es partout ohne Oszi und LA gehen soll, dann würde in diesem konkreten Fall zur Not auch erst einmal genügen, den Signalverlauf mit einer Soundkarte aufzuzeichnen und sich mit einem Programm wie Audacity anzuschauen. Dazu solltest Du aber erst noch mit einem Spannungsteiler die an PB1/PB2 ausgegebene Spannung auf unter ein Volt reduzieren, bevor Du das Signal an den Eingang der Soundkarte anschliesst.
Lothar M. schrieb: > Nimm ein Oszi und miss das Signal, das die Servos bekommen. Denn nur > dieses signal ist für das Servo interessant. Genau so und nicht anders! Lothar M. schrieb: > Hast du schon mal vorweg 1 einziges Servo z.B. über ein Poti angesteuert > und bewegt? Wichtig! Schrittweise vorgehen. Dein Problem modularisieren. Erst mit einem testprogramm einen Servo ansteuern, dann alle Servos ansteuern und wenn das läuft kannst du anfangen deine LDRs auszulesen. Aus das Auslesen kann man erst mal über Led Ansteuerung testen.
Der Andere schrieb: > Aus das Auslesen kann man erst mal über Led Ansteuerung testen. Sorry ich hatte wohl einen Knoten in den Fingern, das sollte heissen: Auch das Auswerten der LDRs kann man erst mal mittels Anzeige über Leds (links, rechts hoch runter) testen.
Puma20 schrieb: > Besser wäre z.B. so ein Logikanalysator: > https://www.amazon.de/dp/B01MUFRHQ2. Für deine Zwecke mehr als > ausreichend und ist preislich fast geschenkt. Preislich könnte man das Angebot für den Logikanalysator bei Amazone im Vergleich zu anderen auch als Wucher bezeichnen. :-( https://www.ebay.de/itm/181998009301
Wolfgang schrieb: > Preislich könnte man das Angebot für den Logikanalysator bei Amazone im > Vergleich zu anderen auch als Wucher bezeichnen. :-( Es ist gar nicht lange her da wollte "KeySight" für den Logikanalysator Zusatz richtig Asche haben und für'n simplen Decoder (i2C; SPI, RS232 ..) noch 400 Euronen extra :-( Tja so ändern sich die Zeiten, früher war der Kauf eines Oszi eine Anschaffung fürs Leben.(Genauso wie eine Nähmaschine für die Gattin) Heutzutage ist es so wie beim Kauf einer Zange, bricht die Spreizfeder - kauft man halt die Nächste.
Mannvongestern schrieb: > Es ist gar nicht lange her ... Was hat das jetzt damit zu tun, dass ein Händler für das selbe Produkt mehr als das 2 1/2-fache verlangt (inkl. Versand) und hier auch noch als empfehlenswert verlinkt wird?
Wolfgang schrieb: > Was hat das jetzt damit zu tun, dass ein Händler für das selbe Produkt > mehr als das 2 1/2-fache verlangt Eines vorneweg: weder der eine noch der andere Preis wird den Käufer in den wirtschaftlichen Ruin treiben. Und von "Wucher" sind 12,99€ noch weit, weit entfernt. Denn immerhin wird das eine dank Lagerhaltung hier in D noch bis morgen, das Andere aber evtl. erst Ende Juni oder Mitte Juli geliefert. Was wird dem Problem hier eher helfen? Was würde ich da kaufen, wenn ich in den Schuhen des TO steckte? > und hier auch noch als empfehlenswert verlinkt wird? Zum Finden des Fehlers und zur Lösung des Problems ist das eine Produkt so empfehlenswert wie das Andere. Kann ja nicht anders sein, die haben ja die selbe Funktion...
:
Bearbeitet durch Moderator
Wolfgang schrieb: > Mannvongestern schrieb: >> Es ist gar nicht lange her ... > > Was hat das jetzt damit zu tun, dass ein Händler für das selbe Produkt > mehr als das 2 1/2-fache verlangt (inkl. Versand) und hier auch noch als > empfehlenswert verlinkt wird? Die beiden unterscheiden sich! Eins der beiden hat einen CLK Pin, an Stelle das GND des anderen. (aber was das zu bedeuten hat? KA!)
Lothar M. schrieb: > Und zur Lösung des Problems ist das eine Produkt so empfehlenswert wie > das Andere. Wobei man sich nicht durch die Abgabe "9 parallel messbare Signaleingänge (0-5 V) ..." täuschen lassen soll. Mehr als acht Signale gleichzeitig kann das Ding nicht auslesen.
Zurück zum Thema: Kann dir auch nur empfehlen dir für unter 10€ zwei Arduino Nanos bei ebay zu besorgen [[https://www.ebay.de/itm/2x-Nano-V3-0-ATMEGA328P-CH340G-5V-16M-USB-Micro-Controller-Board-Kit-Fur-Arduino/262905969884?hash=item3d366abcdc:g:PbYAAOSwdGFY0qQC]] und erst einen Servo, dann alle Servos, schließlich die Integration mit deinen Sensoren zu bearbeiten. Da gibts halt auch ein Haufen Tutorials im Netz [[http://www.instructables.com/id/Sweep-Servo-Motor-With-Arduino-Nano/]]. Grüße
@sipan: Ohne das Programm genau gesichtet zu haben: Vielleicht liegt's ja gar nicht am Programm, sondern an der Elektronik drum herum. Du hast hoffentlich nicht die Beinchen Deines MC direkt an den Servo angeschlossen? Male einmal einen exakten Schaltplan, wie Du mit Deinem Mikrocontroller die Servos ansteuerst und lade diesen Schaltplan hier hoch. Um die Elektronik zu testen, würde ich mir einen 10-Zeiler schreiben, der wirklich nur stumpf fest programmierte Pulse an einem Ausgang für einen Servo ausgibt (z.B. via Schleife und delay-Funktion einen Ausgangspin vom MC ein-/ausschalten) Im ersten Schritt würde ich dabei die Pulse um den Faktor 1000 verlängern und den Servo durch eine LED mit Vorwiderstand ersetzen. Dann kannst Du in Ruhe prüfen, ob das Tastverhältnis stimmt: 1-2s an und ca. 20s aus. Wenn die LED nicht leuchtet => Fehler in der Ansteuer-Elektronik Wenn die LED leuchtet, aber das Timing nicht paßt => CPU-Takt falsch konfiguriert (siehe Posting einer meiner Vorredner) Wenn Timing und LED-Leuchten funktionieren, so beschleunigst Du Dein Programm um den Faktor 1000 und ersetzt LED samt Vorwiderstand durch Deinen Servo. Mit dieser "scheibchenweisen" Taktik kommst Du sicher ans Ziel. Nicht alles auf einmal zusammenbauen - das funktioniert nie (jedenfalls bei mir nie). Immer Schritt für Schritt den Elefanten zusammenschrauben. Viele Glück Igel1
Hi >Du hast hoffentlich nicht die Beinchen Deines MC direkt an >den Servo angeschlossen? Warum nicht? Ich habe das schon immer so gemacht. Nie Probleme. MfG Spess
> Eins der beiden hat einen CLK Pin, an Stelle das GND des anderen. > (aber was das zu bedeuten hat? KA!) Das wüsste ich auch gerne. meiner hat einen CLK Eingang mit dem ich nichts anzufangen weiß.
spess53 schrieb: > Hi > >>Du hast hoffentlich nicht die Beinchen Deines MC direkt an >>den Servo angeschlossen? > > Warum nicht? > > Ich habe das schon immer so gemacht. Nie Probleme. Läuft bei dir! Schick uns mal alles, sprich Schaltplan und Programmcode (nicht als PDF). Zum Üben erstmal das Standard-Servo-Projekt machen: Servo über Poti steuern. Du hast bisher noch nie mit avr-gcc gearbeitet? Schick uns am besten auch noch die Terminaleingaben. Hast du überhaupt mal ein Blink programmiert? Sorry wenn das hier so böse rüberkommt, aber das wirkt schon ziemlich crazy. Ivo PS: Man kann hier auch als Gast schreiben
spess53 schrieb: > >>Du hast hoffentlich nicht die Beinchen Deines MC direkt an >>den Servo angeschlossen? > > Warum nicht? > > Ich habe das schon immer so gemacht. Nie Probleme. > Uppps - sorry: ich war gedanklich irgendwie bei einer Motor-Ansteuerung und habe hier Unsinn erzählt. Spess53 und Stefanus haben natürlich recht: Die Steuerleitung des Servos kann direkt mit dem AVR Ausgangsport verbunden werden, wenn der AVR mit 5V betrieben wird. ACHTUNG: ein gern gemachter Anfängerfehler ist es, die Masseleitungen von AVR und Servo nicht zusammenzuschließen - bitte darauf also achten. Sollte die Versorungsspannung des AVR deutlich unter derjenigen des Servos liegen (uns fehlen aktuell ja sämtliche Infos), so bin ich mir nicht mehr 100%ig sicher, ob die Ansteuerung dann noch funktioniert. Im Zweifel würde ich dann vermutlich einen Transistor dazwischenschalten. Viele Grüße Igel1
Sipan K. schrieb: > Sehr geehrte Community, > > [...] > Nach drei Tagen habe ich mich dazu entschloss ein Account auf > dieser Website zu erstellen, um die Community um Rat zu bieten. > [...] ... investier' noch einen vierten Tag, um unsere Fragen zu Deinem Aufbau/Eingangspost zu beantworten und Dir wird geholfen werden ... Viele Grüße Igel1
> Die Steuerleitung des Servos kann direkt mit dem AVR Ausgangsport > verbunden werden, wenn der AVR mit 5V betrieben wird. Geht auch bei 3,3V
Nein ich verrate nix! Von Technik verstehe ich nix. Ich kann nur wenig programmieren.
Danke, es lag wirklich an der Frequenz.
Oh man, ich glaube ich werde alt, ich war zwar gedanklich nicht bei der Motorsteuerung, aber dabei, er würde das plus des Servos am uC haben....... Herr, lass es Hirn regnen;-) Gruß vom veralteten, Ivo
Stefanus F. schrieb: >> Eins der beiden hat einen CLK Pin, an Stelle das GND des anderen. >> (aber was das zu bedeuten hat? KA!) > > Das wüsste ich auch gerne. meiner hat einen CLK Eingang mit dem ich > nichts anzufangen weiß. Besonders dolle Servos scheinen einen Positionsencoder eingebaut zu haben. Die werfen dann die Position seriell aus. Und dafür braucht's ein Taktsignal, eben "CLK". Gefunden hier (auf S. 35): https://www.faulhaber.com/fileadmin/Import/Media/DE_7000_00021.pdf Vielleicht paßt das zu Deinem Servo. Viele Grüße Igel1
Sipan K. schrieb: > Danke, es lag wirklich an der Frequenz. Glückwunsch an Dich, Sipan, und Respekt an Puma20, der mit seinem CPU-Takthinweis den richtigen Riecher (bzw. die richtige Pumanase ...) hatte! Viele Grüße Igel1
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.