Guten Abend, ich habe die Schaltung http://api.ning.com/files/QYxylXSaas588I6jwxcoAJR8lBXneWApDBFHGCoOMg7Ge975QGTPeT0Qinw4ffnFDRoWYf7TcktkQRYX--0YwbQT05HgK*zp/arduino_esc_lucaszanela_com.png mit einem Arduino Uno und einem Brushless Motor (+ESC) aufgebaut. Es funktioniert auch soweit, dass ich den Motor steuern kann. Aber nun zum Problem: Wenn ich die Spannungsversorgung Aus/An schalte, dann ist immer noch derselbe Sketch auf dem Arduino, allerdings dreht sich der Motor nicht mehr. Es funktioniert erst wieder, wenn ich nach dem Einschalten der Spannungsversorgung den Code nochmals auf den Arduino lade.
Schon mal RESET gedrückt? Dein Sketch hat wohl ein Problem beim Anlaufen. Mach da mal an erste Stelle in setup() ein delay(1000); rein.
Falk B. schrieb: > Schon mal RESET gedrückt? Dein Sketch hat wohl ein Problem beim > Anlaufen. Mach da mal an erste Stelle in setup() ein delay(1000); rein. Habe beides ausprobiert. Das mit dem delay bringt nichts. Aber ich habe herausgefunden, dass ich den Code nicht unbedingt nochmal neu hochladen muss. Stattdessen reicht es RESET zu drücken. Aber dies kann nicht die Lösung sein!
1 | #include <Servo.h> |
2 | |
3 | Servo motor; |
4 | |
5 | void setup() { |
6 | delay(1000); |
7 | motor.attach(MOTOR_PIN); |
8 | |
9 | }
|
10 | |
11 | void loop() { |
12 | motor.writeMicroseconds(1200); |
13 | }
|
Hier noch der Code
1 | #include <Servo.h> |
2 | |
3 | #define MOTOR_PIN 4
|
4 | Servo motor; |
5 | |
6 | |
7 | void setup() { |
8 | delay(1000); |
9 | motor.attach(MOTOR_PIN); |
10 | |
11 | }
|
12 | |
13 | void loop() { |
14 | motor.writeMicroseconds(1200); |
15 | }
|
Hatte gerade noch die Definition des MotorPins vergessen. Außerdem ist mir aufgefallen, dass es kein Problem ist die Spannung vom Arduino zu nehmen. Der Code funktioniert danach ganz normal. Das Problem ist nur, wenn die das Netzgerät ausschalte, welches das ESC mit Spannung versorgt.
@ mompf (Gast) Und wo ist die Definition von MOTOR_PIN? Ist das der ECHTE Code, aus deinem Sketchblock kopiert? Oder ist der hier aus dem Gedächtnis hingeschrieben? Das wäre doof! https://www.mikrocontroller.net/articles/Netiquette#.C3.84u.C3.9Fere_Form "Quelltext nie abtippen, sonder immer das direkt kopierte Original posten, anderenfalls schleichen sich neue Fehler ein oder die existierenden werden nicht abgeschrieben." An sich sollte der COde so laufen.
@ mompf (Gast) >Außerdem ist mir aufgefallen, dass es kein Problem ist die Spannung vom >Arduino zu nehmen. Der Code funktioniert danach ganz normal. Das Problem >ist nur, wenn die das Netzgerät ausschalte, welches das ESC mit Spannung >versorgt. Dann hat dein Servotreiber, genannt ESC (was ist das?) ein Problem mit dem Reset.
Falk B. schrieb: > ESC (was ist das?) ESC = Electronic Speed control Das ist ein Regler für einen brushless Motor, der Drehzahl und Geschwindigkeit des Motors steuert. Falk B. schrieb: > ein Problem mit > dem Reset. Gibt es dafür keine Lösung?
@ mompf (Gast) >ESC = Electronic Speed control >Das ist ein Regler für einen brushless Motor, der Drehzahl und >Geschwindigkeit des Motors steuert. Was ist der Unterschied zwischen Drehzahl und Geschwindigkeit? ;-) >> ein Problem mit >> dem Reset. >Gibt es dafür keine Lösung? Es gibt immer eine Lösung! Hast du einen Link auf ein Datenblatt deiner ESC? Beschreibe noch einmal EXAKT was du macht und was dann passiert. So richtig klar ist das noch nicht.
Definier auch mal deine Pins die benutzt als Ausgang, das hat auch schon einige Probleme gelöst.
Falk B. schrieb: > Hast du einen Link auf ein Datenblatt deiner ESC? Habe es als pdf angehängt. Falk B. schrieb: > Beschreibe noch einmal EXAKT was du macht und was dann passiert. So > richtig klar ist das noch nicht. 1) Arduino über USB (PC) mit Spannung versorgen und ESC über Netzgerät mit Spannung versorgen. Code auf Arduino laden. Motor funktioniert. 2) Spannung von ESC ausschalten und wieder an. Dann funktioniert der Motor erst wieder, wenn ich nochmal den Code auf den Arduino lade. 3) Spannung von Arduino ausschalten und wieder an. Dann funktioniert der Motor ohne den Code nochmals auf den Arduino zu laden. Der Wunsch ist es, dass ich von Arduino und ESC die Spannung nehmen kann und nach dem Einschalten der Motor wieder direkt anläuft.
Markus F. schrieb: > Definier auch mal deine Pins die benutzt als Ausgang, das hat auch schon > einige Probleme gelöst. Habe ich doch im zweiten Code von mir. Habe nur Pin 4 als Ausgang.
mompf schrieb: > Markus F. schrieb: >> Definier auch mal deine Pins die benutzt als Ausgang, das hat auch schon >> einige Probleme gelöst. > > Habe ich doch im zweiten Code von mir. Habe nur Pin 4 als Ausgang. Nein das hast du leider nicht gemacht, du musst dazu noch den Pinmode setzen. https://www.arduino.cc/en/Reference/PinMode Das sehe ich bei dir nicht, damit ist der Zustand von den Pin nicht genau definiert und er macht was er will. Bei freunden gab es dadurch schon ähnliches verhalten, das es mal ging und mal nicht. Das ist dein Quelltext, dabei fehlt das eindeutig: #include <Servo.h> #define MOTOR_PIN 4 Servo motor; void setup() { delay(1000); motor.attach(MOTOR_PIN); } void loop() { motor.writeMicroseconds(1200); } Edit: Sry scheint bei der Libary anscheinend net nötig zu sein, ich finde das dennoch echt unschön so
:
Bearbeitet durch User
Ich habe aus Versehen das falsche Datenblatt angehängt. Ich habe einen Emax Simon Series 20A http://yinyanmodel.com/EMAX%20User%20Instruction%20for%20Simonk%20Series%20ESC.pdf
Hi, der ESC mag es nicht wenn er eingeschaltet wird und das Signal nicht Null ist. Mache beim Start mal ein paar Sekunden 1000ms Servosignal und dann erst 1200, das sollte gehen. Gruß, Norbert
1 | #include <Servo.h> |
2 | |
3 | #define MOTOR_PIN 4
|
4 | Servo motor; |
5 | |
6 | |
7 | void setup() { |
8 | motor.attach(MOTOR_PIN); |
9 | motor.writeMicroseconds(1000); |
10 | delay(5000); |
11 | }
|
12 | |
13 | void loop() { |
14 | motor.writeMicroseconds(1200); |
15 | }
|
Ich habe immer noch das gleiche Problem. Was ich noch erwähnen könnte ist das Piepsen des Motors. Wenn der Code nicht läuft, dann piepst er monoton. Wenn der Code aber funktioniert, komme zunächst ein paar schnelle Töne.
Hi, Das kann natürlich nur gehen, wenn Du beide gleichzeitig mit Spannung versorgst. Wenn der Arduino schon läuft, sieht der startende ESC die 1000ms während der 5s ja nicht mehr. Gruß, Norbert
Hast natürlich Recht! Jetzt funktioniert es auch, danke! Woher weißt du, dass er am Anfang Null haben will? Im Datenblatt steht (glaub ich zumindest) nichts dazu. Beziehungsweise weißt du wieso das so ist?
Hi, Jeder Modellbauer weiß das und das machen alle Regler (Steller) so. Stell Dir ein Flugmodell vor, der Gasknüppel ist da meist mit Rasten. Der Sender liegt rum, ausversehen auf Gas gestellt und jetzt klemmst Du den Akku an... Früher war das nicht so, ich hab noch eine schöne Narbe davon am Unterarm. Du kannst den Arduino übrigens auch mit den 5V vom ESC betreiben, der dürfte BEC haben, wenn da nicht "Opto" draufsteht. Das sind dann meist 5 oder 5,5V, min 1A. Gruß, Norbert
Dankeschön. Nun hätte ich allerdings noch eine Frage zum Code. motor.attach(MOTOR_PIN); Hiermit lege ich fest, an welchem Pin das Signal vom ESC kommt? motor.writeMicroseconds(x); Was macht genau dieser Befehl? " On standard servos a parameter value of 1000 is fully counter-clockwise, 2000 is fully clockwise, and 1500 is in the middle" Bedeutet das nicht, dass er sich bei 1000 gegen den Uhrzeigersinn und bei 2000 mit dem Uhrzeigersinn dreht?
Hi, mompf schrieb: > motor.attach(MOTOR_PIN); > Hiermit lege ich fest, an welchem Pin das Signal vom ESC kommt? Ich hab keine Ahnung von Arduino aber so klingt das. Gedacht ist das wohl für Servos. mompf schrieb: > motor.writeMicroseconds(x); > Was macht genau dieser Befehl? Auch hier kann ich nur spekulieren, daß das ein Servosignal ausgibt. Alle ca. 20ms (das ist sehr unkritisch, 10 bis 30ms geht fast immer) ein Puls von 1000 bis 2000µs Länge. Die Länge des Pulses ist die Information. mompf schrieb: > " On standard servos a parameter value of 1000 is fully > counter-clockwise, 2000 is fully clockwise, and 1500 is in the middle" Das gilt für Servos und entspricht der Knüppelstellung an einer Fernsteuerung. Bei einem Antriebsmotor Vor und Zurück. mompf schrieb: > Bedeutet das nicht, dass er sich bei 1000 gegen den Uhrzeigersinn und > bei 2000 mit dem Uhrzeigersinn dreht? Nein, das ist ein Flugregler und der kann nur Vorwärts. Knüppel zurück, also 1000ms ist hier aus, 2000ms ist Vollgas und 1500ms eben Halbgas. Kauf Dir mal das billigste Servo das Du kriegen kannst (<5€), wenn Du damit rumspielen willst. Da siehst Du dann was passiert ohne vermuten zu müssen, was der Regler da gerade macht. Gruß, Norbert
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.