DS2890 för 0-10 V

I detta forum hör diskussioner gällande teknik i största allmänhet och hemautomation i synnerhet hemma.
Kategoriregler
Vill du visa bilder i ditt inlägg? Använd funktionen "Ladda upp bilaga" nedanför textrutan!
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

DS2890 för 0-10 V

Inlägg av ekdahl »

Hej
Först och främst vill jag säga att jag är ny på det här med 1-wire.
Jag har påbörjat ett projekt där jag hoppas kunna styra ställdonet till min radiatorshunt via 1-wire med en 0-10 VDC signal.
Till detta ändamål har jag införskaffat några DS2890 (TO-92). Är det riktigt att det går att åstadkomma en sådan signal med hjälp av denna krets? Hur ska det i sådana fall kopplas?

Jag är lite förvirrad när det gäller det här med pull-up-motstånd. När behövs ett sådant (bara vid parasitisk?) och hur stort bör det vara då kretsen (DS2890) finns alldeles inpå "adaptern"?

Jag kör OWFS på en QNAP TS-109 NAS som kör Debian.
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inlägg av ekdahl »

Nu är min DS2890 inkopplad och jag har kontakt med den genom owserver.
Genom att ändra WIPER så varieras motståndet mellan benen GND och RH från 0 till 100 kOhm.
Kan jag använda detta varierande motstånd för att få ut någon av följande signaler?
0-10 V, 2-10 V, 0-20 mA eller 4-20 mA (detta är de signaler som ställdonet accepterar)

Det bästa vore om man kan använda 24 VDC som jag ändå tänkt mata ställdonet med.
Användarvisningsbild
bruka
Tar hemautomation på allvar
Inlägg: 290
Blev medlem: 12 nov 2007, 13:48
Ort: Delsbo

Re: DS2890 för 0-10 V

Inlägg av bruka »

Nu har jag ingen utbildning på elektronik men en spänningsdelare borde väl lösa problemet, 140 k motstånd tillsammans med ditt 100 k ger 10 volt (10 k = 1,6 volt) om du matar med 24 volt enligt Electrodroid i min mobil.
Men någon annan kanske har ett bättre förslag?
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inlägg av ekdahl »

bruka skrev:Nu har jag ingen utbildning på elektronik men en spänningsdelare borde väl lösa problemet, 140 k motstånd tillsammans med ditt 100 k ger 10 volt (10 k = 1,6 volt) om du matar med 24 volt enligt Electrodroid i min mobil.
Men någon annan kanske har ett bättre förslag?
Tack!
Ska prova detta.
Användarvisningsbild
bruka
Tar hemautomation på allvar
Inlägg: 290
Blev medlem: 12 nov 2007, 13:48
Ort: Delsbo

Re: DS2890 för 0-10 V

Inlägg av bruka »

Här är en sida där du kan räkna ut vilka motstånd du behöver:
http://www.electronics2000.co.uk/calc/p ... ulator.php
R2 är ditt 100k
Användarvisningsbild
elf98
Hemautomation - det är mer än en hobby
Inlägg: 5434
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping
Kontakt:

Re: DS2890 för 0-10 V

Inlägg av elf98 »

Sen får man inte glömma att det får ligga max 11V över DS2890.
Grundade m.nu & temperatur.nu

Driver temperatur.nu

Bild
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inlägg av ekdahl »

elf98 skrev:Sen får man inte glömma att det får ligga max 11V över DS2890.
Jag har fixat ett motstånd på 150 kOhm, så då bör det väl vara lugnt?
Enligt beräkningen på ovan länkade sidan så blir det som mest 9,6 V.
Användarvisningsbild
bruka
Tar hemautomation på allvar
Inlägg: 290
Blev medlem: 12 nov 2007, 13:48
Ort: Delsbo

Re: DS2890 för 0-10 V

Inlägg av bruka »

ekdahl, Hur har det gått för dig, fått det att fungera?
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inlägg av ekdahl »

bruka skrev:ekdahl, Hur har det gått för dig, fått det att fungera?
Ja, själva utgången funkar fint.
Med ett motstånd på 150 kOhm och 24 VDC får jag följande spänningar:
Wiper = 0 ger 8,64 V
Wiper = 255 ger 0 V
Wiper-positionerna mellan ger relativt linjär spänning.

Problemet med shunt-styrningen är att mitt ESBE-ställdon visade sig vara kortslutning i, så jag får skaffa ett annat. Ska skaffa mig ett Belimo-ställdon istället.
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inlägg av ekdahl »

Tänkte göra en liten statusuppdatering. Nu har jag kommit ytterligare en bit på vägen i mitt projekt att styra värmen i huset. Det nya ställdonet är på plats och det styrs nu av ett program som körs på en annan server än den som syns på bilden. Tänkte lyfta över programmet till servern på bilden när jag ser att allt fungerar.

Klistrar in programmet i sin helhet här, ifall någon är intresserad.

Kod: Markera allt

<?php

// Debug?
define("DEBUG", true);

// Declare variables
$DeltaTime = 10;
$Continue = true;
$OutdoorTemp = 2;

// Quit nicely when asked to
function SignalHandler($signal)
{
	switch ($signal) {
		case SIGTERM:
		case SIGINT:
			$Continue = false;
			break;
	}
}

// Linear interpolation between two known points
function Interpolate($x0, $y0, $x1, $y1, $x)
{
	if ($x == $x0)
		return $y0;
	if ($x == $x1)
		return $y1;
	else
		return $y0+($x-$x0)*($y1-$y0)/($x1-$x0);
}

// Sets the valve position between 0 and 100 %
function SetValvePosition($position)
{
	$Temp = Interpolate(0, 255, 100, 0, $position);
	$Output = round(min(max(intval($Temp), 0), 255));
	exec("owwrite -s 192.168.1.2 /shunt/wiper $Output");
	echo "Wrote $Output to wiper\n";
}

function PIDController($setpoint, $actual_value)
{
	$PGain = 1.0;
	$IGain = 0.1;
	$DGain = 10.0;
	global $DeltaTime;
	static $PreviousError = 0;
	static $IntegralPart = 0;

	// Calculate deviation
	$Error = $setpoint - $actual_value;

	// Proportional part
	$Proportional = $PGain * $Error;

	// Integral part
	$IntegralPart = $IntegralPart + $Error * $DeltaTime;
	$Integral = min(max($IGain * $IntegralPart, -100), 100);

	// Derivative part
	$Derivative = $DGain * ($Error - $PreviousError)/$DeltaTime;

	// Combine P, I and D
	$Output = $Proportional + $Integral + $Derivative;

	// Limit output
	$Output = min(max($Output, 0), 100);

	if (DEBUG) echo "Regulator output: ".round($Output, 1)." %\n";
	if (DEBUG) echo "P: ".round($Proportional, 1);
	if (DEBUG) echo " I: ".round($Integral, 1);
	if (DEBUG) echo " D: ".round($Derivative, 1)."\n";

	// Update error
	$PreviousError = $Error;

	return $Output;
}


// Setup signal handler
pcntl_signal(SIGTERM, "SignalHandler");

// Main loop
while ($Continue)
{
	// Get supply temp
	$SupplyTemp = floatval(exec("owread -s 192.168.1.2 /uncached/framledning_rad/temperature"));
	if (DEBUG) echo "Supply temperature: $SupplyTemp C\n";

	// Get outdoor temp
	// implement later

	// Calculate setpoint
	$Setpoint = Interpolate(-20, 50, 20, 20, $OutdoorTemp);
	if (DEBUG) echo "Setpoint: $Setpoint C\n";

	// Call PID regulator
	$PIDOutput = PIDController($Setpoint, $SupplyTemp);

	// Set the valve position
	SetValvePosition($PIDOutput);
	
	// Wait a while
	sleep($DeltaTime);
}
?>

Edit:
Kan tillägga att jag "tänkt" göra en mer fast installation, får se hur det blir med det.
Här kan ni se framledningstemperaturen i en graf:
http://solhaga.homeip.net/?page_id=101
Sidan är under uppbyggnad, så ha överseende med eventuella konstigheter...
Regleringen har varit stabil med avvikelser < 0,2 °C i nån timma nu, så det ser ut att fungera.
Bilagor
Ställdon
Ställdon
Server
Server
Senast redigerad av ekdahl den 29 dec 2011, 20:31, redigerad totalt 2 gång.
MartinF
Tar hemautomation på allvar
Inlägg: 141
Blev medlem: 04 jan 2010, 12:24
Ort: Sunne

DS2890 för 0-10 V

Inlägg av MartinF »

Jätteintressant! Vad gäller värmen så styr jag själv ännu bara golvvärmeventilerna med ett perl-script. Radiatorshunten styrs via en Danfoss-regulator som dock har en override-funktion som jag använder för nattsänkning och vid frånvaro. På väg hem från Gran Canaria härom veckan så slog jag på värmen när vi var över Danmark. :-)

Har inte ens funderat över en while-loop i php och en NAS. Får du inte time-out efter ett tag? Hur initieras scriptet vid strömavbrott?
Albin polar 35,Laddomat, 3x750l, Danfoss ECL 100 & Sfinxs solfångare. Loggar och styr vedpanna, elpatron, solfångare, motorvärme och mycket annat med 1-wire, zwave, och webswitch via Domoticz.
ekdahl
Gillar hemautomation
Inlägg: 43
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inlägg av ekdahl »

MartinF skrev:Jätteintressant! Vad gäller värmen så styr jag själv ännu bara golvvärmeventilerna med ett perl-script. Radiatorshunten styrs via en Danfoss-regulator som dock har en override-funktion som jag använder för nattsänkning och vid frånvaro. På väg hem från Gran Canaria härom veckan så slog jag på värmen när vi var över Danmark. :-)
Kul! Man blir mäkta nöjd när man fjärrstyr sina grejer och det fungerar :).
MartinF skrev:Har inte ens funderat över en while-loop i php och en NAS. Får du inte time-out efter ett tag? Hur initieras scriptet vid strömavbrott?
Det har iaf fungerat en vecka nu. Att jag valde php istället för t.ex. C var för att slippa krångla med kompilering och att det är lätt att använda databasen vid behov. Tänkte lägga in reglerparametrarna i databasen senare, så att det ska bli lätt att ändra dessa via webbsidan.
Scriptet startas enligt http://wiki.temperatur.nu/index.php?tit ... t_vid_boot, fast själva startkommandot är:
nohup /usr/bin/php /media/intern/automation/radiator_regulator.php &

Strömavbrott har vi inte haft än, så det återstår att se hur startscriptet fungerar vid boot. Det går iaf bra att starta det manuellt.
Skriv svar