I have solder hundreds of boards using a cheapo B&D toaster oven with a homemade oven controller. I also tested different toaster ovens with similar results. A few things I have learned:
0) Nowadays you can cut your own high quality stencils using a craft cutter like the Silhouette Cameo. All the juicy details can be found here:
http://dangerousprototypes.com/forum/viewtopic.php?f=68&t=53411) A LOT of heat escapes through the toaster oven window. Covering the window inside with aluminum foil makes a huge difference. If you need to see the solder paste re flowing cut an small hole into the aluminum foil! Even with the aluminum foil there are two cold spots at the front on each side of the oven.
2) Put the temperature sensor directly on the board being re flowed. Even better, put it closer to the highest thermal mass component that is closer to the window.
3) The convection fan doesn't help at all. Actually, it makes things worst. A 1500W toaster oven is capable of 1 oC/s. Turn the fan on and you'll be lucky to get 0.5 oC/s.
4) PID controllers work quite nicely if they are tuned. Change oven, ambient temperature, move the board around, etc. and the constants need to be adjusted. I had much better results with a simple state machine that uses the code below. The variables 'soak_temp', 'Soak_PWM', 'soak_time', 'reflow_temp', 'Reflow_PWM', and 'reflow_time', are all adjustable using a keypad and LCD. I adjust them depending on the solder paste used, the PCB manufacturer, and the profile of the components. Attached is a screen capture of the temperature using the state machine controller.
5) Fumes. Re flow in a well ventilated area.
switch (state)
{
case 0: // Flux activation
pwm=100;
if (t_oven>=soak_temp)
{
state_time=0;
state=1;
}
break;
case 1: // Soak
pwm=Soak_PWM;
if (state_time>soak_time)
{
state_time=0;
state=2;
}
break;
case 2: // Ramp up
pwm=100;
if (t_oven>=reflow_temp)
{
state_time=0;
state=3;
}
break;
case 3: // Reflow
pwm=Reflow_PWM;
if (state_time>reflow_time) // Done.
{
pwm=0;
state=4;
}
break;
case 4: // Cool down
pwm=0;
if (t_oven<60) return;
break;
}