Gas station without pumps

2014 September 15

Controlling the heater and fan

Here is the circuit for the heater and fan that I’ve been developing for incubator project for the freshman design course:

    Here is the circuit I've been using for playing with control loops. (The 74HC14N Schmitt trigger inverter does not have an enable input, but SchemeIt has a very limited and idiosyncratic set of schematic symbols, so I used the closest one.)

Here is the circuit I’ve been using for playing with control loops. (The 74HC14N Schmitt trigger inverter does not have an enable input, but SchemeIt has a very limited and idiosyncratic set of schematic symbols, so I used the closest one.)

Yesterday and this morning, when I was developing the controller software for the fan and resistive heater, I ran into a lot of problems with overshoot when changing the setpoints. For the fan controller I wrote One thing that helped was not accumulating integral error when the PWM signal was pinned at the lowest or highest values.”  I also switched to using RPM rather than pulse duration as the measured variable, because RPM is nearly linear with the PWM input (RPM approximately 24.1 PWM + 878). Another thing “that helped was to make a guess at the target PWM setting when the setpoint was changed (using d RPM/ d PWM =24 and the current PWM setting and RPM value), then setting the cumulative error to what it would be in steady state at that PWM. I then set the PWM to five times as far from current PWM as the target PWM to make the transition as fast as possible without increasing overshoot, making sure to clip to the legal 0..255 range.”  Because I have a reasonable model for RPM as a function of PWM, it was easy to estimate what the target PWM should be so that the cumulative error from the integrator would set the PWM value correctly once the error dropped enough that the desired PWM value was no longer pinned at the limits.

Today I decided to do a little reading to find out what other people have done about the problem of the controller overshooting when the actuator hits its limits.  It turns out that the phenomenon is know as “integrator windup“, and the two solutions I came up with are standard solutions.  Turning off the error accumulation when the actuator is at its limit and more movement in that direction is desired is known as “conditional integration” and guessing the correct setting for the cumulative error on setpoint change is a form of “back calculation”.  There are more sophisticated forms of back calculation that I might want to try implementing.  (I found a better explanation of the anti-windup scheme, which I might base my next implementation on—basically it gradually reduces the cumulative error to 0 as long as the desired setting for the actuator is past its limits.)

The temperature controller has been harder for me to tune, for several reasons:

  • The response time is very long.  Instead of oscillating around 5Hz, the period seems to be more like 90 seconds.  This means that it takes a long time to see whether an adjustment to the parameters makes a difference.
  • The temperature at the thermistor is dependent on the temperature at the resistor.  The thermal mass and thermal resistance act like an RC circuit (with temperature analogous to voltage, and power dissipated analogous to current).  Adjusting the power to the resistor via PWM changes the rate at which the temperature increases.  It also changes the eventual equilibrium temperature, but the PWM control is more directly of the rate of temperature change.
  • The heatsink and resistor continue to warm the air and the measuring thermistor even after all power to the resistor is cut off, so there is a big danger of overshoot whenever the setpoint temperature is increased.
  • The control is asymmetric—dumping 40W of power into the resistor heats it up fairly fast, but heat is only slowly dissipated when power is turned off.  Running the fan fast helps a little here, slowing down the temperature rise and speeding up the cool down, but once I put the whole thing in a closed box, it will be very difficult to cool things off if the box gets too warm.  This makes overshoot in the positive direction  a serious problem.
  • The temperature measurements are only about 0.1°C resolution, and the noise on the ADC is about ±4LSB, so it will be difficult to get tight temperature control, even with a perfectly tuned controller.
  • I don’t have a simple model of what the steady-state thermistor temperature will be given the PWM input, so I’ve had difficulty coming up with a guess about the eventual PWM value for resetting the cumulative error on a setpoint change.  I have a model for the resistor temperature in still air, but the fan makes a huge difference, both in the thermal resistance (and so both the equilibrium temperature and time constant of the resistor heating) and in the coupling between the resistor and the thermistor.

I still have a lot of things left over from a couple of days ago, and I’ve added some new things to the list.

  • Put the whole thing into a styrofoam box, to see whether extra venting is needed to allow things to cool down, and to see how tightly temperature can be controlled. I’ve put stuff in the box, but I can’t close the box with the stuff sticking out, so it doesn’t really count.
  • Design and build baffling for the fan to get better airflow in the box. I’ve made a little paper and wire baffle, to get better air flow over the resistor, but I’ve not done the full baffling to get good airflow in the box.
  • Figure out how to get students to come up with workable designs, when they are starting from knowing nothing. I don’t want to give them my designs, but I want to help them find doable subproblems.  Some of the subproblems they come up with may be well beyond the skills that they can pick up in the time frame of the course. The more I work on this project, the more I realize that I and the students will have to be happy with them having explored the options, without getting all the problems solved.
  • Find a smaller bread board or prototype board to put the controller on—my current bread boards are all 6.5″ long, and the box only has room for 6″, especially since I put the resistor in the center of the 6″×12″ aluminum plate, which just fits the box.  I suppose I could drill a couple more holes in the plate and mount the resistor off center, but I rather like the idea of building the controller as an Arduino shield, so that the Arduino + controller is a single unit.
  • Another possibility is to drill a hole in the styrofoam box and run cables through the box for the resistive heater, the fan, and the thermistor.  Even if the grounds are connected outside the box, this is only 8 wires. Putting the control electronics outside the box would reduce the clutter in the box and make tweaking easier.
  • Add some low-pass filtering to the temperature measurement to reduce noise.  Just adding 4 measurements in quick succession would reduce the noise and give the illusion of extra precision.
  • The fan controller occasionally has a little glitch where the tachometer either misses a pulse or provides an extra one (I think mainly an extra one due to ringing on the opposite edge).  I could try reducing this problem in three ways: 1) changing which edge I’m triggering on, 2) using more low-pass filtering before the Schmitt trigger in the edge detector, or 3) using median filtering to throw out any half-length or double-length pulses, unless they occur as a pair.  (Hmm, the half-length pulses would occur as a pair, so this might not help unless I go to median of 5, which would be a lot of trouble.)
  • Improve my modeling of the thermal system, so that I can do more reasonable back calculation on setpoint change.
  • Consider using a PID controller for the temperature to get faster response without overshoot.  (If I can reduce the noise problem.)
  • Improve my anti-windup methods for both thermal and fan controllers, to reduce overshoot.

2014 September 14

PWM heater and fan continued

Filed under: freshman design seminar — gasstationwithoutpumps @ 22:29
Tags: , , , , , ,

Yesterday I gave myself the following to-do list:

  • Check the VDS voltage at 4A on the nFET. Is the on-resistance still much too high?

    Yes, with the 1.8Ω resistor I get 110mV across the FET with 8.372V across the resistor, so at 4.65A I’m seeing an on-resistance of 24mΩ, still much higher than the 10mΩ I was expecting, but closer than I was getting yesterday at 1A. The voltage across the nFET does go up as the nFET warms up, but the nFET does not get too hot (up to around 45°C).

  • Try adding a 1kΩ gate resistance to slow down the transitions on the PWM, to see if that reduces the inductive spikes and the noise-coupling through the 9V power supply.

    Slowing the transitions definitely reduced the spikes, from about 13V to about 1V.  The bypass capacitors absorbed the highest-frequency spikes, and the 470µF polymer electrolytic capacitor seems to be enough—the 10µF ceramic doesn’t seem to add any extra suppression.  At about 94% duty cycle the noise on the power supply is about the following:

    gate resistor bypass capacitor peak-to-peak noise
     0Ω  none  20V
     1kΩ  none  3V
     0Ω  10µF  2.5V
     1kΩ  10µF  2.5V
     0Ω  470µF  1V
     1kΩ  470µF  0.3V

    The slew rate for the drain voltage with the 1kΩ gate resistor is about +7V/µs and -5V/µs.

  • Write a simple control loop for the fan speed, so that the fan speed can be held constant even when the power-supply voltage changes.  This may be an opportunity to try the P/PI/PID tuning, since the control loop should be fairly fast.

    I wrote a simple PID controller with the control variable being the fan PWM and the measured variable being the time per pulse (in µsec).  I tried tuning the controller by adjusting the proportional gain until the control loop barely oscillated, then cutting the gain to 0.45 of that and setting the integration time to about period of the oscillation (very loosely estimated).  I then tweaked the parameters until it seemed to give good control without oscillation over the full range of fan speeds.I tried the differential control, but the noisiness of the speed measurement (which I was not filtering at all) makes the derivative far too touchy, even with tiny amounts of differential control, so I used a simple PI controller instead.  I don’t think that the optimal parameters are the same at the high speed and low speed for the fan, but it was not difficult to find parameters that worked fairly well across the range.  One thing that help was not accumulating integral error when the PWM signal was pinned at the lowest or highest values.

    The speed is almost linear with the PWM input, so I would probably get better control if I used speed (the reciprocal of the pulse duration) as the measured value in the controller.

    The fan speed is nearly linear with PWM, which is ideal for proportional control.  But I had foolishly used the pulse duration as my measured value to control.

    The fan speed is nearly linear with PWM, which is ideal for proportional control, but I had foolishly used the pulse duration as my measured value to control.

    I rewrote the controller as a simple PI controller, using 16*RPM as my measured variable, so that I could have an integer setpoint with sufficient resolution. I’m still using floating-point in the controller for simplicity of coding but I plan to switch to fixed-point soon. This controller was fairly easy to tune—I made the Kplarge enough that system oscillated, and counted how many samples were in the period, then set the integration time to about the period. I then reduced Kp until the oscillations went away. I ended up with Kp = 0.01 PWM/16RPM and TI= 1/0.15 samples (with a sampling rate of 30ms, so TI=0.2s).

    One thing that helped was to make a guess at the target PWM setting when the setpoint was changed (using d RPM/ d PWM =24 and the current PWM setting and RPM value), then setting the cumulative error to what it would be in steady state at that PWM. I then set the PWM to five times as far from current PWM as the target PWM to make the transition as fast as possible without increasing overshoot, making sure to clip to the legal 0..255 range.

  • Write a simple control loop for controlling the temperature at the thermistor, by adjusting the PWM for the resistor.  This might get messy, as the fan speed probably affects the rate of transfer from the resistor to the thermistor (the thermistor is in the air stream blown over the resistor, not touching the resistor).

    When I started working on this, my power supply failed. I’m afraid it might have shorted when I was rewiring things (though I never saw evidence for a short). I’ll leave it overnight (in case there is a resettable poly fuse) and check it in the morning. If there is still no power, I’ll open the case and see if there is a replaceable fuse inside. I’m afraid that this may have a soldered-in non-resettable fuse, which would be a terrible design—setting me back a couple of weeks as I either order a replacement fuse or a replacement power supply.

    Correction: the power supply was fine—I’d managed to blow a circuit breaker for the room. I’m not sure how I did that, but resetting the circuit breaker fixed the problem. I now have a temperature control sort of working—I still have to tune the control loop, but I was able to get the thermistor to about 30°C (400 as the Arduino reading) and hold it to within about 0.3°C. There was a pretty substantial overshoot at the beginning, which I’ll have to look into controlling—the temperature controller may need to be critically damped. Now it really is time for me to get some sleep.

  • Put the whole thing into a styrofoam box, to see whether extra venting is needed to allow things to cool down, and to see how tightly temperature can be controlled.
  • Design and build baffling for the fan to get better airflow in the box.
  • Figure out how to get students to come up with workable designs, when they are starting from knowing nothing. I don’t want to give them my designs, but I want to help them find doable subproblems.  Some of the subproblems they come up with may be well beyond the skills that they can pick up in the time frame of the course.

PWM heater and fan

Filed under: freshman design seminar — gasstationwithoutpumps @ 00:18
Tags: , , , , , , , ,

Now that I have a power resistor and heatsink, and have verified that my power supply is capable of delivering 50W, I can try making a thermal control system for an incubator box as I hope to get the freshman design class to do.

Before building a complete control system and tuning a proportional, PI, or PID controller, I decided to check each of the components:

  • 1.8Ω resistor and heatsink (already characterized in still air in the previous post). Initially I was going to use the 8.2Ω resistor, but it heated so slowly once bolted to the heatsink that I wasn’t sure that students would have the patience to wait for it—they might conclude that things weren’t working.
  • NTD4858N-35G nFET for PWM control of the heater.
  • fan.  I bought a SanAce 40 109P0412P3H013 fan with PWM control and tachometer feedback, and I wanted to be sure that I could control the fan speed and read the tachometer.
  • thermistor. I had some NTCLE100E3103JB0 thermistors around that I had never used.  They’re not ideal for measuring temperature of resistors (they only go up to 125°C), but they should be find for measuring air temperature around 35°C, which is what the incubator will mainly be used at.
  • Arduino board (actually a SparkFun RedBoard, which is plug-compatible with the Uno R3, but has has a more reliable USB interface and is slightly cheaper.

I started out hooking up the nFET and the 1.8Ω resistor and making sure that the nFET did not get too hot.  It seems to be ok.  When I was using the 8.2Ω resistor, I measured the voltage drop across the resistor and the across the nFET, getting a 57.6mV drop from drain to source, with a current of about 9.024V/8.21ohm = 1.099A.  That’s about a 52mΩ on-resistance, and I was expecting more like 7mΩ–10mΩ.  My gate voltage was around 5V (bigger than the 4.5V of the data sheet), which should have given me lower on-resistance.  The only things I can think of are that I had more wiring resistance than I realized (quite likely, but not likely enough to add over 40mΩ), and that I was measuring around 1A, not around 10A, so perhaps there is a small-voltage effect that I don’t know about.

I should probably test the voltage drop again with 1.8Ω resistor, and see whether the on-resistance is still so high.  Better probe placement may get me more accurate voltage measurements also.

The fan runs fine at 9.212V at about 6850 RPM.  Setting the PWM input line of the fan to 0 drops the speed to about 710RPM, and setting the PWM duty cycle to a half sets the speed at about 4120RPM.  The fan is a bit noisy for such a tiny fan at the highest speed setting, but reasonably quiet at lower speeds.  I suspect that bolting the fan to a piece of masonite as a baffle would reduce the fan noise, as I think quite a bit of it was from vibration between the case of the fan and the metal plate it was sitting on.

The tachometer on the fan provides an open-collector output that I read with an interrupt input on the Arduino (pin 2, interrupt 0). I recorded the time between interrupts and converted it an RPM measurement.  The tachometer worked fine when I was just using the fan, or when the resistor was either completely off or completely on, but when I tried using PWM on the resistor, the tachometer readings became nonsense.

I looked at the tachometer signal with my oscilloscope and saw that the PWM transitions for the resistor resulted in huge spikes in the tachometer output that triggered extraneous interrupts.  I suspected noise coupled through the power supply. Adding a 10µF bypass capacitor to the 9V power supply to the fan reduced the problem considerably, and a 470µF aluminum polymer electrolytic cleaned up the power supply even more.  The 10µF alone was enough to eliminate the extraneous spikes in the middle.

I think that I should try adding some gate resistance to the nFET to slow down the rise and fall of the PWM signal a little, to reduce the inductive spikes and make the bypass capacitors more effective.

I noticed that I was still getting some readings that were half the duration that I was expecting.  These could have been caused by ringing at the other transition of the tachometer pulse, so I tried eliminating the ringing by adding some capacitance to the line and changing the pullup resistor.  These attempts were not very successful, so I decided that hysteresis was needed.  I put a Schmitt trigger between the open-collector output and the Arduino interrupt input, and the signal got a lot cleaner.  There were occasional double pulses at one edge, though, but I found that adding a 1nF to 10nF capacitor in parallel with the pullup resistor for the open collector output smoothed out the high frequency noise enough to get clean, single transitions out of the Schmitt trigger.

I hooked up the thermistor in a voltage divider with 5.1kΩ on the other leg (which maximizes the dV/dT sensitivity at 40.1°C). I used the parameters on the data sheet to plot a calibration curve for the thermistor:

Calibration and sensitivity curves for the thermistor.

Calibration and sensitivity curves for the thermistor, based on the data sheet and a 5.1kΩ pulldown resistor.

The maximum sensitivity of the thermistor circuit is around 33.3 degrees C (~10.4 Arduino LSB/°C).  That’s not a very high sensitivity, particularly given the noise of the ADC.  Note that maximizing the slope at 40.1 °C is not the same thing and having the maximum of the slope at 40.1°C.  If the maximum of the slope was at 40.1°C, the slope there would be less than it is in this plot.

My son wonders why I’m using the Arduino board for this project, rather than the FRDM-KL25Z board that I use for the circuits class or the Teensy 3.1 ARM development board. The ARM processors have more power, more memory, and much better analog-to-digital converters—and the KL25Z board is cheaper.  If I were doing this project for myself, I would certainly prefer the KL25Z board. But it is a little harder to get a beginner started on that board—just getting the first program onto the board is a pain if you don’t have a Windows machine (due to the broken bootloader the P&E Micro wrote).  There are instructions now for replacing the firmware from a Linux system, but I’ve not checked yet whether these instructions work from a Mac.  Even once you get working firmware onto the boards, the development environments are not beginner-friendly.  Well, that is certainly true of the MBED environment or bare-metal ARM environment for the KL25Z boards, but the Teensy 3.1 board supposedly can be programmed from a plugin for the Arduino IDE, which might be simple enough for beginners.  This is something for me to look into more.

Of course, one reason I’m using the Arduino Uno or Sparkfun RedBoard is that they are 5V processors, and most of the power nFETs I’ve looked at need 4.5V on the gate to turn on fully.  There are power nFETs now with lower gate voltages, but most of them are only available as surface-mount devices.  I don’t want to have to add an extra transistor or buffer chip as a level changer for the PWM circuit.

The problem is that these students will be brand new to programming, brand new to electronics, and brand new to engineering—and the course is only a 2-unit course, not a full 5-unit course, so the total time students are expected to spend on the course is only 60 hours. I want them to be able to design stuff quickly, without spending all their time learning to use tools or trying to find workarounds for limitations of the devices they are using. It already bothers me that they’ll probably need to use a Schmitt trigger to clean up the tachometer input, but at least hysteresis was a topic I was planning to cover! (The need for bypass capacitors bothers me less—they are so ubiquitous in electronics that I’ll have to cover them no matter what.)

It’s after midnight now, so I’m going to call it a day.  Here is my to-do list on this project:

  • Check the VDS voltage at 4A on the nFET. Is the on-resistance still much too high?
  • Try adding a 1kΩ gate resistance to slow down the transitions on the PWM, to see if that reduces the inductive spikes and the noise-coupling through the 9V power supply.
  • Write a simple control loop for the fan speed, so that the fan speed can be held constant even when the power-supply voltage changes.  This may be an opportunity to try the P/PI/PID tuning, since the control loop should be fairly fast.
  • Write a simple control loop for controlling the temperature at the thermistor, by adjusting the PWM for the resistor.  This might get messy, as the fan speed probably affects the rate of transfer from the resistor to the thermistor (the thermistor is in the air stream blown over the resistor, not touching the resistor).
  • Put the whole thing into a styrofoam box, to see whether extra venting is needed to allow things to cool down, and to see how tightly temperature can be controlled.
  • Design and build baffling for the fan to get better airflow in the box.
  • Figure out how to get students to come up with workable designs, when they are starting from knowing nothing. I don’t want to give them my designs, but I want to help them find doable subproblems.  Some of the subproblems they come up with may be well beyond the skills that they can pick up in the time frame of the course.

 

2014 September 11

Thermal models for power resistor with heatsink

Last night I fit a simple thermal model to temperature measurements of some power resistors: T(t) = PD+A+(T_{0}-PD-A)e^{-t/(DM)}, where P is the power in watts, D is thermal resistance in °K/W, M is thermal mass in J/°K, A is the ambient temperature in °C, and T0 is the initial temperature.

I ran into problems with the 1.8Ω 50W THS501R8J resistor, because it heated up very fast and I could only get a few measurements when delivering power, before I had to turn it off.  I proposed adding a heatsink, a 6″×12″ sheet of aluminum 0.063″ thick, to increase the thermal mass M and decrease the thermal resistance D.  I estimated that the thermal mass should increase by the heat capacity of that much aluminum (74.33 cm3 at 2.422 J/°K/cm3, giving 180 J/°K), but I did not have a good way to estimate the change in thermal resistance.

The 6"×12" plate is much larger than the power resistor, which is bolted in the center with M3 screws (American 6-32 screws are a little too big for the holes in the resistor).

The 6″×12″ plate is much larger than the power resistor, which is bolted in the center with M3 screws (American 6-32 screws are a little too big for the holes in the resistor). I used a thin layer of white thermal grease to get better thermal conduction between the resistor case and the aluminum plate.

I do not expect the simple thermal model to work well, because it assumes that you have an isothermal object—all the aluminum at the same temperature.  But a large flat plate is going to have significant thermal spreading resistance, so that the resistor in the center is hotter than the edges of the plate.

With a heatsink the time constant DM is about 260s, only a little faster than the 347s without the heatsink, but the thermal resistance is much lower, so the maximum temperature (PD+A) is  much lower.

With a heatsink the time constant DM is about 260s, only a little faster than the 347s without the heatsink, but the thermal resistance is much lower, so the maximum temperature (PD+A) is much lower.

As expected, the fit is not great. When cooling off, the initial temperature of the resistor is higher than of the surrounding plate, so the initial cooling at the resistor is faster than the eventual cooling, when resistor and the plate are closer in temperature, because heat is being transferred to the plate as well as to the air. The increase in thermal mass  (about 100 J/°K) was less than my crude estimate based on the heat capacity of the added aluminum (180 J/°K)—this is probably also due to the thermal spreading resistance and the non-uniform temperature of the heatsink.

resistance rated power heatsink? test power M [J/°K] D [°K/W] DM [s] T [°C]
10.10Ω 100W No 8.288W 101.7 6.38 649 75.7
8.21Ω 50W No 10.169W 32 11.58 371 143.7
1.81Ω 50W No 43.174W 31.9 10.87 347 495.8
1.81Ω 50W Yes 43.174W 131.7 1.97 260 110.3

Note: the asymptotic temperature T in the table above is with the 9V power supply I have, which does not have quite constant voltage over the range of powers tested. With a 12v supply, temperatures would be much higher: D V^2/R +A .  The asymptotic temperature is also the maximum when the resistor is sitting in still air that is unconfined.  A fan would reduce thermal resistance and make the asymptotic temperature lower, but confining the resistor in a box (like in the incubator design) would make the “ambient” temperature not be constant—the relevant thermal resistance is how slowly the air in the box loses heat, which for the thick-walled styrofoam boxes we’ll use is a very high thermal resistance.  Without a feedback loop and PWM to keep the power down, even the 10Ω resistor would get very hot in a styrofoam box.

I should probably test the 10Ω 100W resistor on the heatsink also, to see if that reduces the time constant DM.  I expect the thermal mass to go up by something between 100 and 180 J/°K, but the thermal resistance to drop to around 1–1.5 °K/W, getting DM in the ballpark of 300s.  I don’t think I’ll do that today, though, as making measurements every 20 seconds for 2000 seconds is tedious and leads to cramping in the hand that aims the IR thermometer and keeps the trigger pulled.

Which raises a pedagogical question: Should I have students do the measurements?  Should I show them how to make a recording thermometer with a thermistor first? They’ll need to figure out how to use a thermistor for measuring air temperature anyway.

The thermistors I have at home (NTCLE100E3103JB0) only go up to 125°C, and I’d want them to have one that goes to at least 175°C for this lab, which means using something like NTCLG100E2103JB (10kΩ, ±5%, ±1.3% on B-value, -40°C to 200°C), which is only 35¢ in 10s, so still cheap. I should get myself some of these higher temperature thermistors and test out the recording . (Or the tighter tolerance NTCLE203E3103SB0, which only goes up to 150°C, or the wider temperature range 135-103LAF-J01, which goes to 300°C.)

How will I attach the thermistor to the resistor for temperature measurement? tape?  (I have to be sure not to short out the thermistor leads on the aluminum case of the resistor.)

Air temperature sensing poses less of a mounting challenge, but the thermal delays will be quite large—I have to look at how difficult it will be to tune a PID or PI controller with large delays—we really don’t want huge overshoot.  If the students have multiple temperature measurements (resistor temperature and air temperature, for example), they may need a more complicated control loop than a simple 1-variable PID controller.  How much can we simplify this?  (Perhaps a PI or PID controller based on the air temperature, with over-temperature shutdown on the resistor temperature?  Then tuning the PID controller with the constraint that the gain be kept low enough to keep the over-temperature shutdown from kicking in?)

2014 June 18

Temperature-control project for freshman design seminar

Filed under: freshman design seminar — gasstationwithoutpumps @ 15:22
Tags: , ,

Although I was planning to work on my book for the circuits class today, while in the shower I had a couple of thoughts about the freshman design seminar that I’d like to record before I forget them.

I need to develop some specific projects that students can work either as preliminaries to doing the main project or as the main project.  I want to incorporate some Arduino programming and electronics into the projects, but not too much.  Previously, I’d been thinking mainly about using LEDs and phototransistors to do a colorimeter, as it is possible to do the mechanical design fairly simply (using foamcore, for example, to build prototypes).  The biggest problem is that amplification is needed, and I don’t think I want to cover amplifiers in a 2-unit freshman course.

Today’s idea for a project was to do temperature regulation.  It is pretty easy to measure temperature with a thermistor, and I’ve already got a lab project for the circuits class that calibrates a thermistor and records temperature vs. time.  Turning a heater on and off (the simplest form of control) is also pretty easy to program, so the students should be able design a closed-loop system that keeps the temperature of something constant.  The biggest problem is what they should control the temperature of.  I was initially thinking of a small water bath (say a coffee cup with about 200ml of water) and was trying to work out how powerful a heater would be needed.

Since water has a heat capacity of about 4.18 J/(g ºC), heating 200ml by 1ºC requires about 836 J, and raising it 0.2ºC/sec requires 167W.  That’s a lot more power than a microcontroller can handle, and it is more than the bench power supplies in the lab can supply (5A@6V, 1A@25V, and 1A@–25V). The little immersion heaters for heating coffee in a cup run around 500W and could be controlled by a relay board, but I think that they are too dangerous to use in the lab (if they are powered without being immersed, they can fail spectacularly).  A 1-liter electric tea kettle runs about 1kW (about as much as the 10A relays on the cheap relay control boards can handle), but already includes some thermostatic control.  Do I want freshman playing with mains electricity, though?

Air is easier to heat, about 1J/(g ºC), and much lighter than water, about 1–1.3 kg/m3 or 1–1.3 g/l, so heating a liter of air only takes about 1–1.3 J/ºC and a 5W heater should be able to raise air temperature in a closed box by 4 ºC/s. A small cardboard box suitable for building a little temperature-controlled space has an interior volume around 6l and the biggest size cardboard box they’d likely want to work with would be about 44l. So a 10W heater in the little box would raise the temperature about 1 ºC/s and in the big box about 0.2 ºC/s. Those are reasonable rates to be working with.

I can get 10W resistors for under 50¢ each and 30W resistors for about $2.50, so the parts cost is low enough also. We could use relays or nFETs to control the resistors. The AOI518 nFETS that I used in the circuits class this year have only about an 8mΩ on-resistance under the conditions we’d be using them (2A–5A source current and 5V VGS).

Students could build up the project gradually, starting with a thermistor temperature measurement, adding a heater and on-off control, adding a 12v power supply, adding a circulation fan, maybe adding a servo-controlled vent, adding insulation, maybe adding proportional control instead of on-off control, … .

Construction, using bread boards, an Arduino, and cardboard boxes, is pretty simple and does not require any tools more sophisticated than an exacto knife.

The controlled-temperature box looks cheap enough and easy enough (as long as it only has to heat and not cool) to be a useful project for the freshman design course.

« Previous PageNext Page »

%d bloggers like this: