找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 3535|回復: 0
打印 上一主題 下一主題
收起左側(cè)

PWM直流電機無極調(diào)速

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:212637 發(fā)表于 2017-6-19 16:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

/****************************************************************
                                                              
            程序名稱:   直流電機無極調(diào)速
            版本:      VER1.0
            適用板本:  SP-51學習板      
   利用定時器控制產(chǎn)生占空比可變的PWM波對直流電機進行無極調(diào)速
   按S2,PWM值增加,則占空比減小,電機減速。(初值電機為最小值)
   按S3,PWM值減小,則占空比增加,電機加速。
   當PWM值增加到最大值或減小到最小值時,蜂鳴器將報警。
*****************************************************************/
#include<reg51.h>
#include<intrins.h>
sbit  S2 =P3^4 ;        //PWM值減少鍵
sbit  S3 =P3^5 ;       //PWM值增加鍵
sbit  BEEP =P2^3 ;         //蜂鳴器
unsigned char PWM=0x03 ;   //賦初值
///////////////////////////////////////
sbit dula=P2^6;   //數(shù)碼管的段選信號
sbit wela=P2^7;   //數(shù)碼管的位選信號
void delay1 (void) //關(guān)閉數(shù)碼管延時程序
{
int k;
for (k=0; k<1000; k++);
}
//////////////////////////////////////
void Beep();
void delayms(unsigned char ms);
void delay(unsigned char t);
/*********************************************************/
void main()
{   
    P1=0xff;
    TMOD=0x00 ;
  TH0=0x00 ;           //延時常數(shù)
    TL0=0x00 ;           //頻率調(diào)節(jié)
    TH1=PWM ;            //脈寬調(diào)節(jié)
    TL1=0xff ;
EA=1;
ET0=1;
ET1=1;
    TR0=1 ;
/////////////////////////////////////////////////////////////////
P0=0x00;//關(guān)掉數(shù)碼管的信號。阻止數(shù)碼管受到P0口信號的影響。
dula=1;
wela=0;
delay1();
dula=0;
wela=0;
delay1();
////////////////////////////////////////////////////////////////
   while(1)
   {
do{
     if(PWM!=0xff)
    {PWM++ ;delayms(10);}
        else Beep() ;
   }
    while(S3==0);
do{
      if(PWM!=0x02)
     {PWM-- ;delayms(10);}
      else Beep() ;
   }
    while(S2==0);
  }
}
/*********************************************************/
// 定時器0中斷服務程序  (頻率)
/*********************************************************/
void timer0() interrupt 1
{  
    TR1=0 ;
    TH0=0x00;
    TL0=0x00 ;
    TH1=PWM ;
    TR1=1 ;
    P0=0x00 ;      //啟動輸出

}
/*********************************************************/
// 定時器1中斷服務程序 (脈寬)
/*********************************************************/
void timer1() interrupt 3
{
    TR1=0 ;
    P0=0xff ;     //結(jié)束輸出
}
/*********************************************************/
//蜂鳴器子程序
/*********************************************************/
void Beep()     
  {
    unsigned char i  ;
    for (i=0  ;i<100  ;i++)
      {
        delay(100)  ;
        BEEP=!BEEP  ;                //Beep取反
      }
    BEEP=1  ;                        //關(guān)閉蜂鳴器
delayms(100);
  }
/*********************************************************/
// 延時子程序
/*********************************************************/  
void delay(unsigned char t)
{
   while(t--)   ;
}
/*********************************************************/
// 延時子程序
/*********************************************************/
void delayms(unsigned char ms)
{
   unsigned char i ;
   while(ms--)
    {
      for(i = 0 ; i < 120 ; i++) ;
    }
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表