標題: STC12C5A60S2片內PWM按鍵控制直流電機正轉、反轉、加減速源程序 [打印本頁]

作者: s120lan    時間: 2020-11-24 09:25
標題: STC12C5A60S2片內PWM按鍵控制直流電機正轉、反轉、加減速源程序
STC12C5A60S2單片機控制直流電機,可以進行正轉、反轉和相應的加減速,親測有效。
程序源碼如下:
#include "STC12C5A60S2.h"

#define uint unsigned int
#define uchar unsigned char  


sbit forward_up=P3^5; //正轉加速
sbit forward_down=P3^4; //正轉減速
sbit reversal_up=P3^3;//反轉加速
sbit reversal_down=P3^2;//反轉減速
sbit In1=P0^0;
sbit In2=P0^1;
sbit In3=P0^2;
sbit In4=P0^3;

void DelayMs(uchar ms);  
void init_PWM(); //PWM 初始化
void PWM0_change(uchar type,uchar change);//PWM調整函數
void PWM0_set(uchar empty);//直接賦PWM的值
void turnback();//反轉
void run();//正轉
void stop();//停止
//stc10f系列 單周期指令的ms級延時
void DelayMs(uchar ms) //這個延時可能不對,非關鍵部分,可自己修改
{        
        uint i;  while(ms--)  
        {     
                for(i = 0; i < 850; i++);
         }
}
void init_PWM()
{     
        CCON=0X00;   
         CH=0;   
         CL=0;
//時鐘分頻也就是輸出的頻率。 0X00:以系統(tǒng)時鐘/12 為時鐘源,0X02:系統(tǒng)時鐘/2,0x08:系統(tǒng)時鐘     
        CMOD=0X02;      
//起始占空比,0XC0:占空比為25%,0X80:占空比為50%,0X40:占空比為75%   
        PWM0_set(0XC0); // (與CL比較,當CL<CCAP0L時輸出低電平,反之高電平)
        PCA_PWM1=0x00;
        PCA_PWM0=0x00; //控制占空比的第九位為0   
//0X42:8位PWM P1.3輸出, P1.4輸出,無中斷;0X53:8位PWM輸出,下降沿產生中斷;
//0X63:上升沿產生中斷;0X73:跳變沿產生中斷
        CCAPM0=0X42;  
        CCAPM1=0X42;
         CR=1;          //計時器開始工作
}
void PWM0_set(uchar empty)  //直接設置占空比
{      
        CCAP0L=empty;   
        CCAP0H=empty;
        CCAP1L=empty;   
        CCAP1H=empty;
}
//占空比調節(jié)函數
void PWM0_change(uchar type,uchar change) //type=0減占空比,1增加占空比         
//change: 0X0C 約5%,0X05約2%
{         
        if(type==0)   
         {      
                 if(CCAP0L<0XE6)   //<90%   
                {      
                         CCAP0L+=change;     
                          CCAP0H+=change;  
                        CCAP1L+=change;     
                          CCAP1H+=change;
                  }           
         }   
else   
{   
          if(CCAP0L>0X19)  //>10%      
        {      
                 CCAP0L-=change;     
                  CCAP0H-=change;  
                CCAP1L-=change;     
                  CCAP1H-=change;
         }         
}

}

void main()
{   
         init_PWM();      //初始化,PWM輸出  
          while(1)   
          {  

          if(forward_up==0) //按鍵加PWM占空比
                  {   
                            DelayMs(500);  //按鍵消抖   
                           while(forward_up==0); //按鍵釋放才跳出執(zhí)行下一步   
                         PWM0_change(1,0X0c); //change: 0X0C 約5%,0X05約2%
                         run();                              
                  }   
                  if(forward_down==0)//按鍵減PWM占空比
                  {   
                           DelayMs(500);  
                     while(forward_down==0);   
                         PWM0_change(0,0X0c); //change: 0X0C 約5%,0X05約2%  
                         run();
                  }
                  if(reversal_up==0) //按鍵加PWM占空比
                  {   
                            DelayMs(500);  //按鍵消抖   
                           while(reversal_up==0); //按鍵釋放才跳出執(zhí)行下一步   
                         PWM0_change(1,0X0c); //change: 0X0C 約5%,0X05約2%
                         turnback();                              
                  }   
                  if(reversal_down==0)//按鍵減PWM占空比
                  {   
                           DelayMs(500);  
                     while(reversal_down==0);   
                         PWM0_change(0,0X0c); //change: 0X0C 約5%,0X05約2%  
                         turnback();                                                                        
                   }                                                                                
           }
}



void turnback()   
{

     In1=0;In2=1;In3=0;In4=1;   
}

void run()   
{

     In1=1;In2=0;In3=1;In4=0;   
}

void stop()   
{
     In1=1;In2=1;In3=1;In4=1;   
}

全部程序51hei下載地址:
PWM直流電機調速.rar (28.62 KB, 下載次數: 63)





歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1