Forum: Mikrocontroller und Digitale Elektronik Fahrregler und Servo mit Asuro ansteuern


von Vincent G. (skastyle)


Lesenswert?

hallo,
für ein schulprojekt möchte ich meine asuro platine ein rc-car steuern 
lassen. der servo wird direkt vom akku mit strom gespeist, der asuro 
(mit spannungsregler dazwischen) auch.

Das weiße Signal-Kabel des Servos ist direkt mit dem Ausgang des 
Mikrocontrollers, der sonst einen der Motoren versorgt, verbunden und 
wird so mit dem PWM-Signal versorgt.

Mein Programm sieht wie folgt aus:
1
#include "asuro.h"
2
3
4
5
6
void main(void)
7
{
8
  
9
  
10
  Init();
11
  int i, j, time;
12
  
13
  FrontLED(ON);
14
    BackLED(ON,ON);
15
    StatusLED(GREEN); //alle LEDs an
16
    
17
    for (j=0; j<4; j++) Sleep(200);
18
19
    FrontLED(OFF);
20
    BackLED(OFF,OFF);
21
    StatusLED(OFF); //alle LEDs aus
22
  
23
24
while(1)
25
 {
26
27
//gerade
28
  BackLED(ON,ON);
29
  for (i=0; i<6000; i++)
30
  {
31
    MotorDir(FWD,FWD);
32
    MotorSpeed(255,255);
33
    Sleep(108);
34
    MotorSpeed(0,0);
35
    for (j=0; j<1; j++) Sleep(200);
36
  }
37
38
//links
39
  BackLED(ON,OFF);
40
  for (i=0; i<700; i++) 
41
  {
42
    MotorDir(FWD,FWD);
43
    MotorSpeed(255,255);
44
    Sleep(72); //failsafe=65
45
    MotorSpeed(0,0);
46
    for (j=0; j<1; j++) Sleep(200);
47
  }
48
49
50
51
//rechts
52
  BackLED(OFF,ON);
53
  for (i=0; i<700; i++) 
54
  {
55
    MotorDir(FWD,FWD);
56
    MotorSpeed(255,255);
57
    Sleep(144); 
58
    MotorSpeed(0,0);
59
    for (j=0; j<1; j++) Sleep(200); 
60
  }
61
62
63
  
64
 }
65
}

Wird so der Lenkservo angeschlossen bewegt er sich nach links, in die 
mitte und nach rechts (also im groben und ganzen wie gewollt), zittert 
allerdings in mitte und rechts ganz schön.

Schließe ich allerdings den Fahrregler an, dreht der Motor nicht 
(links/rechts müsste hier ja eigentlich vor/zurück bedeuten).

Was müsste ich an dem Programm verändern um den Fahrregler richtig 
anzusprechen?

von ich (Gast)


Lesenswert?

Einen Akku hast du schon an den Regler angeschlossen? Oder ist ein evtl. 
angeschlossener Akku leer? Zu geringe Spannung für den Motor? Zu hohe? 
Motor mechanisch blockiert?

Motorlimit des Reglers verfehlt? (Turns)

Mal anderen Motor/regler probieren?

von Vincent G. (skastyle)


Lesenswert?

akku ist defintiv voll, mit messgerät gemessen, spannung passt, motor 
dreht, turn limit stimmt, wenn der regler sein signal vom Empfänger 
bekommt funzt alles.

von ich (Gast)


Lesenswert?

Vincent Göllner schrieb :
> wenn der regler sein signal vom Empfänger
> bekommt funzt alles.

D.h., Problem gelöst?

von Timo N. (tnn85)


Lesenswert?

Huh? So weit ich mich erinnern kann, ist die steuert der µC vom Asuro 
doch direkt eine H-Brücke an und liefert kein Servokonformes Signal ( 
0.5 - 1.5ms high, 18.5-19.5ms low,Periodendauer 20ms). Da musst du schon 
ein Signal erzeugen, das ein Servo oder der Fahrtenregler auch versteht.

von Vincent G. (skastyle)


Lesenswert?

an gast: nein das heißt es natürlich nicht der regler soll ja vom 
controller gesteuert werden und nicht vom empfänger -.-

an tnn: die h-brücke ist nicht mehr in der schaltung wie in meinem 
ersten post bereits erwähnt ist das signalkabels des servos direkt mit 
dem microcontroller ausgang verbunden der sonst an die brücke vom motor 
geht, pwm signal soll durch das programm erzeugt werden, klappt ja auch 
beim servo schon.

von Ulli (Gast)


Lesenswert?

Ohne jetzt das Programm zu beachten (programmiere in C):
Das Servozittern zeigt dir, dass etwas mit den Impulsen nicht stimmt.

Die Impulse kommen zu schnell, zu langsam oder die Pausenzeit ist nicht 
in Ordnung.
Der Servo ist nur zu träge um es genauer an zu zeigen.
Der Fahrtenregler prüft die Impulse auf Plausibilität und interpretiert 
sie als nicht gültig.

Schau nochmal das Programm durch und steuere den Servo so an, dass er 
nicht zittert. Noch besser wäre, sich die Impulse mit einem Oszi an zu 
sehen. Ich nehme mal an, dass du keines hast.

... Ulli

von Ulli (Gast)


Lesenswert?

Vincent Göllner schrieb:
> pwm signal soll durch das programm erzeugt werden, klappt ja auch
> beim servo schon.

Solange der Servo zittert klappt es NICHT.
Erst wenn die Impulse stimmen, dann zittert auch der Servo nicht mehr.

... Ulli

von spess53 (Gast)


Lesenswert?

Hi

Masseverbindung zwischen µC und Servo/Fahrtregler IO?

MfG Spess

von Timo N. (tnn85)


Lesenswert?

Ok. Ich denke ich weiß jetzt was du mit dem Code vorhast. Die 
Sleep(72),Sleep(144) und Sleep(108) sollen die Servostellungen links, 
rechts und Mitte erzeugen.
Wozu hast du aber diese riesigen Schleifen mit i<6000 und die jeweiligen 
Schleifen am Ende von jedem Block mit Sleep(200) eingefügt?

Wenn die Sleep(200) die Restperiodendauer darstellen sollen, sind sie 
leider unterdimensioniert. Für einen Kanal brauchst du ja wie richtig 
erkannt ein Signal von 1-2ms Länge und dann eine Pause von 18-20ms 
Länge. Für die Pause müsstest du also bei deiner 72khz Sleepfunktion die 
Funktion mit dem Wert Sleep(36)=0.5ms aufrufen und das Ganze entweder 36 
, 37 oder 38 mal (durch deine Schleife (je nachdem wie lang dein Signal 
vorher war)

von Vincent G. (skastyle)


Lesenswert?

@ tnn: die äusseren "riesigen" schleifen sollen das signal für eine 
gewisse zeit senden, also die anzahl der schleifendurcläufe bestimmt wie 
lange der servo in der angestrebten position bleibt

Die Schleifen am Ende mit dem Sleep 200 am ende jeden blocks sollen wie 
du schon vermutet hast die restperiodendauer darstellen, ich hatte 
angefangen mit soviel schleifendurchläufen dass ich auf 18-20ms komme, 
da hat der servo sich aber nich zielgerichtet bewegt, der aktuelle code 
ist vor allem durch ausprobieren entstanden.

Leider bin ich ziemlicher programmierdau, also wenn jemand von euch 
meinen quellcode entsprechend verbessern oder einen anderen 
funktionierenden anbieten könnte, wäre ich sehr dankbar

@spess: jop gemessen is io

@ulli: oszi hättich morgen inner schule wieder zur verfügung, wollte mir 
sowieso als last resort das signal was ausm empfänger rauskommt angucken

von Vincent G. (skastyle)


Lesenswert?

habe das problem jetzt gelöst, die motorausgänge waren ungeeignet. habe 
die pwm leitungen der servos jetzt an t12 und 13 also die backleds 
angelötet.

servo fährt jetzt 1a zitterfrei in die gewollte position, fahrtenregler 
initialisiert sich richtig und vollgas kann ich auch schon geben.

von Karl H. (kbuchegg)


Lesenswert?

Für den Arduino gibt es doch sowieso schon für fast alle 08/15 
Standardsachen was fix&fertiges.

http://arduino.cc/de/Reference/Servo

Das kann dann so einfach sein wie:
1
#include <Servo.h> 
2
3
Servo myservo;
4
5
void setup() 
6
{ 
7
  myservo.attach(9);
8
  myservo.writeMicroseconds(1500);  // set servo to mid-point
9
} 
10
11
void loop() {}

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.