Shop OBEX P1 Docs P2 Docs Learn Events
Modifying an old thermostatic chamber, can't get precise temperature control. - Page 2 — Parallax Forums

Modifying an old thermostatic chamber, can't get precise temperature control.

2»

Comments

  • CuriousOneCuriousOne Posts: 931
    edited 2014-02-03 12:24
    Currently I'm doing this in the following way.

    Heat to user input value-coefficient calculated for each whole value in 30-40C range.

    When temperature reaches that user value-coefficient, stop heating, and start monitoring temperature.

    After temperature reaches user value -0.2C, start PWMing heater with about 10% of power x coefficient. (Which in plain number, translates as 6% at 30C, 18% at 40C).

    Not all steps coded so far, but verified separately and the sustained temperature appears to be in limits of DS1820 hardware resolution, which is not bad.
  • Too_Many_ToolsToo_Many_Tools Posts: 765
    edited 2014-02-03 19:23
    pmrobert wrote: »
    Thermal equipment of that vintage is quite likely to have asbestos insulation. It's not a problem unless it becomes airborne. Be careful, asbestosis and mesothelioma are really bad ways to exit this world and are slow, painful ways to die.

    Yeah I was thinking of that too.

    You might have a problem on your hands asbestoes wise.

    A couple of weeks ago I had the chance to buy a mint condition environmnetal cabinet (telephone booth size..remember those?)
    ...I walked...because I knew it had asbestos in it.
  • CuriousOneCuriousOne Posts: 931
    edited 2014-02-04 11:47
    Further advanced the code, but can't write a code for the following scenario:

    monitor the temperature, and when it starts to drop and drops by specific amount or below it, do something.

    My code looks like this:
    COMPARER:
    GOSUB READTEMP 'Returns measured temperature as NEW variable
    IF OLD>NEW THEN GOTO MAINTAIN
    PAUSE 1
    OLD=NEW
    GOTO COMPARER
    

    The problem is that OLD>NEW might be not always true, since there's certain jitter in measurement, so I want to check at least 10 times, before doing something. So how should I? add some variable, which increases by 1 each time when condition occurs, and after that variable reaches 10, do next task?
  • GenetixGenetix Posts: 1,754
    edited 2014-02-04 14:13
    Are you using Hysteresis?

    Industrial Control and Process Control both use the BASIC Stamp for temperature control.
    Commercial temperature control modules use PID and Fuzzy Logic but they are not cheap.

    Considering how old your unit is who knows what condition it's in. Measure how quickly the temperature drops after the heater is turned off. You could be lucky if you can get within 5 or 10 degrees of your target temperature.
  • Heater.Heater. Posts: 21,230
    edited 2014-02-04 14:22
    Genetix,
    Considering how old your unit is who knows what condition it's in.
    I'm guessing the box and the heater element and the thermal insulation are probably about as good as they were in 1958.
    What do you imagine would change so much there?
    You could be lucky if you can get within 5 or 10 degrees of your target temperature.
    Nonsense. With no control at all I could get you within that range manually. The oven in my kitchen does better than that with a "bang bang" thermostat.

    Both PID and FUZZY control are cheap if you have a Propeller and the time, skill and patients to program it. That is what a hobby project is for.
  • kwinnkwinn Posts: 8,697
    edited 2014-02-04 16:50
    You could always write a program that "learns" the settings it needs to get to and maintain a specific temperature. Once it has learned a specific set point it stores the parameters in eeprom. This is a small table for the temperature range you mentioned even if you use .5 degree steps.

    I am assuming that you will be using a prop with a 64K eeprom (or something similar) and that the unit will be used in a heated space where the temperature only varies by a few degrees. If not there are ways to compensate for ambient temperature fluctuations.
  • mklrobomklrobo Posts: 420
    edited 2014-02-04 17:46
    :cool:
    Sounds like a lot of variables that need to be addressed. I would analyze the chamber, as if it were a reactor. I would recommend
    getting the book, "Perry' Handbook of Chemical Engineerng", to begin to analyze the chamber. Possible cooling and heating could
    help reduce the cooling oscillations. Use the stamp as a way to control the energy to the heater via phase control. Pielter cells could
    produce cooling. Just my thoughts.:smile: Good luck!
  • SteveWoodroughSteveWoodrough Posts: 190
    edited 2014-02-04 19:26
    For what its worth, attached is a “program” that uses several common objects from a few “good cowboys”, JonnyMac, Beau Schwabe, and ElectricAye. The program was to emulate a Sous-vide cooker through PID control of a household crock pot. Components included a DS18B20 temp sensor and a Sharp S202S02 to control the AC current. Initially I used pots through an ADC to create the PID gains, but eventually I just manually entered them via BT and an old Android phone. The time constant for a crock pot is pretty long so I could get away with mostly P and D control and ignore the I gain, keeping the temperature to within a degree or so.

    Regards,
    Steve
  • CuriousOneCuriousOne Posts: 931
    edited 2014-02-04 21:16
    The PID might be good, but looking at formulas, I can't "see" the corresponding BS code, so I went my way:

    1. Heat heater to defined temperature, which is 28.5C for 30C of user input, and 39.3C for 40C user input. These values are predefined for each 1C of user input.

    2. After that temperature is reached, turn off heater and monitor the temperature, which will continue to grow.

    3. At the moment, when temperature rise stops and starts to drop, turn on heater with specific low power, until the temperature reaches user input.

    So far, this is doing quite fine, and I have achieved sustained temperature within resolution range of DS1820 (I had to refuse from LM71 for some reasons).

    The main problem is as told above, code is quite large and not "clean", since I'm using workarounds for situations, where I believe, simpler solution is possible.
  • CuriousOneCuriousOne Posts: 931
    edited 2014-02-07 21:47
    ailaiki.jpg


    I was able to find the user manual, as well as schematics for the original design. The specs are as follows:

    Range of sustainable temperatures: 28-55C.
    Temperature maintain precision: +- 0.25C
    Time to establish desired temperature: 8 Hours !

    For my modification, final algorithm looks like this:

    1. Pre heat to temperature defined by user - 2C.
    2. Turn off heater and allow temperature to rise. Measure the rise time.
    3. when temperature starts to drop, start to memorize the time it takes to reach the temperature when heater was on.
    4. Based on values recorded in #2&3, cycle the heater in small portions.

    I'm using DS1820 as temperature monitor, and it seems that I'm maintaining temperature at constant value, withing it's resolution range of 0.06C.
    912 x 684 - 87K
  • potatoheadpotatohead Posts: 10,261
    edited 2014-02-07 22:20
    Time to establish desired temperature: 8 Hours !
    Indeed! :)

    You've got a nice, simple feedback loop going in your 4 steps. Nicely done, clean too. What is your time to stable temp?
  • CuriousOneCuriousOne Posts: 931
    edited 2014-02-07 22:43
    It depends on target temperature, and for 55C, it takes around hour and 20 minutes.
  • potatoheadpotatohead Posts: 10,261
    edited 2014-02-08 01:00
    Overall it seems you've reached a nice improvement over the old control system then.
  • CuriousOneCuriousOne Posts: 931
    edited 2014-02-08 05:36
    Yes. The trickiest part was to fit the code into 2kb space - had to use RTC for time measurement as well as other optimisations.
Sign In or Register to comment.