Forum: Mikrocontroller und Digitale Elektronik Servomotoren richten sich nicht aus und das Problem finde ich einfach nicht


von ( ) H. (sipan)


Angehängte Dateien:

Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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?

von Puma20 (Gast)


Lesenswert?

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.

von Chinese (Gast)


Lesenswert?

+1 für den Logicanalyser

Wieso nimmst du nicht einfach einen Arduino?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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?

von Joachim S. (oyo)


Lesenswert?

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.

von Der Andere (Gast)


Lesenswert?

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.

von Der Andere (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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

von Mannvongestern (Gast)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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
von Einer K. (Gast)


Lesenswert?

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!)

von Wolfgang (Gast)


Lesenswert?

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.

von Andre R. (ltisystem)


Lesenswert?

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

von Andreas S. (igel1)


Lesenswert?

@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

von spess53 (Gast)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

> 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ß.

von Ivo -. (Gast)


Lesenswert?

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

von Andreas S. (igel1)


Lesenswert?

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

von Andreas S. (igel1)


Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

> Die Steuerleitung des Servos kann direkt mit dem AVR Ausgangsport
> verbunden werden, wenn der AVR mit 5V betrieben wird.

Geht auch bei 3,3V

von Alles Hochgeheim (Gast)


Lesenswert?

Nein ich verrate nix! Von Technik verstehe ich nix. Ich kann nur wenig 
programmieren.

von ( ) H. (sipan)


Lesenswert?

Danke, es lag wirklich an der Frequenz.

von Ivo -. (Gast)


Lesenswert?

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

von Andreas S. (igel1)


Lesenswert?

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

von Andreas S. (igel1)


Lesenswert?

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
Noch kein Account? Hier anmelden.