資源簡介
直流電機的閉環控制,可以穩定在設定速度,另外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
- 上一篇:webupload.js
- 下一篇:webrtc+VS2017完整工程及編譯結果
評論
共有 條評論