Thermal control MOSFET Mk II

In continuation of our work on TEMPERATURE MONITORING FOR TUBE CURING CYCLE we needed to get back to Richard to help us out. That however ended up in quite a major overhaul where I’ll cite Richard “I needed to throw it away and built it from scratch”.

New connection plan

Discussing it with Richard, apparently we plugged the original model in a wrong direction, which caused overheating, which lead to a damage to some electronic parts. At the picture above you can see Richard’s instructions in a way to make our next attempt bullet-prrof.

Still, to avoid any potential overheating problems, Richard replaced original IRFP90N20DPBF – MOSFET N-CH 200V 94A TO247AC with IRFP4668PBFF – MOSFET N-CH 200V 130A TO247AC.

To get little bit in a detail on that – that original MOSFET came with resistance 8 milliohms, while the new one has 23 milliohms. This translates to 3W radiated at 20A for the first one (we have three MOSFETS connected in parallel), which is greatly reduced to 1W in our new setup.

Huge thanks to Richard for preparing this for us!!

Richard and his MOSFET current regulator

We’ve been rushing home to plug it in. while Richard’s instructions were to test it with our Power supply unit first.

Test 1/ There should be minimum resistance when in “open” state – tick. Showing 3 milliohms actually very much correlates with expected value (7.6 milliohms). As per comment from Adam in our previous post – these multimeters are not that accurate when getting to very low values.

Test 2/ Maximum resistance when in “closed” state – here we’ve been getting range of very high values, starting with multiples of hundred ohms and going all the way up to out-of-limit. Richard said that we should be seeing just “out-of-limits”, but well, I assume this should be ok.

Test 3/ Heat generated on those MOSFETS. Running a load of 1A and 12V through these – we couldn’t observe any temperature increase at all. Seriously cool stuff Richard!

Next stage was to hook this up to our heater and Arduino wit temperature probe.

This was the moment where we hit the wall! Apparently our coil-heater creates an electromagnetic field which interferes with our temperature probe and kills its signal.

Electromagnetic induction in action

Seeing this – it pretty much ruined my day. First idea was to replace our thermal probe with an infrared sensor, but that would clearly delay our plan to move on with this thing. I texted Richard and Chris about this and surprisingly Chris came with an awesome (and obvious) solution to this – just measure temperature only when not running current through the coil! So easy and so cool! Thank you Chris.

It took Seb minute to update Arduino code to do the job. Pasting it below without much details as it is pretty much self-explanatory.

#include "max6675.h"

const int dPin = 2;

int thermoDO = 4;
int thermoCS = 5;
int thermoCLK = 6;

MAX6675 thermocouple(thermoCLK, thermoCS, thermoDO);

float realTemp;
float inputTemp;

void setup() {
  Serial.begin(9600);
  pinMode(dPin, OUTPUT);
  pinMode(12, OUTPUT);
  digitalWrite(dPin, LOW);
  digitalWrite(12, LOW);
  // wait for MAX chip to stabilize
  delay(500);
  realTemp = thermocouple.readCelsius();

}

const int low = 0;
const int high = 5;

const int range = 5;

void loop() {
  static int onTime = 0;

  inputTemp = mapfloat(analogRead(A0), 0, 900, 20, 150);

  onTime = map(inputTemp - realTemp, -1, range, low, high);
  Serial.print("Top: 70, Bottom: 20, ");
  Serial.print("RealTemp: ");
  Serial.print(realTemp);
  Serial.print(", ");
  Serial.print("InputTemp: ");
  Serial.println(inputTemp);

  if (onTime <= 0) {
    delay(200*high);
    realTemp = thermocouple.readCelsius();
    return;
  }

  if (onTime >= 5)
    onTime = 5;

  digitalWrite(dPin, HIGH);
  delay(100*onTime);
  digitalWrite(dPin, LOW);
  delay(100*(high-onTime));
  digitalWrite(dPin, LOW);
  delay(50*high);  
  realTemp = thermocouple.readCelsius();
  delay(50*high);
}

float mapfloat(long x, long in_min, long in_max, long out_min, long out_max) {
  return (float)(x - in_min) * (out_max - out_min) / (float)(in_max - in_min) + out_min;
}

We still had to go through few obstacles, but initial testing worked out satisfactory and while initially overshooting temperature with 3C it seems to be behaving very well. Following graph comes from Arduino plotter and shows how our contraption has been able to heat up to predefined temperature and then sustain it.

This will probably still need some thinking (no idea why that temperature is above the target line), but is is already something we should be able to work with.

Another tiny experiment also demonstrated that that temperature level is quite easy to sustain, so probably wrapping our tube in an thermal insulation will assist us to distribute all that heat evenly and very little energy will be needed to sustain it.

We are almost there guys! Thank you all for your support and adding a tiny TODO list with what to expect next weekend:

  • Getting the high-temperature Epoxy Resin (should arrive Friday)
  • Polish our aluminium tube to support the demolding process
  • Dry test and as we should finally have all components ready -Wet test!!!

2 thoughts on “Thermal control MOSFET Mk II

  1. Remember that heat makes things expand – so you’ll need to check which one (the resin or the aluminum) is going to expand the most, and be sure that’s on the inside, so when it shrinks back down after cooling, demolding will work.

    1. Hi Chris, I actually count on that! We already tested that our aluminium tube will expand ~500 microns while heated from 30 to 150C. Theory is that this will push against our resin-covered carbon-fiber against the outer-layer tape and will supplement pressure needed to squeeze out all excess air and resin. When cooling down it should shrink enough to allow demolding … there is another post coming on a whole process to have it covered on a paper before we’ll give it a go. 😉

Leave a Reply to Jan BilekCancel reply