Forum: Mikrocontroller und Digitale Elektronik ATMEGA32 Programmierung einer Windkraftanlage


von Mark K. (sunches)


Angehängte Dateien:

Lesenswert?

Hallo, ich bin gerade dabei im Rahmen eines Studienprojektes die 
Steuerung einer Winkraftanlage mit Hilfe eines ATMEGA32 zu 
programmieren. Hierbei ist meine Aufgabe das bereits vorhandene Programm 
(siehe Anhang) fertigzustellen.
Bei der Anlage werden mit Hilfe von induktiven Näherungsschaltern die 
Windgeschwindigkeit mit einem Anemometer und die Drehzahl des Rotors 
gemessen. Die Impule werden an den Mikrocontroller gesendet und dort 
verarbeitet, sodass je nach Windstärke die Bremse und der Erregerstrom 
des Generators gesteuert werden.
Im vorhandenen Programm ist bis jetzt nur das Anemometer erfasst.

Meine Fragen: Was genau bedeutet folgeneder Programmanschnitt?
//Timer 0 konfigurieren
TCCR0 =(1<<WGM01) |(1<<CS01);
OCR0=125-1; // ### Bugfix 20091221
//Compare Interrupt aktivieren
TIMSK|=(1<<OCIE0);
// Enable INT0 External Interrupt
GICR |= 1<<INT0;
// Falling-Edge Triggered INT0 an PD2!
MCUCR |= 1<<ISC01;
// Enable Interrupts
sei();

Wo werden im Programm die Impule des Anemometers gezählt?

Wie kann ich den Rotordrehzahlmesser einbauen und die Impule von 
Anemometer und Drehzahlmesser auseinanderhalten?

Vielen Dank für Eure Hilfe

von Sage (Gast)


Lesenswert?

Frag doch mal die Programmierer Wiertzema oder Schroeder.

von was_is_mit_du (Gast)


Lesenswert?

>> // Enable INT0 External Interrupt

Die Impulse werden über den Externen Interrupt Eingang gezählt.
Du musst nur noch die dazugehörige ISR suchen (oder selbst 
implementieren).

mfg

von Karl H. (kbuchegg)


Lesenswert?

Markus Kranig schrieb:
> Hallo, ich bin gerade dabei im Rahmen eines Studienprojektes die
> Steuerung einer Winkraftanlage mit Hilfe eines ATMEGA32 zu
> programmieren.

Lern erst mal ein wenig mit dem Mega32 umzugehen.


> Meine Fragen: Was genau bedeutet folgeneder Programmanschnitt?

Die Bedeutung aller Konfigurationsbits findest du im Datenblatt des 
Mega32

> //Timer 0 konfigurieren
> TCCR0 =(1<<WGM01) |(1<<CS01);
> OCR0=125-1; // ### Bugfix 20091221
> //Compare Interrupt aktivieren
> TIMSK|=(1<<OCIE0);

In an Nutshell
Der Timer 0 wird so konfiguriert, dass er alle 1 Millisekunden seine ISR 
aufruft.

> Wo werden im Programm die Impule des Anemometers gezählt?

Das Anemometer hängt ganz offenschtlich an einem Interrupt Eingang. Mit 
jedem Puls wird in der zugehörigen ISR ein Zähler erhöht. In der 
Hauptschleife wird dieser Zählerstand alle 10 Sekunden ausgewertet.

> Wie kann ich den Rotordrehzahlmesser einbauen und die Impule von
> Anemometer und Drehzahlmesser auseinanderhalten?

Das ist jetzt dein Bier. Es ist ja auch deine Studienarbeit und du 
bekommst dafür eine Note.

von Düsendieb (Gast)


Lesenswert?

Markus Kranig schrieb:
> Hierbei ist meine Aufgabe das bereits vorhandene Programm
> (siehe Anhang) fertigzustellen.

Tja, da ist wohl eher neu schreiben angesagt. Das bisschen was da ist, 
reicht nicht weit.

Mach mal eine Liste was an welchen Pins angeschlossen ist und stelle sie 
oben in der Programmdokumentation ein. ( z.B. so wie es hier gemacht 
ist: Absolute Beginner-AVR Steckbrettprojekte)

von ddddd (Gast)


Lesenswert?

Ich wusse doch das da was faul ist in der Windrädchenindustrie.
Da dürfen offensichtlich Leute ohne Ahnung rumbosseln, wirklich
super.

von Karl H. (kbuchegg)


Lesenswert?

Düsendieb schrieb:
> Markus Kranig schrieb:
>> Hierbei ist meine Aufgabe das bereits vorhandene Programm
>> (siehe Anhang) fertigzustellen.
>
> Tja, da ist wohl eher neu schreiben angesagt. Das bisschen was da ist,
> reicht nicht weit.

Allerdings.
Die Qualität des Vorhandenen ist bescheiden, und da übertreib ich noch 
zum Positiven.

von Quark (Gast)


Lesenswert?

ddddd schrieb:
> Ich wusse doch das da was faul ist in der Windrädchenindustrie.
> Da dürfen offensichtlich Leute ohne Ahnung rumbosseln, wirklich
> super.

Die reale Quarzfrequenz ist auch eher "Rate mal mit Rostenthal". Evtl. 
steht sie auch im Makefile, no one knows ...

von ddddd (Gast)


Lesenswert?

Mark Kran schrieb:
> Hallo, ich bin gerade dabei im Rahmen eines Studienprojektes die
> Steuerung einer Winkraftanlage mit Hilfe eines ATMEGA32 zu
> programmieren. Hierbei ist meine Aufgabe das bereits vorhandene Programm
> (siehe Anhang) fertigzustellen.

Ich frag emich ernsthaft warum fängst Du solche Projekte an, wenn Du
offensichtlich keine Ahnung davon hast?

Noch schlimmer sind die Leute die solche Projekte vergeben. Wenn ich mir
den Quellcode ansehe kann ich nur sagen setzen 6.

Waren das Studenten der Theologie oder was haben die studiert?

von ddddd (Gast)


Lesenswert?

ich dachte immer solche Anlagen brauchen eine TÜV-abnahme. Also
dann schon lieber Kernenergie. In den Anlagen wird wenigstens
ordentlich programmiert. Die Windrädchensoftware ist echt gefährlich.
Wenn der TÜV-Prüfer so was sieht kriegt er einen Herzinfarkt.

von Mark K. (sunches)


Lesenswert?

ddddd schrieb:
> Mark Kran schrieb:
>> Hallo, ich bin gerade dabei im Rahmen eines Studienprojektes die
>> Steuerung einer Winkraftanlage mit Hilfe eines ATMEGA32 zu
>> programmieren. Hierbei ist meine Aufgabe das bereits vorhandene Programm
>> (siehe Anhang) fertigzustellen.
>
> Ich frag emich ernsthaft warum fängst Du solche Projekte an, wenn Du
> offensichtlich keine Ahnung davon hast?
>
> Noch schlimmer sind die Leute die solche Projekte vergeben. Wenn ich mir
> den Quellcode ansehe kann ich nur sagen setzen 6.
>
> Waren das Studenten der Theologie oder was haben die studiert?

Ich kann dich beruhigen. Es handelt sich hierbei um ein Studienprojekt, 
in dem Studenten in ihrer Freizeit (es gibt keine Note) eine kleine 
Windkraftanlage (Rotordurchmesser 1,8m) aus "Schrott", also Teilen, die 
zwar funftionstüchtig sind aber nicht mehr gebraucht werden, bauen. Da 
keiner von uns Informatiker ist, liegt das Augenmerk eher auf anderen 
Bereichen bezüglich der Anlage. Eine Steuerung ist aber unabdingbar, 
sodass sich eben einige, darunter auch ich, in diese Materie vorwagen, 
um auch dort neue Erfahrungen zu sammeln und etwas neues zu lernen.

von Karl H. (kbuchegg)


Lesenswert?

Mark Kran schrieb:

> Bereichen bezüglich der Anlage. Eine Steuerung ist aber unabdingbar,
> sodass sich eben einige, darunter auch ich, in diese Materie vorwagen,
> um auch dort neue Erfahrungen zu sammeln und etwas neues zu lernen.


Keine Frage, dass ihr eine Steuerung brauchen werdet.
Aber tu dir selbst einen Gefallen und fang mit einfacheren Dingen an.
Der gepostete Code erzählt eine Geschichte. Nämlich die Geschichte, dass 
diejeigen die sie geschrieben haben sehr naiv an die Dinge rangegangen 
sind. Das ist zwar ein relativ naheligender Ansatz, aber nur auf den 
ersten Blick. Mit etwas mehr Erfahrung lernt man nämlich, dass zb 
Warteschleifen der Tod jeder Steuerungssoftware, die möglichst schnell 
auf äussere Einflüsse reagieren sollen, sind. Das geht so nicht.
Der Code ist die Programmierform von: Um zu Multiplizeren, addiere ich 
einfach entsprechend oft, denn das ist das was ich bisher kann. Anstatt 
von 4 * 5 rechne ich 5 + 5 + 5 + 5 und da kommt doch auch das richtige 
raus. Was soll daher daran falsch sein?
Nun falsch in dem Sinne nicht. Nur sitzt du bei 872356 * 982356 immer 
noch an den Additionen, während die Könner schon längst auf ein Bierchen 
gegangen sind. Das es in der Zwischenzeit schon etwas ganz anderes als 
Hausübung zu berechnen gilt, hast du gar nicht mitbekommen, weil deine 
Rechnerei viel zu lange dauert. Und die Gefahr, dass du dich verrechnet 
hast, ist auch nicht gerade unerheblich.
Und da sind Feinheiten wie unbedingt notwendiger atomarer Zugriff auf 
eine uint32_t Variable noch gar nicht berücksichtigt. Insbesondere 
dieser Tatbestand macht diese Steuerung hier zu einem unberechenbaren 
Zufallsautomaten und nicht zu einer verlässlichen Steuerung.

Abgesehen davon, dass hier die zugrundeliegende Programmiertechnik schon 
nicht stimmt, ist der Code auch noch fehlerhaft. Fehlerhaft in dem 
Sinne, dass zb die Anzahl der Anemometerumdrehungen in der ersten 10 
Sekunden Periode nachdem die Bremse angezogen hat, nicht stimmt. Alle 
Anemometerticks, die während der Zeit die die Bremse zum anziehen 
benötigt, einlaufen gehen verloren und tragen daher nicht zur nächsten 
Messperiode bei. Im schlimmsten Fall könnte deine Bremse trotz 
konstanten Windes ständig auf und zufahren. Je nachdem wie lange die 
Bremse dazu benötigt und wie weit der Wind über dem Grenzwert liegt. Je 
länger die Bremse braucht, desto größer wird der Bereich in dem die 
'Steuerung' zu schwingen anfängt.

von was_is_mit_du (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:

>Nun falsch in dem Sinne nicht. Nur sitzt du bei 872356 * 982356 immer
>noch an den Additionen, während die Könner schon längst auf ein Bierchen
>gegangen sind. Das es in der Zwischenzeit schon etwas ganz anderes als
>Hausübung zu berechnen gilt, hast du gar nicht mitbekommen, weil deine
>Rechnerei viel zu lange dauert. Und die Gefahr, dass du dich verrechnet
>hast, ist auch nicht gerade unerheblich.

Früher hat man mal gesagt: per aspera ad astra

Das man Anfangs mal viele Fehler macht ist ja klar und auch gut so - 
denn
nur an den Fehlern, die man selbst gemacht hat kann man lernen.

Also besser beim Studium in der Freizeit mit der Programmierung einer
kleinen Windkraftanlage beginnen, als später dann bei der Steuerung
eines Atomkraftwerkes...

von Karl H. (kbuchegg)


Lesenswert?

was_is_mit_du schrieb:

> Also besser beim Studium in der Freizeit mit der Programmierung einer
> kleinen Windkraftanlage beginnen, als später dann bei der Steuerung
> eines Atomkraftwerkes...

Das ist richtig.
Aber noch besser seine ersten Sporen damit verdienen, dass eine LED vor 
sich hinblinkt und sich die Blinkfrequenz
a) auf Tastendruck
b) abhängig von einer Motordrehzahl
c) irgendein anderes Ereignis
verändert. Dazu braucht man keine teure Hardware und man lernt dabei 
eine Menge.

zb wie man Zustandsmaschinen aufbaut
zb dass ein Systemtakt in Form einer ISR nicht schlecht ist
zb dass ein Aufbau mit Jobflags seine Vorteile hat
zb wie das mit Timern funktioniert
zb wie man Drehzahlen vernünftig misst
zb das man Datentypen nicht unnötig groß wählt
zb was atomarer Zugriff ist
etc. etc.

von was_is_mit_du (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:

>Aber noch besser seine ersten Sporen damit verdienen, dass eine LED vor
>sich hinblinkt und sich die Blinkfrequenz
>a) auf Tastendruck
>b) abhängig von einer Motordrehzahl
>c) irgendein anderes Ereignis
>verändert. Dazu braucht man keine teure Hardware und man lernt dabei
>eine Menge.

Das ist auch richtig. Allerdings ist es für viele schnöde mit diesen
Grundlagen zu beginnen, ohne eine Anwendung dafür zu haben. Da kann
man dann gleich sehen, warum das alles wichtig ist. Leider ist es für
viele, die schon lange Programmieren schwierig, eine Problemstellung
für Anfänger zu finden, so dass sie:

a) nicht zu langweilig und einfach ist
b) nicht zu schwierig ist und Erfolgserlebnisse ermöglicht

Kommt halt immer auch auf die pädagogische Kompetenz der Lehrenden an.

von Karl H. (kbuchegg)


Lesenswert?

was_is_mit_du schrieb:

> man dann gleich sehen, warum das alles wichtig ist. Leider ist es für
> viele, die schon lange Programmieren schwierig, eine Problemstellung
> für Anfänger zu finden, so dass sie:
>
> a) nicht zu langweilig und einfach ist
> b) nicht zu schwierig ist und Erfolgserlebnisse ermöglicht

Du sprichst hier ein wahres Wort gelassen aus!
Dieser Spaghat ist in der Tat wahnsinnig schwer.

von Klaus W. (mfgkw)


Lesenswert?

Das würde ich hier dem Lehrenden aber nicht vorwerfen.

Eine nicht zu langweilige Aufgabe heißt ja nicht, daß man
nicht zum Lernen vorher mit etwas einfacherem anfangen dürfte,
auch wenn es nicht zwingend vorgegeben ist.

Sich erst mit einem Buch oder Tutorial schlau zu machen,
ist doch nicht verboten.

Bei meiner einen Studienarbeiten musste ich auch erst mehr
Fortran und etwas Unix lernen, bevor ich in einer Turbine damit
rumrechnen konnte.

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.