51單片機利用pid技術控制直流馬達的源程序如下:
- #include<reg52.h>
- #include<stdio.h>
- #include<lcd.h>
- /***定義變量***/
- sbit PWM_EN=P1^0; //接ln298使能端
- sbit speed_in=P3^2;
- //int e ,e1 ,e2 ;//pid 偏差
- //float uk ,uk1 ,duk ;//pid輸出值
- //float Kp=10,Ki=12,Kd=1.6;//pid控制系數 10,12,1.5
- //float vv_min=0.0;vv_max=250.0;
- float bianhuasudu; //當前速度(理論計算值)
- float vi_Ref=60.0; //給定值
- float vi_PreError,vi_PreDerror;
- float v_kp=10,v_ki=12,v_kd=1.6; //比例,積分,微分常數
- int out=0;
- extern uint SpeedSet;
- extern uint Inpluse,num;//脈沖計數
- //static unsigned int time=0;//靜態變量,退出程序值保留
- uint cnt=0;
- uint PWMTime=100;//脈沖寬度,128/256=0.5,占空比是50%(8位pwm)
- /**函數聲明**/
- PIDControl();
- void SystemInit();
- void PWMOUT();
- /**************主函數************/
- void main()
- {
- SystemInit();
- LcdInit(); //初始化
- Lcd_busy_check();//忙檢測
- while(1)
- {
- Lcd_display(); //顯示
- SetSpeed(); //速度設定
- PWMOUT(); //pwm輸出
-
- }
- }
- /*pid_control*/
- float pid_control (float SpeedSet,float num) //pid偏差計算
- {
- register float error1,d_error,dd_error;
- error1=SpeedSet-num; //偏差的計算
- d_error=error1-vi_PreError; //誤差的偏差
- dd_error=d_error-vi_PreDerror; //誤差變化率
- vi_PreError=error1; //存儲當前偏差
- vi_PreDerror=d_error;
- bianhuasudu=(v_kp*d_error+v_ki*vi_PreError+v_kd*dd_error);
- return (bianhuasudu);
-
-
- }
- void PWMOUT()
- {
- if(cnt<PWMTime)
- {
- PWM_EN=1;
- }
- else
- {
- PWM_EN=0;
- }
- if(cnt>1000) cnt=0;
- }
- void SystemInit()
- {
- TMOD=0x15;//設置定時計數器工作于方式1;
- TH1=(65536-1000)>>8;
- TL1=(65536-1000);//定時1000us,即1ms
- TR1=1;//啟動定時計數器0
- ET1=1;//使能定時計數器0中斷
- ET0=1;//啟動定時器計數器1
- TR0=1;//使能定時計數器1中斷
- EX0=1; //中斷0用來測量轉速
- IT0=1; //外部中斷0 低電平觸發
- EA=1;//中斷總開關
- }
-
- void int0() interrupt 0
- {
- Inpluse++; //脈沖計數
- }
- void t1() interrupt 3
- {
- static unsigned int time=0;//靜態變量,退出程序值保留
- //TR1=0;
- TH1=(65536-1000)/256;
- TL1=(65536-1000)%256;//定時1000us,即1ms
- time++; //轉速測量周期
- if(time>100)
- {
- time=0;
- num=Inpluse*6.5; //計算速度
- PWMTime=PWMTime+pid_control(SpeedSet,num);
- Inpluse=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
pid.rar
(38.42 KB, 下載次數: 179)
2017-8-19 22:05 上傳
點擊文件名下載附件
pid控制直流電機轉動
|