PID有效控制步进电机转速仿真及c程序.doc

PID有效控制步进电机转速仿真及c程序.doc

ID:25123180

大小:55.79 KB

页数:8页

时间:2018-11-18

PID有效控制步进电机转速仿真及c程序.doc_第1页
PID有效控制步进电机转速仿真及c程序.doc_第2页
PID有效控制步进电机转速仿真及c程序.doc_第3页
PID有效控制步进电机转速仿真及c程序.doc_第4页
PID有效控制步进电机转速仿真及c程序.doc_第5页
资源描述:

《PID有效控制步进电机转速仿真及c程序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、PID控制步进电机转速仿真及c程序#include#include"lcd1602.h"sfrT2MOD=0x0c9;#defineucharunsignedchar#defineuintunsignedintsbitQ0=P2^4;sbitQ1=P2^5;sbitQ2=P2^6;sbitQ3=P2^7;sbitPWM=P1^7;sbitUP=P1^0;sbitDOWM=P1^1;sbitGORB=P2^3;//换相sbitADDSPEED=P1^2;sbitSUBSPEED=P1^3;uinttuint=65535;uinttpwm=1;//pwm周期为1000

2、0ustpwm变量表示pwm高电平时间,也相当于占空比(仿真时,频率高时,电机反应慢。在实物上要加大频率)uchart1_flag=0;uintpulse=0;uintt0_flag=0;uchart2_flag=0;bitt2_over=0;bitJust_Get=1;#defineZZ{Q0=0;Q1=0;Q2=1;Q3=1;}//正转#defineFZ{Q0=1;Q1=1;Q2=0;Q3=0;}//反转#defineSTOP{Q0=1;Q1=0;Q2=1;Q3=0;}//停止//禁止出现Q0=0;Q1=1;Q2=0;Q3=1;不然会烧掉mos管//**************

3、**********PID*************************************floatnow=0,bef=0,bbef=0;//本次采样值,上次采样值,上上次采样值floaterr_now,err_bef,err_bbef;//当前偏差,上次偏差,上上次偏差floaterror_add=0;//所有偏差之和floatset=25;//设定值floatkp=25;floatki=25;floatkd=0;//*****************************************************************voiddelayms(

4、uintms)//延时?个ms{uchara,b,c;while(ms--){for(c=1;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}}voidtimer_init(){EA=1;ET0=1;ET1=1;ET2=1;TMOD=0x15;//定时器0计数模式定时器1模式1T2MOD=0x01;TH0=TL0=255;TH2=0x3C;TL2=0xB0;//50MS}voidtimer1()interrupt3{if(t1_flag==0){t1_flag=1;PWM=1;TH1=(tuint-tpwm+1)/256;TL1=(tuint

5、-tpwm+1)%256;}else{t1_flag=0;PWM=0;TH1=(tuint-10000+tpwm+1)/256;TL1=(tuint-10000+tpwm+1)%256;}}voidtimer0()interrupt1{TH0=TL0=255;t0_flag++;}voidtimer2()interrupt5{TF2=0;TH2=0x3C;TL2=0xB0;//50MSt2_flag++;if(t2_flag==2){TR0=0;TR2=0;t2_flag=0;t2_over=1;//表示100ms时间到}}voidGetPulse(){t0_flag=0;t2_f

6、lag=0;TH0=TL0=255;TH2=0x3C;TL2=0xB0;//50MSTR0=1;TR2=1;}intPID()//增量式PID{intchange;err_now=set-now;err_bef=set-bef;err_bbef=set-bbef;change=kp*(err_now-err_bef)+ki*err_now+kd*(err_now-2*err_bef+err_bbef);/*if(set>=now){if(set-now>1)change=kp*(err_now-err_bef)+ki*err_now+kd*(err_now-2*err_bef+er

7、r_bbef);elsechange=0.2*kp*(err_now-err_bef)+0.5*ki*err_now+kd*(err_now-2*err_bef+err_bbef);}elseif(now>set){if(now-set>1)change=kp*(err_now-err_bef)+ki*err_now+kd*(err_now-2*err_bef+err_bbef);elsechange=0.2*kp*(err_now-err_bef)+0.5*ki*e

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。