在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

            微機控制/最小拍控制的C語言描述

            作者: 時間:2016-11-18 來源:網絡 收藏
            參考電路圖:

            參考程序流程圖:

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

            參考程序:

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

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

            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; //開總中斷
            while(1);
            }

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

            DIN0 = 1; //讀取輸入前,先輸出高電平
            if(DIN0) //判同步信號到否
            {
            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; //采樣當前的偏差值,并計算偏差的變化量

            i=EK*KK0; //計算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=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; //采樣周期變量恢復
            }
            }
            }

            /**********************************************
            函數名:Timer0
            功能 :定時器0中斷服務程序
            參數 :無
            返回值:無
            ***********************************************/
            void Timer0() interrupt 1 using 1
            {
            str = !str; //產生A/D啟動信號
            TH0 = t0_h; //重新裝入初值
            TL0 = t0_l;
            }

            參考結果:

            階躍有波紋

            階躍無波紋

            斜坡有波紋

            斜坡有波紋



            評論


            技術專區(qū)

            關閉