До мене в руки попав величезний старенький лазерний принтер HP LaserJet 4, при вмиканні якого він, через декілька секунд, рапортовав про помилку 50 "50 Service". Після блукань просторами інтернету і суттєвої допомоги з боку форумчан був виявлене джерело проблем.
Це був непрацюючий "контролер пічки", в його задачу входило керування потужності, що подається на нагрівач. Силовим елементом бум симістор, який керувався через оптопару з "контролем переходу через нуль".
Було прийнято рішення замінити штатну схему на нову, на базі мікроконтролера PIC12F675, так як він має 10-розрядний АЦП і порівняно не дорогий (біля 10 грн у Києві), крім того його 6 портів цілком достатньо.
В результаті було прийнято наступну схему (обведено червоним):
В процесі експериментів, штатний симістор (BCR8CM - 8А, 600В) було спалено, тому на його заміну був поставлений BT136 (4А, 600В).
В якості нагрівача використовувалась штатна галогенова лампа (теоретично, потужністю 500Вт).
У зв'язку з тим, що нічого не було відомо, про алгоритм керування симістором штатної схеми, а також напругу живлення лампи (кажуть, вони можуть бути і на 127В з відповідним алгоритмом керування), було вирішено живити лампу однонапівперіодною напругою. Для цього було б потрібно замінити симістор на тиристор, але я поступив інакше і просто увімкнув діод у розрив одного з виходів симісторної оптопари DA1.
Для синхронізації з моментами переходу напруги через нуль використовується коло на базі мікросхеми DA2. При появі напруги, вона через R1 поступає на транзисторну оптопару DA2 і при досягнені деякого рівня на вході, вона шунтує вивід 5 (GP2) на землю. У зв'язку з тим, що у схемі використовується лише один напівперіод, то зворотній шунтується діодом VD2.
Схема працює наступним чином. Після подачі напруги живлення +5В (я взяв з блока живлення канал, по якому подавалась напруга на симісторну оптопару у старій конструкції) і подачі напруги "Вкл" (вивід 4 мікроконтролера сконфігуровано як зовнішній вхід скидання MCLEAR) мікроконтролер ініціалізує внутрішню програму і приходить у стан готовності. При появі напруги на "вході" (вивід 6 сконфігуровано як АЦП), МК починає видавати на виводі 7 (GP0) імпульси керування смиістором фазоімпулсним методом.
Фазоімпульсне керування симістором (тиристором) полягає в тому, що момент подачі напруги на керуючий електрод симістора (тиристора) подається з деяким запізненням. Чим більше запізнення (від початку півхвилі) тим менша потужність буде віддаватись у навантаження. Тобто, якщо подавати імпульс в самому пчатку напівперіода синусоїди, то у навантаження піде практично 100% потужності, так як тиристор буде відкритий весь час.
Мікроконтролер може працювати як з внутрішнім кварцевим генератором (4МГц), так і з зовнішнім керамічним, який приєднують до виводів 2 та 3 МК по стандартній схемі. В моєму варіанті, МК працював з внутрішнім генератором. При зміні частоти необхідно буде змінити константи у підпрограмі обробки преривання (ShimShagMax та ShimShagDiv). ShimShagMax вказує на кількість преривань таймера за один напівперіод (при частоті мережі 50 Гц, тривалість одного напівперіода 10мс. Враховуючи те, що переривання таймера відбувається кожні 256 мкс (при частоті 4МГц), то константа буде мати значення 10мкс/256мкс=39. Приймаємо 40, щоб раптом (через збій синхронізації) не подати 100% потужності замість 1%). 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--;
}
}
}
Якщо ж вам потрібно керувати іншим навантаженням (наприклад лампочкою), то схему можна дещо модернізувати.
Якщо керування буде виконуватись змінним резистором, то його крайні виводи під'єднують до загального проводу (земля) та +5В живлення. Середній вивід приєднують до виводу "вхід" (можна виключити тоді із схеми резистор R5 у цьому колі).
Якщо не потрібна гальванічна розв'язка з мережею, то живити схему можна через параметричний стабілізатор і сигнал синхронізації брати як у схемі перемикача гірлянд і подавати його на вивід № 5 МК.
Опубліковано:
Оновленно: 27.12.2023
Serhii K Home Page © 2003-2025 |