www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久

電子開發網

電子開發網電子設計 | 電子開發網Rss 2.0 會員中心 會員注冊
搜索: 您現在的位置: 電子開發網 >> 電子開發 >> EDA開發應用 >> Keilc >> 正文

直流電機控制Keil c51源代碼

作者:佚名    文章來源:本站原創    點擊數:    更新時間:2011-3-3

直流電機的開環控制Keil c51源代碼

//-----------------------函數聲明,變量定義--------------------------------------------------------
#include <reg51.h>
#include <intrins.h>
#include<ABSACC.H>  
//-----------------------定義管腳--------------------------------------------------------
sbit PWM=P1^0;             //PWM波形輸出
sbit DR=P1^1;              //方向控制
#define  timer_data  (256-100) //定時器預置值,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周期計數
unsigned char time_count;  //定時計數
bit direction;             //方向標志為
//--------------------------------------------------------------------------------------------------
// 函數名稱:timer_init
// 函數功能:初始化設施定時器
//--------------------------------------------------------------------------------------------------
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;            //開始計數
      EA=1;             //中斷允許
   }
//--------------------------------------------------------------------------------------------------
// 函數名稱:setting_PWM
// 函數功能:設置PWM的脈沖寬度和設定方向
//--------------------------------------------------------------------------------------------------
void setting_PWM()
      {
   if(PWM_count==0)  //初始設置
   {
   PWM_t=20;
   direction=1;
   }
   }
//--------------------------------------------------------------------------------------------------
// 函數名稱:IntTimer0
// 函數功能:定時器中斷處理程序
//--------------------------------------------------------------------------------------------------
void IntTimer0() interrupt 1
              {
     time_count++;
              DR=direction;
     if(time_count>=PWM_T)
              {
     time_count=0;
     PWM_count++;
     setting_PWM();  //每輸出一個PWM波調用一次
     }
     if(time_count<PWM_t)
     PWM=1;
     else
     PWM=0;
     }
//--------------------------------------------------------------------------------------------------
// 函數名稱:main
// 用戶主函數
// 函數功能:主函數
//--------------------------------------------------------------------------------------------------
void main()
     {
  timer_init();
  setting_PWM();
  }


直流電機閉環控制Keil c51源代碼

//-----------------------函數聲明,變量定義--------------------------------------------------------
#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;                    //方向控制
//-----------------------預定義值--------------------------------------------------------
#define PWM_T 1800              //定義PWM的周期T為18ms
#define Ts    1000              //定義光電編碼器采樣時間為10ms
#define  timer_data  (256-10) //定時器預置值,12M時鐘是,定時0.01ms
//-----------------------預設定值--------------------------------------------------------
bit direction;                  //方向標志位               用戶設定
unsigned char R;                //需要得到的直流電機轉速   用戶設定
//-----------------------實際運行狀態--------------------------------------------------------
bit real_direction;             //電機實際運行方向  
unsigned char Rr;               //直流電機實際轉速
//-----------------------計算所得補償狀態------------------------------------------
bit    compensate_polarity;     //補償極性
unsigned char dR;               //轉速補償
//-----------------------經補償后得到的脈寬------------------------------------------
unsigned char PWM_t;            //PWM_t為脈沖寬度(320~400)時間為3.2~4.0ms
unsigned char PWM_count;        //輸出PWM周期計數
//-----------------------各中間計數值------------------------------------------
unsigned char pulseB_count;     //脈沖計數
unsigned char time0_count;      //定時計數
unsigned char time1_count;      //定時計數
//--------------------------------------------------------------------------------------------------
// 函數名稱:timer_init
// 函數功能:初始化設置定時器
//--------------------------------------------------------------------------------------------------
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開始計數
   ET1=1;            //定時器1中斷允許
   TR1=1;            //定時器1開始計數
      EA=1;             //中斷允許
   }
//--------------------------------------------------------------------------------------------------
// 函數名稱: INT0_init()
// 函數功能: 初始化設置
//            設定INT0的工作方式
//--------------------------------------------------------------------------------------------------
void INT0_init(void ) 
             {
    pulseB_count=0;        //脈沖計數器清零
              IT0=1;     //選擇INT0為沿觸發方式
              EX0=1;     //外部中斷允許
              EA=1;      //系統中斷允許
              }
//--------------------------------------------------------------------------------------------------
// 函數名稱:setting_PWM
// 函數功能:設置PWM的脈沖寬度和設定方向
//--------------------------------------------------------------------------------------------------
void setting_PWM()
      {
 // direction=1;  //設定轉動方向
 // R=540;        //設定轉速
 // dR=0;         //轉速補償為零
 // calculate_PWM_t();      //重新計算脈寬
   }
//--------------------------------------------------------------------------------------------------
// 函數名稱: calculate_PWM_t
// 入口參數: R需要得到的直流電機轉速,dR轉速補償
// 出口參數: PWM_t為脈沖寬度(320~400)時間為3.2~4.0ms
// 函數功能: 計算脈沖寬度,PWM_t=R/150;
//--------------------------------------------------------------------------------------------------
void calculate_PWM_t()
              {
      if(compensate_polarity==1) //正補償
               PWM_t=(R+dR)/150;
      else
       PWM_t=(R-dR)/150;        //負修正
      }
//--------------------------------------------------------------------------------------------------
// 函數名稱: calculate_Rr
// 入口參數: pulseB_count脈沖計數
// 出口參數: Rr直流電機實際轉速
// 函數功能: 計算實際轉速
//--------------------------------------------------------------------------------------------------
void calculate_Rr()
              {
               Rr=pulseB_count/6;
      }
//--------------------------------------------------------------------------------------------------
// 函數名稱: compensate_dR
// 入口參數: Rr直流電機實際轉速
//            R需要得到的直流電機轉速
// 出口參數: dR轉速補償
// 函數功能: 計算實際補償值和補償極性 ,根據不同的補償算法重新設計
//--------------------------------------------------------------------------------------------------
void compensate_Rr()
              {
              Rr=1;
              if(Rr>R)
      compensate_polarity=0;     //補償極性
     else
               compensate_polarity=1;
      }
//--------------------------------------------------------------------------------------------------
// 函數名稱: INT0_intrupt
// 函數功能: 外部中斷0處理程序
//--------------------------------------------------------------------------------------------------
void INT0_intrupt() interrupt 0 using 1
        {
  pulseB_count++;
        if(pulse_A==0)
          {  
          real_direction=1;  //若P1.2為低電平,則電機為正轉,計數器N的值加1
          }
        else                //若為高電平,則電機為反轉,計數器N值減l。
           {
            real_direction=1;
          }
}
//--------------------------------------------------------------------------------------------------
// 函數名稱:IntTimer0
// 函數功能:定時器中斷處理程序
//--------------------------------------------------------------------------------------------------
void IntTimer0() interrupt 1
              {
     time0_count++;
              DR=direction;
     if(time0_count>=PWM_T)
              {
     time0_count=0;
     PWM_count++;
     setting_PWM();  //每輸出一個PWM波調用一次
     }
     if(time0_count<PWM_t)
     PWM=1;
     else
     PWM=0;
     }
//--------------------------------------------------------------------------------------------------
// 函數名稱:IntTimer1
// 函數功能:定時器中斷處理程序
//--------------------------------------------------------------------------------------------------
void IntTimer1() interrupt 3
              {
     time1_count++;
     if(time1_count==1)
              {
     INT0_init();           //初始化外部中斷設置
     }
     if(time1_count>=Ts)
     {
     time1_count=0;          //一個補償周期結束,計數器清零
     calculate_Rr();         //計算實際轉速
     compensate_Rr();        //計算實際補償值和補償極性
     calculate_PWM_t();      //重新計算脈寬
     }
     }
//--------------------------------------------------------------------------------------------------
// 函數名稱:main
// 用戶主函數
// 函數功能:主函數
//--------------------------------------------------------------------------------------------------
void main()
     {
     direction=1;  //設定轉動方向
  R=540;        //設定轉速
  dR=0;         //轉速補償為零
  calculate_PWM_t();      //重新計算脈寬
  timer_init();
  }

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

還可以輸入 200 個字
[ 查看全部 ] 網友評論
推薦文章
最新推薦
熱門文章
關于我們 - 聯系我們 - 廣告服務 - 友情鏈接 - 網站地圖 - 版權聲明 - 在線幫助 - 文章列表
返回頂部
刷新頁面
下到頁底
晶體管查詢
www84811.com-国产区一区二区三区,亚洲第一中文字幕在线观看,91精品久久香蕉国产线看观看,国产精品欧美久久
视频在线观看一区二区三区| 国产一区欧美二区| 日韩一区二区精品| 精品无人码麻豆乱码1区2区| 欧美国产精品v| 色一区在线观看| 日韩国产精品久久久久久亚洲| 精品国产凹凸成av人导航| 丁香婷婷综合激情五月色| 亚洲精品老司机| 欧美一级免费观看| 春色校园综合激情亚洲| 夜夜嗨av一区二区三区四季av| 欧美一级黄色录像| 福利一区在线观看| 午夜国产精品影院在线观看| 久久一日本道色综合| 91免费观看视频在线| 日本欧美一区二区三区| 中文字幕乱码日本亚洲一区二区| 欧美视频你懂的| 韩国在线一区二区| 一区二区激情视频| 久久综合九色综合97_久久久| 色网站国产精品| 捆绑调教美女网站视频一区| 中文字幕日韩一区| 欧美一区二区久久| 99精品视频在线免费观看| 日韩成人精品在线| 一区免费观看视频| 日韩午夜av电影| 99久久国产综合精品色伊| 日韩和的一区二区| 国产精品电影一区二区三区| 欧美一区二区三区在线电影| 91在线精品秘密一区二区| 免费成人在线观看| 一区二区三区欧美亚洲| 久久女同性恋中文字幕| 欧美日韩免费观看一区三区| 高清不卡一区二区| 久色婷婷小香蕉久久| 亚洲人xxxx| 国产色综合久久| 欧美一区二区在线观看| 91女厕偷拍女厕偷拍高清| 狠狠色丁香久久婷婷综| 丝袜美腿亚洲综合| 亚洲女与黑人做爰| 国产亚洲精品超碰| 欧美一卡二卡三卡四卡| 日本韩国欧美在线| 成人免费高清在线观看| 久久爱www久久做| 亚洲va中文字幕| 亚洲欧洲综合另类| 欧美国产综合一区二区| 日韩精品一区二区三区在线| 欧美午夜一区二区| 91香蕉视频污| 成人永久免费视频| 激情图区综合网| 美女mm1313爽爽久久久蜜臀| 亚洲综合成人网| 亚洲欧美日韩一区二区| 日本一区免费视频| 26uuu亚洲综合色欧美| 91精品在线免费观看| 欧美午夜理伦三级在线观看| 91影院在线免费观看| 成人夜色视频网站在线观看| 狠狠色丁香久久婷婷综合_中| 奇米亚洲午夜久久精品| 污片在线观看一区二区| 亚洲自拍偷拍av| 亚洲少妇屁股交4| 中文字幕佐山爱一区二区免费| 国产欧美一区二区三区在线老狼| 久久网这里都是精品| 日韩你懂的电影在线观看| 7777精品伊人久久久大香线蕉的 | 欧美色图激情小说| 日本精品视频一区二区三区| 一本一本久久a久久精品综合麻豆| 成人黄色免费短视频| 成人综合婷婷国产精品久久蜜臀| 国产不卡视频在线观看| 成人免费高清在线观看| 成人av综合一区| www.欧美亚洲| 99精品热视频| 色综合天天视频在线观看| 一本久久a久久精品亚洲| 91视频你懂的| 色综合久久久久综合99| 色94色欧美sute亚洲线路一久| 色呦呦国产精品| 欧美中文字幕一区二区三区 | 在线免费不卡视频| 精品视频一区三区九区| 欧美日韩国产免费一区二区 | 欧美精品xxxxbbbb| 91精品国产色综合久久久蜜香臀| 91精品国产综合久久精品性色| 91精品国产综合久久久久| 欧美成人aa大片| 国产欧美日本一区视频| 国产人妖乱国产精品人妖| 中文字幕欧美区| 专区另类欧美日韩| 亚洲成人你懂的| 蜜桃久久av一区| 国产精品综合在线视频| 成人avav影音| 在线视频一区二区免费| 7777精品伊人久久久大香线蕉最新版| 欧美一级片在线看| 国产亚洲精品超碰| 亚洲美女区一区| 亚洲第一主播视频| 久久国产精品无码网站| 国产传媒一区在线| 色综合中文字幕国产| 欧美日韩黄色影视| 精品少妇一区二区| 国产精品女上位| 亚洲一二三专区| 久久99热这里只有精品| 成人视屏免费看| 欧美在线观看视频在线| 日韩免费福利电影在线观看| 国产婷婷色一区二区三区四区 | 久久福利资源站| 粉嫩一区二区三区性色av| 色视频欧美一区二区三区| 91麻豆精品久久久久蜜臀| 国产天堂亚洲国产碰碰| 亚洲一区二区偷拍精品| 久久99国产精品麻豆| av影院午夜一区| 欧美区在线观看| 国产午夜精品一区二区三区视频| 亚洲男人都懂的| 麻豆国产精品官网| 99在线视频精品| 欧美一二三区精品| 中文字幕日韩一区| 美腿丝袜亚洲一区| 91蜜桃在线观看| 日韩欧美一区二区免费| 综合av第一页| 久久精品久久99精品久久| av成人老司机| 日韩欧美一级精品久久| 亚洲欧美综合网| 久久国产精品色婷婷| 色久优优欧美色久优优| 精品久久久久久久久久久院品网 | 亚洲美女视频一区| 激情综合网最新| 91福利资源站| 久久精品亚洲麻豆av一区二区 | 欧美另类z0zxhd电影| 欧美国产日韩一二三区| 三级不卡在线观看| aaa欧美大片| 精品国产乱码久久久久久蜜臀 | 欧美成人精品高清在线播放| 亚洲精品视频一区| 国产乱色国产精品免费视频| 欧美三级三级三级| 中文字幕不卡三区| 久久国内精品视频| 欧美日韩免费视频| 亚洲日本青草视频在线怡红院| 国产在线视视频有精品| 欧美日韩你懂得| 亚洲欧美乱综合| 风间由美一区二区av101| 精品人在线二区三区| 亚洲va欧美va国产va天堂影院| 北岛玲一区二区三区四区| 久久久综合视频| 免费在线看一区| 欧美三级三级三级| 亚洲精选视频在线| 成人深夜视频在线观看| 欧美精品一区二区久久婷婷| 日韩精品免费视频人成| 欧美中文字幕亚洲一区二区va在线| 国产精品麻豆视频| 国产精品一二一区| 欧美电影免费观看高清完整版在| 亚洲成人动漫一区| 一本高清dvd不卡在线观看| 国产欧美一区二区三区在线老狼| 激情文学综合丁香| 欧美大片拔萝卜| 日韩成人一区二区|