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.

DS2890 för 0-10 V

Inläggav ekdahl » 03 nov 2011, 17:05

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
Wannabe
 
Inlägg: 16
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Annons


Re: DS2890 för 0-10 V

Inläggav ekdahl » 04 nov 2011, 13:51

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.
ekdahl
Wannabe
 
Inlägg: 16
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inläggav bruka » 04 nov 2011, 14:09

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?
Användarvisningsbild
bruka
Amatörmeterolog
 
Inlägg: 198
Blev medlem: 12 nov 2007, 13:48
Ort: Delsbo

Re: DS2890 för 0-10 V

Inläggav ekdahl » 04 nov 2011, 14:48

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.
ekdahl
Wannabe
 
Inlägg: 16
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inläggav bruka » 04 nov 2011, 15:01

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
bruka
Amatörmeterolog
 
Inlägg: 198
Blev medlem: 12 nov 2007, 13:48
Ort: Delsbo

Re: DS2890 för 0-10 V

Inläggav elf98 » 05 nov 2011, 14:28

Sen får man inte glömma att det får ligga max 11V över DS2890.
Driver temperatur.nu
Användarvisningsbild
elf98
Har temperatur.nu som hobby
 
Inlägg: 3430
Blev medlem: 27 okt 2006, 13:49
Ort: Linköping

Re: DS2890 för 0-10 V

Inläggav ekdahl » 07 nov 2011, 16:32

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.
ekdahl
Wannabe
 
Inlägg: 16
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inläggav bruka » 23 nov 2011, 13:44

ekdahl, Hur har det gått för dig, fått det att fungera?
Användarvisningsbild
bruka
Amatörmeterolog
 
Inlägg: 198
Blev medlem: 12 nov 2007, 13:48
Ort: Delsbo

Re: DS2890 för 0-10 V

Inläggav ekdahl » 24 nov 2011, 17:02

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
Wannabe
 
Inlägg: 16
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

Re: DS2890 för 0-10 V

Inläggav ekdahl » 07 dec 2011, 11:36

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
2011-12-05 18.23.jpg
Ställdon
2011-11-14 20.47.jpg
Server
Senast redigerad av ekdahl 29 dec 2011, 20:31, redigerad totalt 2 gånger.
ekdahl
Wannabe
 
Inlägg: 16
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm

DS2890 för 0-10 V

Inläggav MartinF » 16 dec 2011, 00:06

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 och motorvärme med 1-wire och webswitch via webbgränssnitt.
MartinF
Väderfreak
 
Inlägg: 100
Blev medlem: 04 jan 2010, 12:24
Ort: Sunne

Re: DS2890 för 0-10 V

Inläggav ekdahl » 16 dec 2011, 07:27

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?title=OWFS_HowTo&oldid=342#Se_till_s.C3.A5_att_OWFS_startar_automatiskt_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.
ekdahl
Wannabe
 
Inlägg: 16
Blev medlem: 03 nov 2011, 16:52
Ort: Tidaholm


Återgå till Hemautomation/Teknik

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst