<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > PIC單片機在智能雙電源裝置中的應用

PIC單片機在智能雙電源裝置中的應用

——
作者:廣東省佛山市奇正電氣有限公司 馮順廣 時(shí)間:2007-09-29 來(lái)源:21IC中國電子網(wǎng) 收藏

1. 的簡(jiǎn)介

    隨著(zhù)對供電可靠性的要求也越來(lái)越高,很多場(chǎng)合用兩路電源來(lái)保證供電的可靠性。當常用電源異常,能自動(dòng)切換到備用電源,就是這種在兩路電源之間進(jìn)行可靠切換、以保證供電的裝置。在醫院、賓館和礦山等有廣泛的。

    智能雙電源裝置由開(kāi)關(guān)本體和控制器兩部分組成。開(kāi)關(guān)本體由電機通過(guò)機械聯(lián)鎖機構控制常用電源的斷路器和備用電源的斷路器的分合,進(jìn)而控制電源的切換??刂破魍ㄟ^(guò)對電壓的采樣來(lái)判斷電源是否異常,如果出現異常應產(chǎn)生相應的切換。

2. 16F877A的簡(jiǎn)介

    美國Microchip公司的 8位單片機其生產(chǎn)史11年,但現在其產(chǎn)量已躍居世界第二位(僅次于Motorola公司)?,F在單片機的品種已超過(guò)120種。PIC單片機是RISC結構的單片機,具有高速處理數據的特性(執行速度可達120ns)。PIC16F877A內部自帶看門(mén)狗、256Bytes的EEPROM、8路AD功能、ISP功能和寬電壓工作,工作可靠,能很好的適應智能雙電源裝置開(kāi)發(fā)。

3. 在8位單片機中 在PIC與51系列單片機的比較

  PIC的堆棧結構是硬件固定的,PIC16F877A有8級深度的硬件堆棧,51系列單片機的堆棧結構是在RAM區,由程序指定SP的開(kāi)始位置。

  PIC的RAM區每個(gè)Byte的位都可以尋址,有4條專(zhuān)用的位操作指令和2條移位指令。51系列單片機的只有0x20到0x2F的Bytes的位是可以尋址,有17條專(zhuān)用的位操作指令和4條移位指令。

  PIC的ROM和RAM是采用“頁(yè)”結構的,每頁(yè)為512個(gè)Bytes,通過(guò)STATUS的位來(lái)選擇不同的頁(yè),在程序調用和變量尋址的時(shí)候,要先確定目標的頁(yè),使有起來(lái)不是很方便。51系列單片機的ROM是可以在64K范圍內尋址的,可程序直接尋址調用;RAM在0到0x7F可以直接尋址或間接尋址,0x80以上地址的RAM(包括擴展的RAM)只有間接尋址。

4. 智能雙電源裝置的動(dòng)作處理

  雙電源控制器的有三種控制方式,自投自復方式、自投不自復方式和發(fā)電機方式。

  自投自復式方式:如果常用電源被檢測到出現偏差時(shí),則自動(dòng)將負載從常用電源轉換至備用電源;如果常用電源恢復正常時(shí),則自動(dòng)將負載返回換接到常用電源。

  自投不自復式方式:如果常用電源被檢測到出現偏差時(shí),則自動(dòng)將負載從常用電源轉換至備用電源;如果常用電源恢復正常時(shí),不能自動(dòng)將負載返回換接到正常電源供電。除非備用電源出現異常才進(jìn)行轉換。

  發(fā)電機方式:如果常用電源被檢測到出現偏差時(shí),發(fā)出發(fā)電指令請求發(fā)電。當發(fā)電電壓達到額定電壓時(shí),先從電網(wǎng)斷開(kāi)負載電路,自動(dòng)轉換到發(fā)電電源供電;當常用電源恢復正常后,則又自動(dòng)返回換接到正常電源供電,并發(fā)出停電指令,請求停止發(fā)電。

以下是三種方式在不同合閘狀態(tài)下的程序任務(wù)處理簡(jiǎn)述:

自投自復方式在常用電源合閘狀態(tài),
常用電源出現異常,進(jìn)行計時(shí)
異常計時(shí)中
異常計時(shí)完成,啟動(dòng)電機
常用電源正常,停止并恢復計時(shí)器
備用電源異常,停止并恢復計時(shí)器
自投自復方式在備用電源合閘狀態(tài),
常用電源出現正常
正常計時(shí)
正常計時(shí)完成,啟動(dòng)電機
常用電源異常,停止計時(shí)
自投不自復方式在常用電源合閘狀態(tài),
常用電源出現異常,進(jìn)行計時(shí)
異常計時(shí)中
異常計時(shí)完成,啟動(dòng)電機
常用電源正常,停止并恢復計時(shí)器
備用電源異常,停止并恢復計時(shí)器
自投不自復方式在備用電源合閘狀態(tài),
常用電源正常,備用電源異常,進(jìn)行計時(shí)
計時(shí)中
計時(shí)完成,啟動(dòng)電機
備用電源正常,停止并恢復計時(shí)器
發(fā)電機方式在常用電源合閘狀態(tài),
常用電源出現異常,進(jìn)行計時(shí)
異常計時(shí)中
異常計時(shí)完成,啟動(dòng)發(fā)電機
發(fā)電機啟動(dòng)等待時(shí)間,計時(shí)中
發(fā)電機等待時(shí)間完成,啟動(dòng)電機,進(jìn)行切換動(dòng)作
常用電源正常,停止任何計時(shí),并恢復計時(shí)器
發(fā)電機方式在備用電源合閘狀態(tài),
常用電源正常,計時(shí)開(kāi)始
計時(shí)中,
正常計時(shí)完成,啟動(dòng)電機,進(jìn)行切換動(dòng)作
常用電源異常,停止計時(shí),并恢復計時(shí)器
如何把這些相近的操作歸納成相同的函數進(jìn)行處理,才可以節約程序代碼。我把這些操作歸納成如下程序: {{分頁(yè)}}
……
typedef union
{
    unsigned char cc;
    struct 
    {
        unsigned char bit0:1;
        unsigned char bit1:1;
        unsigned char bit2:1;
        unsigned char bit3:1;
        unsigned char bit4:1;
        unsigned char bit5:1;
        unsigned char bit6:1;
        unsigned char bit7:1;
    }Bits;
} Char_Bit;
Char_Bit VolErrFlag[2];            // 可以用位或字節操作
static void CheckVolErr(unsigned char i)
// I=0, 檢查常用電源的電壓,更新缺相,欠壓和過(guò)壓標志位
// I=1, 檢查備用電源的電壓,更新缺相,欠壓和過(guò)壓標志位
{
    ……
}
static void StartTurn(unsigned char bi)
// bi=0,轉到常用電源
// bi=1,轉到備用電源
{
    ……
}
static void CheckVol1(unsigned char i)
// I=0,判斷常用電源的合閘狀態(tài)
// I=1,判斷備用電源的合閘狀態(tài)
{        // 電壓判斷,處理函數1
    unsigned char j,k;
    if (i==0)
        {
        j=0;
        k=1;
        }
    else
        {
        j=1;
        k=0;
        }
    if (VolErrFlag[j].cc==0)
        {
        bVolErrCnting=0;            // 恢復異常計時(shí)器標記
        }
    else
        {
        if (bVolErrCnting==0)
            {
            di();
            CLRWDT();
            VolErrCnt=(unsigned int) LimParams.cc[j]*TiScale;        
            // 預設異常計時(shí)器的初值
            ei();
            bVolErrCnting=1;
            return;
            }
        }
    if (VolErrFlag[k].cc !=0)
        bVolErrCnting=0;
    if (bVolErrCnting && VolErrCnt==0)
        {        // 啟動(dòng)轉換動(dòng)作
        bVolErrCnting=0;
        bBkOpen1=k;
        CLRWDT();
        StartTurn(k);
        }
}
static void CheckVol2()
{        // 電壓判斷,處理函數2
    if (VolErrFlag[0].cc !=0)
        {
        bVolErrCnting=0;   // 恢復異常計時(shí)器標記
        }
    else
        {
        if (bVolErrCnting==0)
            {
            di();
            CLRWDT();
            VolErrCnt=(unsigned int) LimParams.Para.Trn*TiScale;    
           // 預設異常計時(shí)器的初值
            ei();
            bVolErrCnting=1;
            return;
            }
        }
    if (bVolErrCnting && VolErrCnt==0)
        {    // 啟動(dòng)轉換動(dòng)作
        bVolErrCnting=0;
        CLRWDT();
        bBkOpen1=0;
        StartTurn(0);
        }
}
static void CheckVol3()
{        // 電壓判斷,處理函數3
    if (VolErrFlag[0].cc==0)
        {
        bVolErrCnting=0;  // 恢復異常計時(shí)器標記
        bDJstarting=0;
        }
    else
        {
        if (bVolErrCnting==0)
            {
            di();
            CLRWDT();
            VolErrCnt=(unsigned int) LimParams.Para.Tnr*TiScale;    
            // 預設異常計時(shí)器的初值
            ei();
            bVolErrCnting=1;
            return;
            }
        }
    if (bVolErrCnting && bDJstarting==0 && VolErrCnt==0)
        {
        di();
        CLRWDT();
        DJstartCnt=(unsigned int)LimParams.Para.T1*TiScale;
        // 預設發(fā)電機啟動(dòng)的等待計時(shí)器的初值
        ei();
        CLRWDT();
        bDJstarting=1;
        return;
        }
    if (bDJstarting &&  DJstartCnt==0)
        {   // 啟動(dòng)轉換動(dòng)作
        CLRWDT();
        bVolErrCnting=0;
        bBkOpen1=1;
        StartTurn(1);
        }
}
……
void main()
{
……
                if (bBkOpen1)
                    {    // 在備用電源合閘狀態(tài)
                    if (LimParams.Para.JobType==1)
                        {    // 自投不自復方式
                        CheckVol1(1);
                        }
                    else
                        {  //自投不自復或發(fā)電機方式
                        CheckVol2();
                        }
                    }
                else
                    {    // 在常用電源合閘狀態(tài)
                    if (LimParams.Para.JobType==2)
                        {  // 發(fā)電機工作方式
                        CheckVol3();
                        }
                    else
                        {     // 自投自復或自投不自復方式
                        CheckVol1(0);
                        }
                    }
……
} {{分頁(yè)}}

5. 智能雙電源裝置的電壓采樣的校準

  在實(shí)際生產(chǎn)中,由于采樣電阻的誤差,所以在相同的校準電壓輸入,單片機采樣到的AD值是不一樣的。如何設定AD值和校準電壓的校準比例,是一個(gè)關(guān)鍵的問(wèn)題,校準比例不能在程序編譯中固定下來(lái),因為這樣會(huì )有較大的誤差,即使改用精密電阻來(lái)采樣,誤差也不能減低很多。我在中采用的方法是:提高采樣電路的線(xiàn)性度,使其在不同電壓下的校準比例有很好的一致性(在解決了溫升的問(wèn)題后,這點(diǎn)是可以做到的);在采樣電路輸入校準電壓,輸入設置密碼后,單片機自動(dòng)計算校準比例,并把校準比例進(jìn)行保存。
……
void main()
{
……
    ReadScal();
……
    while(1)
    {
……

……
    }
}
……
static void KeyProc()
{……
    if ( SetKey==0)
        {
        ……
        if ( bSecPass==1)
            {
            // 設電壓
            if (ReadScalFlag() !=0) 
                return;
    // 如果已設定了比例,就不能再更改
            CLRWDT();
            ShowString(0, 0);
            ShowString(1, 1);            // "pass"
            ShowString(0, 2);    
        // 在LCD屏上顯示PASS
            CLRWDT();
            for (i=0; i!=6; i++)
                ScalUarray[i]=IntUarray[i];    // 讀入比例參數,
            CLRWDT();
            SaveScal();        // 保存比例參數
            SaveScalFlag();  // 并改寫(xiě)標志
            Delay5s();
            return;
            }
        ……
        }
}


 



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>