Show Posts
Pages: 1 2 [3] 4 5 ... 77
31  International / Deutsch / Re: Hilfe Bei der Bauteilsuche on: June 13, 2014, 12:34:05 pm
Die Spannung an AD1 ist von VREF abhänging, die wird "neutral" gemessen.

Die Spannung an AD0 kommt aber von einer unabhängigen Quelle aussen, und die "sitzt" auf der virtuelle Masse (der 2,5V Hilfsspannung, die mit AD1 zurückgemessen wird.

Wenn die externe Spannung 0V ist, dann ist alles ok. Dafür sorgt der Vergleich der beiden Werte.
Wenn aber eine externe Spannung anliegt,  dann wird diese runtergeteilt, und mit ADO gemessen und die Differenz zu AD1 gebildet.
nun erhalte ich ein Ergebnis in Bit.
Den Wert eines Bits erhalte ich durch die REchnung: VREF/1024
Den Wert der externen Spannung berechnet sich zu:
Uext = (AD0 - AD1) * VREF/1024 / R4 * (R3+R4)

Wie du nun schön sehen kannst: Der Wert von Uext ist direkt von VREF abhängig.
32  International / Deutsch / Re: Hilfe Bei der Bauteilsuche on: June 13, 2014, 05:05:40 am
Doch, die Spannung an AREF spielt eine Rolle!
Die kann man nur ignorieren, wenn du eine ratiometrische Messung hast, also eine Reihenschaltung von Vorwiderstand und Sensor, die aus eben der AREF gespeist wird.

Hier hast du aber eine externe Spannungsquelle, die 2% Genauigkeit der Arduino-Versorgung geht also voll ein.
Die Frage ist, ob die 2% stören.
33  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: June 11, 2014, 02:11:52 am
Quote
Mit der Schaltung brauchst du eigentlich keinen SW-Filter mehr.
Naja, das signal schwank wie gesagt immernoch +- 1-2Digits und pro Digt sind das ja ca 0,3V am.
Da hat Serenifly recht: ein paar Bits Schwankung wirst du immer haben.

Den Filter habe ich mal ausprobiert und er klappt ganz gut.

Aber warum muss ich alle 13 sek was messen? Ohne das hat es auch geklappt.
Wenn du einen definierten Filter haben willst, mit bekannter Grenzfrequenz, dann brauchst du eine definierte Abtastrate. Das müssen nicht 13ms sein. Aber wenn du den Filter einfach in der Loop laufen lässt, dann weißt du nicht, wie oft er aufgerufen wird und kennst daher auch nicht das Verhalten deines Filters.


Desweiteren versuche ich gerade eine konstante zu finden mit der ich die lineare Interpolation vllt ablösen kann.
Diese zahl ist ca. 0,307V pro digit.
Im von 223V +-1V war diese zahl 0,3075. Damit wurde das Signal haargenau umgerechnet wie bei meinem Messgerät. Jedoch entfernte sich die Genauigkeit mit größerem Abstand von 223V.
Die  Konstante ändert sich nur minimal an der 4. stelle nach dem komma.
(Zumindest waren das die bisherigen erkenntnisse im bereich 222V-224V)

Hast du nen Rat wie ich die Formel(bis jetzt nur multiplikation mit konstante) überarbeiten müsste? Oder sollte ich bei der linearen Interpolation bleiben?
Wenn sich etwas in der 4. Stelle nach dem komma ändert, dann wird das in der Praxis keine Auswirkungen haben.
Wir sind wieder mal bei der Frage die wir schon einige Male diskutiert hatten:
Wie genau sieht die Übertragungskennlinie deiner Messschaltung aus?
Du hast ja bisher nur einen sehr kleinen Bereich vermessen  (223.,1V - 224,7V) und der war nicht sehr linear.
du müsstest mal einen größeren Spannungsbereich vermessen.
34  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: June 08, 2014, 05:34:31 am
Es lag am Elko der war wohl schon etwas älter.
Schön, dass du den Fehler finden konntest!

Quote
Wie filter ich das signal per Software? So wie im Smoothing example?
Mit der Schaltung brauchst du eigentlich keinen SW-Filter mehr.

Falls doch, dann nehme ich lieber den gleitenden Durchschnitt. Das spart, gerade bei größeren Filterkonstanten, viel Speicher.
das Prinzip ist einfach: du definierst dir einen Filterfaktor: const int FF = 99;
du tastest alle x ms das analoge Signal ab: Neuwert = analogread(A0);
dann nimmst du 1/100stel von Neuwert und addiert 99/100stel vom letzten Sensorwert:
Sensorwert = (Neuwert + FF * Sensorwert)/(FF+1):

Die Grenzfrequenz des Filters liegt bei FF * Abtastrate. Wenn du also alle 10ms einen Wert mißt hast du mit FF=99 eine Grenzfrequenz von ca. einer Sekunde.
Ich würde als Abtastrate aber nicht 10ms nehmen, sondern z.B. 13ms. Auf alle Fälle eine Frequnz die kein Vielfaches der Neztfrequenz 50Hz ist.

Und nochwas: Sensowert MUSS von Typ float sein, ebenso wie die Rechnung in float ausgeführt werden muß.
35  International / Deutsch / Re: Eingänge mit 24V schalten on: June 06, 2014, 12:53:23 am
Ich sag' mal: wenn ein Blitz in deine Hausinstallation einschlägt, ist ein kaputter Arduino dein kleinstes Problem!

Wenn Störspannungen induziert werden, durch Blitzschlag in der Nähe (selten) durch nicht entstörte Klingeln oder Türöffner(wahrscheinlicher) oder andere Einflüsse, dann sollte die Schaltung, die ich oben skizziert habe, ausreichen. Optokoppler halte ich für übertrieben, Z-Diode brauchts denke ich auch nicht.  Es sein denn, die 24V sind extrem unsauber. (z.B. Industrieumgebung)
36  International / Deutsch / Re: Eingänge mit 24V schalten on: June 05, 2014, 07:42:57 am
ok, Hausinstallation ist meist nicht sooo sauber.
den Spannungteiler kannst du so niederohmig lassen, dann empfehle ich aber dringend noch eine ZDiode (oder ein Schottky-Dioden Pärchen wie oben beschrieben) gegen die Spitzen und einen Kondensator >1µ als Störschutz und Entprellung.

Besser wäre aber:
Zuerst ein niederohmiger Widerstand nach Masse als Abschluss.
Dann ein Spannungteiler z.B. 100k / 22k + kerko  (> 470nF)
Damit hast du eine hochohmige Ankopplung an den Arduino mit einem Tau von 8ms eine ausreichende Entprellung.
37  International / Deutsch / Re: Eingänge mit 24V schalten on: June 05, 2014, 03:08:56 am
bevor du aufwändige Schutzschaltungen aufbaust, kläre doch mal, in welcher Güte deine Signale kommen.

Sind es denn wirklich Signale die über lange (Freiland-)Leitungen kommen? Dann brauchts Aufwand.
Oder sind es Signale aus eine anderen elektronischen Steuerung, die daneben steht. Dann reicht ein Spannungteiler mit Entstörkondensator völlig aus.
38  International / Deutsch / Re: Hilfe Bei der Bauteilsuche on: June 04, 2014, 08:48:37 am
es sollte schon mit einem opv gelöst werden, da man die Verstärkung unb den offset mit Potis einstellen soll....
Dann kannst du aber deine Genauigkeit völlig vergessen. Potis sind die schlechtesten Widerstände überhaupt!

Und OP brauchst du wirklich nicht!

du erzeugst dir mit 2 Widerständen aus der Arduino 5V eine 2,5V Hilfsspannung. (die du als Referenz zurückmißt)
Auf diese stellt du den GND des Sensors, und auf diese teilst du auch das Sensorsignal runter.


Und jetzt machst du nur noch:
x = analogRead(A0) - analogRead(A1)
I = x * 200/4 * (4700+7500)/7500; // kann man auch zusammenfassen zu einer Zahl
und schon hast du deinen Strom.
 
Alles was du mit OPs machst wird ungenauer.
Alles was du mit Potis machst kannst du, was Genauigkeit angebelangt, sowieso vergessen!
39  International / Deutsch / Re: Frequenz messen on: June 03, 2014, 01:34:18 am
Ich denke der richtige Weg wäre, alle deine globalen Sensor Variablen als Array anzulegen, und der Funktion den Index zu übergeben.

Code:
const int AnzahlSensoren = 5;  // Wieviele Sensoren sind am System angeschlossen
const byte muxPins[AnzahlSensoren] = {1,4,3,0,5}; // Bitmuster für die Adressleitungen des Multiplexers

int muxChannel(byte _ch){
  PORTA &= 0xF0;
  PORTA |= muxPins[_ch];
}
Das mit dem Array für die Bitmuster kannst du weglassen, wenn bei dir Sensor0 an Adresse 0x00 hängt,  Sensor1 an Adresse 0x01 hängt, Sensor2 an Adresse 0x02 etc.
dann kannst du direkt mit der Sensornummer verodern.

Auch die anderen Funktionen müssen dann noch auf das Arraymodell umgestellt werden:

Code:
const int AnzahlSensoren = 5;  // Wieviele Sensoren sind am System angeschlossen
const byte muxPins[AnzahlSensoren] = {1,4,3,7,5}; // Bitmuster für die Adressleitungen des Multiplexers
const int MuxAD = A0;  // an welchem AD hängt der Ausgang des Mux.
const int SensUG = 300;   // Untere Grenze für die Gültigkeit eines Sensorwertes
const int SensOG = 800;   // Obere Grenze für die Gültigkeit eines Sensorwertes

/*************************************************************************
**   Definition der globalen Variablen                                  **
*************************************************************************/
int currVal[AnzahlSensoren];


int muxChannel(byte _ch){
  PORTA &= 0xF0;
  PORTA |= muxPins[_ch];
}

void readsensor(){
  static unsigned long lastread = 0;
  static float FiltWert[AnzahlSensoren];
  static int _SNr;    // Nummer des aktuell auszuwertenden Sensors
  const float FilterFaktor = 20;    
  
  if (millis()-lastread < 100) return;   // alle 100ms einen Wert holen.
  lastread = millis();                   // Zeit des letzten Wertes merken
  int AktWert = analogRead(MuxAD);
  if (AktWert < SensUG && AktWert > SensOG){    // prüfen ob AD-Wert gültig.
    currVal[_SNr] = -99;                              // fals nicht, Fehlercode -99 zurückgeben
    return;
  }
  FiltWert[_SNr] = ((FiltWert[_SNr] * FilterFaktor) + AktWert) / (FilterFaktor + 1);  
  currVal[_SNr] = int(FiltWert[_SNr]);
  if(++_SNr >= AnzahlSensoren) _SNr = 0;   // Nächsten Sensor anwählen,
  muxChannel(_SNr);                        // und die Muxleitungen neu setzen
} // End of readsensor

Die Funktion readsensor() läuft nun automatisch durch.
Der Unterschied: die Werte von currVal und FiltWert liegen nun in einem Array, mit je einem Speicherplatz für jeden Sensor.
Und nach jedem Auslesen wird der Mux neu gesetzt. Dadurch hat die Schaltung 100ms Zeit, sich auf den neuen Wert einzupegeln. Ob das reicht, weiß ich nicht, das müsstest du mal ausmessen, wie lange die Schaltung braucht um nach anlegen eines neuen Signals einen stabilen Pegel zu haben. Nach meiner Simulation sollte das reichen, aber ich kenne deine genaue Schaltung nicht.


Die Funktion Wertstabil() müsstest du dann entsprechend auf Arrays umbauen.
40  International / Deutsch / Re: smd bestücker für zuhause? on: June 02, 2014, 06:54:00 am
So macht das eine professionelle Fertigung aber nicht.

Da wird zuerst die paste gedruckt, dann werden alle SMD-Bauteile platziert, dann wird das ganze durch den Ofen geschoben zum Löten.
41  International / Deutsch / Re: Bestimmte Zeilen kopieren ? Wie ?! on: June 01, 2014, 04:58:48 am
Du läßt einfach den Text weg.

Wenn du  ohne ihn nicht klarkommst, dann gib nur im setup() einmal eine Kopfzeile aus:
Code:
Serial1.println("Temperatur: \tPressure:  \tHeight:  \t(*C) \t(*F)");

im loop gibst du dann deine Werte mit Tab als Trennung aus:
Code:
Serial1.print(bmp.readTemperature());   Serial1.print("\t"); 
 Serial1.print(bmp.readPressure());      Serial1.print("\t"); 
 Serial1.print(bmp.readAltitude());      Serial1.print("\t"); 
 Serial1.print(temperatureC);            Serial1.print("\t"); 
 Serial1.print("\t");                    Serial1.print("\t"); 
 Serial1.println(temperatureF);          Serial1.println(); 

Dann kannst du den Inhalt des SerMon komplett ins Excel kopieren (Einstellung: Englisch (wegen des Dezimalpunktes) und Trennzeichen Tabulator)

42  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: May 30, 2014, 07:23:08 am
Wie kann ich denn prüfen ob alle Teile noch intakt sind?
Letzlich sicher nur, wenn du die Teile einzeln auslötest und getrennt vermisst.

Quote
Mir ist übrigens aufgefallen das es keinen Unterschied macht ob ich die 5V vom Arduino angeschloßen habe oder nicht. Ist das normal?
ja, das ist normal. Die Diode, die nach 5V geht, soll ja nur vor zu hohen Spannungen schützen, in dem sie diese nach 5V ableitet. Wenn die 5V nicht angeschlossen sind fehlt nur dieser Schutz. Die Funktion selbst ist nicht berührt.
43  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: May 30, 2014, 02:23:19 am
Widerstände können kaputt gehen. Aber dann sieht man es ihnen auch an: verbrannt. Und sie sind dann eher hochohmig.

parallel dazu hast du aber noch eine Schottky-Diode D2, die kann eher kaputt gehen. Die Frage wäre allerdings: wodurch?
Wie genau sieht denn deine Schaltung aus?

Gunther
44  International / Deutsch / Re: 3kW Heizung, Leistung regulieren und messen on: May 29, 2014, 03:05:37 am
Wenn dann ist es wohl eher eine kalten Lötstelle. Dass sich ein Bauteil durch Stromfluß so stark erwärmt, dass es sich auslötet ist eher ungewöhnlich.

Wogegen sich eine kalte Lötstelle gerade bei Ungeübten sehr schnell einschleicht. die kann sowohl durch zu kurzes, als auch durch zu langes löten entstehen:

Der Fehler liegt beim Löten

Im zweifelsfall wirst du in der Schaltung mit dem Oszilloskop dein Signal verfolgen müssen, und zu sehen, an welcher Stelle es gestört wird.
45  International / Deutsch / Re: 60 * 1000 = 4294961760 ? on: May 26, 2014, 11:05:53 am
Ich vergess das auch immer wieder (muss am Alter liegen ...  smiley-wink).

Aber
Code:
unsigned long wert;
wert = 60000;

ist doch korrekt, oder?
Ich kann das jetzt gerade nicht ausprobieren, daher muss ich euch bemühen, sorry.

Ja, das geht. (gerade probiert)
Pages: 1 2 [3] 4 5 ... 77