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

          新聞中心

          單片機(jī)PID程序

          作者: 時(shí)間:2016-11-24 來(lái)源:網(wǎng)絡(luò) 收藏
          剛剛做的一個(gè)恒溫箱,采用PID算法,3秒一個(gè)輸出周期,輸出量為0-150,各參數(shù)量化到0-99,便于用戶修改,為抵消散熱,加入維持功率系數(shù),程序如下(溫度放大了10倍)
          typedef struct DeltPID
          {
          char PIDTemp;//pid開關(guān)溫差
          char P;
          char I;
          char D;
          char PIDKc;//維持功率
          }data DELTPID;
          int data PID_Buff[3];//溫度緩沖區(qū)-參與PID運(yùn)算
          int data PID_Value;//輸出控制量
          DELTPID PID=
          {
          50,
          50,
          50,
          50,
          50
          }; //增量pid結(jié)構(gòu)體
          DELTPID E_PID;
          unsigned char data HeatCount = 0;
          void PID_Out()
          {
          if (HeatCount>0)
          {
          HeatCount--;
          HEAT_START;//開始加熱
          }
          else
          {
          HEAT_STOP;//停止加熱
          }
          }
          int data PID_Buff[3];//溫度緩沖區(qū)-參與PID運(yùn)算
          DELTPID PID=
          {
          50,
          50,
          50,
          50,
          50
          }; //增量pid結(jié)構(gòu)體
          DELTPID E_PID;
          #define MAX_DELT 15//最大增量
          void PID_Ctrl()
          {
          static int ei;//當(dāng)前偏差
          int last_ei;//
          int delt_ei;//偏差變化量
          //刷新最近兩次偏差
          unsigned char i_sign;//是否取消積分作用
          unsigned char c_sign;//是否取消維持功率
          int delt_value;//增量pid輸出值
          last_ei = ei;
          ei = TempSet - PID_Buff[0];
          delt_ei = ei - last_ei;//求出偏差變化量
          if (ei > PID.PIDTemp)//當(dāng)前溫差大于設(shè)定溫差
          {
          PID_Value = 150;//全功率輸出
          return;
          }
          else if (ei < -5)//超調(diào)
          {
          PID_Value = 0;//停止輸出
          return;
          }
          //增量pid控制
          if (((ei>0) && (delt_ei<0)) || ((ei<0) && (delt_ei>0)))
          {
          i_sign = 0;//專家pid測(cè)量值正向目標(biāo)值靠近,取消積分作用
          }
          else
          {
          i_sign = 1;
          }
          if ((ei<0) && (delt_ei>0))
          {
          c_sign = 1;//溫度正在從高溫向目標(biāo)值靠近
          }
          else
          {
          c_sign = 0;
          }
          delt_value = (float)PID.P/17*delt_ei + (float)PID.I/100*ei*i_sign-
          (float)PID.D/200*(PID_Buff[0]-2*PID_Buff[1]+PID_Buff[2]) + (float)PID.PIDKc/1000*TempSet*c_sign;
          if (delt_value>MAX_DELT)
          {
          delt_value = MAX_DELT;
          }
          else if (delt_value<(-MAX_DELT))
          {
          delt_value = -MAX_DELT;
          }
          PID_Value+=delt_value;
          if (PID_Value<0)
          {
          PID_Value = 0;
          }
          else if (PID_Value>150)
          {
          PID_Value = 150;
          }
          }



          關(guān)鍵詞: 單片機(jī)PID程

          評(píng)論


          技術(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); })();