91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 20KB
    文件類型: .rar
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-17
  • 語言: 其他
  • 標簽: C51??PID??PWM??

資源簡介

用51單片機寫的PID算法控制電機的轉身PWM。可以使用哈

資源截圖

代碼片段和文件信息

#include
/*********宏定義************/
#define?uint?unsigned?int
#define?uchar?unsigned?char
#define?SYSCLK?24500000
#define?Kp?3.0//比例系數
#define?Ki?0.3//積分系數
#define?Kd?200//微分系數
/**********特殊功能寄存器****************/
sfr16?TMR3RL=0x92;
sfr16?TMR3=0x94;
/**********變量定義************/
float?N_target=10;//張力設定值
float?N_real=0;//張力實際值
float?PWM=0;
//bit?flag;
//float?Out[3]={000};
idata?float?diff[20]={00000000000000000000};//存放誤差
idata?float?sum_diff=0;?//誤差累計
idata?int?Di=0;//數組坐標變量
idata?float?P_outI_outD_out;
//idata?float?pwm_0;
idata?float?temp;
/***********函數聲明*************/
void?PORT_Init(void);//端口初始化
void?Oscillator_Init(void);//系統晶振設置
void?PCA_Init(void);//PCA初始化
void?Timer3_Init(void);//定時器3初始化
void?Initial(void);//總初始化子函數
void?Timer3_set(void);//定時器3設置,決定PID執行速率
void?PID(void);//PID計算程序
void?PID_to_TH(PWM);
//void?PWM_set(void);//PWM占空比設置
void?delay(uint?t);//延遲函數
/************主函數部分**********************/
void?main()
{
Initial();
delay(20);
Timer3_set();
EA=1;
EIE1=0x80;
PCA0CPH0=128;
while(1)
{
PID_to_TH(PWM);
}

}
/*************子函數*************************/
void?Initial()
{
PORT_Init();
Oscillator_Init();
PCA_Init();
Timer3_Init();
}
void?PORT_Init(void)
{
XBR1=0x45;//PCA四個模塊連接到引腳
}
void?Oscillator_Init(void)
{
OSCICN=0x87;//系統使用內部晶振,頻率24500000,不分頻
}
void?PCA_Init(void)
{
PCA0CN=0x40;//允許PCA計數器/定時器
PCA0MD&=~0x40;//關閉看門狗
PCA0MD=0x08;//PCA時鐘為系統時鐘
PCA0CPM0=0xc2;//16位PWM輸出
}
void?Timer3_Init()
{
TMR3CN=0x04;//開啟定時器3時鐘為系統時鐘的1/12
}
void?Timer3_set()
{
unsigned?long?int?tt;
tt=65536-(SYSCLK/12/1000)*20;
TMR3L=tt;
TMR3=tt;
}
void?PID(void)
{
temp=diff[Di];
if(Di+1>=20)
Di=0;
else
Di+=1;
diff[Di]=N_target-N_real;
sum_diff+=diff[Di];
P_out=Kp*diff[Di];
I_out=Ki*sum_diff;
D_out=Kd*(diff[Di]-temp);
if(I_out>100)
I_out=100;
if(I_out<-100)
I_out=0;
PWM=P_out+I_out+D_out;
if(PWM<0)
????PWM=0;
????else?if(PWM>=100)
????PWM=100;
}
void?PID_to_TH(PWM)
{
PCA0CPH0=65536-65536*PWM;
}
void?delay(uint?t)
{
uint?ij;
for(i=0;i {
for(j=0;j<300;j++);
}
}
void?T3_zd()?interrupt?14
{
TMR3CN&=0x7f;
PID();
}

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????8985??2009-09-30?12:08??pid\PID_PWM

?????文件???????2417??2009-09-29?21:54??pid\PID_PWM.c

?????文件???????5512??2009-09-30?12:08??pid\PID_PWM.LST

?????文件??????13115??2009-09-30?12:08??pid\PID_PWM.M51

?????文件???????8639??2009-09-30?12:08??pid\PID_PWM.OBJ

?????文件???????1045??2009-09-30?15:41??pid\PID_PWM.Opt

?????文件????????325??2009-09-30?12:08??pid\PID_PWM.plg

?????文件???????2096??2009-09-25?20:22??pid\PID_PWM.Uv2

????.......??????1046??2009-09-30?11:00??pid\PID_PWM_Opt.Bak

????.......?????????0??2009-09-25?11:39??pid\PID_PWM_Uv2.Bak

?????文件???????5115??2002-04-16?15:32??pid\STARTUP.A51

?????文件??????11763??2009-09-30?12:08??pid\STARTUP.lst

?????文件????????830??2009-09-30?12:08??pid\STARTUP.obj

?????目錄??????????0??2009-09-30?15:41??pid

-----------?---------??----------?-----??----

????????????????60888????????????????????14


評論

共有 條評論