<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC16F877A單片機(jī)在智能雙電源裝置中的應(yīng)用

          PIC16F877A單片機(jī)在智能雙電源裝置中的應(yīng)用

          作者: 時(shí)間:2011-12-29 來源:網(wǎng)絡(luò) 收藏

          1.裝置的簡介

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

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

          2.PIC16F877A的簡介

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

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

          PIC的堆棧結(jié)構(gòu)是硬件固定的,PIC16F877A有8級深度的硬件堆棧,51系列單片機(jī)的堆棧結(jié)構(gòu)是在RAM區(qū),由程序指定SP的開始位置。

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

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

          4.智能雙電源裝置的動作處理

          雙電源控制器的有三種控制方式,自投自復(fù)方式、自投不自復(fù)方式和發(fā)電機(jī)方式。
          自投自復(fù)式方式:如果常用電源被檢測到出現(xiàn)偏差時(shí),則自動將負(fù)載從常用電源轉(zhuǎn)換至備用電源;如果常用電源恢復(fù)正常時(shí),則自動將負(fù)載返回?fù)Q接到常用電源。
          自投不自復(fù)式方式:如果常用電源被檢測到出現(xiàn)偏差時(shí),則自動將負(fù)載從常用電源轉(zhuǎn)換至備用電源;如果常用電源恢復(fù)正常時(shí),不能自動將負(fù)載返回?fù)Q接到正常電源供電。除非備用電源出現(xiàn)異常才進(jìn)行轉(zhuǎn)換。

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

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

          自投自復(fù)方式在常用電源合閘狀態(tài),
          常用電源出現(xiàn)異常,進(jìn)行計(jì)時(shí)
          異常計(jì)時(shí)中
          異常計(jì)時(shí)完成,啟動電機(jī)
          常用電源正常,停止并恢復(fù)計(jì)時(shí)器
          備用電源異常,停止并恢復(fù)計(jì)時(shí)器
          自投自復(fù)方式在備用電源合閘狀態(tài),
          常用電源出現(xiàn)正常
          正常計(jì)時(shí)
          正常計(jì)時(shí)完成,啟動電機(jī)
          常用電源異常,停止計(jì)時(shí)
          自投不自復(fù)方式在常用電源合閘狀態(tài),
          常用電源出現(xiàn)異常,進(jìn)行計(jì)時(shí)
          異常計(jì)時(shí)中
          異常計(jì)時(shí)完成,啟動電機(jī)
          常用電源正常,停止并恢復(fù)計(jì)時(shí)器
          備用電源異常,停止并恢復(fù)計(jì)時(shí)器
          自投不自復(fù)方式在備用電源合閘狀態(tài),
          常用電源正常,備用電源異常,進(jìn)行計(jì)時(shí)
          計(jì)時(shí)中
          計(jì)時(shí)完成,啟動電機(jī)
          備用電源正常,停止并恢復(fù)計(jì)時(shí)器
          發(fā)電機(jī)方式在常用電源合閘狀態(tài),
          常用電源出現(xiàn)異常,進(jìn)行計(jì)時(shí)
          異常計(jì)時(shí)中
          異常計(jì)時(shí)完成,啟動發(fā)電機(jī)
          發(fā)電機(jī)啟動等待時(shí)間,計(jì)時(shí)中
          發(fā)電機(jī)等待時(shí)間完成,啟動電機(jī),進(jìn)行切換動作
          常用電源正常,停止任何計(jì)時(shí),并恢復(fù)計(jì)時(shí)器
          發(fā)電機(jī)方式在備用電源合閘狀態(tài),
          常用電源正常,計(jì)時(shí)開始
          計(jì)時(shí)中,
          正常計(jì)時(shí)完成,啟動電機(jī),進(jìn)行切換動作
          常用電源異常,停止計(jì)時(shí),并恢復(fù)計(jì)時(shí)器
          如何把這些相近的操作歸納成相同的函數(shù)進(jìn)行處理,才可以節(jié)約程序代碼。我把這些操作歸納成如下程序:
          ……
          typedefunion
          {
          unsignedcharcc;
          struct
          {
          unsignedcharbit0:1;
          unsignedcharbit1:1;
          unsignedcharbit2:1;
          unsignedcharbit3:1;
          unsignedcharbit4:1;
          unsignedcharbit5:1;
          unsignedcharbit6:1;
          unsignedcharbit7:1;
          }Bits;
          }Char_Bit;
          Char_BitVolErrFlag[2];//可以用位或字節(jié)操作
          staticvoidCheckVolErr(unsignedchari)
          //I=0,檢查常用電源的電壓,更新缺相,欠壓和過壓標(biāo)志位
          //I=1,檢查備用電源的電壓,更新缺相,欠壓和過壓標(biāo)志位
          {
          ……
          }
          staticvoidStartTurn(unsignedcharbi)
          //bi=0,轉(zhuǎn)到常用電源
          //bi=1,轉(zhuǎn)到備用電源
          {
          ……
          }
          staticvoidCheckVol1(unsignedchari)
          //I=0,判斷常用電源的合閘狀態(tài)
          //I=1,判斷備用電源的合閘狀態(tài)
          {//電壓判斷,處理函數(shù)1
          unsignedcharj,k;
          if(i==0)
          {
          j=0;
          k=1;
          }
          else
          {
          j=1;
          k=0;
          }
          if(VolErrFlag[j].cc==0)
          {
          bVolErrCnting=0;//恢復(fù)異常計(jì)時(shí)器標(biāo)記
          }
          else
          {
          if(bVolErrCnting==0)
          {
          di();
          CLRWDT();
          VolErrCnt=(unsignedint)LimParams.cc[j]*TiScale;
          //預(yù)設(shè)異常計(jì)時(shí)器的初值
          ei();
          bVolErrCnting=1;
          return;
          }
          }
          if(VolErrFlag[k].cc!=0)
          bVolErrCnting=0;
          if(bVolErrCntingVolErrCnt==0)
          {//啟動轉(zhuǎn)換動作
          bVolErrCnting=0;
          bBkOpen1=k;
          CLRWDT();
          StartTurn(k);
          }
          }
          staticvoidCheckVol2()
          {//電壓判斷,處理函數(shù)2
          if(VolErrFlag[0].cc!=0)
          {
          bVolErrCnting=0;//恢復(fù)異常計(jì)時(shí)器標(biāo)記
          }
          else
          {
          if(bVolErrCnting==0)
          {
          di();
          CLRWDT();
          VolErrCnt=(unsignedint)LimParams.Para.Trn*TiScale;
          //預(yù)設(shè)異常計(jì)時(shí)器的初值
          ei();
          bVolErrCnting=1;
          return;
          }
          }
          if(bVolErrCntingVolErrCnt==0)
          {//啟動轉(zhuǎn)換動作
          bVolErrCnting=0;
          CLRWDT();
          bBkOpen1=0;
          StartTurn(0);
          }
          }
          staticvoidCheckVol3()
          {//電壓判斷,處理函數(shù)3
          if(VolErrFlag[0].cc==0)
          {
          bVolErrCnting=0;//恢復(fù)異常計(jì)時(shí)器標(biāo)記
          bDJstarting=0;
          }
          else
          {
          if(bVolErrCnting==0)
          {
          di();
          CLRWDT();
          VolErrCnt=(unsignedint)LimParams.Para.Tnr*TiScale;
          //預(yù)設(shè)異常計(jì)時(shí)器的初值
          ei();
          bVolErrCnting=1;
          return;
          }
          }
          if(bVolErrCntingbDJstarting==0VolErrCnt==0)
          {
          di();
          CLRWDT();
          DJstartCnt=(unsignedint)LimParams.Para.T1*TiScale;
          //預(yù)設(shè)發(fā)電機(jī)啟動的等待計(jì)時(shí)器的初值
          ei();
          CLRWDT();
          bDJstarting=1;
          return;
          }
          if(bDJstartingDJstartCnt==0)
          {//啟動轉(zhuǎn)換動作
          CLRWDT();
          bVolErrCnting=0;
          bBkOpen1=1;
          StartTurn(1);
          }
          }
          ……
          voidmain()
          {
          ……
          if(bBkOpen1)
          {//在備用電源合閘狀態(tài)
          if(LimParams.Para.JobType==1)
          {//自投不自復(fù)方式
          CheckVol1(1);
          }
          else
          {//自投不自復(fù)或發(fā)電機(jī)方式
          CheckVol2();
          }
          }
          else
          {//在常用電源合閘狀態(tài)
          if(LimParams.Para.JobType==2)
          {//發(fā)電機(jī)工作方式
          CheckVol3();
          }
          else
          {//自投自復(fù)或自投不自復(fù)方式
          CheckVol1(0);
          }
          }
          ……
          }
          5.智能雙電源裝置的電壓采樣的校準(zhǔn)
          在實(shí)際生產(chǎn)中,由于采樣電阻的誤差,所以在相同的校準(zhǔn)電壓輸入,單片機(jī)采樣到的AD值是不一樣的。如何設(shè)定AD值和校準(zhǔn)電壓的校準(zhǔn)比例,是一個關(guān)鍵的問題,校準(zhǔn)比例不能在程序編譯中固定下來,因?yàn)檫@樣會有較大的誤差,即使改用精密電阻來采樣,誤差也不能減低很多。我在應(yīng)用中采用的方法是:提高采樣電路的線性度,使其在不同電壓下的校準(zhǔn)比例有很好的一致性(在解決了溫升的問題后,這點(diǎn)是可以做到的);在采樣電路輸入校準(zhǔn)電壓,輸入設(shè)置密碼后,單片機(jī)自動計(jì)算校準(zhǔn)比例,并把校準(zhǔn)比例進(jìn)行保存。
          ……
          voidmain()
          {
          ……
          ReadScal();
          ……
          while(1)
          {
          ……

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



          關(guān)鍵詞: PIC單片機(jī) 智能雙電源

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();