Forum: Mikrocontroller und Digitale Elektronik Elektromotor Steuergerät


von Korea K. (destination)


Angehängte Dateien:

Lesenswert?

Hallo

Und zwar habe ich mein altes Auto zu einem Elektroauto umgebaut.
Zurzeit läuft es mit einer simplen PWM-Ansteuerung ohne AVR etc. .
Nun will ich das ganze mit einem ATmega8 aufbauen (siehe Schaltung), 
jedoch weiß ich irgendwie nicht wie ich am besten mit dem Programm 
anfangen sollte.

Nun zur Schaltung: Der Motor wird mit 48V versorgt und der zulässige 
max.Strom beträgt 200A.

1) Das Gaspedal hängt über einen Seilzug an einem 10k Poti . Dieses 
analoge Signal soll über einen ADC-Wandler digital gewandelt werden und 
nach einem I-Algorithmus steigen. Also dass wenn ich voll ins Gaspedal 
steige soll der Strom keinen Sprung machen sondern linear steigen mit 
einer gewissen Zeitkonstante(ein paar ms).

2) Der Eingang für die Strombegrenzung soll auch ADC gewandelt werden 
und nach einem PI-Verhalten steigen. Wenn der max. Strom erreicht ist 
setzt die Strombegrenzung ein und das egal wie viel ich am Gaspedal steh 
, es sollte nicht reagieren bis der max.Strom unter der Strombegrenzung 
liegt.

3) Der Ausgang soll eine PWM sein die den Treiber-IC steuert.

Ich hoffe ihr könnt mir ein paar Tipps , für das Programm, geben.

mfg

: Verschoben durch Moderator
von Karl H. (kbuchegg)


Lesenswert?

Korea Korea schrieb:

> 1) Das Gaspedal hängt über einen Seilzug an einem 10k Poti . Dieses
> analoge Signal soll über einen ADC-Wandler digital gewandelt werden und
> nach einem I-Algorithmus steigen. Also dass wenn ich voll ins Gaspedal
> steige soll der Strom keinen Sprung machen sondern linear steigen mit
> einer gewissen Zeitkonstante(ein paar ms).


Das einfachste ist eine Technik, die ich 'nachlaufender Wert' nenne. Du 
trennst dabei zwischen der Benutzervorgabe und dem Wert der dann 
tatsächlich als Sollwert in die weitere Regelung weitergereicht wird.

Das ganze ist dann relativ simpel:
In zb einer ISR, die alle paar µSekunden aufgerufen wird, wird der 
Sollwert um einen gewissen linearen Anteil in Richtung der 
Benutzervorgabe nachgeführt:

* ist der Sollwert kleiner als die Benutzervorgabe, so wird der
  Sollwert um einen konstanten Wert erhöht
* ist der Sollwert größer als die Benutzervorgabe, so wird der
  Sollwert um einen konstanten Wert verringert.

Dadurch läuft der Sollwert immer der Benutzervorgabe hinterher, macht 
das allerdings niemals sprunghaft, sondern in kleinen Schritten. Viele 
kleine Schritte regelmässig ausgeführt sorgen dann auch dafür, dass die 
Benutzervorgabe irgendwann erreicht wird. Durch entweder die 
Aufruffrequenz oder die Höhe des Increments/Decrements kann gesteuert 
werden, wie schnell der Sollwert die Benutzervorgabe einholen kann
1
volatile int16_t Sollwert;
2
volatile int16_t Benutzervorgabe;
3
volatile int16_t Increment;
4
5
ISR( ..... )  // such dir einen Interrupt aus
6
{
7
  if( Sollwert < Benutzervorgabe ) {
8
    Sollwert += Increment;
9
    if( Sollwert > Benutzervorgabe )
10
      Sollwert = Benutzervorgabe;
11
  }
12
13
  else if( Solwert > Benutzervorgabe ) {
14
    Sollwert -= Increment;
15
    if( Sollwert < Benutzervorgabe )
16
      Sollwert = Benutzervorgabe;
17
  }
18
}


>
> 2) Der Eingang für die Strombegrenzung soll auch ADC gewandelt werden
> und nach einem PI-Verhalten steigen.

Was ist ein PI-Verhalten?

> Wenn der max. Strom erreicht ist
> setzt die Strombegrenzung ein und das egal wie viel ich am Gaspedal steh
> , es sollte nicht reagieren bis der max.Strom unter der Strombegrenzung
> liegt.

Klingt für mich nach einer simplen Beschränkung auf einen Maximalwert.

> 3) Der Ausgang soll eine PWM sein die den Treiber-IC steuert.

Ja, ok.
PWM ist Standardaufgabe.

> Ich hoffe ihr könnt mir ein paar Tipps , für das Programm, geben.

Die wichtige Frage ist doch eher: Wieviel hast du schon programmiert. 
All deine 'Probleme' sind doch eher 'Problemchen', über die man im 
normalen Lernprozess der Programmierung stolpert. Von daher wundert 
mich, dass du sie überhaupt hast.

von Korea K. (destination)


Lesenswert?

sorry war nicht genau ausgedrückt. Mit PI-Verhalten meinte ich einen 
PI-Regler.

Was die "Problemchen" angeht gibts einen einfachen Grund. Ich bin eher 
ein Programmierflüchtling und kenn mich nicht so gut aus obwohl ich 
einiges darüber gelernt und gelesen habe. Bin eher der Hardware-Typ. Das 
Problem ist ich weiß nicht wie bzw. womit ich anfangen sollte.

Danke für deinen Tipp!

von Karl H. (kbuchegg)


Lesenswert?

Korea Korea schrieb:
> sorry war nicht genau ausgedrückt. Mit PI-Verhalten meinte ich einen
> PI-Regler.
>
> Was die "Problemchen" angeht gibts einen einfachen Grund. Ich bin eher
> ein Programmierflüchtling und kenn mich nicht so gut aus obwohl ich
> einiges darüber gelernt und gelesen habe.

Dann solltest du üben, üben, üben.
Leg dein Projekt erst mal auf Eis und mach dich mehr mit grundlegenden 
Programmierdingen vertraut.
UNd wenn du dich dann fitter fühlst, probierst du die (vermuteten) 
Einzelteile erst mal in jeweils eigenen Programmierprojekten aus.

Und wenn du dich dann noch fitter fühlst, gehst du dein großes Projekt 
an.

von Axel R. (Gast)


Lesenswert?


von Korea K. (destination)


Lesenswert?

ich bin jetzt so kurz vor dem Ende und will das unbedingt fertig 
kriegen. Ich hab sehr viel Zeit darin investiert und habe jetzt so viel 
um die Ohren, dass ich keine Zeit mehr für Freizeitarbeiten habe. Ich 
bitte um Hilfe

von Karl H. (kbuchegg)


Lesenswert?

Korea Korea schrieb:
> ich bin jetzt so kurz vor dem Ende

Wenn bis jetzt 'nur' die Hardware steht, bist du noch lange nicht 'kurz 
vor dem Ende'.
Jetzt geht dein Projekt erst richtig los!

Es ist ein Trugschluss zu glauben, die Software macht sich so nebenbei 
fast von selber.
Die NASA hat das bei Apollo auch geglaubt: Wir geben den Bordcomputer in 
Auftrag und wenn der in den verfügbaren Raum einpasst, dann können wir 
schon fliegen. Das bischen Programm wird so wild schon nicht sein. Das 
bischen Programm hat dann 7 Jahre gedauert.

von Korea K. (destination)


Lesenswert?

Die Software macht sich nicht von selber das ist mir schon klar. Aber 
ich brauche was Software angeht Hilfe, da ich mich eher mit Hardware 
auskenne. Darum ist die Hardware auch kein Problem gewesen. Doch jetzt 
brauche ich sehr große Hilfe beim Programmieren des Atmega8.

von nichtGast (Gast)


Lesenswert?

>1) Das Gaspedal hängt über einen Seilzug an einem 10k Poti . Dieses
>analoge Signal soll über einen ADC-Wandler digital gewandelt werden und
>nach einem I-Algorithmus steigen. Also dass wenn ich voll ins Gaspedal
>steige soll der Strom keinen Sprung machen sondern linear steigen mit
>einer gewissen Zeitkonstante(ein paar ms).

In der Antriebstechnik heisst das Beschleunigungsrampe (gibt es 
natuerlich auch als Bremsrampe) und ist ueblicherweise ueber Parameter 
im Antriebsregler beeinflussbar.


doch Gast

von Düsendieb (Gast)


Lesenswert?

Tipp:
Bei dem IR2113 musst Du aufpassen, dass alle paar 100ms der Low Side FET 
geschaltet wird um den Bootstrap Kondensator zu laden.
Das heißt, der High side Brems FET kann nicht alleine geschaltet werden.

Axel

von Karl H. (kbuchegg)


Lesenswert?

Korea Korea schrieb:

> auskenne. Darum ist die Hardware auch kein Problem gewesen. Doch jetzt
> brauche ich sehr große Hilfe beim Programmieren des Atmega8.

Dann hilft alles nichts.
Du musst das lernen. Und zwar von der Pieke auf.
Dein Projekt ist keine Kleinigkeit. Es hilft daher auch nichts, wenn man 
dir den Grossteil als fertigen Code vorsetzt.

Das schlimmste was du tun kannst, ist IMHO jetzt wie die Maus vor der 
Schlange zu stehen und Angst zu haben.

Du musst dein Problem in Teile aufteilen. Wenn immer irgendwie geht, 
losgelöst von der realen Hardware, um zunächst nichts zu zerstören.

Und in diesem Sandkasten probierst (und lernst) du einzelne Aspekte 
deines Problems.

Und erst dann, wenn du Übung hast und die meisten Teile für sich einzeln 
schon mal programmiert hast und Erfahrung damit gesammelt hast, erst 
dann gehst du aus dieser Sandkiste wieder heraus und beginnst mit deinem 
wirklichen Projekt.


Meine Meinung. Andere mögen das anders sehen. Ich bin zwar nicht 
zimperlich, wenn es darum geht, anderen mit Code auszuhelfen. Aber das 
ist mir dann doch eine Nummer zu groß als das ich hier von der anderen 
Seite des Monitors aus ein derartiges System ins Blaue hinein schreibe 
würde ohne (ungefährliche) Vortests mit deiner Hardware machen zu 
können, bzw. mich da mit Messequipment bewaffnet durchtasten zu können.


Fang damit ein, eine simple LED mittels PWM in ihrer Helligkeit 
einstellbar zu bekommen. Du kannst da Hardware-PWM benutzen. Im 
AVR-GCC-Tutorial müsste sich dazu was finden.

Dann nimmst du den ADC in Betrieb und stellst mit dem ADC (und einem 
Poti) die LED-Helligkeit ein.

Das sollte mal einen Anfang geben, der sich auf deinen Motor umlegen 
lässt.

von Korea K. (destination)


Lesenswert?

ich bräuchte nur ein programm, was ungefähr brauchbar wäre mit dem ich 
dann weiter arbeiten kann, verbessern kann oder egal was sonst ansteht.

von Düsendieb (Gast)


Lesenswert?

ich empfehle einen Mega88 mit einem LCD drann. Sende Dir heute Abend mal 
ein Programmgerippe. (hoffe dass ich das nicht vergesse)

Axel

von Axel D. (axel_jeromin) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hier ist das Programmgerippe!!!!

liest nur einen Analogwert ein, zeigt ihn auf dem LCD an , hat einen 
Hochlaufgeber und zeigt den Wert nach dem Hochlaufgeber an.

mehr nicht, es sollja noch etwas Spaß übrig bleiben.

Das Programm ist zwar fehlerfrei kompiliert, aber nicht auf einem Mega88 
getestet.


Axel

von Korea Korea (Gast)


Lesenswert?

danke axel das bringt mich um einiges weiter! ;)

von Franz B. (byte)


Lesenswert?

Juhu... es gibt noch Wunder. @KK.. Respekt. Du bist meines Wissens nach 
der erst der es mal andersherum gemacht hat. Nicht "ich bin ein 
Elektronik-DAU, wie mache ich eine 500A PWM Brücke" sondern "ich hab 
eine Monster PWM-Brücke die schon läuft, ich bräuchte nur noch saubere 
Elektronik zum ansteuern". Eine simple PWM hast ja schon. Auch wenn hier 
ein paar Leute was anderes behaupten... du hast das meiste schon 
geschafft. Mach dir nur ein sauberes Board/Ansteuerung, der Rest ist 
Software. Viel einfacher als man glaubt. Es gibt ja zig Beispiele. Das 
bekommen wir schon hin.

Willst du dann auch mal grob deine verwendete Technik erläutern?

von pppuuu (Gast)


Lesenswert?

Diese Endstufe ist mE nicht der Aufgabe gewachsen !
...egal ob mit oder ohne Software.

Das passt alles unten in die Hose ;-)

von Karl H. (kbuchegg)


Lesenswert?

pppuuu schrieb:
> Diese Endstufe ist mE nicht der Aufgabe gewachsen !
> ...egal ob mit oder ohne Software.
>
> Das passt alles unten in die Hose ;-)

Die Endstufe kann ich nicht beurteilen.

Nichts gegen Axel. Mir ist schon klar, dass er nicht das Projekt machen 
wollte sondern erst mal etwas zu Spielen vorgeben will.
Aber das endgültige Programm wird ganz anders aussehen, als das was er 
da vorgegeben hat :-) Das ist so nicht zu gebrauchen.

Ich bleib immer noch dabei: Mit einfacheren Dingen anfangen und sich das 
Wissen aneignen. In Axels Programm kommt nichts vor, was man sich nicht 
auch aus dem Tutorial hätte anlesen können, sofern man über C Grundlagen 
verfügt. Wenn das ein "du hast mir sehr geholfen" hervorruft, dann gute 
Nacht.

> Eine simple PWM hast ja schon.

Hat sie nicht.
Hast du ins Programm hineingeschaut?
(Oder meinst du ihre PWM-Hardware. Die kann sie aber nicht 
weiterverwenden)

> Auch wenn hier ein paar Leute was anderes behaupten...
> du hast das meiste schon geschafft.

Der war gut :-)

> Software. Viel einfacher als man glaubt.
> Es gibt ja zig Beispiele. Das bekommen wir schon hin.

Bin schon neugierig, wie du sie durch den Rest durchsprechen wirst.

von Düsendieb (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> sondern erst mal etwas zu Spielen vorgeben will

genau.

Dafür ist ein LCD Gold wert, auch wenn es nur ein paar Euro kostet. Aber 
man sitzt nicht dumm vor dem Prozessor und weiss nicht warum irgend was 
nicht klappt.

Da kann man mal schnell einen Wert auf die Ausgabe legen und schon hat 
man einen Ahhhhh und Ohhh Effekt.


> Das ist so nicht zu gebrauchen.
mit der Bewertung kann ich leben.



Axel

von Düsendieb (Gast)


Lesenswert?

Auch wenn ich weiter oben einen Mega88 empfohlen habe, der Appetit kommt 
beim Essen.

Vieleicht ist es besser gleich einen Mega32 zu nehmen, da hat man auf 
jeden Fall genug I/O Pins.


Kriegste das Programm simuliert?


Axel

von Axel R. (Gast)


Lesenswert?

>da hat man auf jeden Fall genug I/O Pins.

?? bitte , wofür ?? Um den Motor anzusteuern und das Poti einzulesen?
Ein Tiny 25 oder 45 reicht wohl allemale.

axelr.

von Korea Korea (Gast)


Angehängte Dateien:

Lesenswert?

hey leute...hab mal einen anfang von meinem programm. bitte anschauen 
und sagen ob ich was verändern sollte oder falsch angegangen bin.

hier nehme ich 2 ADC eingänge (für gas und für I, siehe Schaltung)

von Axel Rühl (Gast)


Lesenswert?


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.