Fahrregler und Servo mit Asuro ansteuern

OP #3286198
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?
Gast #3286219
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?
#3286285
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.
OP #3286290
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.
Gast #3286291
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
#3286339
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)
OP #3286529
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
OP #3287803
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren