Симмисторный регулятор мощности


Или как я оживлял принтер Hewlett-Packard Laser Jet 4 с испорченым контроллером печки (Fuser)
українська версія --- російська версія

Регулирование мощности других нагрузок по этой схеме смотри ниже >>>

Ко мне в руки попал принтер Hewlett-Packard, который после включения питания выдавал ошибку "50 Service" (что означало ошибку "печки"). После активного серфенга по интернету и помощи форумчан был найден источник проблемы.

Это был контроллер печки, который управлял мощностью нагревателя по аналоговому сигналу (0...5В) из недр принтера. В качестве силового элемента был применен симмистор BCR8CM и симмисторная оптопара с "контроллем перехода через ноль"

Схему решено было заменьть на простенькую, сприменением микроконтроллера PIC12F675, так как он имеет встроеный 10-разрядный АЦП и относительно не дорогой (около 10 грн в Киеве).

Модернезированная схема показана ниже:

Диоды VD3-VD6 - защитные (от повышенного напряжения на входе и напряжения обратной полярности).

Цепь на транзисторной оптопаре DA2 предназначена для захвата "нуля" сетевого напряжения и гальванической развязки от нее. При наличии "полуволны" происходит шунтирование вывода 5 микроконтроллера на землю. Диод VD2 защищает оптопару от полуволны обратного напряжения. Резистор R1 - гасящий, мощностью 2Вт.

Алгоритм управления тиристором - фазоимпульстный, что вызывает небольшой треск (при малых мощностях) в сетевом фильтре БП.

Микроконтроллер PIC12F675 может работать как с внутренним так и внешним кварцевым резонатором.В моем варианте МК работал с внутреним генератором (4МГц). При изменении частоты необходимо подкорректировать константы (ShimShagMax та ShimShagDiv). ShimShagMax указывает количество прерываний таймера на один полупериод при частоте сети 50 Гц - 10мс. Прерывание таймера каждые 256 мкс(при частоте 4МГц), тогда константа будет иметь значение 10мкс/256мкс=39. Принимаем 40, на всякий пожарный). ShimShagDiv=255/ShimShagMax=6.375

Ниже представлена программа для PIC12F675, написанная на языке Си:

#include <12F675.h>
#device adc=8

#FUSES NOWDT //No Watch Dog Timer
//#FUSES INTRC_IO
//Внутрішній генератор
#FUSES XT //Зовнішній генератор
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES MCLR //Master Clear pin enabled
#FUSES PUT //Power Up Timer
#FUSES BROWNOUT //Reset when brownout detected

#byte ADCON0 = 0x1F
#byte GPIO = 0x05

#use fast_io(A) // Работа с портами без переключения
                        // каждый раз регистров TRIS

#use delay(clock=4000000)

#define ShimShagMax 40
// 255/ShimShagMax
#define ShimShagDiv 6.375

unsigned char Shim, ShimVal;

#int_RTCC
void RTCC_isr()
{
Shim++; //Увеличиваем зачения счетчика ШИМ

if (Shim>ShimShagMax) Shim=0;//Период ШИМ порядка 20 мс (50Гц)

if ((ShimShagMax-Shim)<ShimVal) //Провреняем, не пришло ли время
                  OUTPUT_HIGH(PIN_A0);//если да, то лог "1"
              else
                  OUTPUT_LOW(PIN_A0); //если нет, то "0"

if ((input_a() & 0b00000100))
      Shim=0; //Синхронизируем с ~220В.
}

void Pause255(unsigned char Ret)
{ unsigned char Pause=0;
  while(Ret>0)
     {
      while (Pause<255) Pause++;
      Pause=0;
      Ret--;
     }
}

void main()
{
setup_adc_ports(sAN1|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_16);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);

set_adc_channel( 1 );

SET_TRIS_A(0b00000110);
ShimVal=0;

{unsigned char InpVolt;
/* float Temp; */

//стабилизация температуры
while(1)
 {
   Pause255(254);
// ADCON0 |= 4; // Начинаем АЦПяпить
   Pause255(254);

   while (ADCON0 & 0b00000010); //Ожидаем завершение преобразования

   InpVolt=READ_ADC()/ShimShagDiv; //

   //Плавное изменение температуры
   if ((InpVolt>ShimVal)&&(ShimVal<ShimShagMax)) ShimVal++;
   if ((InpVolt<ShimVal)&&(ShimVal>0)) ShimVal--;

  }
 }
}
 

Для управления другими нагрузками, схему можно модернизировать.

При использовании переменного резистора (1...10кОм), в качестве задатчика, его следует подключать крайними выводами к +5В и земеле и средний вывод подключить ко входу МК(вывод №6, при этом резистор R5 в этой цепи можно исключить).

Синхронизацию с сетью (зез гальванической развязки) можно взять из схемы коммутатора гирлянд, подав сигнал прямо на вывод № 5 МК.

Для работы с обеими полупериодами, следует транзисторную оптопару DA2 подключать через диодный мостик, чтобы иметь на выходе импульсы при любой полярности полупериода.

Прошивка, версия от 12.12.2009, HEX.

5.05.2015