3-Phasen Messschaltung

The_Scientist

Neues Mitglied
26. Feb. 2011
91
1
0
Country Club Legetafo in Ethiopia
Sprachen
  1. BascomAVR
  2. ANSI C
  3. Assembler
Hallo Markus,

ich hoffe der Beitrag ist nicht zu alt und Du schaust ab-und-zu noch mal drauf...

Ich habe ein Problem mit dem Timing und frage mich gerade, wie Du die Null-Duchgangs-Erkennung kalibriert hast.
Die LED im Opto erlischt ja wenn die Spannung unterhalb eines gewissen Punktes faellt. Dies ist aber nicht wirklich 0V.
Warum ich es genau haben will/muss:

Ich baue eine Mess-Schaltung, die 3 Phasen am Stromnetz ueberwachen und auswerten soll.
Es geht darum genau im Scheitelpunkt einer jeden Phase den ADC wert zu ermitteln und fuer die Auswertung bereitszustellen.
Es reicht mir im Prinzip wenn bei jedem 10. Phasendurchgang gemessen wird - ABER - alle 3 Phasen immer im gleichen Zyklus, damit
ich die Phasenverschiebung gegeneinander messen/ueberwachen kann.

Ich weiss, dass dies eingentlich ein eigenes Thema sein sollte und ich gelobe, dies auch zu eroeffnen und meine hoffentliche "Erleuchtung" dort zu teilen...
Aber ich haenge nach wie vor am Timing Problem fest.....

Ein weiteres Problem duerfte sein, dass ich das Ganze in BASCOM machen moechte...

Fuer einen Tip waere ich echt dankbar...

LG

Klaus
 
Hier mal ein Schaltplan

Ich haenge mal den Schaltplan an.....
In der Simulation funktioniert die HW prima - fehlt nur die Auswertung...

LG

Klaus
ATS Medium Scale Version.jpg
 
...Ich habe ein Problem mit dem Timing und frage mich gerade, wie Du die Null-Duchgangs-Erkennung kalibriert hast.
Die LED im Opto erlischt ja wenn die Spannung unterhalb eines gewissen Punktes faellt. Dies ist aber nicht wirklich 0V....
Sehe ich auch so.Es sind ja immer 3 Dioden in Reihe, deren Durchlaßspannungen zu überwinden sind (je 2 im Gleichrichter, und die im Optokoppler). Hab da jetzt nicht in den Datenblättern gesucht, sollte gefühlt zwischen einem und 2,5V liegen. Um wieviel (Zeit) liegt man da daneben?
Ich spekuliere darauf, daß Markus das einfach ignoriert - er konnte natürlich auch ein paar Durchläufe detekrieren, und dann "blind" etwas früher zünden.

Wenn Du die "Winkel" exakt messen willst, geht das natürlich so nicht. Ich habe bei meinem Phasenanschnittsdimmer damals auch lange überlegt, wie ichs mache (dabei ist das ja da weniger kritisch). Das ganze irgendwie hinter einem Trafo abzugreifen, bringt auch nichts, da kommt ja dann noch'ne Verschiebung durch den Trafo.

Letztendlich hatte ich mich für einen Komperator entschieden, der eben L und N miteinander vergleicht. Die nötige symmetrische Versorgungsspannung wurde dabei über einen Blindwiderstand und Gleichrichtung aus der Phase gewonnen. Der Komperator steuert seinerseits einen Optokoppler an (galvanische Trennung), dessen Durchschalten oder sperren detektiert der µC. Verzögerungen sind hier also die Reaktionszeit des Komperators (und dessen Flankensteilheit?) und des Optokopplers. Und natürlich die Detektion und Verarbeitung im µC. Da es bei mir nur um eine Phase ging, war das über einen Interrupt sicher das geringste Problem.

Edit: (forumsinterner) Link zu nem Bild von meinem Dimmer, die rechte untere Ecke ist die Nulldurchgangsdetektion, rechts oben die 3 (nur 2 bestückt) Dimmer-Kanäle
 
Hmmmmm

Hallo LotadaC,

vielen Dank ersteinmal fuer die Anregung mit dem Nullduchgang, aber ich sehe halt immernoch eine Spannungsdifferenz....
Ich muss mir mal ueberlegen, wie lange es wirklich dauert bis nach dem vermeintlichen Nulldurchgang der reale Nulldurchgang erreicht wird.
Dafuer muss ich halt messen wie gross die Spannung noch ist, wenn der Nulldurchgang bereits detektiert wird.

Nach dem Nullduchgang muss ich die erste Messung nach 5ms haben und die anderen dann entsprechend (ich muss in jedem zeitlichen Scheitelpunkt einer jeden psotiven Phase messen)...wird eh sehr schwierig in BASCOM.
Ich will/muss aber in BASCOM proggen, da ich das Ganze irgendwie meiner Assistentin erklaeren muss/will. Wenn ich da jetzt sofort mit
Assembler komme, macht die dicht. Sie hat eine ethiopische Grundausbildung fuer Elektronik und will naechstes Jahr zurueck zur Uni und ihren BSc. und
ggf. spaeter MSc. machen....Aber bisher hat sie mit µC und Programmierung noch GARNICHTS am Hut gehabt. Und dies Projekt machen wir "irgendwie" zusammen....

Mal sehen wie und ob ich das hinbekomme.....

Uebriegen: Sorry fuer die spaete Antwort, aber in den letzten Tagen hatten wir mal wieder keinen "richtigen" Strom...war anstatt 220V @ 50Hz (hier ueblich! - nicht 230-240!) nur 148-155V @ 43Hz.
Da hat sich dann mein Rechner immer wieder ausgeschaltet....

Sollte jemand eine Idee haben was das Timing angeht, so bin ich fuer jeden Tip dankbar....Leider habe ich keine Ahnung wieviel Taktzyklen Bascon fuer diverse Befehle/Ausfuehrungen benoetigt.
In ASM kann man das ja schoen mitzaehlen...
Gibt es da eine Tabelle...habe bei MCS auf der Seite nichts gefunden....

LG

Klaus
 
Hi Klaus,

vielen Dank ersteinmal fuer die Anregung mit dem Nullduchgang, aber ich sehe halt immernoch eine Spannungsdifferenz....
Ich muss mir mal ueberlegen, wie lange es wirklich dauert bis nach dem vermeintlichen Nulldurchgang der reale Nulldurchgang erreicht wird.
Dafuer muss ich halt messen wie gross die Spannung noch ist, wenn der Nulldurchgang bereits detektiert wird.

alternativ könnte man natürlich noch mit einer etwas höheren Samplingrate (Kilohertz-Bereich) den genauen Scheitelpunkt ermitteln. Den groben Scheitelpunkt ermittelt man mit dem Nulldurchgang, läßt dann über nen Timer soviel Zeit vergehen das man etwas vor dem Scheitelpunkt anfängt mit nem ADC die Phase zu samplen und ermittelt den genauen Punkt dann mit dem Meßwert.

Gruß
Dino
 
Leider habe ich keine Ahnung wieviel Taktzyklen Bascon fuer diverse Befehle/Ausfuehrungen benoetigt.
In ASM kann man das ja schoen mitzaehlen...
Gibt es da eine Tabelle...habe bei MCS auf der Seite nichts gefunden....


Hallo Klaus!

Mir fällt momentan nur ein, dass man die Takte (und die Zeit) im Simulator sehen kann.

Beim Simulator werden in der unteren Zeile immer die Systemtakte mitgezählt und in Abhängigkeit zur eingestellten Systemfrequenz auch gleich die Zeiten mitgerechnet.

Du musst dein Programm nur am "Startpunkt" zur Messung stoppen.....
dann unten bei den bereits gezählten Takten mit der Maus rechts klicken und die Zählung auf NULL setzen....
dann das Programm bis zum "Endpunkt" der Messung weiterlaufen lassen.....
und schon kannst du die benötigten Systemtakte und verstrichene Zeit ablesen.

Hier mal ein Beispielbild vom Simulator:
attachment.php


Ganz unten in der Statusleiste steht dann "Cycl.= 9820602 : 613,7876 mS"


Grüße,
Cassio
 
Vielen Dank ihr beiden

Hallo Dino, Hallo Cassio,

viele Dank ersteinmal euch beiden fuer die schnelle Reaktion...

Dino: Das ist ja genau der Punkt...ich will nicht den Scheitel via Spannungsverlauf ermitteln, sonder im zeitlichen Scheitel die Spannung. Ich muss halt wissen ob die zum gegebenen Zeitpunkt (5,00ms nach Nulldurchgang) "OK" ist.....
Den Spannungsscheitel muss ich mir natuerlich auch ermitteln und dann die Zeitdifferenz und Spannungsdifferenz...das ganze fuer alle drei Phasen zum Vergleich...

Cassio: Du hast natuerlich Recht....ueberhaupt nicht darueber nachgedacht...nutze den Simulator sehr selten...aber so gehts!

Werde mich jetzt mal an Taktezaehlen machen und dann mal das DSO quaelen...
Mals sehen ob ich dann der Sache naeher komme......

Sieht so aus als ob das doch mehr Zeit in Anspruch nimmt als gedacht...Muss das FUN-Projekt ethiopische Uhr/Kalender mit Wetterstation und mit GC und GMT Umrechnung noch etwas warten.
Hier ist heute der 05.05.2005 und es ist 7:42am (13.01.2013 13:42 - GMT+3)....

Danke nochmal und bis spaeter..

LG

Klaus
 
Einen hab ich noch...

Da faellt mir gerdae noch ein, dass ich ja die schwankende Netzfrequenz auch im Auge behalten muss.....ist schon schlimm hier...
Netzfrequenz typ : 50Hz
Real : Ganztaegig schwankend (Lastabhaengig) 43.2 - 51.4 Hz (so zumindes die letzten Monate gelogged via Panasonic KW8M).

Wenn ich nicht schon graue Haare haette wuerde ich jetzt welche bekommen...

LG

Klaus
 
Verschieben

Ich denke, dass das Thema einen eigenen Beitrag im Forum bekommen sollte....
Kann ich oder ggf. Ihr, das entsprechend verschieben oder muss ich einen neuen Beitrag erstellen und auf die Anfaenge hier verweisen?!

Auch weiss ich nicht, wo ich mein Fun-Projekt unterbringen soll...
Es hat mit RTC zu tun aber auch mit Wireless (RFM12BP) sowie Display und I2C/TWI zu tun - auch EEPROM is beteiligt (Umrechnungstabelle fuer ethiopischen nach gregorianischen Kalender)....
Gebt mir doch mal bitte einen Tipp..


LG

Klaus
 
...aber ich sehe halt immernoch eine Spannungsdifferenz....
Ich muss mir mal ueberlegen, wie lange es wirklich dauert bis nach dem vermeintlichen Nulldurchgang der reale Nulldurchgang erreicht wird.
Dafuer muss ich halt messen wie gross die Spannung noch ist, wenn der Nulldurchgang bereits detektiert wird...
Wo siehst Du welche Differenz?
Der Nulldurchgang ist doch genau da, wo die Differenz L-N das Vorzeichen wechselt. Wenn ich also L und N durch den Komperator vergleichen lasse, kippt auch dort der Ausgang um. Mit einer möglichst unendlich steilen Flanke und ohne Verzögerung. Dann sollte auch der Optokoppler "sofort" durchschalten/sperren.
Wenn Du es wirklich genau haben willst, mußt Du halt "ideale Bauteile" kaufen - wenn Du welche findest, werden sicher auch andere hier haben wollen;)
 
Hi Klaus,

Ich denke, dass das Thema einen eigenen Beitrag im Forum bekommen sollte....
Kann ich oder ggf. Ihr, das entsprechend verschieben oder muss ich einen neuen Beitrag erstellen und auf die Anfaenge hier verweisen?!
das mur ein Mod oder Admin verschieben.

Sag einfach wie der Titel des neunen Threads heißen soll und ich erzeuge den und schieb die Beiträge da rein.

Da faellt mir gerdae noch ein, dass ich ja die schwankende Netzfrequenz auch im Auge behalten muss.....ist schon schlimm hier...
Netzfrequenz typ : 50Hz
Real : Ganztaegig schwankend (Lastabhaengig) 43.2 - 51.4 Hz (so zumindes die letzten Monate gelogged via Panasonic KW8M).
Genau wegen der schwankenden Netzfrequenz dachte ich mir das mit dem samplen des Spannungsmaximums.
Anders geht es nur folgendermaßen:
Die Netzfrequenz hat ja auch eine gewisse Trägheit und wird sich nicht von einer Vollwelle zur nächsten so stark ändern (hoffe ich mal). Also kann man bei einer Halbwelle die halbe Periodendauer messen und dann bei der nächsten Halbwelle zum errechneten Scheitelpunkt messen. Das setzt natürlich saubere Sinuswellen voraus. In Zeiten von Schaltnetzteilen und ähnlichem Gedöns sieht es aber manchmal auch etwas zerklüftet aus. Außerdem kann man nicht unbedingt sicher sein das die positive und negative Halbwelle absolut identisch sind (leichte Nullpunktverschiebungen = Gleichspannungsanteile). Man hofft es nur.

Gruß
Dino
 
Hallo,

ich denke, dass das Thema 3-Phasen Messschaltung (3x s - Hoffentlich ist das rchtig nach der Rechtschreibreform... ist halt lange her...) heissen...

Was das messen angeht...ich muss halt die genaue Spannung 5,0000ms nach absoluten Nulldurchgang messen und dann noch wann der wirkliche Scheitelpunkt war in x,xxx ms nach Nulldurchgang...
Die Genauigkeit hat einen Grund : Die Netzspannung ist zeitweilig so unsauber hier, dass mir bereits einiges an Netzteilen das Zeitliche gesegnet hat....auch 3-Phasen Motoren wie bei meinem Brunnen oder der A/C sterben hier regelmaessig.
PFC's sind hier unbekannt und keine Pflicht....die Verdrahtung auf der Strasse ist eine im wahrsten Sinne des Wortes - fliegende Verdrahtung. Keine Klemmen nur verdrillt und ISO-Band...so sind hier ganze Haeuser/Wohnbloecke angeschlossen.
Ueberall offene Verteiler ohne Tueren, Sicherungen (die Dicken) Ueberbrueckt mit Muniereisen....Erde in den Steckdosen Fehlanzeige!
Jeder ist hier Elektro-Meister und schliesst an was und wie er will.....

Nur mal so am Rande - Gerade eben in der Garage am DataLogger gesehen :
L1 : 192,4
L2 : 164,9
L3 : 201,1

Ich habe hier in meinem Haus die Verkabelung bereits komplett erneuert und die Lasten best moeglich verteilt....aber die Spannungsabfaelle sind klar...die Zuleitung vom Verteiler auf der Strasse zu meinem Haus sin 6mm2 und die Zuleitung zum Verteiler vom naechsten uebergeordneten Verteiler ist 16mm2. Daran haengen dann aber 11 Haeuser. Ich habe eine durchschn. Last von 5kW - gehen wir mal davon aus, dass die Anderen etwa gleich auf sind. Ein Haus ist mehr oder weniger unbewohnt - nur die Maid- Macht 50kW an 16mm2 bei ca. 300m bis zum naechsten "Hauptverteiler". Dieser hat insgesamt 4 Strassen mit je 11 Haeuser...Rund 200kW und ist via 2x16mm2 paralell zur Trafo-Station verdrahtet...
Die Kabel sind natuerlich nicht via Klemmblock angeschlossen sondern verdrillt mit 2kg Isolierband....und natuerlich auch mehrfach unterbrochen und wieder geflickt.
Bei starkem Regen ist hier immer alles dunkel...



@LotadaC: Du gehst ja nicht direkt mit 220VAC auf den Komperator-Eingang...da ist ja noch einiges davor...Vielleich habe ich aber auch einen Denkfehler...muss das Ganze mal aufs Steckbrett zaubern und wie bereits gesagt das DSO quaelen...

LG und Danke


Klaus
 
Hi Klaus,

ich denke, dass das Thema 3-Phasen Messschaltung (3x s - Hoffentlich ist das rchtig nach der Rechtschreibreform... ist halt lange her...) heissen...

erledigt. "Messen physikalischer Größen" sollte wohl als Rubrik passen.

Gruß
Dino
 
Lieben Dank

Hallo dino03,

lieben Dank fuer das prompte verschieben....

Dirk war auch so nett und meinen Usernamen geaendert - die Email-Adresse war nicht so gut gewaehlt als Username...

Bin gerade dabei mal das Steckbrett zu quaelen...aber ich denke, dass ich das erst morgen in Betrieb nehmen und messen werde. Ist halt schon kurz vor 23 Uhr hier...

LG und bis morgen


Klaus
 
Messen wird verschoben...

Hallo ihr Lieben,

ich hatte ja fuer heute angedroht, dass ich mal messen werde...wurde aber nix draus...

Mein Trenntrafo hat sich bereits vor langerzeit verabschiedet...dank der Spannungsversorgung hier in Addis...
Nun nutzte ich immer einen Auto-Wechselrichter 12V -> 220V echte SINUS 50Hz um daran mein OSCAR anzuschliessen, kommt halt nicht gut ohne Trennung vom Netzt wenn
man am selbigen messen will/muss.....also Wechselrichter an die Autobatterie und das OSCAR an den Wechselrichter....

Nur leider hat heute mein Wechselrichter ebenfalls den Geist aufgegeben...
Sitze jetzt schon den ganzen Tag am dem Ding, bekomme es aber nicht zum laufen (kein Schaltplan vorhanden und das Internet gibt fuer das China-Teil auch nix preis).
Allerdings habe ich rausgefunden, dass der KA3525A (ein PWM Controller) an seinen Ausgaengen (Output A - Pin 11 und Output B - Pin 14) keinerlei Signale liefert!
Komischerweise ist der Shut Down Pin (Pin 10) aber auf low und somit aktiv. Heisst, dass er ja auch nix ausgeben soll am Output.....aber ohne Schaltplan und einer 4 Layer Platine komm ich dar nicht weiter.
Also morgen den schoenen Golf-Club mal verlassen - in die Stadt duesen (Addis) und einen neuen Wechselrichter kaufen...der letzte hat mich 14.500 Birr gekostet fuer 800W und hat schlappe 3 Monate ueberlebt
bei sehr maessiger Benutzung und NIEMALS ueberlastet...weiss ja, dass das Ding aus China kommt. Eine alternative waere noch eine "dicke" UPS, aber die sind meisst teurer und haben keinen echten Sinus....

Als alles weitere dann morgen bzw. ggf. sobald ich einen neuen Wechselrichter habe...ist garnicht mal so sicher, dass ich morgen einen finde.....


Sorry, aber so spielt das Leben..

LG

Klaus
 
Es geht voran

Hallo ihr Lieben,

nach dem ich keinen Erfolg in Bezug Inverter/Trenntrafo/UPS hatte, kam mir dann gestern Nacht die Erleuchtung.
Ich habe zwei baugleiche Transformatoren genommen (2x115 Pri / 2x7,5 Sek 7,5VA)...ist zwar nicht genug fuers DSO...aber um den Eingang fuer die Phasenmessung zu versorgen.
Die Sinuskurve am Ausgang des Trafogespann's sieht hervoragend aus und hat nicht gelitten. Jetzt kann ich zumindest mit der ersten Phase etwas experimentieren und das DSO dran haengen.
So auch getan und hier die ersten Ergebnisse...vielleicht hat einer eine Idee dazu...

Nulldurchgang detect via AIN:
Der Interrupt wird ausgeloest knapp 1ms nach "Nulldurchgang" - Der µC hat eiegenlich nix am laufen ausser einer Routine, die angesprungen wird sobald der Interrupt ausgeloest wird. Dann toggeld portb.0...
Die routine selbst braucht nur einige µs..kann also nicht die Ursache fuer die Verzoegerung sein...die Verzoegerung ist aber auch nicht "stabil" - sie schwankt zwischen 481ns und 936ns.
Der µC ist via Quarz auf 8MHz getaktet und die 8MHz sehen SEHR stabil aus auf dem Frequenzzaehler...

Der Nulldurchgang selbst wird detektiert, wenn in wirklichkeit noch 3.22 - 3.26 V auf der AC Seite bzw. AIN Pin vorhanden sind.
Der andere AIN liegt auf GND. :confused:

Hat jemand eine Idee?!

Jetzt koennte man ja meinen, dass die Verzoegerung gut ist sich irgendwie "selbst" synchronisiert fuer den "echten" Nulldurchgang...aber bei 1ms macht schon eine Menge aus...in diesem Fall rund 100V

10ms fuer eine Halbwelle / 1 Halbwelle = 1x pi = 1ms = pi/10
Amplitude * sin(pi/10) = 325 * sin(0,3141592) = 100,43 V


LG

Klaus
 
...@LotadaC: Du gehst ja nicht direkt mit 220VAC auf den Komperator-Eingang...da ist ja noch einiges davor...
Was nennst Du einiges?
Der invertierende Eingang liegt über einen 10k auf dem Neutralleiter,
Der nichtinvertierende hängt spannungsgeteilt zwischen Phase und Neutralleiter ( P - 1M - 1M -zum AC -10k -N ).
Ich habe NICHT den internen AC verwendet, sondern einen EXTERNEN LM393D. Versorgt wurde dieser über ein ... ähm ... "Blindspannungsnetzteil" (+/-7,5V und Gnd). Der Ausgang steuert einen Optokoppler an, welcher auf der Controllerseite einen extern hochgezogenen (10k) Pin auf Gnd zwingen kann.
 
Gestaendniss

Ich muss natuerlich zugeben, dass ich mehr oder minder direkt auf den Mega gegangen bin, da mir eine Trennung vom Netz eh keinen Sinn macht - da die Spannungsversorgung des Mega auch direkt Netzbezogen ist (Kondi-Netzteil...)
Aber das Problem ist ja jetzt mehr die Verzoegerung und die Spannungsdifferenz, die bei mir auftreten. Was Deine Schaltung angeht, so habe ich in Ermaneglung eines Schaltplan (ist nur ein Foto zu finden - vielleicht bin ich aber auch blind :cool:)
angenommen, dass Du vor dem LM noch eine weitere Diode zum Schutz geschaltet hast.
Ich kann mir keinen Reim auf die Verzoegerung machen und auch die Spannungsdifferenz ist mir unerklaerlich....
Die Versorgungsspannung des µC ist super stabil...schwankt im Bereich 5.012 bis 5.008....langzeit Messung.

Habe den gesamten Aufbau wieder und wieder geprueft....werde jetzt mal mit dem Nullduchgangs-Signal auf einen ADC gehen und schauen was der µC da erkennt und ob ich das irgendwie triggern kann...


LG

Klaus
 
Da ich nicht über das nötige Meß-Equipment verfügte (und auch nicht Deine Genauigkeit gefordert war), hab ich mich damals auf die Spice-Simulation verlassen:
zerodetect.pngzerodetect1.pngzerodetect2.pngzerodetect3.pngzerodetect4.png
P.S.:Spice bot mir irgendwie keine 7,5V-Zener an - deswegen hier die 8,2er. Den Optokoppler konnte ich wegen der galvanischen Trennung irgendwie nicht richtig mit einbeziehen, sollte aber eigentlich auch so reichen...
 
Nach langem Hin und Her....

Hallo ihr Lieben,

ich musste leider feststellen, dass das "genaue" messen fast unmoeglich ist mit den Gegebenheiten...habe mich ersteinmal damit abgefunden...
Aber ich gebe nicht auf!!!!!

Zwischenzeitlich habe ich ein kurzes Proggi gestrickt, welches ein ATS darstellen soll....
Aber...irgendwie verliert die Variable "Ve" zwischendurch ihren Wert und geht auf 0, aber der µC macht keinen RESET!!!!
Das Program laeuft einfach weiter, nur die Variable ist auf 0!
"Ve" steht fuer Voltage-Error und wird jedesmal um eins erhoeht, wenn die Spannung nicht den Vorgaben entspricht!

Ich fuege hier mal das Proggi ein...

Code:
$regfile = "m8def.dat"
$crystal = 8000000                                                    ' Interner Takt - kein Quarz....
$hwstack = 32
$swstack = 32
$framesize = 32
'------------------------------------------------------------------------------------------------------------------------
Ddrb = 195
Ddrc = 32
Ddrd = 251
Portc = 16
Portd = 4
Portb = 0
'------------------------------------------------------------------------------------------------------------------------
Config Int0 = Falling
Enable Interrupts
Enable Int0
On Int0 Menue_isr Saveall                                             ' SAVEALL da ich noch nicht genau weiss wo die Reise hingeht....
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Dim W(4) As Word                                                      ' Variable fuer die ADC-Werte
Dim V(3) As Single                                                    ' Variable fuer die Spannungen der einzelnen Phasen
Dim Zw As Single                                                      ' Variable fuer Zwischenwerte
Dim Cnt As Byte                                                       ' Variable fuer Zaehler
Dim Avg(3) As Dword                                                   ' Variable fuer die Durchschnittswerte des ADC's
Dim P As Byte                                                         ' Variable fuer Phasen-Zaehler
Dim Ve As Byte                                                        ' Variable fuer Spannungsfehler-Zaehler
Dim Vemax As Byte                                                     ' Variable fuer max. Spannungsfehler
Dim T As Byte                                                         ' Variable Schleife um Durchschnittswert zu ermitteln
Dim Tt As Byte
Dim Pm As Byte                                                        ' Variable fuer max. Phasen (1 oder 3)
Dim State As Eram Byte                                                ' Status als EEPROM variable
Dim Menuid As Byte                                                    ' Variable um den Inhalt von State aufzunehmen, bzw. uebergeben
Dim Lok As Byte                                                       ' Variable fuer alle Phasen OK
Dim Vmax As Single                                                    ' Variable fuer maximale Spannung
Dim Vmin As Single                                                    ' Variable fuer minimale Spannung
Dim Wz As Word                                                        ' Variable fuer Wartezeit-Schleife
'------------------------------------------------------------------------------------------------------------------------
Vmax = 264                                                            ' Maximale Spannung
Vmin = 150                                                            ' Minimale Spannung
Vemax = 5                                                             ' Maximale Anzahl Fehler bis zur Abschaltung
'------------------------------------------------------------------------------------------------------------------------
Open "comd.1:250,8,n,1" For Output As #1                              ' Zum Monitoring, Wert etwas abstrakt, da interne Taktquelle...Terminal auf 260!!!
' Alle Print #1 - Anweisungen sind gehoeren zum Monitoring und werden im fertigen Progr. entfernt.
'------------------------------------------------------------------------------------------------------------------------
Menuid = State                                                        ' Status aus EEPROM lesen und in Menuid ablegen
If Menuid < 1 Or Menuid > 3 Then                                      ' Wenn die ID nicht innerhalb Parameter - setze ID auf 1
Menuid = 1                                                            ' 1 = Automatic, 2 = Main, 3= GenSet
State = Menuid                                                        ' Speichere ID ins EEPROM
End If                                                                ' Dies ist um beim ersten Start einen definierten Zustand zu haben
'------------------------------------------------------------------------------------------------------------------------
Phaseselect Alias Pinc.4                                              ' Jumper J1 auf dem Board
Relais Alias Portc.5                                                  ' Relais fuer Autostart-Option
1pled Alias Portd.0                                                   ' LED zur Signalisierung 1-Phasen Betrieb
3pled Alias Portd.1                                                   ' LED zur Signalisierung 3-Phasen Betrieb
Menu Alias Pind.2                                                     ' Menu-/Wahl-Taster, wird aber eigentlich durch INT0 abgehandelt...evtl. entfernen!
Auto Alias Portd.6                                                    ' LED zur Signalisierung Automatik-Betrieb
Main Alias Portd.7                                                    ' LED zur Signalisierung Main-Input Manual Betrieb
Genset Alias Portb.6                                                  ' LED zur Signalisierung GenSet-Input Manual Betrieb
L1ok Alias Portd.3                                                    ' LED zur Signalisierung Phase 1 (L1) ist OK
L2ok Alias Portd.4                                                    ' LED zur Signalisierung Phase 2 (L2) ist OK
L3ok Alias Portd.5                                                    ' LED zur Signalisierung Phase 3 (L3) ist OK
Online Alias Portb.7                                                  ' LED zur Signalisierung das ADC Sampleing und Auswertung laeuft
Con_main Alias Portb.0                                                ' Ausgang an Treiber fuer Schuetz "Main"
Con_genset Alias Portb.1                                              ' Ausgang an Treiber fuer Schuetz "GenSet"
'------------------------------------------------------------------------------------------------------------------------
W(1) = 0                                                              ' Einfach mal alles zu Beginn auf NULL setzen
W(2) = 0                                                              ' Wahrscheinlich uberfluessig, aber Sicher ist Sicher ;-)
W(3) = 0
W(4) = 0                                                              ' W(4) ist fuer den ADC-Wert des Poti fuer die Rueckfallzeit
V(1) = 0
V(2) = 0
V(3) = 0
Avg(1) = 0
Avg(2) = 0
Avg(3) = 0
Ve = 0
Con_genset = 0
Con_main = 0
'------------------------------------------------------------------------------------------------------------------------
Hauptschleife:
Do
If Ve > Vemax Then
Gosub Check_error
End If
Ve = 0 : Tt = Vemax + 1
For T = 1 To Tt
Print #1 , "Error-Counter = " ; Ve
Gosub 1_or_3_phase
If Menuid = 1 Then
Gosub Automatic
End If
If Menuid = 2 Then
Gosub Mainsply
End If
If Menuid = 3 Then
Gosub Gensetsply
End If
Next T
Loop
'------------------------------------------------------------------------------------------------------------------------
Automatic:
Print #1 , "AUTOMATIC"
Gosub Mainsply
Gosub Check_adc
Gosub Check_lok
Return
'------------------------------------------------------------------------------------------------------------------------
Check_lok:
Lok = 0
Cnt = 0
P = 1
Do
Cnt = P + 2
Print #1 , "V(" ; P ; ") = " ; V(p)
If V(p) > Vmin And V(p) < Vmax Then
Incr Lok
Print #1 , "Phase " ; P ; " is OK!, LOK = " ; Lok
Portd.cnt = 1
Else
Print #1 , "Phase " ; P ; " is NOT OK!, LOK = " ; Lok
Portd.cnt = 0
End If
Incr P
Loop Until P > 3
If Lok < Pm Then
Incr Ve
End If
Return
'------------------------------------------------------------------------------------------------------------------------
Check_error:
W(4) = Getadc(0)
Gosub Gensetsply
W(4) = W(4) / 5
Print #1 , "Wartezeit = " ; W(4) ; " Sekunden..."
For Wz = 1 To W(4)
Wait 1
Zw = W(4) - Wz
Print #1 , "Noch " ; Zw ; " Sekunden..."
Next Wz
Still_error:
Print #1 , "Still Error!"
Gosub Check_adc
Ve = 0
Gosub Check_lok
If Ve > 0 Then
Goto Still_error
End If
Gosub Mainsply
Return
'------------------------------------------------------------------------------------------------------------------------
Check_adc:
P = 1
Do
Do
W(p) = Getadc(p)
Loop Until W(p) < 1
Cnt = 0
Do
W(p) = Getadc(p)
Incr Cnt
Loop Until W(p) > 100 Or Cnt > 50
Cnt = 0 : Avg(p) = 0
Do
W(p) = Getadc(p)
Avg(p) = Avg(p) + W(p)
Incr Cnt
Loop Until W(p) < 1
W(p) = Avg(p) / Cnt
Zw = W(p) * 5
V(p) = Zw / 1024
V(p) = V(p) * 100
V(p) = Int(v(p))
Incr P
Loop Until P > 3
Return
'------------------------------------------------------------------------------------------------------------------------
Mainsply:
Print #1 , "Main"
Con_genset = 0
Waitms 250
Con_main = 1
Relais = 0
Return
'------------------------------------------------------------------------------------------------------------------------
Gensetsply:
Print #1 , "GenSet"
Con_main = 0
Relais = 1
Waitms 250
Con_genset = 1
Return
'------------------------------------------------------------------------------------------------------------------------
1_or_3_phase:
Print #1 , "1 or 3 Phase?"
If Phaseselect = 1 Then
Pm = 3
'3pled = 1         ' LED derzeit deaktiviert da SoftUART
'1pled = 0         ' LED derzeit deaktiviert, da SoftUART
End If
If Phaseselect = 0 Then
Pm = 1
'1pled = 1
'3pled = 0
End If
Return
'------------------------------------------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------------------------------------------
Menue_isr:
Menuid = State
Incr Menuid
If Menuid > 3 Then
Menuid = 1
End If
State = Menuid
If Menuid = 1 Then
Auto = 1
Main = 0
Genset = 0
End If
If Menuid = 2 Then
Auto = 0
Main = 1
Genset = 0
End If
If Menuid = 3 Then
Auto = 0
Main = 0
Genset = 1
End If
Print #1 , "Menuid = " ; Menuid
Return
'------------------------------------------------------------------------------------------------------------------------
'------------------------------------------------------------------------------------------------------------------------

Ich weiss, dass der UART nicht richtig laeuft mit internen Takt, aber so gewaehlt funktioniert zumindes zum Monitoring,
macht das ganze Programm zwar lahm, aber so kann man wenigstens in "Ruhe" mitlesen!
BTW: Der SoftUART steht auf 250 Baud und mein Terminal Programm auf 260 Baud, dann funzt es !

Vielleicht hat ja einer mal ein Auge fuer mich auf das Proggi, ich sehe keinen Fehler/Grund warum "Ve" ihren Wert verliert!
Aber ich kann natuerlich mal wieder im Wald stehen und die Baeume nicht finden...waere nicht das erste Mal!

LG und danke im Voraus fuer die Hilfe....


Klaus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)