If you have followed along, I am making a custom temperature controller for a Scotch TL 901 laminator. I have designed and ordered a main control board based on a Microchip PIC24 microcontroller, as well as, a display board with 3 seven segment displays and 3 buttons to act as the user interface.
The first function I wanted to get working was the display. My reason for this was a working display would help with troubleshooting everything else by allowing me to display error codes and variable values. The first thing I tried was simply selecting a digit and trying to set the pin outputs to display a zero. At first, It seemed that everything was going well, but when I tried multiplexing in the other 2 digits, I started getting weird issues like the display would flicker or be very dim.
It took some checking with an oscilloscope, but I found that the 3.3V supply would cut out when the 7seg display was powered on. It ended up that the input bypass capacitor wasn’t large enough and the regulator would drop out. I fixed the problem by adding a large electrolytic capacitor to the bottom of the PCB at the 3.3V regulator inputs. I used a 470uF cap, but anything in that range will work fine. Now the 3.3V supply is solid the rest of the functionality can be tested.
After fixing the power supply, I finished the led display multiplexing, which is handled by an interrupt from a timer. The interrupt very quickly blanks all the digits, then sets the outputs to the next digits value, before enabling the next digit. The blanking is required because the leds respond so quickly that changing whats being displayed while changing the digit to be displayed causes the display to flicker with incorrect values. The interrupt routine gets the values to be displayed from an array that gets updated in the main code. This keeps the interrupt short and fast, allowing the main program to make changes when it needs, without having to be concerned with display timings.
Here is what the display look like mounted in the laminator:
The control board installed in the PCB, the wires will be cleaned up later. The board fits very well.
Once the display was working, I decided to tackle the temperature measurement. My goal was to use the PIC24 CTMU with the A/D to read the temperature from the sensors that came with the laminator. There are 2 sensors that need measured. The first is in direct contact with the roller, the second is attached to the aluminum housing that holds the heating element. The second sensor could be important because the heater will heat up much faster than the roller, and the roller might overheat. The basic idea for measuring the temperature is based on a diodes voltage drop changing with temperature. There is a lot of good info on the internet so I won’t go into detail(look up band gap voltage), but just know that for a silicon diode the voltage drops about 2mV for each degree C rise in temperature.
I had a lot of issues getting the CTMU/AD providing a correct value. I found that what I was trying to do was very possible but it’s better to take it one small step at a time. I was trying to get the PIC24 to automatically take a sample and convert 16 times, then trigger an interrupt because the A/D buffer was full. I was then going to average the samples to give better noise immunity. What I should have done is try to take one sample manually to get the circuit working right.
I ended up working through the issues with a multimeter and the 7seg display for debugging. There was lots of reading of the PIC data sheet and the PIC24 family reference manual. The biggest issue was little code errors, like forgetting to actually turn on the A/D interrupt. The PIC24 hardware worked very well once I had it setup right. Don’t forget to double-check every bit of code step by step when you run into odd problems. More than likely it’s not the hardware, but the code that is to fault. However, do make sure to check the errata document for the device too, sometimes there are hardware issues that could be causing problems.
Once I was able to get reliable data, I quickly found that the 2 temperature sensors didn’t seem to behave quite the same. There was no number on them so it was impossible to look up a datasheet. After experimenting with them, I concluded that is would just be easier to replace them. Both sensors were replaced with a very common 1N914/1N4148 diode. This made the results line up very well and allowed the temperature measurement routine to progress quickly. The diodes with the 10bit PIC AD provide about 2-3 degrees of temperature resolution. This should provide enough accuracy to allow for good control of the laminator. The accuracy could be improved by going to a PIC with a 12bit A/D or using a separate lower voltage for A/D Vref. For this project the standard 10Bit A/D and 3.3V Vref will do fine. The only issue is that the sensor will need to be calibrated once at room temperature. I plan on adding a calibration routine to the code to make this very easy, but that will be done later.
With the led display working and the temperature measurement working reliably, I decided to get the buttons setup, and allow the setting of desired temperature. With the PIC24s abundance of timers and having plenty to spare in this project, I decided to use one to help make a simple but reliable button debounce function. Every millisecond or so the buttons are read and a count incremented for each pressed button. If a button is released the count is reset. When the count passes a threshold a flag gets set, letting the rest of the program know the button is active. The main code never reads the buttons directly, but only checks the status flags that are controlled by the interrupt. The only thing that makes troubleshooting difficult is one button being shared with the programmer. The programmer must be disconnected to use the button. This was a trade-off of using a lower pin count part. With the button status now available to the main program, it will be possible to finish the user interface and actually try to set and control the temperature of the laminator. Stay tuned for part 4, the finished project.