If you have watched a few of my other videos, you may know that I like building discrete circuits from time to time. I have gotten a few joke comments saying that I should take it a step further and build the transistors myself. Well, I thought that doing something like that would be a fun and challenging project. The process of making semiconductors is a very complicated process though, so we have to take it in steps and we will have to make many of our own tools. One tool that seems to be universal in semiconductor manufacturing is some sort of heating tool. That’s what we are doing today, making a furnace.
A furnace is useful for doing things such as growing oxide layers on silicon or driving dopants in through diffusion. I’ll explain these concepts more in future videos, but for now let’s focus on making this furnace. Furnaces come in all sorts of shapes and sizes, but we will be making a tube furnace. This is because tube furnaces are well suited for control of their atmosphere. Our tube will be made out of quartz glass, which is resistant to high temperatures. You can buy a tube furnace online, but I opted to make my own since the commercial options can be rather expensive.
Let’s start with a simple overview of how the furnace will work. First and most obviously, the furnace should be electrically powered since it is much easier to control compared to something like gas heating. Like I mentioned eariler, the heating chamber will be in the shape of a tube. This makes the project both easier and more challenging since the chamber is already well defined, but it can be a bit of an awkward shape to build around at times. In order to maintain efficiency, the furnace will also be well insulated. This way heat doesn’t escape and at the same time the outside doesn’t get too hot.
Also relating to heat, there should be a secondary shell separated by an air gap. This will further help with heat retention and reducing the external temperature. Finally, we will need some sort of control circuitry. We will have a microcontroller running a PWM signal to adjust the electric heating element. To ensure that the temperature is accurate, we will close a feedback loop with a thermocouple. The maximum temperature that I am aiming for is 1000C. Now that we have the basic ideas out of the way, let me describe the details of the construction to you.
One more thing before you decide to build this on your own. I made use of galvanized steel in the construction of this project. I didn’t realize that this would be a problem beforehand. So I am giving a disclaimer to either use a different material or follow along at your own risk since heating galvanized steel at high temperatures gives off zinc fumes. Anyway, back to the project.
First things first, let me show you the tube we will be using. It is made of quartz glass and has a 50mm outer diameter. It is 700mm long as well. You can buy one of these on aliexpress. To match the circular nature of the tube, I figured that I could make the shell out of air duct. This is what I meant by the disclaimer since the air duct that I purchased was made of galvanzied steel. For the inner shell, I used 6inch diameter air duct and purchased two of these 6inch vent caps to go along with it. All air duct, air duct caps, and sheet metal was purchased from Home Depot.
To make a hole for the tube to fit through, I marked the center of each cap. I then used a 2inch hole saw to make a hole. 2inches is slightly larger than 50mm, so this works. This was difficult to cut through since the saw kept getting too hot. You can tell when it’s too hot if you see smoke. To solve this problem I simply squirted some water into the cut every few seconds. The first cap turned out fantastic. The second cap was a but rough, so I used a file to smooth out some of the rough edges. A dry fit shows that the tube has no problem fitting through these holes.
I want to now talk about one of the improvements I’ve made on my design. In other tube furnace designs, the heating wire is wrapped around the tube and held in place with adhesive. This is a good solution and is the quickest way to make the furnace. I wanted the tube to be replacable though, which means that the heating element should not be physically in contact with the tube.
My solution was as follows. I made a system of six quartz glass rods that would circle the tube. The heating element would then by mounted to those instead. This way, the tube was still close to the heating element, but was also able to be easily pulled out and replaced. I’ll explain more about the heating element later, but let’s focus on mounting the rods into place first.
I purchased these rods from mcmaster-carr. They are 12inches long with a 6mm diameter. I drilled holes in the vent caps symmetrically around the tube hole for the rods to fit. I recommend marking your holes before drilling by using a hammer and nail to make a small indent.
To actually hold the rods in place, I decided to use some sheet metal as a sort of stopper. Basically, it will stick out slightly further than the vent cap. The distance between the cap and the stopper was determined by a nut. The stopper will also have a hole for the tube to fit through. To make this work, I took my sheet metal and used a hack saw to cut it into a suitably sized rectangle. I then drilled two mounting holes into the stopper and the air duct. I also drilled out the tube furnace hole using the same techinque that I used for the vent caps.
Now, the rods do fit into place, but the whole thing falls apart when I let go. To fix this, I took some aluminum bar and cut it into the length that kept the rods in place. I drilled mounting holes through the bar and the vent caps. I repeated this process for a second bar on the other side of the furnace. To replace or insert the glass rods, all that is needed is to remove the stopper, slide the rods in, and then put the stopper back in.
Let’s now talk about the heating element. Many people opt to use nichrome wire for this purpose. I instead went with Kanthal A-1 wire. Now I tested out two mounting methods when building the furnace, but I was only satified with the second one. To explain why, let me first show you how I did it the first time. I took 24 gauge kanthal wire and estimated that I needed 1875mm of total length. I estimated this by first getting the resistance per mm of wire, which I measured to be about 10.6mOhms per mm. I was aiming for 20 ohms, which would equate to 6amps on a 120V circuit. You should aim for a higher current, but this was my first time working through this. You will see later on a good resistance value you should aim for.
Either way, I wrapped the wire around the rods. I don’t like this method since you really kind of have to use some sort of adhesive to keep it in place. Not to mention the big gaps in between the strands of wire. Regardless, I used less wire than I originally inteneded and got a 16 ohm resistance, which is suitable. I really was just making sure that I wouldn’t trip my 15 amp breaker when running the furnace. To hold everything in place, I used a high temperature sealant. Again, I don’t recommend this method, so I won’t explain it too much. I also had to to wait a couple of days for the sealant to cure.
While waiting for that to finish, I made a PCB to control everything. To make the my PCB design reality, I used JLCPCB, the sponsor of today’s video. JLCPCB is a fantastic first choice for any PCB project. Simply drag and drop your PCB gerber files to instantly get a quote for your project. I was also able to get a matching stencil with my PCB to make the SMD soldering just a bit easier. After ordering, you will quickly receive your PCBs. I have to say that they are high quality with an affordable price. JLCPCB also offers PCB assembly, SMT stencils, 3D-Printing, CNC machining, and mechatronic parts. Visit JLCPCB now for a $30 coupon for a six-layer board. That means you can get a 6-layer board starting at just $5.
To solder it, I aligned and taped down the stencil and spread solder paste over the PCB. I then placed the SMD components and melted the solder into place with a hot plate. The through hole components were soldered after with a soldering iron. As a quick test of the hardware, I used a lighter to make sure that the thermocouple temperature rose accordingly, and it did. I did have to make a correction to the circuit, but I will talk more about the electronics later in the video.
Anyway, let’s return since the sealant has been sitting for a couple of days. To make the airduct fit, I compared it to the current construction and marked the endpoint with a sharpie. I then cut it to length with a hacksaw. The test fit shows that the current setup will work. I drilled some mounting holes into the duct. These holes will allow me to mount a secondary outer shell later on. I placed some screws held in place with nuts for this purpose.
Now let’s talk about the insulation. I used this ceramic fiber that I purchased on amazon. Before working with this, make sure to wear a dust mask since disturbing the blanket causes tiny particles to go into the air and you probably don’t want to breath those in. You are able to cut this blanket with scissors, but be aware that any scissors you use will be very dull after cutting.
After stuffing the ceramic blanket into the furnace, I closed it up by placing the duct around everyting. I then clamped down the duct using these duct clamps to make everything more secure. Since this works, I reopened the furnace and took some of this glass fiber wire. This wire’s insulation can withstand some really high temperatures, which is perfect since we don’t want electrical contact with the furnace shell. You can simply twist the wire together with the heating wire since solder would melt at these temperatures. Also make sure to drill some through holes in the air duct to allow for the insulated wire to come out.
Now let’s get back to the secondary outer shell. For this, I used a larger 8in air duct and cut it to a length a couple of inches longer than the inner shell. I also drilled mounting holes to align with the inner shell and some holes to allow for the insulated wire to completly exit the furnace. To maintain good spacing, I put some of these coupling nuts on the screws. Attaching the outer shell isn’t the easiest thing since you kind of have to strech and twist the duct a bit until everything aligns. But once it does, it keeps it’s shape well.
We should now make a mount since we wouldn’t want this furnace rolling away. I started with a base of this scrap wood. I cut it a bit shorter with a saw since it was a bit long. In the board, I drilled holes for the PCB, the SSR, and the furnace itself. To attach the furnace to the board, I took some more aluminum bar and made legs. The legs were then attach to 90 degree aluminum bar that was then attached to the board. In the legs, I drilled holes for a power switch and a power socket. I also want to emphasize that you should connect the power switch’s ground to the furnace shell. The power socket should also use a fuse, which this one has built-in.
Before we turn it on, let me show you just how satisfying it is to simply slide the tube into place. Anyway, we can do a first test. I setup a thermocouple on one of these stand things. The thermocouple is a special high temperature k-type thermocouple that you are able to purchase from McMaster-Carr. Mine is two feet long since my tube is also rather long.
During the test, I was simultaneously trying to reach 1000C and tweaking the PID loop inside of the micrcontroller. I will explain the code and electronics later, but for now, I was only able to reach 880C until something happened inside of the furnace. All I saw was a bright flash and then the heating stopped. After taking everything apart, I noticed two things. First, the heating stopped since the insulated wire came loose in the heating and got disconnected. This was an easy fix since all I had to do was simply just twist them together even tighter for the next time.
The other thing that I noticed was that a lot of the sealant was flaking off after heating. It probably isn’t well suited for this project anyways. I took this failure as an opportunity to change the way the heating element was setup. For anyone following along, this is the way that you should do this. First, I got some more Kanthal wire. This time though, I got 20 gauge wire instead. The reason for this is that thicker wire is both lower resistance and also more stiff. The lower resistance is important since we can use a longer length of wire to get the same total resistance, which makes it easier to evenly spread the heat. The stiffness of the wire means that we can bend it and it will keep its shape without any sort of adhesive.
I started wrapping it around each rod individually, and I would jump across to another rod once I reached the end of a rod. It took a while to wind it all together because the rest of the furnace got in the way, but after I finished, it held its place well and was much more even than the previous method. The final measured resistance was 8.5 ohms, which calculates to a current of 14 amps, which should be suitable for my 15amp circuit considering that we will also use a lower average current using PWM.
As a kind of spolier, the next test run was very successful, but before I show you, let’s take a look at all of the electronics and the code. The basic circuit overview is as follows. The heating element is simply a resistor connected to mains. It can be switched on and off with a solid state relay. This relay is controlled with a microcontroller. The microcontroller also measures the current temperature with a thermocouple to make sure that the temperature setting is accurate.
The two main ICs on the PCB are the ATmega8A, which is the microcontroller, and the MAX31855, which is a K-type thermocouple to SPI converter. Make sure to include a 10nF capacitor inbetween the thermocouple pins since the measurement won’t really work without it. I missed this the first time and I was scratching my head for a bit because of it.
Let me briefly talk about the other circuitry for a moment. Since we are running on 3.3V for the majority of the circuit, I also added a negative voltage charge pump, the MAX660. I did this because the contrast pin on the LCD is normally set for an adjustable voltage between 0 and 5 volts. The negative voltage here allows us to maintain a voltage range large enough to fine tune the contrast properly. The LCD is used for information about the system and the rotary encoder is used for user input. The FT230XS is used to allow me to send serial communication to the UART on the microcontroller over USB from my computer. The control board is also powered separately from the heating element, so make sure to have a 5V power supply avaliable, which could simply come from the USB port.
The code for the microcontroller is a bit more interesting. There is a lot of code, such as interfacing with the serial interface to allow for a sort of command system, and an LCD driver. Those aren’t the focus of the video though, so feel free to browse the code which I will link in the description. I want to draw your attention to thermocouple.c and pid.c.
The thermocouple code is relatively simple, since we use the hardware SPI avaliable on the microcontroller to read the current temperature. The IC sends back 32 bits of data. Only bits 31 to 18 are the acutal thermocouple data. My code ends up ignoring negative temperatures and also removes the decimal values of the measurement.
The PID loop is the heart of the program. If you aren’t familiar, a PID loop is a common feedback path that is used to make sure that the output of a system is accurate to the input regardless of the load. The loop also ensures that the output is stable and doesn’t oscillate. Basically the input is compared to the output. Any difference between the two is computed as the error signal. It is then sent through separate P, I, and D sections. In this case, P, I and D stand for proportional, integral, and derivative respectively. Proportional is larger when the error is larger. Integral grows larger with time for as long as the error is non-zero. Derivative is larger when the change in the output is larger.
This kind of loop can be implemented in either a digital or an analog circuit, and since we are writing code, it is a digital loop. The integral term is the most important since it will adjust itself with time until the proper input is value is reached.
Let me give you an example to better illustrate this. We can control the temperature of the furnace by adjusting the duty cycle of the heating element. A higher duty cycle means that we will have a higher temperature. Let’s say we want to aim for 900C. When we first start the furnace, our duty cycle will be zero and our temperature will be roughly 20C. This means that we will have an error of 880C. Immediately, the proportional part of the circuit will increase so that the furnace starts heating up. The integral term will increase a little bit since there is an error. The derivative is still zero since we just started.
Everytime we get a new measurement, this loop will be re-evaluated. Let’s say that the temperature is now 100C. The error will be slightly smaller: 800C. The proportional term will be smaller since the error term is now smaller. The integral term will once again increase since there is still error in the system. The derivative term will start to act since we now have a rate of change.
Let’s check back in at 400C. The proportional term is still decreasing since the error is now just 500C. The integral term has been increasing this whole time. The derivative term should be kicking in more now since the integral term keeps getting larger, which means that the temperature is increasing faster and faster. The derivative term takes this rate of change and starts clamping this value, slowing the rate of change down.
Eventually, we reach 900C. The error is 0C, so there is no proportional term. At this point, we can determine whether a PID loop is well tuned. A poorly tuned loop will overshoot and continue well past 900C. A well tuned loop will stop very closely to 900C. We can call the difference between these states as under-damped, over-damped, and critically damped. You don’t want under-damped with a system like this. How do we tune the loop? Well, each of the P, I, and D terms has a coefficient that you multiply it by. You can adjust these values until you get the proper response.
My code acutally has two PID loops. The first is much like the example that I just explained to you, where we have a target temperature and the loop attemps to reach that temperature. The problem with this is that we can have really large temperature increase rates. That’s why I made a second PID loop. This loop takes an input temperature increase rate and attempts to get that on the output. In this case, I aimed for either plus or minus 20 degrees celcius per minute. This is because the quartz tube can have issues if you attempt to change its temperature too quickly.
The microcontroller switches dynamically between these two loops depending on how closely the temperature matches the target. If the temperature is within 10C of the target, the first loop is used. If it is beyond 10C of the target, the second loop is used to give us a constant 20C/min until the target is reached. I tuned the system by typing values in manually until I was happy with how the temperature responded.
In fact, the system was extremely stable. On the way up to 1000C, the rate of change stayed relatively close to +20C/min. However, I was very happy when I reached the end of the test. I reached 1000C and the furnace stayed to within 1C of the target temperature. This was extremely stable and more than suitable for the future projects that I will use the furnace with.
Oh, and this was when I had that galvanized steel problem. It seems that 1000C, the zinc seems to get just hot enough to start fuming. I was able to both see and smell it. It actually kind of smells good weirdly enough, but it’s definetly not good for you at all. I opened the garage door to vent everything out and stepped outside. I kept the furnace running for an hour to make sure that it was reliable and it performed perfectly. As a bonus, it seemed as if most of the zinc got rid of itself after a while. Just to reiterate, if you replicate this project, try and use another material that doesn’t have zinc.
Anyway, this project was very successful considering that we got that stable of a temperature that close to the target. If you’ve enjoyed this video and learned something new, please consider subscribing so that you can see my other videos. Also, visit my buymeacoffee page. With your support, I can keep making these videos. I’d like to thank Mr.devNull, Cognisent, Mark, and Alex Nygren for being channel supporters. You make these videos possible. Thanks for watching, have a good one!