Interface 0-10V auf EVCC mit RS485-HW-Schnittstelle

Hallo zusammen,

Grundkenntnisse von C und C++ habe ich, von Computern auch und meine PV-Solaranlage mit Datenlogger sowie Elektromobil sind auch vorhanden.

Um den Datenlogger und das E-Mobil geht es in meinem Projekt, das ich mit dem Arduino Uno V3 umsetzen möchte. Der ist ebenso bestellt wie ein passendes RS 485-Modul.

Die Aufgabenstelleung ist recht einfach. Der Datenlogger gibt ein 0-10V-Signal aus.
Der EVCC (Ladekontroller der Wallbox) soll anhand des Spannungswertes (0-10V) die Ladeleistung am EVCC einstellen, so daß das Elektroauto mit der Überschußleistung der PV-Anlage geladen wird. Fertig gibt es so ein Interface nicht zu kaufen. Einen Ladestation mit 0-10-Regelung scheidet aus, da die Wallbox schon an der Wand hängt.

Der EVCC hat einen offenen Befehlsvorrat. Der EVCC kommuniziert auf RS485-Basis und welche Werte er erwartet um die Ladeleistung zu regeln ist auch bekannt.

Von der Idee her müßte ich über einen Analogeingang des Arduino nur das Spannungssignal auswerten, mit einem Umrechnungsfaktor multiplizieren und den Befehl zur Einstellung des Ladewertes absenden. So weit die Theorie.

Sieht hier jemand bereits Schwierigkeiten?

Grüßle

Thomas

Wenn du darauf achtest, dass der Analog Eingang des Arduinos keine 10V verkraftet, sollte es technisch machbar sien.

Tja da sind wir gleich beim Thema Dokumentation. Da ich nicht weiß was alles dabei ist, wo wäre denn hier beim Analogeingang die Grenze?

Grüßle

Thomas

Also Spannungsteiler mit 2 * 1kOhm vorschalten.

Nachdem der Werteumfang des EVCC nr maximal 970 Schritte umfasst ergibt sich somit ein Korrekturfaktor von 1,055.

Herzlichen Dank. Dann soll das Teil mal kommen ...

Grüßle

Thomas

Mike60:
die Analog- Eingänge "verkraften" 0 bis 5 Volt (1024er- Auflösung)

Nein das ist nicht vollständig korrekt
Die Eingänge verkraften 0V bis Versorgungsspannung des Arduinos.
Es gibt Arduinos mit 3,3V Versorgungsspannung und auch Fälle wo die 5V nicht 5V sind sondern bedeutend weniger.

Grüße Uwe

Genaugenomen vertragen die Analog-Pins maximal VREF

Und die Digital-Pins Vcc + 0,5V. Und noch genauer vertragen das wahrscheinlich auch die Analog-Pins wenn man sie als digitale I/Os verwendet.

Serenifly:
Genaugenomen vertragen die Analog-Pins maximal VREF

Und die Digital-Pins Vcc + 0,5V. Und noch genauer vertragen das wahrscheinlich auch die Analog-Pins wenn man sie als digitale I/Os verwendet.

Nein, die analogen Pins vertragen auch mehr als AREF, wenn AREF kleiner als die Versorgungsspannung ist. Bei Spannungen größer als AREF wird 1023 ausgegeben.
Alle Pins (außer Reset) können maximal die Versorgungsspannung vertragen ( genaugesagt 0,5V mehr und 0,5V weniger als Masse). Die Versorgungsspannung kann zwischen 1,8V und 5,5V sein wobei bei kleinen Spannungen der Systemtakt niedriger sein muß.
Außerhalb dieser Werte fließt ein Strom über die Schutzdioden gegen die Versorgungsspannung bzw Masse und kann durch Überlast die Schutzdioden und Pins zerstören.

Grüße Uwe

Hallo, da bin ich wieder. Danke für die vielen Tipps.

Momentan gibt es ein grundsätzliches Problem.

Nach der Prüfung Kompilieren und dem Uplaod erhalte ich den Fehler

"avrdude: stk500_getsync(): not in sync: resp=0x00"

Verwendet wird Win 8.1 und ein arduino kompatibler Nachbau. Die grüne LED leuchtet und die gelbe blinkt im Takt.

Zum Testen habe ich das Beispiel "Analoginput.ino" und ohne Werteänderunge kompiliert und hochgeladen.

Was mache ich falsch?

Hm Fehler komt wohl vom RS485Board. Ohne dieses anzuschließen kommt keine Fehlermeldung.

Nächste dumme Frage: Wie starte ich das Programm nach dem upload?

Gar nicht. Das läuft sofort los.

Herzlichen Dank, endlich mal was um das ich mich nicht kümmern muß.

Die Abfrage des externen Spannungswertes habe ich wie folgt gelöst:

Externes geregeltes Netzteil = Arduino Board
Uvar = A0
0 = Gnd

Leider erhalte ich kein Ergebnis :frowning:

#include <TouchScreen.h>

/*
Ausgehend von Analog Input wird das Programm entwickelt.
Augelesen werden die Werte Analoginput und Digitalinput, ausgegeben werden ein RS485-Befehl, Status ob geregelt oder ungeregelt
geladen wird und beim geregelten Laden der Prozent-Wert.
Zwischendrin wird der vom Analoginput ermittelte Wert in einen Prozent Wert umgerechnet.
*/

/Variablendeklaration/

int Ana1_sensorPin = A0; // Auswahl input pin Spannungsabfrage Datenlogger
int Ana1_sensorValue = 0; // variable to store the value coming from the sensor
int DI1_sensorPin; // Auswahl input pin digital für Schnellladung
int DT1_sensorvalue=0; //variable to store the value coming from the sensor
char ev_RS_485=0; //RS-485 Übergabewert setzen

void setup() {
pinMode(Ana1_sensorPin, INPUT);
pinMode(DI1_sensorPin, INPUT);

}

/Programm/

void loop() {
// read the value from the sensor:
int DT1_sensorvalue = digitalRead(2); //Auslesen ob Digital Input (DI1) offen oder geschlossen ist
Ana1_sensorValue = analogRead(Ana1_sensorPin); //Spannungswert auslesen

if (DT1_sensorvalue == HIGH) { //DI1 geschlossen Analogregelung anstossen und RS 485-Befehle absetzen

if (Ana1_sensorValue< 317){ // damit die Ladesteuerung des EV nicht toggelt werden mindestens 4kW Ladeleistung benötigt
Ana1_sensorValue=318;}
else
ev_RS_485=Ana1_sensorValue*1000/1055; //Umrechnung Dezimal in Prozent für RS-485 Befehl
// digitalwrite ev_RS_485; // RS-485-Befehl absetzen
Serial.print(ev_RS_485);
}

else {
// digitalWrite(ev_RS_485);// 22kWh Standardwert setzen

}
}