Roboter will nicht rückwärts fahren

Gast #4178264
Lesenswert?

Hallo Leute,

ich habe einen Roboter gebaut, dessen Antriebsmotor über einen TIP41C 
zur Leistungsregelung und einem zweifachen Wechslerrelais geregelt wird. 
Zur Steuerung verwende ich einen ATmega 32.
Vorwärtsfahren klappt ja soweit wie geplant, doch leider Will das Ding 
nicht rückwärts fahren.
Was habe ich falsch gemacht?
Im Anhang sind C-Code für den ATmega und eine Schaltskizze.
Danke im Voraus!

Viele Grüße,
Jonas Wühr
Angehängte Dateien:
#4178274
Lesenswert?

Bring erst mal einen COde in Ordnung.
Ich seh in deinem Code nichts, warum der Motor überhaupt auf rückwärts 
schalten sollte.

Da steht
1
int main()
2
{
3
   .... Initialisierung
4

5
  while( 1 )
6
  {
7
     Haufen auskommentiertes Zeug
8
  }
9
}

in anderen Worten: Der Robot macht nichts, weil du das genau so 
programmiert hast, das er nichts tun soll.
Gast #4178282
Lesenswert?

Dann prüfe doch erst mal systematisch ob mechanisch sich alles rückwärts 
bewegen lässt und das Polwenderelais wirklich schaltet. Außerdem ist 
eine kleine zeitliche Pause zwischen vor-und rückwärts nötig, da sonst 
der Motor noch als Generator arbeitet und viel Strooom fließt.
Weiterhin vermisse ich eine Freilaufdiode am Relais, um die böse 
induktive Abschaltspannung zu verhindern. Lies 
http://www.mikrocontroller.net/articles/Relais_mit_Logik_ansteuern
#4178297
Lesenswert?

Ich hab mir mal ein paar andere Posts von dir angesehen.
In einigen davon immer der gleiche 'Fehler'

In C kann man offiziell keine Funktionen innerhalb anderer Funktionen 
definieren.

man kann also nicht schreiben
1
int main()
2
{
3

4
  ....
5

6
  void vorwaerts(int v)
7
  {
8
    ...
9
  }
10

11
  ....
12
}

In C wird jede Funktion für sich selbst geschrieben, also nicht 
geschachtelt
1
void vorwaerts(int v)
2
{
3
  ...
4
}
5

6
int main()
7
{
8

9
  ....
10

11

12
  ....
13
}

Das das bei dir keine Fehlermeldung gibt, liegt an einer gcc 
Erweiterung, die du besser ignorierst.
Ausserdem scheinst du der Meinung zu sein, nur dadurch, dass du eine 
Funktion definierst, wird sie auch schon ausgeführt. Da muss ich dich 
enttäuschen: aufrufen musst du sie schon auch. Eine Funktionsdefinition 
ist erst mal genau das: wie sieht die Funktion aus. Ausgeführt wird sie 
erst, wenn sie aufgerufen wird.
1
void vorwaerts(int v)
2
{
3
  ...
4
}
5

6
int main()
7
{
8

9
  ....
10

11
  while( 1 ) {
12
    vorwaerts( 20 );
13
    ....
14
  }
15
}


Also bring deinen Code in Ordnung.
Und kauf die ein C-Buch. Das sind eigentlich banale Sprach-Grundlagen, 
die dir jedes C Buch problemlos beibringen kann. Kaum zu glauben, dass 
du den UART Teil selbst geschrieben hast, wenn es schon an solch simplen 
Sachen scheitert.

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