關 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設計應用 > 飛利浦51LPC系列單片機用于控制交流電機

        飛利浦51LPC系列單片機用于控制交流電機

        作者: 時間:2006-05-07 來源:網絡 收藏

        摘要:飛利浦公司研制的51LPC系列單片機是采用兩倍速80C51內核,具有低成本、低功耗、低電磁干擾(EMI)、高抗干擾性及內建電源Brownout偵測、模擬功能、UART、I2C和片內RC振蕩器的新一代單片機。本文介紹51LPC系列單片機控制交流電機的原理電路和源程序。

        本文引用地址:http://www.104case.com/article/244607.htm

        關鍵詞:P87LPC761 Brownout偵側 模擬比較器 EMI 電流過零檢測 半波整流 雙向可控硅

        1 概述

        PHILIPS 51LPC系列單片機目前已包括P87LPC760/1/2/4/7/8/9共七個型號。51LPC提供高速和低速的晶振和RC振蕩方式,可編程選擇;具有較寬的操作電壓范圍2.7~6.0V,可編程I/O口線輸出模式選擇,可選擇施密特觸發輸入,LED驅動輸出;有內部看門狗定時器及提供掉電檢測模擬功能,最大限度地減少了外部元件的使用。這些特性和改進的C51結構結合在一起,使得在設計高集成度、低成本和低功耗控制電路時具有更多的選擇。該系列主要用于對系統成本有嚴格要求,且系統具有高抗干擾性能的低功耗應用領域,已廣泛用于電子陽性能表、IC卡水表、電子稱、消毒碗柜、LED顯示屏、煤氣表等領域。

        本文介紹在市電情況下使用LPC系列微控制器P87LCP761與三象限雙向晶閘管(Triac)控制感性負載交流電機的方法。使用一種全新的電流過零檢測方法,不必在負載電流線路中加入旁路電阻,利用單相關波整提供控制電路的電源。LPC的高抗干擾性能使得只用極少外部零件即能完成此系統。此解決方案可通過P87LPC761系列單片機的片內RC振蕩器和比較來實現,或者其它帶有片內PWM、ADC和DAC等功能的LPC系列芯片。該系統可用于對電機(AC/DC)閥門、泵燈等的控制,廣泛用于照明、HVAC、電源工具、儀表及等領域。表1是P87LPC761的引腳功能。

        表1 P87LPC761引腳功能

        引腳號符 號

        功 能

        1P0.0/CMP2比較器2輸出
        16P0.1/CIN2B比較器2正向輸入B
        15P0.3/CIN1B比較器1正向輸入B
        14P0.4/CIN1A比較器1正向輸入A
        13P0.5/CMPREF比較器參考
        11P0.6/CMP1比較器1輸出
        12VDD電源正端
        4VSS電源負端
        5X1/P2.1振蕩放大器輸入
        6X2/P2.0/CLKOUT振蕩放大器輸出
        7SDA/INT0/P1.3I/C數據輸入/輸出
        8SCL/T0/P1.2I2C時鐘輸入/輸出
        3RST/P1.5外部復位輸入
        10P1.0/TXD串行口輸出
        9P1.1/RXD串行口輸入
        2P1.7通用I/O口

        2 原理

        2.1 負載電壓的過零控制——單輸入檢測

        方框圖1和2為該應用的總體框圖。電路直接通過市電進行供電,相位控制時序取決于市電電壓過零檢測(Voltage Zero Crossing)(見圖1)或負載電流過零檢測(Current ZeroCrossing)(見圖2)。采用哪種檢測方式取決于實際應用的情況。控制模塊計算機發時刻,LPC可直接吸收多個Triac的門電流。為了降低EMI,保證安全操作并控制相位,有必要在電流過零或一個特定的相位角時觸發Triac。對于阻性負載,電流和電壓過零是一致的;對于感性負載,電流滯后于電壓。負載的狀態決定了Triac是根據電壓過零還是電流過零進行可控硅的觸發。

        檢測電壓過零最簡單的方法就是測量市電電壓極性的變化。LPC的+5V端連接到電源線(或中性點),而中性點(或電源線)通過限流電阻連接到任意一個I/O口。I/O口的電壓被內部鉗位二極管鉗制0V和+5V之間,如圖3所示。微控制器可讀入輸入口的輸入狀態,并且當狀態從1變為0或從0變為1時,檢測到過電壓的過零點。電平跳變點取決于I/O口的模式(TTL或施密特觸發),過零點到檢測點的延遲時間取決于電源電壓的變化率(例如230V或110V系統),這些都必須納入考慮范圍。該電路的優點是簡單和成本低,因為僅需要一個額外的電阻(要求高耐壓值)并可使用LPC的任何一個I/O口。

        2.2 電流過零檢測——電流過零窗口比較器

        電流過零(CZC)是Triac的換流點。在非線性負載時,由于電流過零點和電壓過零(VZC)點不一致,CZC檢測尤其重要;但是,監控CZC并不像監控VZC那么容易,因為,通常檢測方式需要在負載上串聯一個電阻,這就分離了負載電路且浪費了電能。通常方法是通過放大和電平變換,然后和微控制器相連,這至少需要一個額外的運算放大器及其相關元件。LPC檢測電流過零采用了一種全新的方法:監控Triac門極(VG)到陽極(T1)的電壓。VG-T1給出了Triac即將換流的一個信號,因為VG-T1在CZC時過零,根據負載電流和Triac的特性,VG-T1可低至0.1V或大于1.2V。如圖4所示電路,使用窗口比較器監控該電壓即能完成CZC功能。圖4窗口比較器用于門電壓和電流過零檢測器,VG-T1相對于線電壓可正可負,取決于負載電流的方向。也就是說VG-T1相對于VCC+5V而言可正可負。因此在LPC可監控之前,必須通過R4和R5分壓,以使其低于VCC并處于比較器的操作電壓范圍,R1、R2和R3將電壓限制在過零點附近。

        3 完整的LPC+Triac+Motor(AC)電路實現

        在P87LPC761和Triac的控制應用中,整個系統對電源消耗很低并具有高抗干擾性能,故可以通過阻容降壓和單相半波整流由市電直接供電,而不需要昂貴且體積大的變壓器,外部零件極少。此方案成本低。圖5所示是一個感性負載的通用電路,同時適合阻性負載。Triac可使用BTA216 600E。像圖4那樣,通過查詢P87LPC761的比較器來檢測負載電流過零,并重新觸發Triac。也可用中斷驅動。啟動電機時用電壓過零測量并觸發Triac的門級脈沖,以減少電磁干擾,并可從主循環的開始進行控制和重定義在啟負載之間軟件等待整個半周期。本例在復位后通過用戶按鍵開啟負載,通過按鍵可進行相角控制以控制電機的不同轉速。如圖5所示,LED發光管閃爍的快慢能體現電機轉速,LED閃爍越快電機轉動越快,反之則越慢;電機停轉,LED熄滅。此電路稍經修改就可以用于其它許多類似的場合。

        源程序清單:

        該軟件在Keil C51 V6.02上編譯通過,在目標板上運動正常。如果用其它編譯器必須稍加修改。

        #includereg761.h>

        #define uchar unsigned char

        #define uint unsigned int

        uchar s,x,y=0;

        void timer0(void)interrupt 1 using 1 {/*T0中斷服務程序*/

        x=x+1;

        if(x/10>s){

        if(y= =0){P1=P10xfb; /*LED點亮*/

        x=0;y=1;}

        else {P1=P1|0x04; /*LED熄滅*/

        y=0;x=0;}}

        TF0=0;TH0=-(28/256);

        TL0=-(28%256);

        }

        void speed(s){ /*電機轉換控制子程序*/

        uchar pulsecount, pulseduration=0;

        uint i=0;

        uint j=0;

        if (((CMP10x02))!(CMP20x02)/*查詢比較器*/

        {for (i=0;is;i++)

        {for(j=0;j210;j++) ;} /*延時觸發*/

        CMP1=CMP10xfc;

        CMP2=CMP20xfc;

        pulsecount=1;

        {P1=P10xfe;

        pulseduration=12; /*觸發脈沖寬度*/

        while(pulseduration){pulseduration- -;}

        P1=P1|0x01;

        pulsecount- -;

        }

        }

        }

        void Initcomparatior(void){ //初始化P87LPC761//

        PT0AD=0x6f; /*禁止P0口的數字功能*/

        P0=0xff;

        P0M1=0x2a; /*P01,P03,P05設為高阻輸入*/

        P0M2=0xd5; /*P00,P04,P06設為推挽方式*/

        P1=0xff;

        P1M1=0x82; /*P17用于VZC檢測*/

        P1M2=0x05;

        CMP1=0x34;

        CMP2=0x34;

        }

        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=CMP10xfc;

        CMP2=CMP20xfc;s=0;

        while(P1_1) {;}

        while(!P1_1){;}

        while(P10x80){};

        while(!(P10x80)){};

        while(P10x80){}

        while(!(P10x80)){};

        while(P10x80){};

        P1=P10xfe; //啟動電機

        while(1)

        {if(P1_1= =0) {

        x=0;

        while (!x){;}

        if(P1_1=0)

        {P1=0xff;s=s+1;} //停止電機

        if(s= =8){s=0;}

        while(!P1_1){;} //等待釋放按鍵

        while(P10x80){};

        while(!(P10x80)){};

        while(P10x80)();

        whie(!(P10x80)){};

        while(P10x80){};

        P1=P10xfe;} //啟動電機

        EA=1;TR0=1;

        speed(s); }

        } //結束



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 衡水市| 建始县| 永登县| 马山县| 阳城县| 射洪县| 固阳县| 永寿县| 义马市| 深州市| 台州市| 宝应县| 濉溪县| 江永县| 连城县| 磐安县| 石首市| 滨州市| 东源县| 上犹县| 沧州市| 临潭县| 得荣县| 红安县| 新绛县| 芦山县| 佳木斯市| 饶阳县| 合川市| 突泉县| 罗山县| 平定县| 囊谦县| 保山市| 金门县| 景东| 闽清县| 怀化市| 策勒县| 佳木斯市| 马山县|