<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ā) >> EDA開發(fā)應(yīng)用 >> Keilc >> 正文

      直流電機(jī)控制Keil c51源代碼

      作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2011-3-3

      直流電機(jī)的開環(huán)控制Keil c51源代碼

      //-----------------------函數(shù)聲明,變量定義--------------------------------------------------------
      #include <reg51.h>
      #include <intrins.h>
      #include<ABSACC.H>  
      //-----------------------定義管腳--------------------------------------------------------
      sbit PWM=P1^0;             //PWM波形輸出
      sbit DR=P1^1;              //方向控制
      #define  timer_data  (256-100) //定時器預(yù)置值,12M時鐘是,定時0.1ms
      #define  PWM_T 100         //定義PWM的周期T為10ms
      unsigned char PWM_t;       //PWM_t為脈沖寬度(0~100)時間為0~10ms
      unsigned char PWM_count;   //輸出PWM周期計數(shù)
      unsigned char time_count;  //定時計數(shù)
      bit direction;             //方向標(biāo)志為
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:timer_init
      // 函數(shù)功能:初始化設(shè)施定時器
      //--------------------------------------------------------------------------------------------------
      void timer_init()
           {
         TMOD=0x22; /*定時器1為工作模式2(8位自動重裝),0為模式2(8位自動重裝) */
            PCON=0x00;
            TF0=0;
            TH0=timer_data;   //保證定時時長為0.1ms
            TL0=TH0;
            ET0=1;
         TR0=1;            //開始計數(shù)
            EA=1;             //中斷允許
         }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:setting_PWM
      // 函數(shù)功能:設(shè)置PWM的脈沖寬度和設(shè)定方向
      //--------------------------------------------------------------------------------------------------
      void setting_PWM()
            {
         if(PWM_count==0)  //初始設(shè)置
         {
         PWM_t=20;
         direction=1;
         }
         }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:IntTimer0
      // 函數(shù)功能:定時器中斷處理程序
      //--------------------------------------------------------------------------------------------------
      void IntTimer0() interrupt 1
                    {
           time_count++;
                    DR=direction;
           if(time_count>=PWM_T)
                    {
           time_count=0;
           PWM_count++;
           setting_PWM();  //每輸出一個PWM波調(diào)用一次
           }
           if(time_count<PWM_t)
           PWM=1;
           else
           PWM=0;
           }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:main
      // 用戶主函數(shù)
      // 函數(shù)功能:主函數(shù)
      //--------------------------------------------------------------------------------------------------
      void main()
           {
        timer_init();
        setting_PWM();
        }


      直流電機(jī)閉環(huán)控制Keil c51源代碼

      //-----------------------函數(shù)聲明,變量定義--------------------------------------------------------
      #include <reg51.h>
      sbit INT_0 =P3^2;              // 將p3.2外部中斷0
      sbit pulse_A=P1^2;               // P1.2為脈沖A輸入
      sbit PWM=P1^0;                   //PWM波形輸出
      sbit DR=P1^1;                    //方向控制
      //-----------------------預(yù)定義值--------------------------------------------------------
      #define PWM_T 1800              //定義PWM的周期T為18ms
      #define Ts    1000              //定義光電編碼器采樣時間為10ms
      #define  timer_data  (256-10) //定時器預(yù)置值,12M時鐘是,定時0.01ms
      //-----------------------預(yù)設(shè)定值--------------------------------------------------------
      bit direction;                  //方向標(biāo)志位               用戶設(shè)定
      unsigned char R;                //需要得到的直流電機(jī)轉(zhuǎn)速   用戶設(shè)定
      //-----------------------實際運行狀態(tài)--------------------------------------------------------
      bit real_direction;             //電機(jī)實際運行方向  
      unsigned char Rr;               //直流電機(jī)實際轉(zhuǎn)速
      //-----------------------計算所得補(bǔ)償狀態(tài)------------------------------------------
      bit    compensate_polarity;     //補(bǔ)償極性
      unsigned char dR;               //轉(zhuǎn)速補(bǔ)償
      //-----------------------經(jīng)補(bǔ)償后得到的脈寬------------------------------------------
      unsigned char PWM_t;            //PWM_t為脈沖寬度(320~400)時間為3.2~4.0ms
      unsigned char PWM_count;        //輸出PWM周期計數(shù)
      //-----------------------各中間計數(shù)值------------------------------------------
      unsigned char pulseB_count;     //脈沖計數(shù)
      unsigned char time0_count;      //定時計數(shù)
      unsigned char time1_count;      //定時計數(shù)
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:timer_init
      // 函數(shù)功能:初始化設(shè)置定時器
      //--------------------------------------------------------------------------------------------------
      void timer_init()
           {
         TMOD=0x22; /*定時器1為工作模式2(8位自動重裝),0為模式2(8位自動重裝) */
            PCON=0x00;
            TF0=0;
            TH0=timer_data;   //保證定時時長為0.01ms
            TL0=TH0;
         TH1=timer_data;   //保證定時時長為0.01ms
            TL1=TH0;
            ET0=1;            //定時器0中斷允許
         TR0=1;            //定時器0開始計數(shù)
         ET1=1;            //定時器1中斷允許
         TR1=1;            //定時器1開始計數(shù)
            EA=1;             //中斷允許
         }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱: INT0_init()
      // 函數(shù)功能: 初始化設(shè)置
      //            設(shè)定INT0的工作方式
      //--------------------------------------------------------------------------------------------------
      void INT0_init(void ) 
                   {
          pulseB_count=0;        //脈沖計數(shù)器清零
                    IT0=1;     //選擇INT0為沿觸發(fā)方式
                    EX0=1;     //外部中斷允許
                    EA=1;      //系統(tǒng)中斷允許
                    }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:setting_PWM
      // 函數(shù)功能:設(shè)置PWM的脈沖寬度和設(shè)定方向
      //--------------------------------------------------------------------------------------------------
      void setting_PWM()
            {
       // direction=1;  //設(shè)定轉(zhuǎn)動方向
       // R=540;        //設(shè)定轉(zhuǎn)速
       // dR=0;         //轉(zhuǎn)速補(bǔ)償為零
       // calculate_PWM_t();      //重新計算脈寬
         }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱: calculate_PWM_t
      // 入口參數(shù): R需要得到的直流電機(jī)轉(zhuǎn)速,dR轉(zhuǎn)速補(bǔ)償
      // 出口參數(shù): PWM_t為脈沖寬度(320~400)時間為3.2~4.0ms
      // 函數(shù)功能: 計算脈沖寬度,PWM_t=R/150;
      //--------------------------------------------------------------------------------------------------
      void calculate_PWM_t()
                    {
            if(compensate_polarity==1) //正補(bǔ)償
                     PWM_t=(R+dR)/150;
            else
             PWM_t=(R-dR)/150;        //負(fù)修正
            }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱: calculate_Rr
      // 入口參數(shù): pulseB_count脈沖計數(shù)
      // 出口參數(shù): Rr直流電機(jī)實際轉(zhuǎn)速
      // 函數(shù)功能: 計算實際轉(zhuǎn)速
      //--------------------------------------------------------------------------------------------------
      void calculate_Rr()
                    {
                     Rr=pulseB_count/6;
            }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱: compensate_dR
      // 入口參數(shù): Rr直流電機(jī)實際轉(zhuǎn)速
      //            R需要得到的直流電機(jī)轉(zhuǎn)速
      // 出口參數(shù): dR轉(zhuǎn)速補(bǔ)償
      // 函數(shù)功能: 計算實際補(bǔ)償值和補(bǔ)償極性 ,根據(jù)不同的補(bǔ)償算法重新設(shè)計
      //--------------------------------------------------------------------------------------------------
      void compensate_Rr()
                    {
                    Rr=1;
                    if(Rr>R)
            compensate_polarity=0;     //補(bǔ)償極性
           else
                     compensate_polarity=1;
            }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱: INT0_intrupt
      // 函數(shù)功能: 外部中斷0處理程序
      //--------------------------------------------------------------------------------------------------
      void INT0_intrupt() interrupt 0 using 1
              {
        pulseB_count++;
              if(pulse_A==0)
                {  
                real_direction=1;  //若P1.2為低電平,則電機(jī)為正轉(zhuǎn),計數(shù)器N的值加1
                }
              else                //若為高電平,則電機(jī)為反轉(zhuǎn),計數(shù)器N值減l。
                 {
                  real_direction=1;
                }
      }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:IntTimer0
      // 函數(shù)功能:定時器中斷處理程序
      //--------------------------------------------------------------------------------------------------
      void IntTimer0() interrupt 1
                    {
           time0_count++;
                    DR=direction;
           if(time0_count>=PWM_T)
                    {
           time0_count=0;
           PWM_count++;
           setting_PWM();  //每輸出一個PWM波調(diào)用一次
           }
           if(time0_count<PWM_t)
           PWM=1;
           else
           PWM=0;
           }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:IntTimer1
      // 函數(shù)功能:定時器中斷處理程序
      //--------------------------------------------------------------------------------------------------
      void IntTimer1() interrupt 3
                    {
           time1_count++;
           if(time1_count==1)
                    {
           INT0_init();           //初始化外部中斷設(shè)置
           }
           if(time1_count>=Ts)
           {
           time1_count=0;          //一個補(bǔ)償周期結(jié)束,計數(shù)器清零
           calculate_Rr();         //計算實際轉(zhuǎn)速
           compensate_Rr();        //計算實際補(bǔ)償值和補(bǔ)償極性
           calculate_PWM_t();      //重新計算脈寬
           }
           }
      //--------------------------------------------------------------------------------------------------
      // 函數(shù)名稱:main
      // 用戶主函數(shù)
      // 函數(shù)功能:主函數(shù)
      //--------------------------------------------------------------------------------------------------
      void main()
           {
           direction=1;  //設(shè)定轉(zhuǎn)動方向
        R=540;        //設(shè)定轉(zhuǎn)速
        dR=0;         //轉(zhuǎn)速補(bǔ)償為零
        calculate_PWM_t();      //重新計算脈寬
        timer_init();
        }

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

      還可以輸入 200 個字
      [ 查看全部 ] 網(wǎng)友評論
      推薦文章
      最新推薦
      熱門文章
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 色久悠悠婷婷综合在线亚洲| 国产亚洲综合成人91精品| 亚洲国产精品综合久久网各| 久久综合日韩亚洲精品色| 色777狠狠狠综合| 一本一本久久a久久精品综合麻豆 一本色道久久综合狠狠躁篇 | 亚洲综合精品香蕉久久网97| 亚洲人成在久久综合网站| 伊人久久大香线焦综合四虎| 狠狠综合久久久久综合小说网| 亚洲七久久之综合七久久 | 色欲人妻综合AAAAAAAA网| 亚洲精品二区国产综合野狼 | 亚洲av日韩综合一区二区三区| 狠狠综合久久综合88亚洲| 图片区精品综合自拍| 亚洲五月丁香综合视频| 久久久久综合网久久| 伊人网综合在线视频| 青青草原综合久久大伊人精品| 一本久久a久久精品综合夜夜 | 久久婷婷五月综合色精品| 久久综合给合久久狠狠狠97色69| 五月婷婷亚洲综合| 亚洲第一页综合图片自拍| 国产综合久久久久久| 一本色道久久综合网| 婷婷丁香五月天综合东京热| 狠狠色综合久久婷婷色天使| 天天久久综合网站| 小说区 图片区色 综合区| 色综合久久中文字幕| 国产成人99久久亚洲综合精品| 久久综合给合综合久久| 狠狠狠色丁香婷婷综合久久俺| 亚洲亚洲人成综合网络| 亚洲精品综合在线影院| heyzo专区无码综合| 色婷婷综合久久久久中文一区二区| 亚洲av无码国产综合专区| 色婷婷99综合久久久精品|