利用單相關(guān)波整提供控制電路電源解析方案
1 概述
PHILIPS 51LPC系列單片機(jī)目前已包括P87LPC760/1/2/4/7/8/9共七個(gè)型號(hào)。51LPC提供高速和低速的晶振和RC振蕩方式,可編程選擇;具有較寬的操作電壓范圍2.7~6.0V,可編程I/O口線輸出模式選擇,可選擇施密特觸發(fā)輸入,LED驅(qū)動(dòng)輸出;有內(nèi)部看門狗定時(shí)器及提供掉電檢測(cè)模擬功能,最大限度地減少了外部元件的使用。這些特性和改進(jìn)的C51結(jié)構(gòu)結(jié)合在一起,使得在設(shè)計(jì)高集成度、低成本和低功耗控制電路時(shí)具有更多的選擇。該系列主要用于對(duì)系統(tǒng)成本有嚴(yán)格要求,且系統(tǒng)具有高抗干擾性能的低功耗應(yīng)用領(lǐng)域,已廣泛用于電子陽(yáng)性能表、IC卡水表、電子稱、消毒碗柜、LED顯示屏、煤氣表等工業(yè)控制領(lǐng)域。
本文介紹在市電情況下使用LPC系列微控制器P87LCP761與三象限雙向晶閘管(Triac)控制感性負(fù)載交流電機(jī)的方法。使用一種全新的電流過(guò)零檢測(cè)方法,不必在負(fù)載電流線路中加入旁路電阻,利用單相關(guān)波整提供控制電路的電源。LPC的高抗干擾性能使得只用極少外部零件即能完成此系統(tǒng)。此解決方案可通過(guò)P87LPC761系列單片機(jī)的片內(nèi)RC振蕩器和比較來(lái)實(shí)現(xiàn),或者其它帶有片內(nèi)PWM、ADC和DAC等功能的LPC系列芯片。該系統(tǒng)可用于對(duì)電機(jī)(AC/DC)閥門、泵燈等的控制,廣泛用于照明、HVAC、電源工具、儀表及工業(yè)控制等領(lǐng)域。表1是P87LPC761的引腳功能。
表1 P87LPC761引腳功能
2 原理
2.1 負(fù)載電壓的過(guò)零控制——單輸入檢測(cè)
方框圖1和2為該應(yīng)用的總體框圖。電路直接通過(guò)市電進(jìn)行供電,相位控制時(shí)序取決于市電電壓過(guò)零檢測(cè)(Voltage Zero Crossing)或負(fù)載電流過(guò)零檢測(cè)(Current ZeroCrossing)。采用哪種檢測(cè)方式取決于實(shí)際應(yīng)用的情況。控制模塊計(jì)算機(jī)發(fā)時(shí)刻,LPC可直接吸收多個(gè)Triac的門電流。為了降低EMI,保證安全操作并控制相位,有必要在電流過(guò)零或一個(gè)特定的相位角時(shí)觸發(fā)Triac。對(duì)于阻性負(fù)載,電流和電壓過(guò)零是一致的;對(duì)于感性負(fù)載,電流滯后于電壓。負(fù)載的狀態(tài)決定了Triac是根據(jù)電壓過(guò)零還是電流過(guò)零進(jìn)行可控硅的觸發(fā)。
檢測(cè)電壓過(guò)零最簡(jiǎn)單的方法就是測(cè)量市電電壓極性的變化。LPC的+5V端連接到電源線(或中性點(diǎn)),而中性點(diǎn)(或電源線)通過(guò)限流電阻連接到任意一個(gè)I/O 口。I/O口的電壓被內(nèi)部鉗位二極管鉗制0V和+5V之間,如圖3所示。微控制器可讀入輸入口的輸入狀態(tài),并且當(dāng)狀態(tài)從1變?yōu)?或從0變?yōu)?時(shí),檢測(cè)到過(guò)電壓的過(guò)零點(diǎn)。電平跳變點(diǎn)取決于I/O口的模式(TTL或施密特觸發(fā)),過(guò)零點(diǎn)到檢測(cè)點(diǎn)的延遲時(shí)間取決于電源電壓的變化率(例如230V或110V系統(tǒng)),這些都必須納入考慮范圍。該電路的優(yōu)點(diǎn)是簡(jiǎn)單和成本低,因?yàn)閮H需要一個(gè)額外的電阻(要求高耐壓值)并可使用LPC的任何一個(gè)I/O口。
2.2 電流過(guò)零檢測(cè)——電流過(guò)零窗口比較器
電流過(guò)零(CZC)是Triac的換流點(diǎn)。在非線性負(fù)載時(shí),由于電流過(guò)零點(diǎn)和電壓過(guò)零(VZC)點(diǎn)不一致,CZC檢測(cè)尤其重要;但是,監(jiān)控CZC并不像監(jiān)控 VZC那么容易,因?yàn)?,通常檢測(cè)方式需要在負(fù)載上串聯(lián)一個(gè)電阻,這就分離了負(fù)載電路且浪費(fèi)了電能。通常方法是通過(guò)放大和電平變換,然后和微控制器相連,這至少需要一個(gè)額外的運(yùn)算放大器及其相關(guān)元件。LPC檢測(cè)電流過(guò)零采用了一種全新的方法:監(jiān)控Triac門極(VG)到陽(yáng)極(T1)的電壓。VG-T1給出了Triac即將換流的一個(gè)信號(hào),因?yàn)閂G-T1在CZC時(shí)過(guò)零,根據(jù)負(fù)載電流和Triac的特性,VG-T1可低至0.1V或大于1.2V。如圖4所示電路,使用窗口比較器監(jiān)控該電壓即能完成CZC功能。圖4窗口比較器用于門電壓和電流過(guò)零檢測(cè)器,VG-T1相對(duì)于線電壓可正可負(fù),取決于負(fù)載電流的方向。也就是說(shuō)VG-T1相對(duì)于VCC+5V而言可正可負(fù)。因此在LPC可監(jiān)控之前,必須通過(guò)R4和R5分壓,以使其低于VCC并處于比較器的操作電壓范圍,R1、R2和R3將電壓限制在過(guò)零點(diǎn)附近。
3 完整的LPC+Triac+Motor(AC)電路實(shí)現(xiàn)
在P87LPC761 和Triac的控制應(yīng)用中,整個(gè)系統(tǒng)對(duì)電源消耗很低并具有高抗干擾性能,故可以通過(guò)阻容降壓和單相半波整流由市電直接供電,而不需要昂貴且體積大的變壓器,外部零件極少。此方案成本低。一個(gè)感性負(fù)載的通用電路,同時(shí)適合阻性負(fù)載。Triac可使用BTA216 600E。通過(guò)查詢P87LPC761的比較器來(lái)檢測(cè)負(fù)載電流過(guò)零,并重新觸發(fā)Triac。也可用中斷驅(qū)動(dòng)。啟動(dòng)電機(jī)時(shí)用電壓過(guò)零測(cè)量并觸發(fā) Triac的門級(jí)脈沖,以減少電磁干擾,并可從主循環(huán)的開(kāi)始進(jìn)行控制和重定義在啟負(fù)載之間軟件等待整個(gè)半周期。本例在復(fù)位后通過(guò)用戶按鍵開(kāi)啟負(fù)載,通過(guò)按鍵可進(jìn)行相角控制以控制電機(jī)的不同轉(zhuǎn)速。如圖5所示,LED發(fā)光管閃爍的快慢能體現(xiàn)電機(jī)轉(zhuǎn)速,LED閃爍越快電機(jī)轉(zhuǎn)動(dòng)越快,反之則越慢;電機(jī)停轉(zhuǎn),LED 熄滅。此電路稍經(jīng)修改就可以用于其它許多類似的場(chǎng)合。
[!--empirenews.page--]
源程序清單:
該軟件在Keil C51 V6.02上編譯通過(guò),在目標(biāo)板上運(yùn)動(dòng)正常。如果用其它編譯器必須稍加修改。
#include
#define uchar unsigned char
#define uint unsigned int
uchar s,x,y=0;
void timer0(void)interrupt 1 using 1 {/*T0中斷服務(wù)程序*/
x=x+1;
if(x/10>s){
if(y= =0){P1=P1&0xfb; /*LED點(diǎn)亮*/
x=0;y=1;}
else {P1=P1|0x04; /*LED熄滅*/
y=0;x=0;}}
TF0=0;TH0=-(28/256);
TL0=-(28%256);
}
void speed(s){ /*電機(jī)轉(zhuǎn)換控制子程序*/
uchar pulsecount, pulseduration=0;
uint i=0;
uint j=0;
if (((CMP1&0x02))&&!(CMP2&0x02)/*查詢比較器*/
{for (i=0;i
{for(j=0;j<210;j++) ;} /*延時(shí)觸發(fā)*/
CMP1=CMP1&0xfc;
CMP2=CMP2&0xfc;
pulsecount=1;
{P1=P1&0xfe;
pulseduration=12; /*觸發(fā)脈沖寬度*/
while(pulseduration){pulseduration- -;}
P1=P1|0x01;
pulsecount- -;
}
}
}
void Initcomparatior(void){ //初始化P87LPC761//
PT0AD=0x6f; /*禁止P0口的數(shù)字功能*/
P0=0xff;
P0M1=0x2a; /*P01,P03,P05設(shè)為高阻輸入*/
P0M2=0xd5; /*P00,P04,P06設(shè)為推挽方式*/
P1=0xff;
P1M1=0x82; /*P17用于VZC檢測(cè)*/
P1M2=0x05;
CMP1=0x34;
CMP2=0x34;
}
[!--empirenews.page--]
void main(void)
{uchar pulsecount ,pulseduration=0x00;
uint j;i=0;
SP=0x5f;EA=0;
TH0=-(28/256);
TL0=-(28%256);
TF0=0;EA=0;TR0=0;
ET0=1;CMP1=CMP2=0;
Initcomparator();
CMP1=CMP1&0xfc;
CMP2=CMP2&0xfc;s=0;
while(P1_1) {;}
while(!P1_1){;}
while(P1&0x80){};
while(!(P1&0x80)){};
while(P1&0x80){}
while(!(P1&0x80)){};
while(P1&0x80){};
P1=P1&0xfe; //啟動(dòng)電機(jī)
while(1)
{if(P1_1= =0) {
x=0;
while (!x){;}
if(P1_1=0)
{P1=0xff;s=s+1;} //停止電機(jī)
if(s= =8){s=0;}
while(!P1_1){;} //等待釋放按鍵
while(P1&0x80){};
while(!(P1&0x80)){};
while(P1&0x80)();
whie(!(P1&0x80)){};
while(P1&0x80){};
P1=P1&0xfe;} //啟動(dòng)電機(jī)
EA=1;TR0=1;
speed(s); }
} //結(jié)束