• 大小: 28KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-06-02
  • 语言: 其他
  • 标签: 直流电机  

资源简介

直流电机的闭环控制,可以稳定在设定速度,另外PID参数已经进行修改。

资源截图

代码片段和文件信息

#include
#include
#include
#include
#define GPIO_DIG P0 
sbit output=P1^2;
sbit IN1=P1^1;
unsigned char num=1;
unsigned char time=1;
unsigned char stime=1;
extern int displayspeed=0;
int bb=0;
extern int actual=0;
unsigned char code DIG_CODE[16]={  
0x3f0x060x5b0x4f0x660x6d0x7d0x07  
0x7f0x6f0x770x7c0x390x5e0x790x71};  
unsigned char Init_display_data[6];    
sbit LSA=P2^2;        
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit K1=P3^1;
sbit K2=P3^0;  
sbit K3=P3^2;
//PID三个参数分别为xyz.
extern float x=0.01;
extern float y=0.001;
extern float z=0.1;
extern float err=0.0;//初始化偏差
extern float value=0.0;//初始化PID运算后的值
float uk=0.0;      
extern int set=165;//初始sp

//void delay(unsigned int qq)
//{  unsigned int tv;
//   for(t=qq;t>0;t--)
//   {
//   for(v=80;v>0;v--);
//   }
//}
float PIDcontrol(int set int actual) //pid算式
{   
float errchmmss;
errch=err;
    err=set-actual;
mm=mm+err;
ss=err-errch;
value=x*err+y*(mm)-z*ss;
return value;
}

//显示模块
void DigDisplay()  
{  
  unsigned int ii=0jj=0;  
  int a=0b=0c=0d=0e=0g=0m=0;  
  a=set/100;  
  b=(set%100)/10; 
  e=set%10/1;                                
  d=displayspeed;                     
  c=d/100;
  m=(d%100)/10;
  g=d%10/1;
  //段选
    Init_display_data[0]=DIG_CODE[a];
Init_display_data[1]=DIG_CODE[b];
Init_display_data[2]=DIG_CODE[e];
Init_display_data[3]=DIG_CODE[c];
Init_display_data[4]=DIG_CODE[m];
Init_display_data[5]=DIG_CODE[g];
  for(ii=0;ii<6;ii++)  
   {
   //位选  
    switch(ii)
     {  
      case(0):  
      LSA=0;LSB=0;LSC=0; break;
      case(1):  
      LSA=1;LSB=0;LSC=0; break;
      case(2):  
      LSA=0;LSB=1;LSC=0; break;
      case(3):  
      LSA=1;LSB=0;LSC=1; break;
  case(4):  
      LSA=0;LSB=1;LSC=1; break;
      case(5):  
      LSA=1;LSB=1;LSC=1; break;
     }  
    GPIO_DIG=Init_display_data[ii]; //
    jj=20; //
    while(jj--);  
    GPIO_DIG=0x00; //全部熄灭
   }
 }

//////设定值模块
void keyscan()  
{
   //用于增加设定值 
   int i=0;  
   if(K1==0)  
   {  
    set++;  
    if(set>1000)
{
      set=0;
}
    while((i<50000)&&(K1==0))
     {  
        DigDisplay();
        i++;  
     }  
   }
   //用于减少设定值  
  else if(K2==0)  
    {  
     set--;  
     if(set<0)
 {
    set=0;
 }  
        
    while((i<50000)&&(K2==0)) //
     {  
         DigDisplay();  
         i++;  
     }  
     }  
 //清除设定值
   else if(K3==0)  
     {  
      set=0;  
      while((i<50000)&&(K3==0))
       {  
         DigDisplay();  
         i++;  
       }  
     }  
}


//定时器初始化
void Init()
 { 
  TMOD=0x15; 
  TH1=0xfc;
  TL1=0x18;
  EA=1;
  ET1=1;
  ET0=0;
  TH0=0;
  TL0=0;
  TR0=1;
  TR1=1;
 }
 void Timer_0() interrupt 3 

   TH1=0xfc;
   TL1=0x18;
   TF1=0;
   num++;
   time++;
   stime++;
   if(time==50)
   {
    actual=(TH0*

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       6509  2018-01-08 10:56  88\100000.hex

     文件         43  2018-01-08 10:56  88\100000.lnp

     文件      15149  2018-01-08 10:56  88\100000.M51

     文件       1226  2018-01-08 10:56  88\100000.plg

    .......     55647  2018-01-08 10:56  88\100000.uvopt

     文件      13398  2018-01-07 12:46  88\100000.uvproj

    .......     55651  2018-01-07 17:21  88\100000_uvopt.bak

     文件          0  2018-01-07 11:29  88\100000_uvproj.bak

     文件       3450  2018-01-08 10:56  88\main.c

     文件       7944  2018-01-08 10:56  88\main.LST

     文件      13984  2018-01-08 10:56  88\main.OBJ

     文件       6376  2009-05-07 14:37  88\STARTUP.A51

     文件      14064  2018-01-08 10:56  88\STARTUP.LST

     文件        749  2018-01-08 10:56  88\STARTUP.OBJ

     目录          0  2018-01-08 10:56  88

----------- ---------  ---------- -----  ----

               194190                    15


评论

共有 条评论