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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 微機(jī)控制/最小拍控制的C語(yǔ)言描述

          微機(jī)控制/最小拍控制的C語(yǔ)言描述

          作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò) 收藏
          參考電路圖:

          參考程序流程圖:

          本文引用地址:http://www.ex-cimer.com/article/201611/315736.htm

          參考程序:

          /*****************************************
          文件名:ACC4-1-1.C
          功能描述:最小拍有紋波實(shí)驗(yàn)程序。
          *****************************************/
          #include
          #include
          #include
          /*****************************************
          宏定義
          *****************************************/
          #define uchar unsigned char
          #define uint unsigned int
          #define ADC_7 XBYTE[0x7ff0] //定義模數(shù)轉(zhuǎn)換IO地址
          #define DAC_1 XBYTE[0x7ff2] //定義D/A第一路的IO地

          /*****************************************
          全局變量定義
          *****************************************/
          sbit str = P1^7; //定義A/D啟動(dòng)信號(hào)
          sbit DIN0 = P1^0; //聲明同步信號(hào)
          uint data time; //聲明變量,用于定時(shí)
          uchar data t0_h,t0_l; //用于存儲(chǔ)定時(shí)器0的初值
          int TK=100; //聲明采樣周期變量,//采樣周期=TK*10ms
          int TC; //TK的變量
          float KK0=0.5435; //系數(shù)kk0
          float KK1=-0.2000; //系數(shù)kk1
          float KK2=0; //系數(shù)kk2
          float KK3=0; //系數(shù)kk3
          float PP1=0.7170; //系數(shù)pp1
          float PP2=0; //系數(shù)pp2
          float PP3=0; //系數(shù)pp3
          char UK; //當(dāng)前時(shí)刻的D/A輸出
          char EK; //當(dāng)前時(shí)刻的偏差
          char UK_1,UK_2,UK_3,EK_1,EK_2,EK_3;//前3次采樣時(shí)刻的控制量和偏差
          /*****************************************
          主函數(shù)
          *****************************************/
          void main(void)
          {
          TMOD = 0x01;
          time = 10; //定時(shí)10ms
          t0_h = (65536-500*time)/256; //計(jì)算定時(shí)器0初值
          t0_l = (65536-500*time)%256;
          t0_l = t0_l+20; //修正因初值重裝而引起的定時(shí)誤差
          TH0 = t0_h;
          TL0 = t0_l;
          IT1 = 1; //邊沿觸發(fā)中斷
          EX1 = 1; //開(kāi)外部中斷1
          ET0 = 1; //開(kāi)定時(shí)中斷0
          TR0 = 1; //啟動(dòng)定時(shí)器

          TC = 1;
          DAC_1= 0x80; //D/A清零
          UK=UK_1=UK_2=UK_3=0;
          EK=EK_1=EK_2=EK_3=0;

          EA = 1; //開(kāi)總中斷
          while(1);
          }

          /**********************************************
          函數(shù)名:INT1
          功能 :1號(hào)外部中斷服務(wù)程序
          參數(shù) :無(wú)*
          返回值:無(wú) *
          ***********************************************/
          void int1() interrupt 2 using 2
          { float i,j;

          DIN0 = 1; //讀取輸入前,先輸出高電平
          if(DIN0) //判同步信號(hào)到否
          {
          UK=UK_1=UK_2=UK_3=0;
          EK=EK_1=EK_2=EK_3=0;
          DAC_1 =0x80; //D/A輸出零
          TC=1;
          }
          else
          {
          TC--; //判采樣周期到否
          if(TC==0)
          {
          EK = ADC_7-128; //采樣當(dāng)前的偏差值,并計(jì)算偏差的變化量

          i=EK*KK0; //計(jì)算i=EK*KK0+EK_1*KK1+EK_2*KK2+EK_3*KK3)
          i=i+EK_1*KK1;
          i=i+EK_2*KK2;
          i=i+EK_3*KK3;
          j=UK_1*PP1; //計(jì)算j=UK_1*PP1+UK_2*PP2+UK_3*PP3
          j=j+UK_2*PP2;
          j=j+UK_3*PP3;
          i=i-j; //i-j

          if(i>0) //判控制量是否溢出,溢出賦極值
          {
          if(i>=127)
          UK=127;
          else
          UK=(char)i;
          }
          else
          {
          if(i<-128)
          UK=-128;
          else
          UK=(char)i;
          }
          DAC_1=UK+128; //D/A輸出控制量
          UK_3=UK_2; //控制量遞推
          UK_2=UK_1;
          UK_1=UK;
          EK_3=EK_2; //偏差遞退
          EK_2=EK_1;
          EK_1=EK;
          TC=TK; //采樣周期變量恢復(fù)
          }
          }
          }

          /**********************************************
          函數(shù)名:Timer0
          功能 :定時(shí)器0中斷服務(wù)程序
          參數(shù) :無(wú)
          返回值:無(wú)
          ***********************************************/
          void Timer0() interrupt 1 using 1
          {
          str = !str; //產(chǎn)生A/D啟動(dòng)信號(hào)
          TH0 = t0_h; //重新裝入初值
          TL0 = t0_l;
          }

          參考結(jié)果:

          階躍有波紋

          階躍無(wú)波紋

          斜坡有波紋

          斜坡有波紋



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