<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> 單片機(jī) >> 正文

      采用單片機(jī)實現(xiàn)遠(yuǎn)程電源控制

      作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2009-4-17
         我單位有一無人值守的機(jī)房位于一高山山頂上,上山的路是600多級的臺階。因通信需要,有時要開關(guān)某些機(jī)器設(shè)備,操作上雖然簡單,但要工作人員花10多分鐘爬一趟山,不僅辛苦,而且拖延了時間。為解決此問題,本人利用89C2051單片機(jī),設(shè)計了一遙控開關(guān),在山下機(jī)房便可對山頂上的設(shè)備進(jìn)行開關(guān)機(jī)。

      一、 原理簡介
          該方案的框圖如下:
        
          山頂機(jī)房及山下機(jī)房各安裝一塊控制板,兩者之間通過專線MODEM相連。山下控制板主要功能是:將操作人員的開關(guān)信息轉(zhuǎn)換成指令,發(fā)送給山頂控制板,并根據(jù)山頂控制板發(fā)來的電源通斷狀態(tài)報告指令,以指示燈的形式顯示給操作人員。山頂控制板主要功能是:通過控制繼電器的吸放來控制設(shè)備的電源,該板在接收到山下控制板發(fā)來的開關(guān)電指令后,驅(qū)動繼電器的吸放,并將繼電器的反饋狀態(tài)轉(zhuǎn)換成指令,報告給山下控制板。兩處的專線MODEM由本單位內(nèi)部的光纖通信設(shè)備提供的音頻線路連接。

      二、山頂控制板
          山頂控制板所包括的主要元件有單片機(jī)芯片89C2051,電平轉(zhuǎn)換芯片MAX232,電源模塊。由于需遙控的通信設(shè)備使用-48V電源,山頂控制板也采用-48V。該板采用了一個成品開關(guān)電源模塊,將-48V轉(zhuǎn)換成+5V。芯片MAX232的功能是把單片機(jī)串口的TTL電平轉(zhuǎn)換成MODEM的RS-232電平,使單片機(jī)能通過MODEM收發(fā)數(shù)據(jù)。2051單片機(jī)根據(jù)山下控制板發(fā)來的指令,通過P1_4腳控制線圈電壓為5V的小繼電器RY1的吸放,進(jìn)而控制電源繼電器RY2的吸放。電源繼電器RY2為兩組觸點、24V線圈電壓的大繼電器,觸點可承受較大電流。其中的一組觸點用于控制設(shè)備電源的通斷,接中間觸點及常閉觸點。繼電器釋放時,設(shè)備加電,繼電器吸合時,設(shè)備關(guān)電。另外一組觸點作為繼電器動作后的反饋,接中間觸點及常開觸點,分別接地及2051的P1_7腳。當(dāng)繼電器RY2吸合時P1_7經(jīng)繼電器接地,為低電平,繼電器釋放時P1_7腳為高平(2051內(nèi)部有上拉電阻)。單片機(jī)2051每秒鐘檢測一次P1_7腳是否接地,以此判定繼電器是否吸合(即是否斷開了設(shè)備的電源),隨后將檢測的結(jié)果轉(zhuǎn)換成指令,通過MODEM向山下的控制板匯報,同時本身的斷電指示燈也顯示出設(shè)備的加斷電狀態(tài)。
          山頂控制板的電路圖如下:
       
          山頂控制板的程序如下:
      #include "atmelAT89X51.H"
      #define  SYN  'Z'    //來自山下控制板數(shù)據(jù)幀的同步字符

      char countdown;      //時間計數(shù)

      char TX_buf[3];      //發(fā)送緩沖區(qū)
      char TX_len;         //發(fā)送字符串長度
      char TX_num;       

      char RX_buf[3];      //接收緩沖區(qū)
      char RX_len;         //接收字符串長度
      char RX_num;      
      char CRC(char *buf,char len)        //校驗碼生成函數(shù)
      {char i,temp;
        temp=0;
        for(i=0;i<len;i++)   temp=temp^buf[i];
        return(temp);
      }

      void timer0_int() interrupt 1         //定時器0的中斷服務(wù)程序
      { TL0=0x00;   TH0=0x0A6;
        countdown--;
        if(countdown==0 || countdown==20)    
             P1_0=!P1_0;              //控制CPU運行指示燈的秒閃
             
        if(countdown!=0) return;
        countdown=40;   //過了一秒鐘
        P3_7=P1_7;      //檢測電源繼電器的吸放狀態(tài),并驅(qū)動P3_7的指示燈
        if(P1_7)  TX_buf[1]=0x13;     //高電平,電源繼電器已釋放,設(shè)備電源接通
        else      TX_buf[1]=0x31;    //接地,電源繼電器已吸合,設(shè)備電源中斷
        TX_buf[2]=CRC(TX_buf,2);    //生成校驗碼
        TX_num=0;
        SBUF=TX_buf[0];            //向山下控制板報告繼電器的吸放狀態(tài)
      }
      void serial_int() interrupt 4        //串口中斷服務(wù)程序
      { if(TI)                        //發(fā)送觸發(fā)了中斷
         { TI=0;    TX_num++;
           if(TX_num<TX_len)   SBUF=TX_buf[TX_num];
           }
        else                         //接收觸發(fā)了中斷
         { RI=0;    RX_buf[RX_num]=SBUF;
           if(RX_num==0 && RX_buf[RX_num]!=SYN)
             return;                  //在接收的數(shù)據(jù)中搜索同步字符
           RX_num++;
           if(RX_num==RX_len)       //收完一條指令
           { RX_num=0;
             if(RX_buf[RX_len-1]==CRC(RX_buf,RX_len-1)) //檢查校驗碼是否正確
                { if(RX_buf[1]==0x13)   P1_4=1;   //釋放小繼電器RY1及電源繼電器RY2
                  if(RX_buf[1]==0x31)   P1_4=0;  //吸合小繼電器RY1及電源繼電器RY2
                 }
            }
          }
      }

      void main()
      {  IE=0x92;
         TMOD=0x21;               //定時器1:模式2,定時器2:模式1
         TL1=253;     TH1=253;     // 9600波特率
         TR1=1;                    //啟動定時器1
         SCON=0x50;                //串口:模式1

         TL0=0x00;    TH0=0x0A6;   //定時器0定時0.025秒
         TR0=1;                    //啟動定時器0
         countdown=40;              //1秒=0.025*40
         P1_4=1;                    //釋放繼電器RY1、RY2

         TX_buf[0]=0x7E;   TX_len=3;
         RX_num=0;        RX_len=3; 

         while(1) ;
      }

      三、 山下控制板
          山下控制板的電路圖如下所示,所包括的主要元件有單片機(jī)芯片89C2051,電平轉(zhuǎn)換芯片MAX232,7805穩(wěn)壓芯片。芯片MAX232的功能是把單片機(jī)串口的TTL電平轉(zhuǎn)換成MODEM的RS-232電平,使單片機(jī)能通過MODEM收發(fā)數(shù)據(jù)。需要對山上設(shè)備進(jìn)行開關(guān)電操作時,先把連接在2051單片機(jī)P1_7腳的斷電開關(guān)撥到“開”或“關(guān)”的位置,然后連續(xù)按下K1按鍵,直到L1、L2、L3三個操作指示燈全亮,接著按一下K2按鍵,L1、L2、L3指示燈全滅,此時2051單片機(jī)檢查P1_7腳的電平,如果是低電平,則向山頂控制板發(fā)斷電指令,如果是高電平,則向山頂控制板發(fā)加電指令。K1、K2的其它按鍵組合均不使單片機(jī)發(fā)送加斷電指令。這里采取斷電開關(guān)與按鍵相結(jié)合的控制方式,目的是為了防止意外的開關(guān)操作,提高安全性。MODEM通信正常的情況下,山下控制板每秒鐘收到一次山頂控制板發(fā)來的加斷電狀態(tài)報告。當(dāng)接收到狀態(tài)報告后,經(jīng)單片機(jī)分析,如果是斷電狀態(tài),則P1_5腳輸出低電平,點亮斷電指示燈,P1_3腳輸出高低脈沖,驅(qū)動蜂鳴器告警提示;如果是加電狀態(tài),斷電指示燈滅,蜂鳴器靜音。如果連續(xù)3秒鐘收不到山頂控制板的狀態(tài)報告,斷電指示燈將作秒閃、蜂鳴器告警,提示操作人員檢查MODEM線路是否正常。
       
      山下控制板的程序如下:
      #include "atmelAT89X51.H"
      #define  SYN   0x7E   //山頂控制板發(fā)來數(shù)據(jù)幀的同步字符

      char countdown;      //時鐘計數(shù)
      char TTL;           //通信中斷的時間門坎值,設(shè)置為3秒
      bit  link_error;      //通信中斷標(biāo)志
      bit  power_on;      //山上設(shè)備是否加電的標(biāo)志
      bit  km;            //按鍵消抖動標(biāo)志
      bit  kp;            //按鍵操作已處理標(biāo)志
      char TTW;          //發(fā)送指令前的時間計數(shù)

      char TX_buf[3];      //發(fā)送緩沖區(qū)
      char TX_len;         //發(fā)送指令長度
      char TX_num;         //當(dāng)前發(fā)送的字符序號

      char RX_buf[3];      //接收緩沖區(qū)
      char RX_len;         //接收指令長度
      char RX_num;        //當(dāng)前接收的字符序號

      char CRC(char *buf,char len)    //校驗碼生成函數(shù)
      {char i,temp;
        temp=0;
        for(i=0;i<len;i++)   temp=temp^buf[i];
        return(temp);
      }

      void timer0_int() interrupt 1    //定時器0的中斷服務(wù)函數(shù)
      { bit key1,key2;

        TL0=0x00;   TH0=0x0A6;
        countdown--;
        if(countdown==0 || countdown==20)
          { P1_6=!P1_6;            //CPU運行指示燈秒閃
            if(link_error)
               P1_5=!P1_5;        //通信中斷,斷電指示燈秒閃
            else
             { if(power_on)   P1_5=1;    //設(shè)備加電,斷電指示燈滅
               else          P1_5=0;    //設(shè)備關(guān)電,斷電指示燈亮
              }
           }

        if(power_on && !link_error)        //當(dāng)設(shè)備加電且通信正常
           P1_3=0;                     //關(guān)閉蜂鳴器
        else                           //當(dāng)設(shè)備斷電或通信中斷
          { if(countdown==0)   P1_3=0;   //蜂鳴器告警
            if(countdown==5)   P1_3=1;
            if(countdown==10)  P1_3=0;
            if(countdown==15)  P1_3=1;
           }

        key1=P3_4;  key2=P3_5;
        if(key1==1 && key2==1)  {  km=0;kp=0;  }   //兩個按鍵均沒有按下
        else
         { if(km==0)   km=1;             //設(shè)消抖動標(biāo)志
        else
           { if(kp==0)
              { kp=1;
                if(key1==0)              //按鍵K1被按下
                  TTW=(TTW+1)%4;      //計算K1連續(xù)按下的次數(shù)
                if(key2==0)              //按鍵K2被按下
                 { if(TTW==3)           //如果K1已被連續(xù)按了三次
                    { if(P1_7)    TX_buf[1]=0x13;    //發(fā)加電指令
                      else        TX_buf[1]=0x31;    //發(fā)關(guān)電指令
                      TX_buf[2]=CRC(TX_buf,2);
                      TX_num=0;   SBUF=TX_buf[0];
                     }
                   TTW=0;    //不管K1已按下幾次,K2按下后復(fù)位TTW計數(shù)器
                  }
               }
            }
          }
       
        if(countdown!=0)   return;
        countdown=40; 

        if(TTL==0)  link_error=1;    //TTL減到0,表示通信中斷
        else        TTL--;         //每隔1秒對TTL作減1操作
      }

      void serial_int() interrupt 4       //串口中斷服務(wù)程序
      { if(TI)
         { TI=0;    TX_num++;
           if(TX_num<TX_len)   SBUF=TX_buf[TX_num];
           }
        else
         { RI=0;    RX_buf[RX_num]=SBUF;
           if(RX_num==0 && RX_buf[RX_num]!=SYN)
             return;                   //在接收到的數(shù)據(jù)中搜索同步字符

           RX_num++;
           if(RX_num==RX_len)       //接收到一完成指令
           { RX_num=0;
             if(RX_buf[RX_len-1]==CRC(RX_buf,RX_len-1))   //檢查校驗
               { if(RX_buf[1]==0x13)  power_on=1;       //加電狀態(tài)
                 if(RX_buf[1]==0x31)  power_on=0;      //斷電狀態(tài)
                 TTL=3; link_error=0;        //通信正常,重置TTL值
                }
            }
          }
      }

      void main()
      {  IE=0x92;
         TMOD=0x21;                  //定時器1:模式2,定時器0:模式1
         TL1=253;        TH1=253;     //9600波特率
         TR1=1;                       //啟動定時器1
         SCON=0x50;                   //串口:模式1

         TL0=0x00;      TH0=0x0A6;    //定時器0定時0.025秒
         TR0=1;                        //啟動定時器0
         countdown=40;                  //1秒=0.025秒*40

         TTL=3;                       //連續(xù)3秒收不到報告,表示通信中斷
         TTW=0;
         km=0;         kp=0;
         link_error=1;    power_on=1;
         TX_buf[0]='Z';  TX_len=3;
         RX_num=0;     RX_len=3; 

         while(1)
          { if(TTW==0)   { P3_7=1; P1_0=1; P1_1=1; }
            if(TTW==1)   P3_7=0;
            if(TTW==2)   P1_0=0;
            if(TTW==3)   P1_1=0;
           }
      }

      四、MODEM通信線制作
          單片機(jī)2051與MODEM之間的串口通信電纜只用RX、TX、GND三根線,其他的握手信號均沒有使用,但在制作MODEM一端的接頭時應(yīng)要按下圖制作:
       

      Tags:單片機(jī),遠(yuǎn)程,電源,控制  
      責(zé)任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網(wǎng)友評論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 亚洲色偷偷综合亚洲AV伊人| 婷婷亚洲综合五月天小说在线| 国产色产综合色产在线观看视频 | 久久综合综合久久| 亚洲Av综合色区无码专区桃色| 久久一日本道色综合久久| 精品综合久久久久久98| 国产精品综合视频| 亚洲AV综合色区无码二区偷拍 | 国产香蕉久久精品综合网| 色综合久久久无码网中文| 精品国产综合区久久久久久| 一本大道加勒比久久综合| 亚洲色欲久久久久综合网| 一本久道综合在线无码人妻 | 情人伊人久久综合亚洲| 日日狠狠久久偷偷色综合96蜜桃 | 亚洲中文字幕无码久久综合网 | 亚洲婷婷第一狠人综合精品| 伊人久久大香线蕉综合爱婷婷| 久久综合久久综合亚洲| 色综合色综合色综合色综合网| 99久久综合狠狠综合久久止| 香蕉综合在线视频91| 2020久久精品亚洲热综合一本| 情人伊人久久综合亚洲| 婷婷综合另类小说色区| 久久久久综合中文字幕 | 久久99精品久久久久久综合| 琪琪五月天综合婷婷| 亚洲国产精品综合久久一线| 好吊色青青青国产综合在线观看| AV狠狠色丁香婷婷综合久久| 99久久综合国产精品免费| 亚洲av日韩综合一区久热| 人人狠狠综合88综合久久| 狠狠色综合久久久久尤物| 伊人色综合一区二区三区| 久久久亚洲裙底偷窥综合| 亚洲人成人伊人成综合网无码| 亚洲VA综合VA国产产VA中|